[논문 리뷰] Compositional Fuzzing Aided by Targeted Symbolic Execution
Wildfire는 자동 시드 생성, 고립된 함수에서의 카バレ지 가속 퍼징, 그리고 표적화된 기호 실행을 조합한 새로운 구성적 퍼징 프레임워크이다. 이는 심층적이고 접근하기 어려운 기능에서 높은 코드 커버리지와 구성 가능성 분석을 가능하게 하여, 상태 기반 최첨단 도구보다 10퍼센트의 시간으로 더 높은 취약점 탐지율을 달성한다. 또한 정확한 콜 체인 검증을 통해 가짜 경고를 줄인다.
Guided fuzzing has, in recent years, been able to uncover many new vulnerabilities in real-world software due to its fast input mutation strategies guided by path-coverage. However, most fuzzers are unable to achieve high coverage in deeper parts of programs. Moreover, fuzzers heavily rely on the diversity of the seed inputs, often manually provided, to be able to produce meaningful results. In this paper, we present Wildfire, a novel open-source compositional fuzzing framework. Wildfire finds vulnerabilities by fuzzing isolated functions in a C-program and, then, using targeted symbolic execution it determines the feasibility of exploitation for these vulnerabilities. Based on our evaluation of 23 open-source programs (nearly 1 million LOC), we show that Wildfire, as a result of the increased coverage, finds more true-positives than baseline symbolic execution and fuzzing tools, as well as state-of-the-art coverage-guided tools, in only 10% of the analysis time taken by them. Additionally, Wildfire finds many other potential vulnerabilities whose feasibility can be determined compositionally to confirm if they are false-positives. Wildfire could also reproduce all of the known vulnerabilities and found several previously-unknown vulnerabilities in three open-source libraries.
연구 동기 및 목표
- 대규모 C 프로그램의 심층적이고 접근하기 어려운 기능에서 최첨단 퍼저의 제한된 코드 커버리지 문제를 해결하기 위해.
- 고립된 기능에 구성 분석을 적용하여 기호 실행의 경로 폭발 문제를 극복하기 위해.
- 호출 컨텍스트 분석을 통한 실행 가능성 검증을 통해 취약점 탐지에서의 가짜 경고를 줄이기 위해.
- 다중 코어에서의 병렬 실행을 활용하여 확장성과 효율성을 향상시키기 위해.
- 지능적인 드라이버 생성을 통해 이전에 알려지지 않은 프로그램에 대해 자동으로 시드 없는 퍼징을 가능하게 하기 위해.
제안 방법
- 입력 형식에 대한 사전 지식 없이도 C 프로그램의 어떤 고립된 함수에도 자동으로 시드 입력을 생성한다.
- 고립된 함수에서 카バレ지 가속 퍼징을 적용하여 깊은 콜 그래프 경로까지 포함한 최대 코드 커버리지를 확보한다.
- 발견된 취약점을 요약함으로써 기능을 요약으로 대체함으로써 구성 분석을 가능하게 한다.
- 기능의 취약점이 부모(호출) 함수에 의해 유도될 수 있는지 확인하기 위해 표적화된 기호 실행을 적용한다.
- 인lines 함수와 리턴 주소를 포함한 LLVM 비트코드의 명령어 수준의 거리 메트릭스를 사용하여 기호 실행 정밀도를 향상시킨다.
- 하나의 함수에서 시작하여 콜 그래프를 하향식으로 재귀적으로 분석하여 메인 함수까지의 실행 가능성 체인을 검증한다.
실험 결과
연구 질문
- RQ1기존의 퍼징 방식에 비해 구성적 퍼징이 심층적이고 접근하기 어려운 기능에서 코드 커버리지를 크게 향상시킬 수 있는가?
- RQ2표적화된 기호 실행이 고립된 기능에서 퍼징을 통해 발견된 취약점의 실행 가능성 여부를 효과적으로 검증할 수 있는가?
- RQ3퍼징과 구성 기반 기호 실행을 조합함으로써 가짜 경고를 줄이면서도 취약점 탐지율을 유지하거나 향상시킬 수 있는가?
- RQ4병렬 처리와 자동 시드 생성을 통해 프레임워크가 더 높은 성능과 확장성을 달성할 수 있는가?
- RQ5최첨단 기호 실행 및 퍼징 도구들과 비교했을 때 제안된 방법은 효율성과 효과성 면에서 어떻게 다른가?
주요 결과
- Wildfire는 베이스라인 기반 기호 실행 및 퍼징 도구보다 더 많은 진짜 양성 취약점을 발견했으며, 분석 시간의 10퍼센트만으로도 최첨단 카バレ지 가속 도구를 뛰어넘는 성능을 보였다.
- 23개의 오픈소스 프로그램(약 100만 줄의 코드)에 대한 평가에서 Wildfire는 기존 도구들보다 더 높은 코드 커버리지와 더 많은 실행 가능한 취약점을 발견했다.
- 세 개의 오픈소스 라이브러리에서 알려진 16개의 취약점 중 15개를 재현하여 강력한 복원력과 실용적 적용 가능성을 입증했다.
- 실제 라이브러리에서 이전에 알려지지 않은 여러 취약점을 발견하여 실제 환경에서의 효과성을 검증했다.
- 구성 분석을 통해 실행 가능성 체인을 정확하게 보고함으로써 호출 컨텍스트를 통한 실행 가능성 확인을 통해 가짜 경고를 크게 줄였다.
- 향상된 LLVM 비트코드 거리 메트릭스를 통한 표적화된 기호 실행과 퍼징의 통합은 더 정확하고 확장 가능한 취약점 검증을 이끌어냈다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.