[論文レビュー] Inferring Input Grammars from Dynamic Control Flow
この論文では、動的制御フローからスタックベースの再帰的降下パーサーにおける文脈自由文法を人間が読みやすい形で正確に推論する新規アルゴリズムMimidを提示する。データフローもヒューリスティクスにも依存せず、パーサー内のさまざまな位置で入力文字がどのようにアクセスされるかを分析することで、expr、URLparse、microJSONなどのプログラムについても高い精度と可読性で文法を回復させた。
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 やパーサーコンビネーターを含む、すべてのスタックベースの再帰的降下パーサーに対応する。
- Pythonで実装され、再現性と他の言語への拡張性を高めるために、自己完結型のJupyterノートブックに統合されている。
実験結果
リサーチクエスチョン
- RQ1データフロー解析に依存せずに、正確で読みやすい文脈自由文法を推論するアルゴリズムは実現可能か?
- RQ2このようなアルゴリズムは、データフローに依存せず、PEG やパーサーコンビネーターを含む多様な入力パーサーに一般化可能か?また、プログラム固有のヒューリスティクスを必要としないか?
- RQ3Autogram よりも、データフローが存在しない、あるいは誤解を招く状況(例:フォールバックルールを伴うPEG風パーサー)において、優れた性能を示せるか?
- RQ4推論された文法は人間が読みやすく正確であるため、ファズィング、リバースエンジニアリング、リファクタリングといった実用的応用に適しているか?
主な発見
- Mimidは、expr、URLparse、microJSONといったさまざまなプログラムについて、誤検出も欠落ルールもなしに、正確で読みやすい文法を成功裏に推論した。
- データフローが存在しない、あるいは誤解を招く状況(例:フォールバック付きのPEG風パーサー)において、Autogram よりも精度と再現率の両方で優れた性能を示した。
- パースドデータが保存されていなくても、文法を正しく回復できたため、データフローの欠如に対しても高い耐性を示した。
- ネストされたJSONに類似した構造や複雑なトークン列といった多様な入力構造に対しても、良好な一般化性能を示した。microjson.py のケーススタディでその有効性が確認された。
- microjson.py の文法は、正しいE分類記法(EBNF)として再構築され、期待される入力構文と一致した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。