[논문 리뷰] NEUZZ: Efficient Fuzzing with Neural Program Smoothing
NEUZZ는 신경망 기반 프로그램 스무딩을 사용하여 프로그램 분기 행동의 미분 가능 근사치를 생성함으로써 기울기 유도 입력 생성을 가능하게 하는 새로운 패atcher를 제안한다. 이는 더 효율적인 패처링을 위해 기울기 기반 최적화를 가능하게 한다. 실제 프로그램에서 24시간 동안 실행했을 때, 10개의 최신 회색상자 패처보다 31개의 이전에 알려지지 않은 버그(두 개의 CVE 포함)를 발견하고, 엣지 커버리지가 3배 높아졌다.
Fuzzing has become the de facto standard technique for finding software vulnerabilities. However, even state-of-the-art fuzzers are not very efficient at finding hard-to-trigger software bugs. Most popular fuzzers use evolutionary guidance to generate inputs that can trigger different bugs. Such evolutionary algorithms, while fast and simple to implement, often get stuck in fruitless sequences of random mutations. Gradient-guided optimization presents a promising alternative to evolutionary guidance. Gradient-guided techniques have been shown to significantly outperform evolutionary algorithms at solving high-dimensional structured optimization problems in domains like machine learning by efficiently utilizing gradients or higher-order derivatives of the underlying function. However, gradient-guided approaches are not directly applicable to fuzzing as real-world program behaviors contain many discontinuities, plateaus, and ridges where the gradient-based methods often get stuck. We observe that this problem can be addressed by creating a smooth surrogate function approximating the discrete branching behavior of target program. In this paper, we propose a novel program smoothing technique using surrogate neural network models that can incrementally learn smooth approximations of a complex, real-world program's branching behaviors. We further demonstrate that such neural network models can be used together with gradient-guided input generation schemes to significantly improve the fuzzing efficiency. Our extensive evaluations demonstrate that NEUZZ significantly outperforms 10 state-of-the-art graybox fuzzers on 10 real-world programs both at finding new bugs and achieving higher edge coverage. NEUZZ found 31 unknown bugs that other fuzzers failed to find in 10 real world programs and achieved 3X more edge coverage than all of the tested graybox fuzzers for 24 hours running.
연구 동기 및 목표
- 심각하고 쉽게 트리거되지 않는 취약점을 발견하는 데에 있어 진화적 패처링의 비효율성을 해결하기 위해.
- 실제 프로그램에서 불연속적이고 비미분 가능한 행동을 보일 경우 기울기 기반 최적화의 한계를 극복하기 위해.
- 신경망을 사용하여 프로그램 분기 행동을 근사화하는 확장성 있고 저비용의 방법을 설계하기 위해.
- 신경 스무딩과 기울기 기반 입력 생성을 통합하여 패처링의 효율성과 커버리지 향상시키기 위해.
- 기존 패처링 도구들에 비해 취약점 탐지 및 코드 커버리지 측면에서 뛰어난 성능을 입증하기 위해.
제안 방법
- 입력에 기반하여 프로그램의 제어 흐름 분기 행동의 매끄럽고 미분 가능한 근사치를 학습하기 위해 순방향 신경망을 훈련한다.
- 훈련된 신경 모델을 사용하여 새로운 코드 경로를 트리거할 가능성이 높은 입력을 햖을 때 변형 작업을 유도하는 기울기를 계산한다.
- 예측을 잘못한 행동을 기반으로 점진적으로 신경 모델을 재훈련하여 오류를 수정하고 정확도를 시간이 지남에 따라 향상시킨다.
- 스무딩된 대체 모델에서 기울기 기반 최적화(예: 기울기 하강법)를 적용하여 코드 커버리지를 최대화하는 새로운 테스트 입력을 생성한다.
- 신경 스무딩과 기울기 기반 입력 생성을 통합하여 종단 간 패처링을 위한 전체 패처 파이프라인인 Neuzz를 구현한다.
- 신경 스무딩과 기존의 패처링 코퍼스 관리 및 커버리지 피드백을 조합한 하이브리드 접근 방식을 사용한다.
실험 결과
연구 질문
- RQ1신경망 기반 스무딩이 실제 프로그램의 불연속적 분기 행동을 효과적으로 근사할 수 있는가?
- RQ2스무딩된 대체 모델에서 기울기 기반 입력 생성이 진화적 변형에 비해 패처링 효율을 뚜렷이 향상시킬 수 있는가?
- RQ3제안된 방법이 복잡한 파일 형식과 높은 코드 복잡도를 지닌 대규모 실제 프로그램에 확장 가능한가?
- RQ4기존 패처링 도구들이 놓친 이전에 알려지지 않은 취약점을 탐지할 수 있는가?
- RQ5Neuzz의 성능은 엣지 커버리지 및 취약점 탐지 측면에서 최신 패처링 도구들과 비교해 어떻게 되는가?
주요 결과
- Neuzz는 10개의 실제 프로그램에서 기존 패처링 도구들이 감지하지 못한 31개의 이전에 알려지지 않은 버그를 발견했으며, 이 중 두 개는 CVE(CVE-2018-19931 및 CVE-2018-19932)로 분류되었다.
- Neuzz는 동일한 실제 프로그램 세트에서 24시간 동안 실행했을 때, 테스트된 모든 회색상자 패처링 도구보다 엣지 커버리지가 3배 높았다.
- LAVA-M 및 DARPA CGC 버그 데이터셋에서 Neuzz는 10개의 최신 회색상자 패처링 도구들보다 취약점 탐지 및 커버리지 측면에서 모두 뛰어난 성능을 보였다.
- 신경 스무딩 기법은 불연속적인 행동을 보이는 프로그램에서도 효과적인 기울기 기반 최적화를 가능하게 하여 이전 기울기 기반 접근 방식의 핵심 한계를 극복했다.
- 신경 모델의 점진적 재훈련은 시간이 지남에 따라 예측 정확도를 향상시켜 초기 학습 오류에 대해 강건한 성능을 보였다.
- Neuzz는 타인 기반 및 기호 실행 기반 패처링 도구들에 비해 뛰어난 확장성과 성능을 보였으며, 이는 높은 오버헤드 또는 경로 폭발 문제로 인해 어려움을 겪는다는 점에서 유의미하다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.