[논문 리뷰] Superion: Grammar-Aware Greybox Fuzzing
Superion은 추상 구문 트리(abstract syntax tree, AST)를 활용하여 구조적 타당성을 유지하면서 테스트 입력을 지능적으로 단순화하는 문법 인지형 회색상자 퍼저를 제안한다. AST에서 서브트리를 반복적으로 제거하고 커버리지가 그대로 유지되는지 확인함으로써, 버그를 유발하는 능력을 유지하면서도 최소화된 유효한 입력을 생성한다. 이는 전통적 접근 방식에 비해 퍼징 효율성을 크게 향상시킨다.
In recent years, coverage-based greybox fuzzing has proven itself to be one of the most effective techniques for finding security bugs in practice. Particularly, American Fuzzy Lop (AFL for short) is deemed to be a great success in fuzzing relatively simple test inputs. Unfortunately, when it meets structured test inputs such as XML and JavaScript, those grammar-blind trimming and mutation strategies in AFL hinder the effectiveness and efficiency. To this end, we propose a grammar-aware coverage-based greybox fuzzing approach to fuzz programs that process structured inputs. Given the grammar (which is often publicly available) of test inputs, we introduce a grammar-aware trimming strategy to trim test inputs at the tree level using the abstract syntax trees (ASTs) of parsed test inputs. Further, we introduce two grammar-aware mutation strategies (i.e., enhanced dictionary-based mutation and tree-based mutation). Specifically, tree-based mutation works via replacing subtrees using the ASTs of parsed test inputs. Equipped with grammar-awareness, our approach can carry the fuzzing exploration into width and depth. We implemented our approach as an extension to AFL, named Superion; and evaluated the effectiveness of Superion on real-life large-scale programs (a XML engine libplist and three JavaScript engines WebKit, Jerryscript and ChakraCore). Our results have demonstrated that Superion can improve the code coverage (i.e., 16.7% and 8.8% in line and function coverage) and bug-finding capability (i.e., 31 new bugs, among which we discovered 21 new vulnerabilities with 16 CVEs assigned and 3.2K USD bug bounty rewards received) over AFL and jsfunfuzz. We also demonstrated the effectiveness of our grammar-aware trimming and mutation.
연구 동기 및 목표
- 복잡한 구문적 구조를 가진 입력에 대해 전통적인 방식으로는 효율적이지 않은 유효하고 최소한의 테스트 입력를 생성하는 데에 문제를 해결하고자 한다.
- 테스트 입력의 문법 인지형 단순화를 통해 퍼징 캠페인 중 입력의 과도한 부피와 중복을 줄이고자 한다.
- AST 기반의 구조적 분석을 통해 입력 크기를 최소화하면서도 코드 커버리지를 유지하거나 향상시키고자 한다.
- 전체 프로그램 분석이나 기호 실행을 요구하지 않고도 문법 인지성을 회색상자 퍼징에 통합하고자 한다.
제안 방법
- 주어진 문법 $G$를 사용하여 각 입력을 구문 분석하여 구조적 분석을 위한 추상 구문 트리(abstract syntax tree, AST)를 생성한다.
- AST의 각 서브트리 $n$을 반복적으로 제거하고, 결과로 나오는 입력 $ret$가 커버리지 유지 여부를 테스트한다.
- 서브트리 $n$을 제거한 후 커버리지가 그대로 유지되면, 단순화된 입력 $in = ret$를 유지하고 계속 진행한다; 그렇지 않으면 $n$을 트리에 복원한다.
- 구문 분석에 실패할 경우 내장된 단순화 함수를 후행으로 사용하여 입력의 유효성을 보장한다.
- 더 이상 유효한 단순화가 불가능할 때까지 이 과정을 반복하여 최소 유효 입력 $ret$를 반환한다.
- 원시 바이트 시퀀스가 아닌 AST를 기반으로 운영하여 구조적 타당성을 유지한다.
실험 결과
연구 질문
- RQ1문법 인지형 AST 기반 입력 단순화가 회색상자 퍼징의 효율성을 향상시킬 수 있는가?
- RQ2테스트 입력에서 비필수 서브트리를 제거하면 입력 크기는 감소하지만 코드 커버리지는 유지되는가?
- RQ3기존의 퍼징 방식과 비교해 문법 인지형 단순화의 커버리지 및 실행 속도 측면에서의 성능은 어떠한가?
- RQ4AST 수준의 조작이 퍼징 캠페인에서 중복 테스트 케이스의 수를 줄일 수 있는가?
주요 결과
- 제안된 AST 기반 단순화 전략은 입력 크기를 줄이면서도 커버리지를 유지하거나 향상시키는 데 성공했다.
- 커버리지에 영향을 주지 않는 서브트리를 제거함으로써 Superion은 버그 탐지 능력을 유지하면서도 최소화된 유효한 입력을 생성한다.
- 입력의 유효성을 보장하기 위해 AST의 구조를 기반으로 운영함으로써, 단순화 과정 전반에 걸쳐 문법 준수를 보장한다.
- 입력 최소화를 통해 중복된 테스트 실행을 줄임으로써, 표준 회색상자 퍼징 대비 본 방법이 뛰어난 성능을 보였다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.