Skip to main content
QUICK REVIEW

[論文レビュー] On Benchmarking the Capability of Symbolic Execution Tools with Logic Bombs

Hui Xu, Zirui Neil Zhao|arXiv (Cornell University)|Dec 5, 2017
Software Testing and Debugging Techniques参考文献 37被引用数 3
ひとこと要約

本論文は、論理爆弾——特定の挑戦(例:浮動小数点演算、記号的メモリ)を正しく処理する必要がある小規模で標的を絞ったプログラム——を用いて、微細かつ効率的なシンボリック実行ツールのベンチマークフレームワークを提案する。このアプローチにより、KLEE、Angr、Tritonの3つのツールを12の挑戦に対して評価した結果、Angrが他のツールを上回り、27個のテストケースのうち21個を解決した一方、Tritonは浮動小数点演算および複雑な外部関数呼び出しで苦戦した。

ABSTRACT

Symbolic execution now becomes an indispensable technique for software testing and program analysis. There are several symbolic execution tools available off-the-shelf, and we need a practical benchmark approach to learn their capabilities. Therefore, this paper introduces a novel approach to benchmark symbolic execution tools in a fine-grained and efficient manner. In particular, our approach evaluates the performance of such tools against the known challenges faced by general symbolic execution techniques, such as floating-point numbers and symbolic memories. To this end, we first survey related papers and systematize the challenges of symbolic execution. We extract 12 distinct challenges from the literature and categorize them into two categories: symbolic-reasoning challenges and path-explosion challenges. Then, we develop a dataset of logic bombs and a framework to benchmark symbolic execution tools automatically. For each challenge, our dataset contains several logic bombs, each of which is guarded by a specific challenging problem. If a symbolic execution tool can find test cases to trigger logic bombs, it indicates that the tool can handle the corresponding problems. We have conducted real-world experiments with three popular symbolic execution tools: KLEE, Angr, and Triton. Experimental results show that our approach can reveal their capabilities and limitations in handling particular issues accurately and efficiently. The benchmark process generally takes only dozens of minutes to evaluate a tool. We release our dataset on GitHub as open source, with an aim to better facilitate the community to conduct future work on benchmarking symbolic execution tools.

研究の動機と目的

  • 実世界のプログラムのばらつきに依存しない、微細かつ偏りのないシンボリック実行ツールの評価手法の不足を解消すること。
  • シンボリック実行を阻害する主要なチャレンジを同定・体系化し、記号的推論とパス爆発のチャレンジに分類すること。
  • 特定の機能を隔離してテストできる論理爆弾を用いたスケーラブルで自動化されたベンチマークフレームワークを設計すること。
  • KLEE、Angr、Tritonといった代表的なシンボリック実行ツールを、標準化された論理爆弾データセット上で実証的に評価し、その強みと限界を明らかにすること。
  • ベンチマークデータセットとフレームワークをオープンソースとして公開し、コミュニティにおける今後のツール評価と開発を支援すること。

提案手法

  • 文献から得た12の異なるシンボリック実行のチャレンジを体系的に調査し、記号的推論(例:浮動小数点、記号的メモリ)とパス爆発(例:ループ、外部関数呼び出し)のチャレンジに分類する。
  • 各チャレンジに特化した最小限で自己完結的な論理爆弾のデータセットを設計する——成功した実行が論理爆弾を発動させることで、ツールの能力を示す。
  • 論理爆弾をバイナリにコンパイルし、一括処理モードでシンボリック実行ツールを実行し、テストケースの正しさを検証する自動化されたベンチマークフレームワークを構築する。
  • 副作用を最小限に抑え、シンボリック実行の実行時間を短くすることで、ベンチマークの効率性と正確性を確保する、微細で焦点を絞ったプログラムを用いる。
  • Angr や Triton のようなバイナリレベルの分析ツールと、KLEE のようなソースレベルの分析ツールを対象とし、ツールのパラダイムにかかわらず公平な比較を実現する。
  • 生成されたテストケースが論理爆弾を発動するかどうかを確認することで、結果の妥当性を検証し、背後にあるチャレンジが正しく解決されたことを裏付ける。

実験結果

リサーチクエスチョン

  • RQ1実世界のプログラムの特性に依存しない、微細で再現可能かつ偏りのない方法で、シンボリック実行ツールをどのように評価できるか?
  • RQ2浮動小数点演算や記号的メモリといった特定のチャレンジ(例)が、シンボリック実行ツールの効果性をどの程度制限しているか?
  • RQ3代表的なシンボリック実行ツール(KLEE、Angr、Triton)は、複雑な記号的推論とパス爆発のチャレンジをどの程度処理できるか?
  • RQ4論理爆弾に基づくベンチマーク手法は、多様なシンボリック実行のチャレンジにおいて、ツール固有の強みと弱みを正確かつ効率的に明らかにできるか?
  • RQ5ネストされた配列、関数ポインタ、外部関数呼び出しといった実世界のエッジケースを処理する際、現在のシンボリック実行ツールにどのような実用的限界があるか?

主な発見

  • Angrは27個の論理爆弾ケースのうち21個を解決し、KLEE や Triton よりも記号的推論とパス爆発のチャレンジに対する処理能力に優れたことが示された。
  • KLEEは9つのケースを解決したが、主にSTPベースのソルバーを用いた場合に配列と記号的ジャンプの処理で優れていたが、C++固有の機能(例:vector や list)では失敗した。
  • Tritonは3つのケースしか解決できず、主に浮動小数点演算および `atof` のような複雑な外部関数呼び出しのサポート不足が原因であった。
  • Angrは5つの浮動小数点ケースのうち2つを正常に処理できたが、`atof` を介した小数点入力変換を要するケースではすべて失敗し、外部関数モデリングにおける限界が明らかになった。
  • KLEEは2段階の配列処理チャレンジで失敗したが、Angrは成功した。これはソルバーレベルでの配列サポートの重要性を示している。
  • バイナリレベルのシンボリック実行ツール(Angr、Triton)は、`jmp` 指令やスタックレイアウトの問題といった低レベルのチャレンジに対して、ソースレベルのツール(KLEE)よりも耐性が高かった。

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

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

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

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