[논문 리뷰] Building Fast Fuzzers
이 논문은 기존의 문법 기반 퍼저들인 Dharma보다 최대 300배 빠른 속도를 달성하는 고성능 문법 퍼저 F1을 제안한다. 이는 기능형 프로그래밍과 가상 머신 구현 기법을 응용한 최적화 기법을 적용함으로써 가능해졌다. 문법 생성을 기능형 프로그램으로 모델링하고 이를 고유의 가상 머신으로 컴파일함으로써 F1은 100 MB/s 이상의 처리량을 확보하여 심지어 무작위 퍼저조차 뛰어넘는 성능을 발휘하면서도 문법적으로 유효한 입력을 보장한다.
Fuzzing is one of the key techniques for evaluating the robustness of programs against attacks. Fuzzing has to be effective in producing inputs that cover functionality and find vulnerabilities. But it also has to be efficient in producing such inputs quickly. Random fuzzers are very efficient, as they can quickly generate random inputs; but they are not very effective, as the large majority of inputs generated is syntactically invalid. Grammar-based fuzzers make use of a grammar (or another model for the input language) to produce syntactically correct inputs, and thus can quickly cover input space and associated functionality. Existing grammar-based fuzzers are surprisingly inefficient, though: Even the fastest grammar fuzzer Dharma still produces inputs about a thousand times slower than the fastest random fuzzer. So far, one can have an effective or an efficient fuzzer, but not both. In this paper, we describe how to build fast grammar fuzzers from the ground up, treating the problem of fuzzing from a programming language implementation perspective. Starting with a Python textbook approach, we adopt and adapt optimization techniques from functional programming and virtual machine implementation techniques together with other novel domain-specific optimizations in a step-by-step fashion. In our F1 prototype fuzzer, these improve production speed by a factor of 100--300 over the fastest grammar fuzzer Dharma. As F1 is even 5--8 times faster than a lexical random fuzzer, we can find bugs faster and test with much larger valid inputs than previously possible.
연구 동기 및 목표
- 기존 도구들이 더 높은 효과성을 보이지만 무작위 퍼저보다 수개의 주기수 배 느린, 문법 기반 퍼징의 핵심 성능 저하 문제를 해결한다.
- 기능형 프로그래밍 최적화 기법과 가상 머신 컴파일 기법을 융합하여 문법 기반 입력 생성을 가속화함으로써 빠르고 효과적인 퍼징을 가능하게 한다.
- 문법 인식 입력을 통한 효과성과 고속 생성을 통한 효율성 간 격차를 좁혀, 대규모 및 성능 민감한 테스팅에 문법 퍼징을 실용적으로 적용할 수 있도록 한다.
- 시스템 프로그래밍 관점에서 구현 스택을 재고함으로써, 문법 기반 퍼징이 무작위 퍼징과 동일하거나 더 빠른 속도로도 뛰어난 효과성을 발휘할 수 있음을 입증한다.
제안 방법
- 문법 기반 입력 생성을 순수 기능형 프로그램으로 모델링하여, defunctionalization 및 슈퍼컴파일과 같은 기능형 프로그래밍 최적화 기법을 적용할 수 있도록 한다.
- 직접 실행 및 컨텍스트 스레드링 실행 방식을 모두 지원하는 고유의 가상 머신(VM)으로 퍼저를 컴파일함으로써 해석 오버헤드를 감소시킨다.
- 무작위 수열을 VM의 명령어로 간주하여, 퍼저의 동작과 경로 탐색을 결정적이고 조합 가능한 방식으로 제어할 수 있도록 한다.
- 메모이제이션 및 조기 종료와 같은 도메인 특화 최적화를 적용하여 문법 전개 중 중복 계산을 줄인다.
- 이중 단계 컴파일 파이프라인을 사용한다: 첫 번째 단계에서는 문법을 기능형 중간 표현으로 변환하고, 두 번째 단계에서는 고속 실행을 위한 최적화된 VM 코드로 컴파일한다.
- 생성된 VM 코드에 대해 슈퍼옵티마이제이션 기법을 적용하여 명령어 수를 추가로 감소시키고 런타임 성능을 향상시키며, 이는 향후 작업으로 남겨진다.
실험 결과
연구 질문
- RQ1문법 기반 퍼징이 문법적 타당성을 유지하면서도 무작위 퍼징 수준의 성능을 달성할 수 있는가?
- RQ2기능형 프로그래밍과 가상 머신 구현 기법에서 유도된 최적화 기법이 문법 기반 퍼저 생성 속도를 얼마나 향상시킬 수 있는가?
- RQ3어떻게 문법 퍼저를 기능형 프로그램으로 재설계하고 가상 머신으로 컴파일하여 고처리량을 달성할 수 있는가?
- RQ4퍼징에서 무작위 수열을 도메인 특화 가상 머신의 명령어로 간주함으로써 얻을 수 있는 성능 향상은 어느 정도인가?
- RQ5기능형 프로그래밍 추상화와 VM 컴파일의 조합이 문법 기반 퍼저와 무작위 퍼저 간의 성능 격차를 메울 수 있는가?
주요 결과
- F1은 가장 빠른 기존 문법 퍼저인 Dharma보다 100–300배 빠른 성능을 기록하여 고성능 문법 퍼징의 가능성을 입증한다.
- F1은 100 MB/s 이상의 속도로 입력을 생성하여, 어휘적 무작위 퍼저보다 5–8배 더 빠르며, 현재까지 알려진 바에서 문법적으로 유효한 입력을 생성하는 데 가장 빠른 퍼저이다.
- 문법 인식 생성의 추가 복잡성에도 불구하고 무작위 퍼저의 성능을 뛰어넘는 성능을 보이며, 효율성과 효과성이 더 이상 상호 배제적이지 않음을 증명한다.
- defunctionalization 및 슈퍼컴파일과 같은 기능형 프로그래밍 기법의 사용은 정적 분석과 코드 변환을 통해 상당한 성능 향상을 가능하게 한다.
- 가상 머신 추상화는 효율적 실행을 가능하게 하며, 슈퍼옵티마이제이션을 통한 추가 최적화 가능성도 열어주며, 이는 생성된 VM 코드에 매우 적합한 것으로 입증되었다.
- 전체 시스템은 자가 포함형 Jupyter 노트북으로 구현되어 있어 향후 연구 및 도구 개발을 위한 완전한 재현 가능성과 확장성이 보장된다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.