Skip to main content
QUICK REVIEW

[論文レビュー] BinPro: A Tool for Binary Source Code Provenance

Dhaval Miyani, Zhen Huang|arXiv (Cornell University)|Nov 2, 2017
Software Engineering Research参考文献 23被引用数 16
ひとこと要約

BinProは、機械学習と静的解析を用いてバイナリとソースコード間の類似度を計算する新規なツールであり、特定のソースコードからバイナリが生成されたかどうかを正確に特定できる。異なるコンパイラや最適化レベルに対しても、一致するバイナリとソースコードの間で平均81%の類似度を達成し、関数マッチング率も平均79%に達する。

ABSTRACT

Enforcing open source licenses such as the GNU General Public License (GPL), analyzing a binary for possible vulnerabilities, and code maintenance are all situations where it is useful to be able to determine the source code provenance of a binary. While previous work has either focused on computing binary-to-binary similarity or source-to-source similarity, BinPro is the first work we are aware of to tackle the problem of source-to-binary similarity. BinPro can match binaries with their source code even without knowing which compiler was used to produce the binary, or what optimization level was used with the compiler. To do this, BinPro utilizes machine learning to compute optimal code features for determining binary-to-source similarity and a static analysis pipeline to extract and compute similarity based on those features. Our experiments show that on average BinPro computes a similarity of 81% for matching binaries and source code of the same applications, and an average similarity of 25% for binaries and source code of similar but different applications. This shows that BinPro's similarity score is useful for determining if a binary was derived from a particular source code.

研究の動機と目的

  • バイナリのソースコード由来を特定する課題、特にコンパイラ最適化が関与する状況に対処すること。
  • コンパイラや最適化レベルを事前に知らない状況下でも、バイナリが特定のソースコードからコンパイルされたかどうかを信頼性高く検出できること。
  • 異なるコンパイラや最適化設定に対しても耐障害性を備えた手法を開発し、実世界のシナリオでの実用的応用を可能にすること。
  • コンパイラの内部構造を分析せずに、関数インライン化などの最適化を予測できること。
  • ライセンス準拠、脆弱性分析、ソフトウェア保守の分野でスケーラブルかつ正確なツールを提供し、バイナリとそのソースコードの由来を結びつけること。

提案手法

  • BinProは、関連のないアプリケーションからコンパイルされたバイナリを用いて学習した機械学習モデルを用い、特に関数インライン化を含むコンパイラ最適化が発生するかどうかを予測する。
  • 静的解析を適用して、ソースコードおよびバイナリコードの両方から関数呼び出しグラフ(FCG)、制御フローアーキテクチャ、データフロー構造などのコード特徴を抽出する。
  • 計算された類似度スコアに基づいて、抽出された特徴をもとに、ソースコードとバイナリコード間の関数を二部マッチングアルゴリズムで一致させる。
  • 関数マッチングプロセスに呼び出し元と呼び出された関数を統合することで、複数ラウンドにわたって精度を向上させる反復的プロセスを実施する。
  • バイナリとソースコード間の類似度スコアを計算し、高いスコアはその由来関係の高い可能性を示す。
  • インライン化予測器はGCCでコンパイルされたバイナリを学習データとして用い、他のコンパイラ(例:ICC)で評価することで、コンパイラ間での一般化性能を示している。

実験結果

リサーチクエスチョン

  • RQ1あるコンパイラで学習した機械学習モデルが、別のコンパイラにおいて関数インライン化の挙動を正確に予測できるか?
  • RQ2コンパイラや最適化レベルが不明な状況下でも、バイナリとソースコード間の類似度を効果的に計算できるか?
  • RQ3BinProの類似度スコアは、多様なコンパイル設定下で、一致するペアと一致しないペアをどのように区別するか?
  • RQ4呼び出しグラフの文脈を組み込んだ反復的関数マッチングは、マッチング精度をどの程度向上させるか?
  • RQ5大規模なソフトウェアシステムにおいて、実行時間およびメモリ使用量の観点からBinProのスケーラビリティはどの程度か?

主な発見

  • BinProは、一致するバイナリとソースコードペアについて平均81%の類似度スコアを達成しており、最小値59%、最大値96%を記録した。
  • 非一致ペアでは平均類似度スコアが25%であり、最大43%にとどまるため、一致ペアと非一致ペアの間で明確な分離が確認された。
  • 非一致ペアの最高スコア(43%)でさえ、一致ペアの最低スコア(59%)を下回っており、テスト対象コーパスでは偽陽性が発生しなかった。
  • BinProは、使用されたコンパイラや最適化レベルに関係なく、平均して79%の確率で関数を正しくマッチングした。
  • インライン化予測器は、コンパイラを跨いで評価した結果、インライン化関数の予測精度が73%に達し、非インライン化関数に対しては17%の偽陽性率を示した。
  • 実行時間はコードサイズではなく関数数に比例して増加し、BIND(4,764関数)のような大規模システムでは最大294分を要したが、主にFCGの読み込みオーバーヘッドが要因であった。

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

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

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

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