Kam1n0 v2.x は、拡張可能なアセンブリ管理・分析プラットフォームです。ユーザーはまず、(大量の)バイナリ集合を異なるリポジトリにインデックス化し、クローン検索や分類などのさまざまな分析サービスを利用できます。アプリケーション の概念を用いて、アセンブリリポジトリのマルチテナントアクセスと管理をサポートします。アプリケーションインスタンスは、独自の排他リポジトリを持ち、専門的な分析サービスを提供します。リバースエンジニアリングタスクの多様性を考慮し、Kam1n0 v2.x サーバーは現在、3種類のクローン検索アプリケーション(Asm-Clone、Sym1n0、Asm2Vec)と、Asm2Vec に基づく 実行可能ファイル分類 を提供しています。新しいアプリケーションタイプは、プラットフォームにさらに追加することができます。
ユーザーは複数のアプリケーションインスタンスを作成できます。アプリケーションインスタンスは特定のユーザーグループ間で共有できます。アプリケーションリポジトリの読み書きアクセスとオンオフ状態は、アプリケーションの所有者が制御できます。Kam1n0 v2.x サーバーは、いくつかの共有リソースプールを使用してアプリケーションを同時に提供できます。
Kam1n0 は、カナダのマギル大学データマイニング・セキュリティ研究所の Benjamin C. M. Fung 教授の指導のもと、Steven H. H. Ding と Miles Q. Li によって開発されました。これは、Hex-Rays Plug-In Contest 2015 で第2位を受賞しました。Kam1n0 が有用だと感じられた場合は、以下の論文を引用してください:
S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), pages 461-470, San Francisco, CA: ACM Press, August 2016.
S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 pages, San Francisco, CA: IEEE Computer Society, May 2019.
Asm-Clone アプリケーションは、アセンブリ関数の効率的な部分グラフ検索問題(すなわちグラフ同型問題)を解決しようとします(230万関数に対して平均クエリ時間1.3秒未満、平均インデックス時間30ms未満)。対象関数(下図左)が与えられると、リポジトリ内の他の関数の中からクローン部分グラフ(下図右)を識別できます。
差別化ファジングテストと制約解決によるセマンティッククローン検索。効率的でスケーラブルな動的-静的ハイブリッドアプローチ(150万関数に対して平均クエリ時間1秒未満、平均インデックス時間100ms未満)。対象関数(下図左)が与えられると、リポジトリ内の他の関数の中からクローン部分グラフ(下図右)を識別できます。抽象構文グラフの可視化をサポート。
Asm2Vec は表現学習を活用します。アセンブリコードの語彙意味関係を理解します。例えば、xmm* レジスタは addps などのベクトル操作と意味的に関連しています。memcpy は strcpy と類似しています。以下のグラフは、libgmp 内の同じソースコード gmpz_tdiv_r_2exp からコンパイルされた異なるアセンブリ関数を示しています。左から右へ、アセンブリ関数は GCC O0 オプション、GCC O3 オプション、O-LLVM 難読化コントロールフローグラフ平坦化オプション、LLVM 難読化 Bogus Control Flow Graph オプションでコンパイルされています。Asm2Vec はそれらを 静的に クローンとして識別できます。
このアプリケーションでは、ユーザーは機能的な関連性に基づいた一連のソフトウェアクラスを定義し、各クラスに属するバイナリを提供します。その後、システムは自動的に関数をクラスタにグループ化し、その中で関数はクローン関係によって直接的または間接的に接続されます。分類に識別力のあるクラスタが保持され、それらのクラスのシグネチャとして機能します。対象のバイナリが与えられると、システムは各ソフトウェアクラスに属する度合いを示します。
関数類似度計算モデルとして Asm2Vec を使用。
下図は、Kam1n0 v2.x の主要なUIコンポーネントと機能を示しています。マテリアルデザインを採用しています。一般的に、各ユーザーはアプリケーションリスト、実行中ジョブリスト、結果ファイルリストを持ちます。
現在の Kam1n0 のリリースは、コアサーバーと IDA Pro プラグインの2つのインストーラで構成されています。
| インストーラ | 含まれるコンポーネント | 説明 |
|---|---|---|
| Kam1n0-Server.msi | コアエンジン | インデックス化と検索のためのサービスを提供するメインエンジン。 |
| ワークベンチ | リポジトリと実行中のサービスを管理するためのユーザーインターフェース。 | |
| Webユーザーインターフェース | バイナリファイルとアセンブリ関数の検索/インデックス化のためのWebユーザーインターフェース。 | |
| Visual C++ 再頒布可能パッケージ(VS 15 用) | z3 の依存関係。 | |
| Kam1n0-IDA-Plugin.msi | プラグイン | コネクタとユーザーインターフェース。 |
| Cefpython 用 PyPI ホイール | ユーザーインターフェースのレンダリングエンジン。 | |
| PyPI および依存ホイール | Python のパッケージ管理。IDA 6.8 および 6.9 に含まれています。 |
Kam1n0 コアエンジンは純粋に Java で書かれています。次の依存関係が必要です:
リリースページ から Kam1n0-Server.msi ファイルをダウンロードします。指示に従ってサーバーをインストールします。インストールパスを選択するように求められます。サーバーが逆アセンブルを処理する必要がない場合、IDA Pro はオプションです。言い換えれば、クライアント側は Kam1n0 プラグインを IDA Pro 用に使用します。Kam1n0 サーバーと一緒に IDA Pro をインストールすることを強くお勧めします。Kam1n0 サーバーは、.i64 ファイルを開くために使用するデフォルトアプリケーションを探すことで、IDA Pro を自動的に検出します。