ミンハッシュベースのコード関係と調査ツールキット(MCRIT)
MCRITは、コードの類似性のコンテキストでMinhashアルゴリズムのアプリケーションを簡素化するために作成されたフレームワークです。 「シングラー」、つまり分解された関数のプロパティをエンコードするメソッドを迅速に実装して、Minhashアルゴリズムを介した類似性推定に使用するために使用できます。 SMDAが放出した分解レポートで作業するように調整されています。
使用法
Dockerizedの使用
些細な展開と使用には、完全にパッケージ化されたDocker-Mcritを使用することを強くお勧めします。
何よりもまず、これにより、永続性のデータベースや便利なインタラクション用のWebフロントエンドなど、すべてのコンポーネントに完全に互換性のあるバージョンがあることが保証されます。
スタンドアロンの使用
MCRITを単独でインストールするには、さらにステップが必要です。
以下については、ubuntuをホストオペレーティングシステムとして想定しています。
Pythonのインストール要件はrequirements.txtにリストされており、以下を使用してインストールできます。
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
デフォルトでは、MongoDB 5.0はバックエンドとして使用されます。これは、永続的なデータストレージを提供するため、推奨される動作モードでもあります。次のコマンドは、ubuntuのインストールの例の概要を説明します。
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
スタンドアロンのインストールを行うときは、クローン化されたリポジトリに基づいてMCRITモジュールをインストールすることをお勧めします。
この最初のインストールの後、必要に応じて、MCRITはインターネット接続なしで使用できます。
手術
MCRITバックエンドは通常、2つのコンポーネントに分割されます。これは、作業するAPIインターフェイスを提供するサーバーと、1つ以上のワーカーを処理するジョブを処理します。それらは以下を使用して別のシェルで開始できます。
そして
デフォルトでは、REST APIサーバーはhttp://127.0.0.1:8000/でリッスンします。
交流
インストールの選択に関係なく、実行したらMCRITバックエンドと対話できます。
mcritクライアント
サーバーのすべての利用可能なエンドポイントを操作できるPythonクライアントモジュールを作成しました。
このクライアントモジュールのドキュメントは現在開発中です。
Mcrit Cli
このクライアントパッケージに基づいたCLIもあります。例:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions McRitCLIのより広範なドキュメントはこちらから入手できます
mcrit IDAプラグイン
IDAプラグインも現在開発中です。それを使用するには、最初に独自のconfig.pyを作成し、mcritインスタンスの展開に応じて必要な変更を加えます。
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
次に、見つかったスクリプトを実行するだけです
./plugins/ida/ida_mcrit.py
IDAで。
参照データ
2023年7月に、一般的なコンパイラとライブラリのすぐに使用できるリファレンスデータを含むGitHubリポジトリの登録を開始しました。
バージョン履歴
- 2024-06-20 v1.3.17:職務削除とクリーンアップがより堅牢になり、誤ってサンプルを不要にパージしません - @yankovs -thx !!
- 2024-05-10 V1.3.16:キューのクリーンアップは、3種類のすべてのクエリ(マッピング、マップ、SMDA)のすべての間にアップロードされたファイルをパージするように拡張されました。
- 2024-04-17 v1.3.15:労働者タイプの
spawningworker 、queueconfig.queue_spawningworker_children_timeout秒後に子供を終了します。 - 2024-04-02 V1.3.14:実験:新しい労働者タイプの
spawningworkerの導入 - このバリアントは、通常どおりキューからジョブを消費しますが、実際のジョブの実行を別の(サブ)プロセスに延期します。 - 2024-04-02 V1.3.13:キューをクリーンアップするときは、失敗したすべてのジョブ@yankovs-thx !!
- 2024-03-06 v1.3.12:@yankovs-thx !!に報告されているように、キューのクリーンアップからの最近のサンプルの保護が重要なエラーにつながるバグを修正しました!!
- 2024-02-21 V1.3.10:SMDAを1.13.16にバンプします。
- 2024-02-16 v1.3.9:@yankovs-thx !!
- 2024-02-15 V1.3.8:SMDAをバンプSMDAにぶつけて、SMDAFUNCTIONでのバージョン認識の問題に対処します。IDAプラグインのMCRITINTERFACE(THXから@MalwareFrank !!)の固定例外印刷。
- 2024-02-12 V1.3.5:Minhashesの再計算には、正しい割合が表示されます(thxから@malwarefrank !!)。
- 2024-02-02 v1.3.4:IDAプラグインでのミニ修正は、潜在的に非初期化されたオブジェクト(thxから @r0ny123 !!)を参照しないようにします。
- 2024-02-01 v1.3.2:修正:非平行化マッチングは、同じデータ形式(thxから@dannyquist !!)を出力するようになりました。
- 2024-01-30 v1.3.1:Mongodbへの接続は完全に構成可能になりました(thxから@dannyquist !!)。
- 2024-01-24 v1.3.0:ブレイク:ピチャッシュとミンハッシュのインデックスの改善によるマイルストーンのリリース。完全な後方互換性を確保するには、すべてのハッシュの再計算をお勧めします。この移行ガイドを確認してください。
- 2024-01-23 V1.2.26:ピン留めしたSMDAが互換性のあるままであることを確認するために、Liefを0.13.2に固定します。
- 2024-01-09 V1.2.25:
db_stateとdb_timestampがあるかどうかに関係なく、システムステータスを提供できることを確認してください。 - 2024-01-05 V1.2.24:現在、CLIで「クエリ」引数をサポートしているだけでなく、ファイルのフットプリントを削減するためのコンパクトなマッチングレス(関数マッチ情報なし)をサポートしています。
- 2024-01-03 V1.2.23:OOMクラッシュからシステムを保護するために、最大輸出サイズを制限します。
- 2024-01-02 v1.2.22:利便性のある機能を備えたuniqueblocksResultのデータクラスを導入しました。
- 2023-12-28 V1.2.21:McritClientは、バイナリクエリマッチングのためにパススルーを行っています。
- 2023-12-28 V1.2.20:ステータスは、最後のDBアップデートのタイムスタンプを提供するようになりました。
- 2023-12-13 v1.2.18:getuniqueblocksに渡されたサンプル_idに対して、バウンドチェックと標準
- 2023-12-05 V1.2.15:McRitWebに沿ったバージョン番号、ジョブオブジェクトに便利な機能を追加しました。
- 2023-11-24 v1.2.11:SMDAは、SMDAをアップグレードし、データベースの移行を導入する前にバージョン1.12.7にピン留めし、改善された一般化を伴うPIC +ピックブロックハッシュを再計算します。
- 2023-11-17 v1.2.10:ヘッダーフィールドを介してサーバーに承認トークンを設定する機能を追加:
apitoken ;ジョブグループによってフィルタリングする機能を追加しました。孤児の仕事に失敗する能力が追加されました。 - 2023-10-17 v1.2.8:ジョブグループでのマイナーな修正。
- 2023-10-16 v1.2.6:要約されたキュー統計、洗練された職務分類。
- 2023-10-13 V1.2.4:RESTインターフェイスへの公開キュー/ジョブの削除、インデックス作成およびパラメーター化されたMongoDBクエリによるさまざまなキュー検索のクエリ速度の改善。
- 2023-10-13 v1.2.3:労働者がクラッシュした場合に備えて、労働者が進行中の仕事から登録解除されるようになりました(コードテンプレートの@yankovsから@yankovs)。
- 2023-10-03 v1.2.2:minm/max numサンプルのマッチングレッストフィルタリング(修正を含む)。
- 2023-10-02 V1.2.0:ウイルス速報2023のマイルストーンリリース。
- 2023-09-18 v1.1.7:Bugfix:0バンドとのタスクマッチングは、以前のと思われるMinhashマッチングを無効にします。また、ジョブの進行状況の割合を固定します。
- 2023-09-15 V1.1.6:ブロックマッチングのBugfix、ジョブオブジェクトとの対話のための利便性機能。
- 2023-09-14 v1.1.5:コンピューティングが多いコールを処理する際の非復帰コールの問題が原因で、デフォルトのWSGIハンドラーとしてグリニコーンを非アクティブ化しました。
- 2023-09-14 v1.1.4:bugfix:
setup.pyのdata_filesにrequirements.txtを追加して、パッケージで利用できるようにします。 - 2023-09-13 v1.1.3:いくつかのパフォーマンスの重要な定数をMinhashconfigおよびStorageConfigで構成できるパラメーターに抽出し、バッチマッチングの固定進行報告、bugfix:適切なデータラスへのgunicornconfigの使用。
- 2023-09-13 v1.1.1:合理化された要件 /セットアップ、Windows用の
gunicornを除外しました(@yankovs !!)。 - 2023-09-12 V1.1.0:Linuxの展開の場合、McRitはパフォーマンスがはるかに優れているため、WSGIサーバーとして
waitressの代わりにgunicornを使用します。 Gunicornは独自の構成を必要とするため、マイナーバージョン(Thxから@yankovs !!)にぶつかる必要があります。 - 2023-09-08 v1.0.21:McritClientのすべての方法は、バックエンドにApitokens/Usernamesを転送するようになりました。
- 2023-09-05 v1.0.20:2 refrementを使用して、Mongodbに保存する際にBSONの制限(THXから@yankovs)に保存する際に、サンプルエントリのアドレスを表す2つの補完を使用します。
- 2023-09-05 V1.0.19:統計は、少し前に作成された内部カウンター(THXから@yankovs)を使用しています。
- 2023-08-30 V1.0.18:ICFG関係による結果の洗練されたLinkhuntのスコアリングとクラスタリング。
- 2023-08-24 V1.0.15:MatchingResultにおけるリンクハンティング機能の統合最初の試み。
- 2023-08-24 v1.0.13:Minhashバンドの再構築は、RAMの使用量を爆発させなくなります。冗長パスチェック(@yankovsからthx)を削除しました。
- 2023-08-23 v1.0.12:インデックス作成に使用されるミンハッシュバンドを再構築する機能を追加しました。
- 2023-08-22 v1.0.11:バルクデータをインポートするときに、
function_nameがfunction_labelとしても追加されなかったバグを修正しました。 - 2023-08-11 v1.0.10:バックデータをインポートするときに、バンドにミンハッシュを追加する前にfunction_idが調整されず、おそらく存在しないfunction_idsにつながるバグを修正しました。
- 2023-08-02 V1.0.9:IDAプラグインは、ブロックサイズとミンハッシュスコア、最適化されたレイアウト、ユーザーエクスペリエンスでフィルタリングできるようになりました( @R0NY123へのフィードバックのTHX !!)
- 2023-07-28 V1.0.8:IDAプラグインは、リモート関数の色付きグラフを表示し、現在表示されている機能のPicblockHashes(基本ブロック用)のクエリを実行できるようになりました。
- 2023-06-06 V1.0.7:MatchingResultの拡張フィルタリング機能。
- 2023-06-02 V1.0.6:IDAプラグインは、ジョブに一致するタスク、結果を表示し、バッチインポートラベルを表示できるようになりました。一致することの調和。
- 2023-05-22 v1.0.3:Malpedia Repoフォルダーでmcrit CLIを使用する場合のパス検証の堅牢性。
- 2023-05-12 V1.0.1:IDAプラグインのラベルインポートの進捗状況。 mcritclientにおけるmcritwebの反射API拡張。
- 2023-04-10 V1.0.0:BotConf 2023のマイルストーンリリース。
- 2023-04-10 V0.25.0:IDAプラグインは、現在表示されている機能の関数クエリを実行できるようになりました。
- 2023-03-24 V0.24.2:McRitClientはユーザー名/Apitokenを転送できます。AddJSonReportは現在、フォワーダブルになりました。
- 2023-03-21 v0.24.0:functionentriesは、ユーザー/日付を提出する際に、追加のfunctionlabelentriesを保存できるようになりました。
- 2023-03-17 V0.23.0:単一のSMDAFUNCTIONS(同期)のマッチをクエリすることができるようになりました。
- 2023-03-15 V0.22.0:McRitClientは、機能のサブセットに対するアピトケンと生の応答をサポートするようになりました。
- 2023-03-14 V0.21.0:より細かい粒子化フィルタリングのバックエンドサポート。
- 2023-03-13 V0.20.6:MatchResultのスコアごとにファミリ/サンプルをフィルタリングするためのバックエンドサポート。
- 2023-02-22 V0.20.4:一意のスコアを計算し、これらの結果にアクセスするためのBugfix。
- 2023-02-21 V0.20.3:結果プレゼンテーションでフロントエンド機能をサポートします。
- 2023-02-17 V0.20.2:拡張マッチレポートオブジェクトを拡張して、フロントエンドの改善をサポートします。
- 2023-02-14 V0.20.0:バックエンドとのシェルベースの相互作用を簡素化するために、コンソールクライアントのオーバーホールされたクライアント。
- 2023-01-12 v0.19.4:マッチングの配置のための追加のフィルタリング機能。
- 2022-12-13 V0.19.1:候補者に特定の(より高い)バンドマッチを必要とすることが可能になりました(つまり、マッチングの曖昧さを減らします)。
- 2022-12-13 V0.18.x:任意の関数IDの一致を有効にします。
- 2022-11-25 V0.18.9:加速クエリマッチング。
- 2022-11-18 V0.18.8:削除と修正の調和処理、マイナーな修正。
- 2022-11-13 V0.18.7:サンプルの欠失を大幅に加速します。
- 2022-11-13 V0.18.6:既存のサンプルおよび家族情報を変更する機能を追加しました。
- 2022-11-11 v0.18.2:マッチング手順のアップグレードは、より大きなバイナリをより堅牢かつ効率的に処理できるようになりました。
- 2022-11-03 V0.18.1:マイナーな修正。
- 2022-11-03 V0.18.0:ユニークなブロック分離は、ヤラのルール、再構築された結果出力の提案も生成するようになりました。
- 2022-10-24 V0.17.4:要件を備えた調和したSetup.py、クロスジョブを処理するためのメモリ効率の向上。
- 2022-10-18 v0.17.3:半構造化されたフォルダーからSMDAレポートを再帰的に作成するための便利なスクリプトを追加しました。
- 2022-10-13 v0.17.2:ミンハッシュ計算中の潜在的なOOMの問題を、より小さなバッチでハッシュする機能を処理することにより、潜在的なOOMの問題を修正しました。
- 2022-10-12 v0.17.1:すべてのサンプル/関数について、ミンハッシュが計算されるようにするジョブをスケジュールする関数を追加しました。
- 2022-10-11 v0.17.0:ユニークなブロックの検索は、労働者を通じて乱職になる仕事になりました。
- 2022-10-11 V0.16.0:MatchQueryジョブのサンプルは、サンプル/機能エントリで保存され、ポストプロセッシングを改善します。
- 2022-10-04 V0.15.4:サーバーがバージョンを表示できるようになりました。
- 2022-09-28 V0.15.3:より大きなインスタンスのパフォーマンスの問題に対処し、一意のブロックの脱出命令シーケンスを生成します。
- 2022-09-26 v0.15.0:Crossjobsは現在バックエンドで、サンプルの一意の基本ブロックを識別するための機能を提供し始めました。
- 2022-08-29 V0.14.2:展開のためのマイナーな修正。
- 2022-08-22 V0.14.0:ジョブは他のジョブ(クロスジョブをバックエンドに移動するための準備)、QOLの改善に依存することができます。
- 2022-08-17 v0.13.1:プロファイリング用のコマンドラインオプションを追加しました(cprofileが必要)。
- 2022-08-09 V0.13.0:PichashとPicblockhashの試合に対して効率的な直接クエリを行うことができます。
- 2022-08-09 V0.12.3:FamilyEntryのBugfix
- 2022-08-08 V0.12.2:XCFGデータの配信のためのbugfix、欠落依存関係が追加されました。
- 2022-08-08 V0.12.0:統合された高度な検索構文。
- 2022-08-03 V0.11.0 :(壊れた)家族は現在、ファミリーエントリーで表されています。
- 2022-08-03 V0.10.3:現在、DBでデフォルトで関数XCFGデータを残し、REST APIおよびMCRITCLIENTを介してアクセスを公開しました。
- 2022-07-29 V0.10.2:ファミリを削除する機能の追加 - デフォルトですべての機能のXCFG情報を保持するようになりました。
- 2022-07-12 V0.10.1:パフォーマンスの向上。
- 2022-07-12 v0.10.0 :(壊れる)ジョブ処理が簡素化されました。
- 2022-05-13 V0.9.4:提出されたファイルを受信するためのバグ修正。
- 2022-05-13 V0.9.3:MatchingResultsのさらなる更新。
- 2022-05-13 V0.9.2:より良いアクセスのために、MatchingResultに別のフィールドとより多くの利便性関数を追加しました - それらは以前に作成されたMatchingResultsの変化を壊しています。
- 2022-05-05 V0.9.1:バイナリ提出の処理、ミンハッシュキューイングのマイナーな修正 - 初期リリース。
- 2022-02-09 V0.9.0:McRitにピックブロックを追加しました。
- 2022-01-19 V0.8.0:クライアントと例をプライマリMCRITリポジトリに移行しました。
- 2021-12-16 V0.7.0:最初のプライベートリリース。
クレジットとメモ
このプロジェクトの内部研究プロトタイプへの貢献について、Steffen EndersとPaul Hordiienkoに感謝します!クライアントモジュールだけでなく、このプロジェクトの幅広い貢献とリファクタリングに感謝します。
リクエストをプル歓迎! :)
ライセンス
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.