[논문 리뷰] Improving Function Coverage with Munch: A Hybrid Fuzzing and Directed Symbolic Execution Approach
Munch는 퍼지드 및 심벌릭 실행을 융합한 프레임워크로, C 프로그램의 함수 커버리지 향상을 위해 퍼지드와 타겟팅된 심벌릭 실행을 결합한다. 두 가지 모드를 통해 작동한다: 먼저 퍼지드로 커버되지 않은 함수를 식별한 후 해당 함수에 대해 타겟팅된 심벌릭 실행을 수행하거나, 그 반대로 수행한다. 이로 인해 SMT 솔버 쿼리 수와 실행 시간을 줄이며, 순수한 퍼지드나 심벌릭 실행보다 뛰어난 커버리지 성능을 달성한다.
Fuzzing and symbolic execution are popular techniques for finding vulnerabilities and generating test-cases for programs. Fuzzing, a blackbox method that mutates seed input values, is generally incapable of generating diverse inputs that exercise all paths in the program. Due to the path-explosion problem and dependence on SMT solvers, symbolic execution may also not achieve high path coverage. A hybrid technique involving fuzzing and symbolic execution may achieve better function coverage than fuzzing or symbolic execution alone. In this paper, we present Munch, an open source framework implementing two hybrid techniques based on fuzzing and symbolic execution. We empirically show using nine large open-source programs that overall, Munch achieves higher (in-depth) function coverage than symbolic execution or fuzzing alone. Using metrics based on total analyses time and number of queries issued to the SMT solver, we also show that Munch is more efficient at achieving better function coverage.
연구 동기 및 목표
- 깊이 있는 프로그램 컴포넌트에서 낮은 함수 커버리지 문제를 해결하기 위해, 특히 표준 퍼지드나 심벌릭 실행으로는 도달하기 어려운 컴포넌트를 대상으로 한다.
- 심벌릭 실행의 계산 비용을 줄이기 위해, 타겟팅된 탐색을 통해 SMT 솔버 쿼리 수를 최소화한다.
- 컴ponent가 재사용되는 고도로 모듈화되거나 조합형 소프트웨어에서의 테스트 커버리지 향상.
- 기존 하이브리드 접근 방식보다 커버리지와 효율성 면에서 뛰어난, 오픈소스이자 프로덕션 환경에서 사용 가능한 프레임워크 제공.
- 실제 오픈소스 프로그램에 대한 하이브리드 퍼지드-심벌릭 실행의 효과성과 효율성을 경험적으로 검증한다.
제안 방법
- 커버되지 않은 함수 탐색을 우선시하기 위해 KLEE에 최단경로 기반의 타겟팅 탐색 전략을 통합한다.
- 수동으로 제공된 시드 입력을 사용해 AFL을 통해 초기 퍼지드를 수행하여 쉽게 도달 가능한 함수를 식별한다.
- 퍼지드와 심벌릭 실행 결과 간의 차집합 계산을 통해 커버되지 않은 함수를 식별하고, 이를 바탕으로 타겟팅된 심벌릭 탐색을 수행한다.
- 심벌릭 실행을 통해 기능적으로 다양한 테스트 케이스를 생성하여 퍼지드의 입력 다양성과 커버리지를 향상시킨다.
- 두 가지 운영 모드를 구현한다: (1) 퍼지드 이후 타겟팅된 심벌릭 실행, (2) 심벌릭 실행을 통해 퍼지드의 시드를 생성한다.
- 프로그램을 인스트루멘테이션하여 함수 수준의 커버리지를 추적하고, 심벌릭 실행이 커버되지 않은 대상으로 향하도록 이끈다.
실험 결과
연구 질문
- RQ1퍼지드와 심벌릭 실행을 융합한 하이브리드 접근 방식이, 각각을 별도로 사용할 때보다 더 높은 함수 커버리지를 달성할 수 있는가?
- RQ2커버되지 않은 함수 집합에 의해 이끌리는 타겟팅된 심벌릭 실행이 SMT 솔버 쿼리 수와 실행 시간을 줄이는가?
- RQ3실제로 복잡한 C 프로그램에서 깊은 수준의 함수 커버리지를 달성하는 데 하이브리드 접근 방식이 얼마나 효과적인가?
- RQ4이 프레임워크는 표준 리눅스 시스템에서 즉시 사용 가능한 방식으로 효율적으로 배포되고 사용될 수 있는가?
- RQ5Munch의 성능은 Driller와 같은 기존 하이브리드 도구와 비교해 커버리지와 효율성 면에서 어떻게 다른가?
주요 결과
- Munch는 9개의 실제 오픈소스 프로그램에서 순수한 퍼지드나 심벌릭 실행보다 더 높은 커버리지를 달성했다.
- 모든 평가 대상 프로그램에서 Munch는 호출 그래프의 깊은 수준에서 더 높은 커버리지를 확보했으며, 특히 진입 포인트에서 멀리 떨어진 함수에서 두드러진 성능을 보였다.
- 하이브리드 접근 방식은 심벌릭 실행만을 사용할 경우 대비 분석 총 시간과 SMT 솔버 쿼리 수를 50% 이상 감소시켰다.
- 심벌릭 실행을 커버되지 않은 함수에 집중시음으로써, 이미 커버된 경로에 대한 중복 탐색을 방지함으로써 효율성이 향상되었다.
- Munch는 시간 단위 커버리지와 SMT 솔버에 발행된 쿼리 수 단위 커버리지 면에서 순수한 퍼지드나 심벌릭 실행보다 뛰어난 성능을 보였다.
- Munch의 오픈소스 구현은 프로덕션 환경에서 사용 가능한 수준이며, 표준 리눅스 시스템에서 배포 가능하다. 이는 Driller와 같은 일부 이전 도구와는 달리, 실제 적용 가능성을 지닌다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.