トップナビゲーションをスキップ
BlackBerry ThreatVector ブログ

BlackBerryが提供するマルウェアのリバースエンジニア向けオープンソースツールPE Tree

本ブログ記事は、2020年8月3日に米国で公開されたBlackBerryのブログ記事の抄訳版です。原文はこちらからご覧頂けます。

BlackBerryは8月3日、BlackHatにおいてPE Treeのリリースを発表しました。PE Treeは、BlackBerryのリサーチ&インテリジェンスチームによって開発された新しいオープンソースツールで、pefileとPyQt5を使用してPortable Executable(PE)ファイルをツリー表示で閲覧できます。PE Treeはリバースエンジニアリングコミュニティ向けに開発されたもので、Hex-RaysのIDA Proデコンパイラとも統合し、PE構造の容易なナビゲーションと、メモリ内のPEファイルのダンプやインポートの再構成の実行が可能です。

概要

PE TreeはPythonで開発されており、Windows®、Linux®、Mac®の各オペレーティングシステムをサポートします。PE Treeはスタンドアロンアプリケーションとしてインストール・実行できます。

図1:スタンドアロンアプリケーション

また、IDAPythonプラグインとしてもインストール・実行できます。

図2:IDAPythonプラグイン

PEファイルは、Ero Carrera氏が開発したpefileモジュールを使用して解析され、ツリー表示の形式にマッピングされます。以下のヘッダーの概要が示されます。

  • MZヘッダー
  • DOSスタブ
  • リッチヘッダー
  • NT/ファイル/オプションのヘッダー
  • データディレクトリ
  • セクション
  • インポート
  • エクスポート
  • デバッグ情報
  • 構成のロード
  • TLS
  • リソース
  • バージョン情報
  • 証明書
  • オーバーレイ

図3:リッチヘッダーの概要

ヒント:pefileが解析時に問題を検出した場合、警告アイコンの上にマウスカーソルを置くと詳細情報が表示されます。

図4:pefileの警告

ハイライト表示されたリンクをクリックすると、VirusTotalで以下の情報を検索できます。

  • ファイルハッシュ
  • PDBパス
  • タイムスタンプ
  • セクションのハッシュ/名前
  • インポートのハッシュ/名前
  • エクスポートの名前
  • リソースのハッシュ
  • 証明書のシリアル

ヒント:IMAGE_DIRECTORY_ENTRY_DEBUG と IMAGE_EXPORT_DESCRIPTOR

また、PEファイルの特定の部分を保存するか、またはCyberChefにエクスポートして、さらに処理を行うことができます。以下の要素を保存またはエクスポートできます。

 

  • DOSスタブ
  • セクション
  • リソース
  • 証明書
  • オーバーレイ

図5:証明書の保存またはエクスポート

左側の「レインボービュー」には、PEファイルのおおまかな構造と、各領域のオフセット/サイズ/比率が示されます。以下は、ファイルに複数のリソースが含まれ、大きなオーバーレイが付加されているPEの例です。

図6:レインボーマップ

各領域をクリックするとツリービューに移動します。右クリックすると、ファイルに保存したり、CyberChefにエクスポートしたりできます。

ヒント: レインボーマップを使用すると、似たファイル構成を見つけたり、サンプル間の関係を特定したりすることが簡単にできるため、PEファイルのディレクトリを処理する際にビジュアルツールとして役立ちます。

IDAPython

IDAPythonプラグインを使用してHey-RaysのIDA Proと統合することができます。これにより、IDAデータベース(IDB)でPEファイルを検索してダンプしたり、インポートを再構成したりするなど、高度な機能を利用できるようになります。

図7:IDAデータベースでPEファイルを検索

PE Treeは、メモリ内PEファイルをダンプするときに、ファイル構造に関する基本的なコメントをIDBに追加し、オフセットの名前をIAT関数の名前に変更します。これにより、注入/アンパックされたPEを単一のIDB内から容易に参照・分析できるようになります。

ヒント: PE Treeを使用して、OllyDumpEx/ImpRecと同様の方法でPEファイルをダンプし、インポートを再構成することもできます。MPRESSのアンパックの例を以下に示します。

図8:「Search IDB」の実行後、上記のような既存のIATを持つMPRESSでパックされたPEファイルが見つかった(ただし完全ではない)

図9:ダンプすると、アンパックされたPEファイルには新しい(完全な)インポートアドレステーブルが含まれている

「Rebuild imports」を選択すると、PE Treeは、IAT参照の可能性のあるすべての要素をIDAの逆アセンブリで探し、新しいIAT、IDT、ヒント名テーブルを構築します(この方法は、アンパックされたPE、または動的にロードされたPEの場合に推奨します)。それ以外の場合は、「Use existing imports」を指定すると、PE TreeはDIRECTORY_ENTRY_IMPORTで指定したIATに基づいてインポートを再構成しようと試みます(これはデフォルトのモードで、大半のPEとシステムDLLではこの方法を推奨します)。

今後の展望

PE Treeは現在もアクティブな開発が続いているため、新機能の更なる登場をご期待ください。次回のメジャーリリースではrekallのサポートに的を絞り、メモリダンプ、ライブシステムのどちらからでも、プロセスの参照とダンプを行うことができるようになる予定です。

図10:Rekallを使用してアクティブなプロセスのダンプが可能になる予定

より詳しい情報、ならびにPE Treeのソースコードへのアクセスについては、BlackBerry GitHub accountにアクセスしてください。

Tom Bonner

About Tom Bonner

Tom BonnerはBlackBerryの脅威リサーチャーです。サイバーセキュリティ/マルウェア対策業界で18年以上の経験を有し、特にリバースエンジニアリング、検出テクノロジーの開発、脅威インテリジェンス、インシデント対応、デジタルフォレンジックスを得意としています