Skip to main content
QUICK REVIEW

[論文レビュー] Angora: Efficient Fuzzing by Principled Search

Peng Chen, Hao Chen|arXiv (Cornell University)|Mar 4, 2018
Software Testing and Debugging Techniques被引用数 20
ひとこと要約

Angoraは、記号実行を用いずに経路制約を解くことで、スケーラブルなバイトレベルのタインドトラッキング、コンテキストに依存するブランチカウント、勾配降下ベースの探索、型/形状の推論、入力長の探索を組み合わせた、高性能な変異ベースのファズファーチャーである。この手法により、最新鋭のファズファーチャーを凌駕し、LAVA-Mで103件の以前未発見のバグを発見し、8つの成熟したオープンソースプログラムで合計175件の新しいバグを発見した。

ABSTRACT

Fuzzing is a popular technique for finding software bugs. However, the performance of the state-of-the-art fuzzers leaves a lot to be desired. Fuzzers based on symbolic execution produce quality inputs but run slow, while fuzzers based on random mutation run fast but have difficulty producing quality inputs. We propose Angora, a new mutation-based fuzzer that outperforms the state-of-the-art fuzzers by a wide margin. The main goal of Angora is to increase branch coverage by solving path constraints without symbolic execution. To solve path constraints efficiently, we introduce several key techniques: scalable byte-level taint tracking, context-sensitive branch count, search based on gradient descent, and input length exploration. On the LAVA-M data set, Angora found almost all the injected bugs, found more bugs than any other fuzzer that we compared with, and found eight times as many bugs as the second-best fuzzer in the program who. Angora also found 103 bugs that the LAVA authors injected but could not trigger. We also tested Angora on eight popular, mature open source programs. Angora found 6, 52, 29, 40 and 48 new bugs in file, jhead, nm, objdump and size, respectively. We measured the coverage of Angora and evaluated how its key techniques contribute to its impressive performance.

研究の動機と目的

  • 記号実行を用いない効率的な制約解決を可能にすることで、カバレッジガイドドファジングにおけるスケーラビリティと効果性のギャップを埋める。
  • コンテキストに依存するタインドトラッキングとバイトレベルの精確なタインド追跡を組み込むことで、ブランチカバレッジを向上させる。
  • 記号実行の性能ボトルネックを避けるために、勾配降下を用いた原理的で効率的な方法で複雑な経路制約を満たす探索戦略を開発する。
  • 入力サイズに依存する経路条件を引き起こすために、入力長の自動適応を可能にする。
  • 合成ベンチマーク(LAVA-M)と実世界のオープンソースソフトウェアの両方でファズファーチャーを評価し、優れたバグ発見性能を示す。

提案手法

  • 特定の条件分岐に影響を与える入力バイトを特定するスケーラブルなバイトレベルのタインドトラッキングを採用し、関連するバイトに限って探索空間を縮小する。
  • 実行コンテキストの違いを区別するコンテキストに依存するブランチカウントを用いることで、状態カバレッジの正確性を向上させる。
  • 記号実行の代わりに、経路制約を満たすために原理的で効率的な方法で入力バイトを変異させる勾配降下ベースの探索を適用する。
  • データ型や形状(例:4バイトのシーケンスから32ビット整数を推論)を推論することで、変異のガイドラインと探索効率を向上させる。
  • 入力長の動的探索を実施し、長さが経路制約に影響を与えると検出された場合に、適切に入力サイズを拡大する。
  • すべての技術を統合した変異ベースのファズファーチャーとして実装し、低ランタイムオーバーヘッドを維持しながら、コードカバレッジを最大化する。

実験結果

リサーチクエスチョン

  • RQ1記号実行に依存せずに、変異ベースのファズファーチャーが高いブランチカバレッジを達成できるか?
  • RQ2コンテキストに依存するブランチカウントは、コンテキストに依存しないアプローチに比べて、状態探索の効果をどの程度向上させるか?
  • RQ3勾配降下ベースの探索は、記号実行が苦手とする複雑な経路制約を効率的に満たすことができるか?
  • RQ4型/形状の推論と入力長の適応は、ファジングの効果をどの程度向上させるか?
  • RQ5実世界のバグ発見において、提案手法のファズファーチャーは最新鋭のツールと比較してどの程度優れているか?

主な発見

  • LAVA-Mベンチマークにおいて、Angoraは『who』プログラムで1,541件のバグを発見し、2番目に優れたファズファーチャーであるSteelixの8倍にのぼった。
  • Angoraは、LAVA-Mデータセットに埋め込まれていたが、以前のファズファーチャーではすべての実行で発火しなかった103件のバグを発見した。
  • 8つの成熟したオープンソースプログラムにおいて、Angoraは『file』で6件、『jhead』で52件、『nm』で29件、『objdump』で40件、『size』で48件の新しいバグを発見した。
  • すべてのベンチマークで、AFL、VUzzer、Steelix、その他の最新鋭のツールよりも顕著に高いコードカバレッジを達成した。
  • アブレーションスタディの結果、勾配降下とバイトレベルのタインドトラッキングを含む、各主要技術が性能向上に顕著な貢献をしていることが確認された。
  • コンテキストに依存するカバレッジ、タインドトラッキング、入力長の適応の組み合わせにより、Angoraは既存のツールよりもより深く多様なプログラム状態を探索できた。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。