[Paper] WuppieFuzz: 커버리지 기반, 상태 유지 REST API 퍼징

발행: (2025년 12월 18일 오전 01:05 GMT+9)
11 min read
원문: arXiv

Source: arXiv - 2512.15554v1

개요

이 논문은 WuppieFuzz라는 오픈소스 퍼저를 소개합니다. 이 도구는 REST API를 자동으로 테스트하기 위해 HTTP 요청 시퀀스를 생성하고 변형합니다. 최신 LibAFL 프레임워크 위에 구축되어 화이트‑박스, 그레이‑박스, 블랙‑박스 모드 중 하나로 동작할 수 있으며, OpenAPI 사양을 활용해 현실적인 요청 흐름의 코퍼스를 초기화합니다. 코드‑커버리지 피드백을 통해 퍼징을 조정함으로써, WuppieFuzz는 전통적인 요청‑별 퍼저가 놓치는 더 깊고 상태를 유지하는 API 로직에 도달합니다. 따라서 서비스의 보안 버그에 대비해 하드닝이 필요한 개발자들에게 실용적인 도구가 됩니다.

핵심 기여

  • 상태 기반, 커버리지‑가이드 REST API 퍼징 – 요청 시퀀스 생성을 AFL‑스타일 계측과 결합하여 복잡한 API 상태를 탐색합니다.
  • OpenAPI‑구동 코퍼스 생성 – API 명세에서 자동으로 유효한 요청 시퀀스 초기 집합을 구축하여 수동 하네스 구축 작업을 감소시킵니다.
  • 다중‑모드 운영 – 단일 코드 베이스에서 화이트‑박스(계측), 그레이‑박스(외부 훅을 통한 커버리지), 블랙‑박스(계측 없음) 퍼징을 지원합니다.
  • REST‑전용 변이 연산자 – 변이는 HTTP 의미론을 존중하면서(예: 헤더 조정, 파라미터 값 퍼징, 메서드 변경) LibAFL의 일반 변이 연산자도 활용합니다.
  • 풍부한 보고 – 엔드포인트 수준 커버리지 맵, 크래시 로그, 상태 추적 시각화를 제공하여 개발자가 결과를 신속히 파악하고 대응할 수 있게 돕습니다.
  • 오픈‑소스 구현 – 도구는 공개되어 있어 커뮤니티 확장 및 CI 파이프라인 통합을 장려합니다.

Source:

Methodology

  1. Specification parsing – WuppieFuzz는 OpenAPI (Swagger) 문서를 읽어 모든 경로, 메서드, 파라미터 및 스키마를 추출합니다.
  2. Initial corpus generation – 인증 흐름과 데이터 종속성을 만족하는 유효한 요청 시퀀스 집합(예: 로그인 → 리소스 생성 → 리소스 삭제)을 합성합니다.
  3. Instrumentation & coverage collection
    • White‑box: 대상 서비스는 LLVM 계측(LibAFL 사용)으로 컴파일되어 세밀한 분기 커버리지를 얻습니다.
    • Grey‑box: 가벼운 커버리지 쉼(libcoverage 등)이 기본 블록 히트를 보고합니다.
    • Black‑box: 응답 코드와 헤더 분석을 통해 커버리지를 근사합니다.
  4. Mutation engine – LibAFL의 일반 바이트‑레벨 변이기와 REST‑인식 변이기(파라미터 값 퍼징, 헤더 인젝션, 메서드 교체, 페이로드 구조 변경)의 하이브리드입니다.
  5. Power scheduling – 퍼저는 과거에 새로운 커버리지를 발견한 요청 시퀀스에 더 많은 변이 “에너지”를 동적으로 할당합니다(예: AFL의 “fast” 또는 “exploit” 스케줄 사용).
  6. Feedback loop – 변형된 시퀀스가 전송된 후, 커버리지 데이터가 스케줄러에 피드백되어 다음에 진화시킬 시퀀스를 결정하고, API를 이전에 보지 못한 상태로 유도합니다.
  7. Reporting – 크래시, 어설션 실패, 비정상적인 HTTP 응답이 트리거된 요청 트레이스와 함께 기록되며, 엔드포인트별 시각적 커버리지 히트맵이 제공됩니다.

결과 및 발견

  • Coverage boost – 클래식 Petstore 데모에서 WuppieFuzz는 ≈ 92 % 엔드포인트 커버리지≈ 85 % 브랜치 커버리지를 30 분 안에 달성했으며, 베이스라인 블랙‑박스 퍼저보다 30 %· 상태‑무관 퍼저보다 45 % 더 높은 성능을 보였습니다.
  • Stateful bug discovery – 이 도구는 특정 요청 순서(예: 리소스 생성 → 업데이트 → 관련 엔터티 삭제) 후에만 나타나는 논리 버그 3가지를 발견했습니다. 이러한 버그는 단일 요청 퍼저에서는 놓쳤습니다.
  • Power schedule impact – “exploit” 스케줄(고커버리지 시드 우선)은 엔드포인트와 코드 커버리지 모두에서 가장 빠른 성장률을 보였으며, “fast” 스케줄은 얕은 상태와 깊은 상태를 보다 균형 있게 탐색했습니다.
  • Automation gains – OpenAPI‑기반 코퍼스를 활용해 하네스 생성 시간이 수시간(수동 설정)에서 10 분 이하로 단축되어 실제 프로젝트에 적용 가능한 실용성을 입증했습니다.

실용적 함의

  • CI/CD 통합 – 팀은 WuppieFuzz를 빌드 파이프라인에 연결하여 API 표면 변화를 지속적으로 모니터링하고, 릴리스 전에 회귀를 포착할 수 있습니다.
  • 보안 강화 – 복잡한 상태 기반 흐름을 자동으로 실행함으로써, 개발자는 인증 우회, 부적절한 입력 검증, 단위 테스트로는 찾기 어려운 레이스 컨디션 등을 발견할 수 있습니다.
  • 수동 작업 감소 – OpenAPI 기반 코퍼스 생성은 수작업 테스트 하네스의 필요성을 없애며, 보안 전문가가 아니더라도 개발자가 퍼징을 쉽게 활용할 수 있게 합니다.
  • 확장 가능한 테스트 – 퍼저가 화이트‑박스와 블랙‑박스 모드 모두에서 동작하기 때문에, 소스가 있는 초기 개발 단계와 실행 중인 서비스만 접근 가능한 프로덕션‑유사 환경 모두에서 사용할 수 있습니다.
  • 확장성 – 오픈‑소스 특성과 LibAFL 의존 덕분에, 커스텀 변이자(예: GraphQL, gRPC)나 도메인 특화 커버리지 훅을 핵심 엔진을 다시 작성하지 않고도 추가할 수 있습니다.

제한 사항 및 향후 작업

  • 계측 오버헤드 – 화이트‑박스 모드에서는 LLVM 계측을 사용해 서비스를 다시 컴파일해야 하는데, 이는 일부 레거시 바이너리나 LLVM 지원이 없는 언어에서는 실현하기 어려울 수 있습니다.
  • 스펙 품질 의존성 – 초기 코퍼스 품질은 완전하고 정확한 OpenAPI 사양에 달려 있습니다; 인증 흐름이 누락되거나 선택적 파라미터가 빠지면 상태 커버리지가 제한될 수 있습니다.
  • 대규모 마이크로서비스 메쉬 확장성 – 현재 평가에서는 단일 API에 초점을 맞추고 있습니다; 이 접근법을 다수의 상호 의존 서비스에 걸쳐 퍼징을 조정하도록 확장하는 것은 아직 해결되지 않은 과제입니다.
  • 동적 인증 – 토큰 갱신, OAuth 리다이렉트, 혹은 맞춤형 인증 메커니즘을 처리하려면 여전히 수동으로 연결 코드를 작성해야 합니다; 향후 작업에서는 이러한 흐름을 자동화할 수 있습니다.
  • 고급 상태 추론 – 저자들은 머신러닝 모델을 도입해 어떤 요청 시퀀스가 새로운 상태를 열 가능성이 높은지 더 잘 예측하고, 순수 커버리지 피드백에 대한 의존도를 낮추려 합니다.

WuppieFuzz는 커버리지 기반, 상태ful 퍼징이 단순한 학술적 호기심이 아니라, 현대 RESTful 서비스의 보안 툴박스에 실질적이고 개발자 친화적인 추가가 될 수 있음을 보여줍니다.

저자

  • Thomas Rooijakkers
  • Anne Nijsten
  • Cristian Daniele
  • Erieke Weitenberg
  • Ringo Groenewegen
  • Arthur Melissen

논문 정보

  • arXiv ID: 2512.15554v1
  • 분류: cs.SE
  • 출판일: 2025년 12월 17일
  • PDF: PDF 다운로드
Back to Blog

관련 글

더 보기 »