[논문 리뷰] foREST: A Tree-based Approach for Fuzzing RESTful APIs
이 논문은 RESTful API를 퍼즈링하기 위한 새로운 트리 기반 접근 방식인 foREST를 제안한다. 이는 엔드포인트 계층을 모델링하여 종속성 모델링의 효율성을 향상시킨다. OpenAPI/Swagger 사양에서 API 트리를 구성하고 전위 순회(pre-order traversal)를 수행함으로써, 종속성 복잡도를 이차함수에서 선형으로 감소시켜 EvoMaster 및 RESTler보다 코드 커버리지가 11.5%에서 82.5% 높아졌으며, 실제 서비스에서 11개의 새로운 버그를 발견했다.
Representational state transfer (REST) is a widely employed architecture by web applications and cloud. Users can invoke such services according to the specification of their application interfaces, namely RESTful APIs. Existing approaches for fuzzing RESTful APIs are generally based on classic API-dependency graphs. However, such dependencies are inefficient for REST services due to the explosion of dependencies among APIs. In this paper, we propose a novel tree-based approach that can better capture the essential dependencies and largely improve the efficiency of RESTful API fuzzing. In particular, the hierarchical information of the endpoints across multiple APIs enables us to construct an API tree, and the relationships of tree nodes can indicate the priority of resource dependencies, extit{e.g.,} it's more likely that a node depends on its parent node rather than its offspring or siblings. In the evaluation part, we first confirm that such a tree-based approach is more efficient than traditional graph-based approaches. We then apply our tool to fuzz two real-world RESTful services and compare the performance with two state-of-the-art tools, EvoMaster and RESTler. Our results show that foREST can improve the code coverage in all experiments, ranging from 11.5\% to 82.5\%. Besides, our tool finds 11 new bugs previously unknown.
연구 동기 및 목표
- REST API 퍼즈링에서 그래프 기반 종속성 모델링의 비효율성을 해결하기 위해, 이는 API 종속성의 지수적 증가로 인해 발생한다.
- 엔드포인트 간의 계층적 관계를 모델링하여 유효하고 다양한 테스트 케이스를 생성하는 정확성과 효율성을 향상시키기 위해.
- 그래프에서의 종속성 탐색 복잡도를 O(n²)에서 트리에서의 O(n)으로 감소시켜 더 빠르고 확장 가능한 퍼즈링을 가능하게 하기 위해.
- 트리 순회 및 동적 종속성 평가를 통해 자원 관리와 요청 시퀀스 생성을 향상시키기 위해.
- 실제 서비스에서 본 연구 방법을 평가하고, RESTler 및 EvoMaster와 같은 최신 기술 수준의 도구들과 비교하기 위해.
제안 방법
- OpenAPI/Swagger 사양을 분석하여 엔드포인트 URL을 추출하고, URL을 '/' 기준으로 분할하여 계층적 트리를 구성한다.
- 각 URL 세그먼트를 트리의 노드로 표현하며, 루트에서 리프 노드로 이어지는 경로를 형성하는 간선을 통해 엔드포인트 계층을 캡처한다.
- 각 노드에 지원하는 HTTP 메서드를 속성으로 할당하고, 상태 기반 테스팅을 지원하기 위해 저장된 자원을 위한 버퍼를 유지한다.
- 템플릿 기반 요청 순서 전략을 적용한다: GET을 우선으로 하여 전위 순회를 수행하고, 이후 여러 개의 POST를 이어가며, 그 다음 PUT 및 DELETE를 수행하여 자식 노드를 위한 자원을 유지한다.
- 동적 종속성 쌍 평가를 적용하여 부모 노드 종속성을 형제 또는 자식 노드보다 우선시함으로써 생성된 요청의 유효성을 향상시킨다.
- 다중 엔드포인트 계층을 다루기 위해 서비스 내 모든 트리를 반복적으로 순회하며, API 수에 대해 선형 시간 복잡도를 유지한다.
실험 결과
연구 질문
- RQ1기존의 그래프 기반 접근 방식과 비교해 트리 기반 모델이 API 종속성 모델링의 복잡도를 줄일 수 있는가?
- RQ2엔드포인트 계층을 모델링함으로써 REST API 퍼즈링에서 테스트 케이스 생성의 효율성과 유효성이 향상되는가?
- RQ3코드 커버리지 및 버그 탐지 측면에서 트리 기반 접근 방식이 그래프 기반 방법보다 어느 정도 뛰어나게 성능을 발휘하는가?
- RQ4실제 퍼즈링 시나리오에서 RESTler 및 EvoMaster와 같은 최신 기술 수준의 도구들과 비교해 foREST는 어떤가?
- RQ5복잡한 다중 계층적 REST API 아키텍처를 효과적으로 처리하면서도 높은 코드 커버리지를 유지할 수 있는가?
주요 결과
- 트리 기반 접근 방식은 그래프에서의 O(n²) 종속성 복잡도를 트리에서의 O(n)으로 크게 감소시켜 탐색 효율성을 향상시켰다.
- 모든 실험에서 EvoMaster 및 RESTler보다 더 높은 코드 커버리지를 달성했으며, 향상 폭은 11.5%에서 82.5%에 이르렀다.
- WordPress 및 GitLab을 대상으로 퍼즈링한 결과, 기존에 알려지지 않은 11개의 버그를 발견하여 실제 환경에서의 취약점 탐지 효과를 입증했다.
- 부모 종속성 우선 전략을 적용한 전위 순회 전략이 유효하고 상태 기반 테스트 시퀀스 생성 가능성을 높였다.
- foREST의 프로토타입 구현은 다중 엔드포인트 트리를 성공적으로 처리했으며, API 수에 대해 선형 확장성을 유지했다.
- 그래프 기반 방법과 비교해 트리 기반 모델은 더 정확한 종속성 관계를 생성하여 유효하지 않거나 중복된 요청 경로를 줄였다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.