Kam1n0 v2.x は、スケーラブルなアセンブリ管理および分析プラットフォームです。これにより、ユーザーはまずバイナリの (大規模な) コレクションを異なるリポジトリにインデックス付けし、クローン検索や分類などのさまざまな分析サービスを提供できるようになります。 Applicationの概念を使用して、マルチテナント アクセスとアセンブリ リポジトリの管理をサポートします。アプリケーション インスタンスには独自の専用リポジトリが含まれており、特殊な分析サービスを提供します。リバース エンジニアリング タスクの多様性を考慮して、Kam1n0 v2.x サーバーは現在、 Asm-Clone 、 Sym1n0 、およびAsm2Vecの 3 つの異なるタイプのクローン検索アプリケーションと、 Asm2Vecに基づく実行可能ファイルの分類を提供しています。新しいアプリケーション タイプをプラットフォームにさらに追加できます。
ユーザーは複数のアプリケーション インスタンスを作成できます。アプリケーション インスタンスは、特定のユーザー グループ間で共有できます。アプリケーション リポジトリの読み取り/書き込みアクセスとオン/オフ ステータスは、アプリケーション所有者によって制御できます。 Kam1n0 v2.x サーバーは、複数の共有リソース プールを使用してアプリケーションに同時にサービスを提供できます。
Kam1n0 は、カナダのマギル大学データ マイニングおよびセキュリティ研究所の Benjamin CM Fung の監督のもと、Steven HH Ding と Miles Q. Li によって開発されました。これは、Hex-Rays プラグイン コンテスト 2015 で 2 位を受賞しました。Kam1n0 が役立つと思われる場合は、私たちの論文を引用してください。
SHH ディン、BCM ファン、P. チャーランド。 Kam1n0: リバース エンジニアリングのための MapReduce ベースのアセンブリ クローン検索。 『 Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD) 』、461 ~ 470 ページ、カリフォルニア州サンフランシスコ: ACM Press、2016 年 8 月。
SHH ディン、BCM ファン、P. チャーランド。 Asm2Vec: コード難読化およびコンパイラの最適化に対するバイナリ クローン検索の静的表現の堅牢性を強化します。セキュリティとプライバシーに関する第 40 回 IEEE シンポジウム (S&P) の議事録、18 ページ、カリフォルニア州サンフランシスコ: IEEE Computer Society、2019 年 5 月。
Asm-Clone アプリケーションは、アセンブリ関数 (230 万関数で平均クエリ時間 1.3 秒未満、平均インデックス時間 30 ミリ秒未満) の効率的なサブグラフ検索問題 (つまり、グラフ同型問題) を解決しようとします。ターゲット関数 (以下に示す左側の関数) を指定すると、リポジトリ内の他の関数 (以下に示す右側) の中で複製されたサブグラフを識別できます。
差別化されたファズテストと制約解決によるセマンティッククローン検索。効率的でスケーラブルな動的および静的ハイブリッド アプローチ (150 万の関数で平均クエリ時間は 1 秒未満、平均インデックス時間は 100 ミリ秒未満)。ターゲット関数 (以下に示す左側の関数) を指定すると、リポジトリ内の他の関数 (以下に示す右側) の中で複製されたサブグラフを識別できます。抽象構文グラフの視覚化をサポートします。
Asm2Vec は表現学習を活用します。アセンブリ コードの語彙的な意味関係を理解します。たとえば、 xmm*
レジスタはaddps
などのベクトル演算と意味的に関連しています。 memcpy
strcpy
に似ています。以下のグラフは、libgmp のgmpz_tdiv_r_2exp
の同じソース コードからコンパイルされたさまざまなアセンブリ関数を示しています。左から右に、アセンブリ関数は GCC O0 オプション、GCC O3 オプション、O-LLVM 難読化ツールの制御フロー グラフ、フラット化オプション、および LLVM 難読化ツールの偽の制御フロー グラフ オプションを使用してコンパイルされます。 Asm2Vec はそれらを静的にクローンとして識別できます。
このアプリケーションでは、ユーザーは機能の関連性に基づいてソフトウェア クラスのセットを定義し、各クラスに属するバイナリを提供します。次に、システムは機能を自動的にクラスターにグループ化し、機能はクローン関係によって直接または間接的に接続されます。分類を識別するクラスターは保持され、そのクラスの署名として機能します。ターゲット バイナリが与えられると、システムはそれが各ソフトウェア クラスに属する度合いを表示します。
関数類似度計算モデルとしてAsm2Vecを使用
以下の図は、Kam1n0 v2.x の主要な UI コンポーネントと機能を示しています。マテリアルデザインを採用。一般に、各ユーザーはアプリケーション リスト、実行中のジョブ リスト、および結果ファイル リストを持っています。
Kam1n0 の現在のリリースは、コア サーバーと IDA Pro プラグインの 2 つのインストーラーで構成されています。
インストーラ | 付属のコンポーネント | 説明 |
---|---|---|
Kam1n0-Server.msi | コアエンジン | インデックス作成と検索のためのサービスを提供するメイン エンジン。 |
作業台 | リポジトリと実行中のサービスを管理するためのユーザー インターフェイス。 | |
ウェブユーザーインターフェース | バイナリ ファイルおよびアセンブリ関数の検索/インデックス作成のための Web ユーザー インターフェイス。 | |
VS 15 用の Visual C++ 再頒布可能ファイル | z3 の依存関係。 | |
Kam1n0-IDA-Plugin.msi | プラグイン | コネクタとユーザー インターフェイス。 |
Cefpython 用の PyPI ホイール | ユーザーインターフェイスのレンダリングエンジン。 | |
PyPI と依存ホイール | Python のパッケージ管理。 IDA 6.8 & 6.9 に含まれています。 |
Kam1n0 コア エンジンは純粋に Java で書かれています。次の依存関係が必要です。
リリース ページからKam1n0-Server.msi
ファイルをダウンロードします。指示に従ってサーバーをインストールします。インストール パスを選択するように求められます。サーバーで逆アセンブルを行う必要がない場合、IDA Pro はオプションです。つまり、クライアント側は IDA Pro 用の Kam1n0 プラグインを使用します。 IDA Pro を Kam1n0 サーバーとともにインストールすることを強くお勧めします。 Kam1n0 サーバーは、 .i64
ファイルを開くために使用したデフォルトのアプリケーションを探して、IDA Pro を自動的に検出します。
Kam1n0 IDA Pro プラグインは、ロジックは Python で、レンダリングは HTML/JavaScript で作成されます。インストールには次の依存関係が必要です。
次に、リリース ページからKam1n0-IDA-Plugin.msi
インストーラーをダウンロードします。指示に従ってプラグインとランタイムをインストールします。プラグインは$IDA_PRO_PATH$/plugins
にある IDA Pro プラグイン フォルダーにインストールする必要があることに注意してください。たとえば、Windows では、パスはC:/Program Files (x86)/IDA 6.95/plugins
になります。インストーラーはパスを検出して検証します。
Java 11 のOracleバージョンを使用していることを確認してください (apt のdefault-jdk ではありません)。
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
など) が発生した場合は、必ずhttp_proxy
およびhttps_proxy
環境変数を設定してエクスポートし、sudo で-E
オプションを使用して再試行してください。さらに、「add-apt リポジトリ コマンドが見つかりません」エラーが発生した場合は、 sudo apt install -y software-properties-common
試してください。sudo apt-get update
、およびsudo apt-get install oracle-java8-installer
java -version
を使用して Java バージョンを確認します。 JAVA_HOME 環境変数 ( /etc/environment
内) を手動で設定する必要がある場合があります ( JAVA_HOME=/usr/lib/jvm/java-11-oracle
Linux 用の最新リリース (Kam1n0-IDA-Plugin.tar.gz および Kam1n0-Server.tar.gz) を Kam1n0-Community からダウンロードします。
2 つの tarball (つまり、tar –xvzf Kam1n0-IDA-Plugin.tar.gz と tar –xvzf Kam1n0-Server.tar.gz) を抽出します。
Kam1n0-Server.tar.gz ファイルによってサーバー ディレクトリが作成されます。
server
ディレクトリ内に、 kam1n0.properties
というファイルがあるはずです。ここで、kam1n0 のさまざまな構成を設定します。これはとても重要です。
kam1n0.data.path
kam1n0 関連のデータを書き込む場所に設定します。 server
置いているのと同じ場所に置くことにしました。 kam1n0.ida.home
IDA インストールが配置されている場所を指します。 IDA がなく、逆アセンブリに kam1n0 を使用する予定がない場合は、この行 (および次の行kam1n0.ida.batch
) をコメント化してください。 kam1n0.properties
ファイルの詳細 (正確な) 情報については、 kam1n0.properties.explained
ファイルを参照してください。
kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
を実行します。これにより、実際に kam1n0 を起動するように求めるウィンドウがポップアップ表示されます。あるいは、 kam1n0-server: java -jar kam1n0-server.jar --start
を実行します。これにより、ウィンドウを使用せずにコンソールからサーバーが起動されます。
接続して使用するには、ブラウザで127.0.0.1:8571
(kam1n0 がリッスンするデフォルトのポートは 8571 である必要がありますが、kam1n0.properties で変更できます) に移動します。きれいな kam1n0 Web UI が表示されるはずです。 kam1n0 の使用方法がわからない場合は、そこから、Kam1n0-Community リポジトリのチュートリアルに従ってください。
以前のバージョン (2.0.0 未満) で使用されていたアセンブリ コード リポジトリと構成ファイルは、最新バージョンではサポートされなくなりました。古いリポジトリを移行する必要がある場合は、お問い合わせください。
最新の安定したブランチのクローンを作成します ( --recursive
忘れないでください!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: ルート /kam1n0/kam1n0/ を Maven プロジェクトとしてインポートします。すべてのサブモジュールがそれに応じてロードされます。 EclipseEE: クローンされた git リポジトリを git ビューに追加します。 git リポジトリからすべての Maven プロジェクトをインポートします。エラーに対処するには、クラスパスの変更が必要になる場合があります。すべてのリソース パスは、IDE 内での実行時に (kam1n0-resources サブモジュールを通じて) 動的に変更されます。
プロジェクトをビルドするには:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
結果のバイナリは /kam1n0/build-bins/ にあります。
テスト コードを実行するには、まず http://chromedriver.chromium.org/ からchromedriver.exe
をダウンロードし、その絶対パスをwebdriver.chrome.driver
という名前の環境変数に追加する必要があります。システムに Chrome ブラウザがインストールされていることも必要です。テスト コードは、ブラウザ インスタンスを起動して UI インターフェイスをテストします。完全なテスト手順には約 3 時間かかります。
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
これらのコマンドは、libvex および z3 のコンパイル済みホイールを使用して Java をコンパイルするだけです。すぐに使えます。 libvex と z3 のビルドはプラットフォームに依存します。 Angr の libvex のフォークを使用します。 Windows/Linux 用のより本格的なビルド スクリプトとインストーラーは /kam1n0-builds/ にあります。
継続的な開発と配信のために Jenkin サーバーを用意しています。最新の安定版リリースはここに掲載されます。定期的に、内部実験ブランチをこのリポジトリと同期します。
このソフトウェアは、カナダの McGill Data Mining and Security Lab と Queen's L1NNA Research Laboratory の Steven HH Ding、Miles Q. Li、Benjamin CM Fung によって開発されました。これは、Apache ライセンス バージョン 2.0 に基づいて配布されます。詳細については、LICENSE.txtを参照してください。
著作権 2014-2021 マギル大学と研究者。無断転載を禁じます。