Skip to main content
QUICK REVIEW

[論文レビュー] Finding Semantically-Equivalent Binary Code By Synthesizing Adaptors

Vaibhav Sharma, Kesha Hietala|arXiv (Cornell University)|Jul 5, 2017
Advanced Malware Detection Techniques参考文献 39被引用数 1
ひとこと要約

本論文では、インターフェースの違いを埋めるためのアダプタ(はぎ足コード)を合成することで、意味的に同等のバイナリ関数を自動で発見する手法を提示する。コンcrete実行とバイナリ記号実行を用いることで、実世界のバイナリにおいて置き換え可能な関数ペアを効率的に同定し、セキュリティ強化、パフォーマンス最適化、脱オブスクラー処理への実用的応用を示した。13,000個以上のLinux Cライブラリ関数を対象とした大規模な評価により、アダプタで接続可能な同等コードの存在が確認された。

ABSTRACT

Independently developed codebases typically contain many segments of code that perform the same or closely related operations (semantic clones). Finding functionally equivalent segments enables applications like replacing a segment by a more efficient or more secure alternative. Such related segments often have different interfaces, so some glue code (an adaptor) is needed to replace one with the other. We present an algorithm that searches for replaceable code segments at the function level by attempting to synthesize an adaptor between them from some family of adaptors; it terminates if it finds no possible adaptor. We implement our technique using (1) concrete adaptor enumeration based on Intel's Pin framework and (2) binary symbolic execution, and explore the relation between size of adaptor search space and total search time. We present examples of applying adaptor synthesis for improving security and efficiency of binary functions, deobfuscating binary functions, and switching between binary implementations of RC4. For large-scale evaluation, we run adaptor synthesis on more than 13,000 function pairs from the Linux C library. Our results confirm that several instances of adaptably equivalent binary functions exist in real-world code, and suggest that these functions can be used to construct cleaner, less buggy, more efficient programs.

研究の動機と目的

  • インターフェースの違いのみを有する意味的に同等のバイナリ関数を特定し、最適化やセキュリティ強化のためのコード置き換えを可能にすること。
  • 異なるインターフェースを持つ関数を置き換える課題に対し、それらを接続するアダプタを自動で合成することで対処すること。
  • 特にLinux Cライブラリのような大規模システムにおいて、アダプタ合成の実現可能性と効率性を、実世界のバイナリコードベースで評価すること。
  • バイナリ関数同等性検出における、アダプタ探索空間のサイズと総探索時間との間のトレードオフを調査すること。

提案手法

  • 本手法は、IntelのPinフレームワークを用いて、バイナリ関数間のインターフェース変換を探索するコンcreteアダプタ列挙を採用する。
  • アダプタ合成中に、バイナリ記号実行を組み合わせ、バイナリ関数内の制御フローおよびデータフロー経路を探索する。
  • 事前に定義されたアダプタの族内で探索を行い、有効なアダプタが発見されない時点で停止することで、探索空間内での完全性を保証する。
  • 正しいはぎ足コードを生成することで、関数同等性の検証と実際のコード置き換えの両方をサポートする。
  • インターフェースの不一致をパラメータおよび戻り値の型変換としてモデル化し、アダプタ候補の体系的探索を可能にする。
  • スケーラビリティと有効性を評価するため、Linux Cライブラリから抽出した13,000組の関数ペアの巨大なコロナスを対象にフレームワークを評価する。

実験結果

リサーチクエスチョン

  • RQ1意味的に同等のバイナリ関数間のインターフェースの違いを埋めるアダプタを、自動で合成できるか?
  • RQ2アダプタ探索空間のサイズは、有効なアダプタを発見するまでの総探索時間にどのように影響するか?
  • RQ3実世界のコードベース(例:Linux Cライブラリ)において、アダプタで接続可能な同等のバイナリ関数はどれほど一般的に存在するか?
  • RQ4アダプタ合成は、バイナリのセキュリティ、パフォーマンス、および脱オブスクラー処理をどれほど改善できるか?
  • RQ5コンcrete実行とバイナリ記号実行の組み合わせは、関数レベルの意味的クローンを発見するためにどれほど有効か?

主な発見

  • Linux Cライブラリから抽出した13,000組以上の関数ペアを分析した結果、実世界のコードに複数のアダプタで接続可能な同等のバイナリ関数が存在することが判明した。
  • 本手法は、複数の関数ペアに対してアダプタを効果的に合成し、パフォーマンスが低いかセキュリティが弱い実装を、より優れた代替実装に置き換えることを可能にした。
  • アダプタ探索空間のサイズは、探索時間と強く相関しており、スケーラビリティの観点から探索空間の縮小が極めて重要であることが示された。
  • アダプタ合成により、バイナリのセキュリティとパフォーマンスの実用的改善が達成され、オブスクラー処理された関数の脱オブスクラーも可能になった。
  • RC4の異なるバイナリ実装間での切り替えが本手法によって実現可能であることが確認され、実世界のバイナリ変換における実用性が裏付けられた。

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

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

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

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