Skip to main content
QUICK REVIEW

[논문 리뷰] Inferring Input Grammars from Dynamic Control Flow

Rahul Gopinath, Björn Mathis|arXiv (Cornell University)|2019. 12. 12.
Software Testing and Debugging Techniques참고 문헌 45인용 수 5
한 줄 요약

이 논문은 데이터 흐름이나 히وري스틱에 의존하지 않고 스택 기반 재귀 하강 파서의 동적 제어 흐름으로부터 인간이 읽을 수 있고 정확한 문맥 자유 문법을 유추하는 새로운 알고리즘 Mimid를 제안한다. 입력 문자가 파서의 다양한 위치에서 어떻게 접근되는지 분석함으로써 expr, URLparse, microJSON 등의 프로그램에 대해 높은 정밀도와 가독성을 가진 문법을 성공적으로 복원한다.

ABSTRACT

A program is characterized by its input model, and a formal input model can be of use in diverse areas including vulnerability analysis, reverse engineering, fuzzing and software testing, clone detection and refactoring. Unfortunately, input models for typical programs are often unavailable or out of date. While there exist algorithms that can mine the syntactical structure of program inputs, they either produce unwieldy and incomprehensible grammars, or require heuristics that target specific parsing patterns. In this paper, we present a general algorithm that takes a program and a small set of sample inputs and automatically infers a readable context-free grammar capturing the input language of the program. We infer the syntactic input structure only by observing access of input characters at different locations of the input parser. This works on all program stack based recursive descent input parsers, including PEG and parser combinators, and can do entirely without program specific heuristics. Our Mimid prototype produced accurate and readable grammars for a variety of evaluation subjects, including expr, URLparse, and microJSON.

연구 동기 및 목표

  • 프로그램 분석, 패ッチ 테스팅, 리버스 엔지니어링 등에 필수적인 정확하고 가독성 있고 최신 상태인 공식 입력 모델의 부족을 해결하기 위해.
  • 데이터 흐름이나 히وري스틱에 의존하는 기존 문법 추론 도구의 한계를 극복하기 위해, 데이터가 저장되지 않거나 일반적인 파싱 패턴(예: PEG 스타일의 선택)이 사용될 경우 실패하는 경우를 대비하기 위해.
  • 재귀 하강 파서의 동적 문자 접근 패턴만을 기반으로 하여 문맥 자유 문법을 추론하는 일반적이고 파서에 종속되지 않는 방법을 개발하기 위해.
  • 정확할 뿐 아니라 편집 가능하고 인간이 이해할 수 있는 문법을 생성함으로써 프로그램 분석 및 리팩터링 분야에서 널리 활용할 수 있도록 하기 위해.

제안 방법

  • 알고리즘은 동적 제어 흐름을 관찰하고 런타임 인스트루멘테이션을 통해 파서의 다양한 지점에서 어떤 입력 문자가 접근되는지 추적한다.
  • 파서의 제어 흐름 그래프를 구축하고, 접근의 순서와 맥락을 기반으로 입력 문자 접근을 특정 문법 규칙에 매핑한다.
  • 일반화된 트리 수용자 알고리즘을 사용하여 다수의 접근 트레이스를 일반화함으로써 비단말기 구조를 반복적인 접근 패턴에서 식별하고 문법을 추론한다.
  • 데이터 흐름 분석을 완전히 배제함으로써 변수 전파나 파싱된 데이터 저장에 의존하지 않는다.
  • 데이터 흐름이 아닌 접근 순서와 제어 구조에 초점을 맞춤으로써 PEG 및 파서 조합기 등 모든 스택 기반 재귀 하강 파서를 지원한다.
  • 파이썬으로 구현되어 있으며 재현 가능성과 다른 언어로의 확장성을 고려해 자체 포함형 Jupyter 노트북에 통합되어 있다.

실험 결과

연구 질문

  • RQ1데이터 흐름 분석에 의존하지 않고 정확하고 가독성 있는 문맥 자유 문법을 추론할 수 있는 알고리즘이 존재하는가?
  • RQ2이러한 알고리즘은 프로그램 전용 히وري스틱이 필요 없이 PEG 및 파서 조합기와 같은 다양한 입력 파서에 일반화될 수 있는가?
  • RQ3Autogram과 같은 기존 도구보다 데이터 흐름이 없거나 복잡한 파싱 패턴(예: PEG 스타일의 선택)이 있는 경우에 더 나은 성능을 보일 수 있는가?
  • RQ4유추된 문법은 인간이 읽을 수 있고 정확하여 패ッチ 테스팅, 리버스 엔지니어링, 리팩터링 등의 실용적 응용에 활용될 수 있는가?

주요 결과

  • Mimid는 expr, URLparse, microJSON 등의 다양한 프로그램에 대해 오류 없이 정확하고 가독성 있는 문법을 성공적으로 유추하였다.
  • 데이터 흐름이 없거나 오염된 경우(예: 백업 규칙을 사용하는 PEG 스타일의 파싱)에 Autogram보다 정밀도와 재현율 모두에서 뛰어난 성능을 보였다.
  • 파싱된 데이터가 저장되지 않은 경우에도 정확한 문법을 복원함으로써 데이터 흐름의 부재에 대한 강건성을 입증하였다.
  • 중첩된 JSON 유사 형식과 복잡한 토큰 시퀀스와 같은 다양한 입력 구조로도 잘 일반화되었으며, microjson.py 사례 연구를 통해 이를 입증하였다.
  • microjson.py의 문법은 올바르고 인간이 읽을 수 있는 EBNF 문법으로 재구성되었으며, 예상되는 입력 구문과 정확히 일치하였다.

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

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

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

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