Skip to main content
QUICK REVIEW

[論文レビュー] XDA: Accurate, Robust Disassembly with Transfer Learning

Kexin Pei, Jonas Guan|arXiv (Cornell University)|Oct 2, 2020
Software Engineering Research参考文献 52被引用数 4
ひとこと要約

XDA は、マスクド言語モデルを用いて機械語内の文脈的バイト依存関係を学習する、転移学習に基づく分解フレームワークであり、高精度で頑健な分解を可能にする。関数境界の回復において99.0%のF1スコア、命令の回復において99.7%のF1スコアを達成し、従来の最先端手法を上回るが、高速性を維持している。

ABSTRACT

Accurate and robust disassembly of stripped binaries is challenging. The root of the difficulty is that high-level structures, such as instruction and function boundaries, are absent in stripped binaries and must be recovered based on incomplete information. Current disassembly approaches rely on heuristics or simple pattern matching to approximate the recovery, but these methods are often inaccurate and brittle, especially across different compiler optimizations. We present XDA, a transfer-learning-based disassembly framework that learns different contextual dependencies present in machine code and transfers this knowledge for accurate and robust disassembly. We design a self-supervised learning task motivated by masked Language Modeling to learn interactions among byte sequences in binaries. The outputs from this task are byte embeddings that encode sophisticated contextual dependencies between input binaries' byte tokens, which can then be finetuned for downstream disassembly tasks. We evaluate XDA's performance on two disassembly tasks, recovering function boundaries and assembly instructions, on a collection of 3,121 binaries taken from SPEC CPU2017, SPEC CPU2006, and the BAP corpus. The binaries are compiled by GCC, ICC, and MSVC on x86/x64 Windows and Linux platforms over 4 optimization levels. XDA achieves 99.0% and 99.7% F1 score at recovering function boundaries and instructions, respectively, surpassing the previous state-of-the-art on both tasks. It also maintains speed on par with the fastest ML-based approach and is up to 38x faster than hand-written disassemblers like IDA Pro. We release the code of XDA at https://github.com/CUMLSec/XDA.

研究の動機と目的

  • 関数境界や命令といった高レベルな構造が欠落しているストリップドバイナリの正確で頑健な分解の課題に対処すること。
  • ヒューリスティックに基づく分解ツールの限界を克服すること。特にコンパイラ最適化下で脆く、しばしば不正確であるため。
  • 自己教師付き学習を用いて大規模なバイトシーケンスで事前学習することで、機械学習ベースの分解における一般化性と頑健性を向上させること。
  • GCC、ICC、MSVC などの多様なコンパイラ、x86/x64 などのアーキテクチャ、Linux/Windows などのプラットフォーム、最適化レベルを問わず高いパフォーマンスを維持するフレームワークを開発すること。

提案手法

  • 3,121個のストリップドバイナリを用いて、マスクド言語モデル(MLM)の目的関数に基づき、トランスフォーマー型モデルを事前学習し、文脈的バイト依存関係を学習する。
  • 下流の分解タスク(関数境界検出と命令回復)のためのタスク固有の全結合層を用いて、事前学習済みモデルを微調整する。
  • ラベルなしで低レベルのコード意味を学べる自己教師付き事前学習段階を活用し、下流タスクへの転移を可能にする。
  • アテンションメカニズムを活用してバイト間の長距離依存関係を捉え、暗黙的にプロローグ/エピローグのパターンや制御構造を学習する。
  • トレーニングセットとテストセットの重複を3%未満に抑えるデータパイプラインを設計し、一般化性能を検証する。
  • 複数のコンパイラや最適化レベルでコンpileされた実世界のバイナリを用いて、F1スコアでパフォーマンスを評価する。

実験結果

リサーチクエスチョン

  • RQ1マスクド言語モデルのような自己教師付き事前学習目的は、分解のための低レベルなコード意味を機械語で効果的に学習できるか?
  • RQ2多様なバイナリで事前学習した転移学習により、コンパイラや最適化レベルを問わず、分解の精度と頑健性が向上するか?
  • RQ3重複のないテストデータ上で評価した場合、機械学習ベースの分解ツールはヒューリスティックベースのツールよりも一般化性能が優れているか?
  • RQ4XDAのパフォーマンスは、精度・速度・頑健性の観点から、従来の最先端手法と比較してどうか?
  • RQ5明示的な教師なしで、学習されたバイト埋め込みは関数プロローグ/エピローグなどの意味的な構造的パターンを捉えられるか?

主な発見

  • XDA は関数境界回復で99.0%のF1スコアを達成し、前回の最先端手法を17.2%の精度向上で上回った。
  • XDA は命令回復で99.7%のF1スコアを達成し、複雑なバイナリにおいても優れた正確性と再現性を示した。
  • XDA はGCC、ICC、MSVC などの多様なコンパイラ、Linux、Windows などのプラットフォーム、最適化レベルを問わず高いパフォーマンスを維持しており、強い頑健性を示した。
  • IDA Pro よりも最大38倍高速であり、最も高速な機械学習ベースの分解ツールと同等の速度を維持した。
  • アテンション可視化により、XDA はバイトレベルの文脈から関数プロローグやエピローグのような構造的パターンを暗黙的に学習していることが確認された。
  • モデルの一般化性能は、非重複データ上でのByteWeightのF1スコアが97%から65%に低下する一方で、XDA は高いパフォーマンスを維持していることから裏付けられた。

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

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

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

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