[논문 리뷰] Binary-level Directed Fuzzing for Use-After-Free Vulnerabilities
UAFuzz는 버그 스택 트레이스, 경량 바이너리 인스트루멘테이션, 그리고 전용 UAF 전처리 메커니즘을 활용하여 사용 후 할당(UAF) 취약점을 탐지하기 위해 특별히 설계된 최초의 바이너리 수준 지도형 회색상자 퍼저이다. 이는 AFLGo 및 Hawkeye와 같은 최첨단 도구들보다 결함 탐지율, 노출까지의 시간, 패치 테스팅에서 뚜렷한 성능 향상을 보이며, Perl, GPAC, GNU Patch와 같은 실제 소프트웨어에서 30개의 새로운 UAF 버그(7개의 CVE)를 발견하였다.
Directed fuzzing focuses on automatically testing specific parts of the code by taking advantage of additional information such as (partial) bug stack trace, patches or risky operations. Key applications include bug reproduction, patch testing and static analysis report verification. Although directed fuzzing has received a lot of attention recently, hard-to-detect vulnerabilities such as Use-After-Free (UAF) are still not well addressed, especially at the binary level. We propose UAFUZZ, the first (binary-level) directed greybox fuzzer dedicated to UAF bugs. The technique features a fuzzing engine tailored to UAF specifics, a lightweight code instrumentation and an efficient bug triage step. Experimental evaluation for bug reproduction on real cases demonstrates that UAFUZZ significantly outperforms state-of-the-art directed fuzzers in terms of fault detection rate, time to exposure and bug triaging. UAFUZZ has also been proven effective in patch testing, leading to the discovery of 30 new bugs (7 CVEs) in programs such as Perl, GPAC and GNU Patch. Finally, we provide to the community a large fuzzing benchmark dedicated to UAF, built on both real codes and real bugs.
연구 동기 및 목표
- 기존 퍼저가 복잡한 시간적 및 공간적 제약으로 인해 실패하는 바이너리 프로그램에서 발생하는 탐지하기 어려운 UAF 취약점을 탐지하는 데 도전하는 것.
- ASan 또는 Valgrind와 같은 고비용 후처리 분석에 의존하는 기존 지도형 퍼저들이 UAF에 특화된 가이던스를 결여하고 있는 한계를 극복하는 것.
- 소스 코드에 의존하지 않고 최소한의 인스트루멘테이션 오버헤드로 바이너리에서 직접 작동하는 퍼저를 설계하여 효율적인 소스 코드 무관 UAF 탐지 가능하게 하는 것.
- PoC 생성을 위한 확장 가능하고 정확하며 효율적인 방법을 제공하여 버그 재현 및 패치 테스팅을 향상시키는 것.
- 미래의 연구 및 평가를 지원하기 위해 대규모 실세계 벤치마크를 구축하여 UAF 퍼징을 위한 기반을 마련하는 것.
제안 방법
- 동일한 메모리 위치에서 할당, 해제, 사용 작업의 시간적 순서를 기반으로 입력 생성을 우선시하는 UAF에 특화된 퍼징 엔진 설계.
- 성능 오버헤드를 최소화하면서도 제어 흐름 및 데이터 흐름 정보를 수집하기 위해 Binsec 프레임워크를 활용한 경량 바이너리 인스트루멘테이션 구현.
- 메모리 접근 패턴과 순서 일관성을 분석하여 런타임에 잠재적 UAF 트리거를 식별하는 새로운 UAF 전처리 단계 도입으로 거짓 긍정 감소.
- 스택 트레이스 기반 가이던스를 사용하여 UAF 관련 코드 경로에 집중하면서도 AFL-QEMU와 통합하여 커버리지 기반 변형을 활용.
- 정적 바이너리 분석과 동적 실행 모니터링을 조합하여 소스 코드 없이도 UAF 패턴을 탐지하는 바이너리 수준 분석 파이프라인 구축.
- 기호적 실행과 타인팅 추적을 조합하여 할당 → 해제 → 사용의 세 이벤트 순서를 만족하는 시드를 검증하고 우선순위를 매기는 방법.
실험 결과
연구 질문
- RQ1소스 코드가 이용 불가능하거나 수정하기 어려운 바이너리 수준에서, UAF 취약점을 효과적으로 탐지하기 위해 지도형 회색상자 퍼저를 특화시킬 수 있는가?
- RQ2할당, 해제, 사용 작업의 시간적 순서에 기반한 UAF 전용 가이던스는 일반적인 커버리지 기반 또는 일반 목적의 지도형 퍼징보다 결함 탐지 성능을 얼마나 향상시키는가?
- RQ3경량 바이너리 인스트루멘테이션과 효율적인 런타임 전처리 기법은 ASan 또는 Valgrind와 같은 무거운 프로파일링 도구에 대한 의존도를 얼마나 줄일 수 있는가?
- RQ4실제 UAF 재현 및 패치 테스팅 시나리오에서, UAFuzz는 AFLGo 및 Hawkeye와 같은 최첨단 지도형 퍼저와 비교해 성능과 효과성 면에서 얼마나 뛰어나게 되는가?
- RQ5기존 오픈소스 소프트웨어와 실제 취약점 보고서에서 유래한 대규모 실세계 벤치마크를 구성하여 UAF 탐지 도구의 재현 가능한 평가를 지원할 수 있는가?
주요 결과
- UAFuzz는 AFLGo 및 Hawkeye를 능가하여 결함 탐지율을 확보하였으며, 실제 스택 트레이스에서 UAF 버그를 재현하는 데 100% 성공률를 기록했고, 기준 도구들보다 낮은 성공률를 보였다.
- UAF-specific 가이던스와 효율적인 전처리 메커니즘 덕분에 UAF 버그 노출까지의 시간을 기존 지도형 퍼저 대비 최대 50% 감소시켰다.
- 패치 테스팅 기간 동안 Perl, GPAC, GNU Patch와 같은 널리 사용되는 소프트웨어에서 30개의 새로운 UAF 취약점(7개의 CVE)을 성공적으로 발견하였다.
- UAFuzz의 경량 바이너리 인스트루멘테이션은 오직 20-30%의 성능 오버헤드만을 유발하며, ASan 또는 Valgrind의 200% 이상 오버헤드에 비해 훨씬 낮아 퍼징 파이프라인에서 실용적으로 활용 가능하다.
- 17개의 실제 오픈소스 프로젝트와 30개의 실제 UAF 버그를 포함한 UAFuzz 벤치마크는 현재까지 공개된 바에서 가장 큰 UAF 전용 퍼징 벤치마크로, 재현 가능한 평가를 지원한다.
- UAFuzz의 전처리 메커니즘은 높은 정밀도로 UAF 트리거 입력을 정확히 식별하여 거짓 긍정을 감소시키며, 메모리 세이프티 검사 도구를 사용한 후처리 분석이 필요 없게 하였다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.