Skip to main content
QUICK REVIEW

[論文レビュー] Improving Function Coverage with Munch: A Hybrid Fuzzing and Directed Symbolic Execution Approach

Saahil Ognawala, Thomas Hutzelmann|arXiv (Cornell University)|Nov 26, 2017
Software Testing and Debugging Techniques参考文献 25被引用数 6
ひとこと要約

Munchは、ファジングと標的付き記号実行を組み合わせることで、Cプログラムにおける関数カバレッジを向上させるハイブリッド・ファジング/記号実実行フレームワークです。2つのモード(ファジングで未カバー関数を特定し、その後標的付き記号実行を実施する、またはその逆)を用いることで、SMTソルバーのクエリ数と実行時間を削減しながら、純粋なファジングや記号実行を上回る高いカバレッジを達成します。

ABSTRACT

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.

研究の動機と目的

  • 標準的なファジングや記号実行では到達できない深く、困難な関数を含むプログラムコンponentsにおける低関数カバレッジ問題に対処すること。
  • 標的付き探索によって未カバー関数に焦点を当てることで、SMTソルバーのクエリ数を最小限に抑えることにより、記号実行の計算コストを低減すること。
  • ソフトウェアが高度にモジュール化またはコンポジショナルな構造を取る環境において、再利用可能なコンponentが多数存在する場合のテストカバレッジを向上させること。
  • 既存のハイブリッド手法を上回るカバレッジと効率性を実現する、オープンソースで生産環境で利用可能なフレームワークを提供すること。
  • 実世界のオープンソースプログラムを対象とした、ハイブリッド・ファジング/記号実行の有効性と効率性を実証的に検証すること。

提案手法

  • 未カバー関数の探索を優先する最短経路に基づく標的付き探索戦略をKLEEに拡張すること。
  • 手動で供給されたシード入力を用いてAFLによる初期ファジングを実施し、容易に到達可能な関数を特定すること。
  • ファジングと記号実行の結果の差分集合を計算することで、標的付き記号実行の対象となる未カバー関数を同定すること。
  • 記号実行により関数的に多様なテストケースを生成し、ファジングの入力多様性とカバレッジを向上させること。
  • 2つの運用モードを実装する:(1) ファジングの後に標的付き記号実行を実施する、(2) 記号実行でファジング用のシードを生成する。
  • 関数レベルのカバレッジを追跡し、未カバーのターゲットへ向かう記号実行の誘導に使用するためのプログラムインストルメンテーションを実施すること。

実験結果

リサーチクエスチョン

  • RQ1ファジングと記号実行をハイブリッドに組み合わせたアプローチが、単独で使用された場合よりも高い関数カバレッジを達成できるか?
  • RQ2未カバー関数の集合に基づいて誘導される標的付き記号実行は、SMTソルバーのクエリ数と実行時間を削減するか?
  • RQ3実世界の複雑なCプログラムにおいて、このハイブリッドアプローチは深い関数カバレッジを効果的に達成できるか?
  • RQ4このフレームワークは、標準的なLinuxシステム上で効率的にデプロイ可能で、即座に利用可能か?
  • RQ5Munchの性能は、Drillerなどの既存のハイブリッドツールと比較して、カバレッジと効率性の両面で優れているか?

主な発見

  • Munchは、9つの実世界のオープンソースプログラムにおいて、純粋なファジングや記号実行と比較してより高い関数カバレッジを達成した。
  • 評価対象のすべてのプログラムにおいて、Munchはコールグラフの深いレベルにおけるカバレッジをより高く達成しており、特にエントリポイントから遠く離れた関数に対して顕著であった。
  • ハイブリッドアプローチにより、記号実行単体と比較して、合計分析時間とSMTソルバークエリ数が50%以上削減された。
  • 未カバー関数に焦点を当てたことで、すでにカバー済みのパスの重複探索を回避し、効率性が向上した。
  • Munchは、時間単位あたりのカバレッジとSMTソルバーへのクエリ単位あたりのカバレッジの両面で、単体のファジングや記号実行を上回った。
  • Munchのオープンソース実装は生産環境で利用可能であり、標準Linuxシステム上でも即座にデプロイ可能であるが、Drillerのような一部の先行ツールとは異なり、これは同様の制限を受けていない。

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

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

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

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