← All Articles

バイナリファイルの差分を比較するツールが便利

Posted on

今回は、BinDiffというツールを使ってバイナリファイルの差分比較を行ってみました。

BinDiff

バイナリの比較が役に立つ場面として想定される2つを以下に記載します。

  1. セキュリティアップデート前後のバイナリを比較することで、Exploitを防ぐための改修部分から脆弱性を突くExploit作成に必要な情報が得られる。
  2. 解析済みのマルウェアとその亜種とを比較し、共通の機能(関数)を洗い出す。

準備


BinDiffが比較対象とするのはバイナリ解析ツールでおなじみのIDA proでバイナリから作成した.idbファイルです。 IDA proを持っていない人はFreeware版をここからダウンロードすることが出来ます。

BinDiffは以下のサイトからダウンロードできます。

https://www.zynamics.com/software.html

ダウンロードしたインストーラを実行するとことでデフォルトではC:\Program files\BinDiffが作成されます。なおインストール時にはIDA proのインストールパスを指定する必要があります。 .jarファイルを実行することでGUIアプリケーションを起動することができます。

BinDiffのZIPファイル中身


利用開始


今回の比較に用いたバイナリは、Open sourceのRATであるLilith検体2つです。

  1. 攻撃者グループTickが使用したとされるバイナリ

    SHA2: 5e4a190f8f4fc8800cf348cdc0e1ddc674215b02d1ef9b9a9e12605a3e0315cf


  1. ソースコードからコンパイルしたバイナリ

上記バイナリからIDA proで.idbファイルを作成し、比較を行います。

idb選択画面


同じソースコードからコンパイルしているはずなのに、なんと、Simirality(類似度)は0.06でした。

LilithのBinDiff(overview)


Mached function画面には同一と推測される関数が表示されます。

BinDiff(Mached function)


ためしにConfidenceが0.91の関数を選んでみると、関数内部のCall treeの構造が同一であることが確認できた。

BinDiff(関数の比較)


ピンチアウトして拡大してみるとアセンブリの中身まで確認できます。

BinDiff(関数の比較 拡大)

この関数はSimilarity=0.86, Confidence=0.91と高確度の一致ではありますが、Call treeの構造が似ているだけで中身が全く異なる関数であることが分かりました。つまり、Confidenceが高い関数が同士が類似機能を持つとは一概には言えないようです。


Similarityが高いのはCall treeが類似していることに起因していると思われます。 他の関数を確認してみると、Confidenceが高くSimilarityが低い関数同士は機能が類似している傾向があるようです。これら関数の場合は赤枠で示すようにどちらも書込みの機能を有しています。

BinDiff(関数比較 Low similarity, Low confidence)


まとめ


今回BinDiffを使用したことで以下の2点が分かりました。

  • 同一ソースファイルからコンパイルしたバイナリでもアセンブラレベルで大きく構造が変わり得る
  • Low SimilarityかつHigh Confidenceの関数は類似機能を持つ可能性が高い⇒解析済みのマルウェアとその亜種とを比較し、共通の機能(関数)を洗い出すためにも有効

reversingbindiffida pro