Skip to main content
QUICK REVIEW

[논문 리뷰] Sample-Free Learning of Input Grammars for Comprehensive Software Fuzzing

Rahul Gopinath, Björn Mathis|arXiv (Cornell University)|2018. 10. 18.
Software Testing and Debugging Techniques참고 문헌 8인용 수 9
한 줄 요약

이 논문은 프로그램 실행 파일에서만 동적 타인트 분석과 파서 탐색을 사용하여 입력 문법을 자동으로 추론하는 샘플이 없는 접근법인 Pygmalion을 제안한다. 이 방법은 고도의 커버리지와 문법적으로 타당한 테스트 입력을 생성하며, 문법 추론을 몇 분 내에 수행하고, 수천 개의 고품질 입력을 생성하여 언어 기능을 종합적으로 통합한다. 이는 변형 기반 및 제약 기반 퍼저링 기법보다 입력 품질과 기능 커버리지에서 뛰어나다.

ABSTRACT

Generating valid test inputs for a program is much easier if one knows the input language. We present first successes for a technique that, given a program P without any input samples or models, learns an input grammar that represents the syntactically valid inputs for P -- a grammar which can then be used for highly effective test generation for P . To this end, we introduce a test generator targeted at input parsers that systematically explores parsing alternatives based on dynamic tracking of constraints; the resulting inputs go into a grammar learner producing a grammar that can then be used for fuzzing. In our evaluation on subjects such as JSON, URL, or Mathexpr, our PYGMALION prototype took only a few minutes to infer grammars and generate thousands of valid high-quality inputs.

연구 동기 및 목표

  • 기존의 퍼징 기법이 효과적인 테스트 입력 생성을 위해 입력 샘플이나 형식적 명세가 필요로 하는 한계를 해결하기 위해.
  • 프로그램의 실행 파일만으로도 자동으로 입력 문법을 학습함으로써 종합적인 소프트웨어 퍼징을 가능하게 하기 위해.
  • 구조화되고 의미적으로 풍부한 입력을 생성함으로써 테스트 입력 품질을 향상시키고, 문법적 기능을 통합·커버하기 위해.
  • 샘플이 없고 자동화되며 다양한 프로그램과 입력 형식 간에 재사용 가능한 문법 추론 파이프라인을 제공하기 위해.
  • 실행만으로도 추론된 문법이 제약 기반 및 변형 기반 퍼징 기법의 커버리지에 도달하거나 이를 초월할 수 있음을 입증하기 위해.

제안 방법

  • 파서 지향 테스트 생성기는 파싱 중 입력 문자와 기대값 간의 비교를 동적으로 추적하며, 동적 타인트 분 析를 통해 파싱 제약 조건을 만족하는 입력 생성을 이끈다.
  • 시스템은 반복적으로 다양한 비교 결과를 유도하는 입력을 생성함으로써 모든 파싱 선택지를 체계적으로 탐색하여 모든 문법 경로의 커버리지 확보.
  • 문법 학습기는 입력 문자의 데이터 흐름을 분석하여 동일한 흐름을 보이는 시퀀스를 식별하고, 이를 문법적 요소로 묶고 조합 규칙을 추론한다.
  • 테스트 생성기의 탐색에서 유도된 동치류(예: '모든 숫자')는 문법 규칙의 일반화를 위해 사용되며, 이는 추상화 수준 향상과 커버리지 향상에 기여한다.
  • 추론된 문법은 더 이상 인스트루멘테이션이나 프로그램 실행 없이도 고속으로 유효한 입력을 생성하는 데 사용되며, 퍼징을 위한 생산자로 기능한다.
  • 파이프라인은 완전히 자동화되어 있으며, 프로그램 실행 파일과 유효한 입력 접두어(예: 빈 문자열)만을 입력으로 요구한다.

실험 결과

연구 질문

  • RQ1입력 샘플이나 형식적 명세 없이도 프로그램에 대해 정확한 입력 문법을 추론할 수 있는가?
  • RQ2동적 타인트 분석과 파서 탐색을 사용하여 프로그램의 입력 파서에서 모든 문법적 선택지를 체계적으로 커버링할 수 있는가?
  • RQ3결과로 도출된 문법이 다수의 언어 기능을 통합한 고도의 커버리지와 의미적으로 풍부한 테스트 입력을 생성할 수 있는가?
  • RQ4샘플이 없는 문법 기반 퍼징이 변형 기반 및 제약 기반 접근법과 비교할 때 입력 유효성과 코드 커버리지 측면에서 어떻게 성능을 내는가?
  • RQ5추론된 문법이 다양한 도구와 시스템 간에 테스트, 프로그램 이해, 입력 검증 등에 얼마나 재사용 가능한가?

주요 결과

  • Pygmalion은 JSON, URL, Mathexpr에 대해 실행 파일만을 사용하여 5분 이내에 정확한 입력 문법을 추론했다.
  • 시스템은 JSON에서 배열, 객체, 문자열, 숫자 등의 문법적 기능을 종합적으로 통합한 수천 개의 유효하고 고품질의 테스트 입력을 생성했다.
  • JSON의 경우, Pygmalion의 가장 긴 입력은 중첩 구조와 특수 문자를 포함한 복잡한 요소들을 통합했지만, AFL과 Klee는 단순하고 반복적인 입력들만 생성했다.
  • 커버리지 지표에서 Pygmalion은 유효한 입력에 대해 거의 최대 수준의 코드 커버리지에 도달했으며, URL 쿼리 파싱를 제외한 모든 케이스에서 Klee와 동등하거나 이를 초월했다.
  • Pygmalion의 입력 중 90% 이상이 유효했으며, 이는 AFL과 Klee가 문법적 결함로 인해 대부분의 입력이 무효였던 것과 비교해 뚜렷한 우월성을 보였다.
  • 추론된 문법은 입력의 구조, 깊이, 기호 빈도에 대한 정밀한 제어를 가능하게 하여, 변형 기반 접근법에 비해 훨씬 뛰어난 테스트 케이스 설계 능력을 제공했다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.