
CERT Kaiju は、Ghidra 向けのバイナリ分析ツールのコレクションです。
これは、CERT Pharos Binary Analysis Framework の一部機能(特に関数ハッシュおよびマルウェア分析ツール)の Ghidra/Java 実装ですが、将来的に新しいツールや機能が追加される予定です。
本実装は新しい取り組みであるため、ROSE ベースの元の C++ 実装と完全な機能互換性はまだありません。しかし、Java と Ghidra への移行により、元のフレームワークでは利用できなかった新しい機能(特に非 x86 アーキテクチャの処理改善)が実際に可能になりました。
フレームワークとツールの大幅な再設計が行われており、Java と Ghidra への移行により C++ 実装とは異なる機能が可能になるため、異なるツールや機能について議論する際に実装間の混乱を減らすために、新しいブランドを採用することが決定されました。
近い将来、両方の実装が独自の機能を提供できるため、元の Pharos フレームワークと Kaiju の両方を並行して維持する予定です。
CAVEAT: プロトタイプであるため、このプラグインが生成する関数ハッシュを評価する際に多くの問題が発生する可能性があります。例えば、Pharos 実装とは異なり、Kaiju の関数ハッシュモジュールは非常に小さな関数(例:RET のような単一命令を持つ関数。これにより意図しない衝突が多数発生します)に対してもハッシュを生成します。そのため、分析結果はこのプラグインと Pharos fn2hash の間で異なる場合があります。
事前ビルド済み Kaiju パッケージが利用可能です。ご利用の Ghidra バージョンに対応する ZIP ファイルをダウンロードし、以下の手順に従ってインストールしてください。Ghidra のグラフィカルインターフェースからインストールすることを推奨しますが、適切なディレクトリに手動で解凍してインストールすることも可能です。
CERT Kaiju には以下の実行時依存関係が必要です:
Z3 は事前ビルド済みパッケージにコンパイル済みの状態で提供されます。また、自分で Z3 をビルドするか、Linux ディストリビューションのパッケージを使用することもできます。
Ghidra を起動し、開いたウィンドウでメニューから File > Install Extension を選択します。拡張機能ウィンドウの上部にあるプラス記号をクリックし、ファイルブラウザで .zip ファイルを選択して OK をクリックします。拡張機能がインストールされ、ウィンドウ内の拡張機能名の横にチェックボックスが表示され、インストール完了と準備完了が示されます。
インターフェースは、拡張機能の使用を開始するために Ghidra を再起動するよう求めます。再起動するだけで、Kaiju の追加機能がインタラクティブに(スクリプトでも)利用可能になります。
一部の機能では、Kaiju プラグインを有効にする必要がある場合があります。これを行うには、Code Browser を開き、File > Configure メニューに移動します。表示されたウィンドウで、"CERT Kaiju" カテゴリアイコンの下にある Configure リンクをクリックします。ポップアップに、公開されているすべての Kaiju プラグインが表示されます。有効にしたいプラグインをチェックし、OK をクリックします。これでインタラクティブなプラグイン機能にアクセスできるようになります。
プラグインを有効にしてもすぐに表示されない場合は、Code Browser の Window メニューからそのプラグインを見つけることができます。
将来のツールの実験的な "alpha" バージョンは、"Experimental" カテゴリから入手できる場合があります(テスト目的の場合)。ただし、これらのプラグインは明らかに実験的でありサポート対象外で、実運用での使用は推奨されません。ただし、早期のフィードバックは歓迎します。
Kaiju のような Ghidra 拡張機能は、拡張機能の内容を Ghidra インストールの適切なディレクトリに解凍して手動でインストールすることもできます。詳細については、The Ghidra Installation Guide を参照してください。
Kaiju 拡張機能はソースコードから直接ビルドすることもできます。詳細は、Kaiju ソースディレクトリの最上位にある INSTALL.md ファイルを参照してください。
Kaiju のツールは、インタラクティブなグラフィカルモード、またはバッチジョブに適した "ヘッドレス" モードのいずれかで使用できます。一部のツールは、その性質上、グラフィカルまたはヘッドレスのみで使用できる場合があります。
Kaiju は、Java Swing と Ghidra のプラグインアーキテクチャを利用して、Ghidra 内にインタラクティブなグラフィカルインターフェース(GUI)を作成します。
Kaiju のツールのほとんどは、"Auto Analysis" オプションが選択されたとき(新しい実行可能ファイルのインポート時、またはコードブラウザウィンドウから直接 Analysis > Auto Analyze... を選択したとき)に自動的に実行される Analysis プラグインです。Auto Analyze ツールではデフォルトでいくつかの CERT Analysis プラグインが選択されていますが、必要に応じて有効/無効を切り替えることができます。
ただし、各種 GUI ツールが機能するためには、Analysis ツールを事前に実行しておく必要があります。一部の境界ケースでは、Auto Analysis を 2 回実行すると、正しいパーティショニングと逆アセンブリ情報を作成するために必要なメタデータがすべて生成され、ハッシュ結果に影響を与える可能性があります。
Analyzer は Ghidra の分析フェーズ中に自動的に実行され、以下を含みます:
GUI ツールには以下が含まれます:
Kaiju > GhiHorn を選択してこのツールにアクセスします。CTRL-G を押してプラグインを起動することもできます。Window > CERT Kaiju Function Hash Viewer を選択して開始します(まだ表示されていない場合)。新しいウィンドウが表示され、ハッシュやその他のデータのテーブルが表示されます。ウィンドウ上部のボタンでテーブルを更新したり、データをファイルや YARA シグネチャにエクスポートできます。このウィンドウは、他のプラグインと併用しやすいようにメインの Ghidra CodeBrowser にドッキングすることもできます。より詳細な使用ドキュメントは、ツール使用時に Ghidra の Help > Contents メニューにあります。Kaiju > OOAnalyzer Importer を選択して開始します。簡単なダイアログポップアップが表示され、インポートする JSON ファイルの場所を指定します。より詳細な使用ドキュメントは、ツール使用時に Ghidra の Help > Contents メニューにあります。Ghidra は "ヘッドレス" モードもサポートしており、状況によってはインタラクティブな GUI なしでツールを実行できます。これらのコマンドは、多数のファイルに対するスクリプティングや "バッチモード" のジョブに利用できます。
ヘッドレスツールは主に Ghidra の GhidraScript 機能に依存しています。
ヘッドレスツールには以下が含まれます:
kaijuRun という名前のシンプルなシェル起動スクリプトが含まれており、単一の実行可能ファイル内のすべての関数の関数ハッシュを出力するような単純なシナリオでこれらのヘッドレスコマンドを実行できます。GHIDRA_INSTALL_DIR 変数が設定されていることを前提として、例えば次のようにして単一の実行可能ファイルで起動スクリプトを実行できます:
$GHIDRA_INSTALL_DIR/Ghidra/Extensions/kaiju/kaijuRun fn2hash example.exe
このコマンドは、結果を自動的に example.exe.Hashes.csv という名前のファイルに出力します。
kaijuRun スクリプトの基本的なヘルプは、以下を実行することで表示できます:
$GHIDRA_INSTALL_DIR/Ghidra/Extensions/kaiju/kaijuRun --help
このモードと kaijuRun ランチャースクリプトの詳細については、リポジトリ内の docs/HeadlessKaiju.md ファイルを参照してください。
より包括的なドキュメントとヘルプは、次のいずれかの形式で利用できます。
docs/ ディレクトリには、すべての Kaiju ツールとコンポーネントの Markdown 形式のドキュメントとヘルプがあります。これらのドキュメントは、メンテナンスや編集が容易で、コマンドラインからも読みやすいです。
または、同じドキュメントが Ghidra の組み込みヘルプシステムにもあります。これらのヘルプドキュメントにアクセスするには、Ghidra メニューから Help > Contents に移動し、ヘルプウィンドウの左側にあるツリーナビゲーションから CERT Kaiju を選択してください。
Ghidra ヘルプのドキュメントは docs/ ディレクトリの Markdown ファイルとまったく同じ内容であることに注意してください。ツリー内の gradle プラグインのおかげで、gradle はビルドプロセス中に Markdown を自動的に解析し、Ghidra HTML にエクスポートします。これにより、メンテナンスがさらに簡単になり(ドキュメントを 1 か所だけで更新でき、2 か所ではない)、両者の同期が維持されます。
新しいドキュメントはすべて docs/ ディレクトリに追加する必要があります。
本ソフトウェアは、カーネギーメロン大学ソフトウェアエンジニアリング研究所により、簡略化された BSD スタイルのライセンスの下で提供されています。このライセンスの詳細、および本プロジェクトで使用される依存関係のライセンス条件については、このリポジトリのルートにある LICENSE.md ファイルを参照してください。
CERT Kaiju のロゴは、Cameron Spahn によって作成されたアートに基づいており、元々はクリエイティブ・コモンズ 表示-継承 4.0 国際ライセンスの条件の下でリリースされました。