
Python、Redis、S3をベースとした分散型マルウェア処理フレームワーク。
Python、Redis、S3 をベースにした分散型マルウェア処理フレームワーク。
Karton は、柔軟かつ軽量なマルウェア解析バックエンドを構築するための堅牢なフレームワークです。 マルウェア*解析システムを、ごくわずかな手間で堅牢なパイプラインへと接続するために使用できます。
私たちは長年にわたり自動化の仕事に携わってきました。扱う脅威はますます増え続けており、インシデントに対応していくにはあらゆるものを自動化しなければなりません。その結果、多くのスクリプトがアヒルガムテープとWD-40で貼り合わされたような状態になりがちです。こうしたスクリプトは、アナリストがその場の勢いで書いたもので、脆く醜いものですが、それでも動作し、保存・さらなる処理・他システムへの送信・他組織との共有が必要なインテリジェンスを生み出します。
私たちには、PoC スクリプトを解析パイプラインへ簡単に組み込む方法が必要でした。また、その実行を監視し、ログを一元化し、堅牢性を高め、開発の惰性を減らしたいとも考えていました。まさにその目的のために、私たちは Karton を作成しました。
* Karton はマルウェア解析を念頭に設計されていますが、マイクロサービス指向のあらゆるプロジェクトでうまく機能します。
インストールは、単一の pip install コマンドと同じくらい簡単です:
pip3 install karton-core
バックエンド環境全体をセットアップするには、S3 互換ストレージと Redis も必要です。詳細はドキュメントを参照してください。
karton を使用するには、Karton を継承したクラスを提供する必要があります。
from karton.core import Karton, Task, Resource
class GenericUnpacker(Karton):
"""
Performs sample unpacking
"""
identity = "karton.generic-unpacker"
filters = [
{
"type": "sample",
"kind": "runnable",
"platform": "win32"
}
]
def process(self, task: Task) -> None:
# Get sample object
packed_sample = task.get_resource("sample")
# Log with self.log
self.log.info(f"Hi {packed_sample.name}, let me analyze you!")
...
# Send our results for further processing or reporting
task = Task(
{
"type": "sample",
"kind": "raw"
},
payload={
"parent": packed_sample,
"sample": Resource(filename, unpacked)
},
)
self.send_task(task)
if __name__ == "__main__":
GenericUnpacker.main()
このパッケージは、"karton" と呼ばれるコマンドラインユーティリティも提供します。簡単な管理タスクに使用できます(ただし、完全な管理ツールとして設計されたものではありません)。
$ karton configure # create a new configuration file
$ karton list -s # list current binds
karton name version karton
------------------------------------------------------------------------
karton.yaramatcher 1.2.0 5.3.0
karton.autoit-ripper 1.2.1 5.3.3
karton.mwdb-reporter 1.3.0 5.3.2
$ karton logs # start streaming all system logs
$ karton delete karton.something # remove unused bind (will be GCed by system during the next operation)
一部の Karton システムは汎用的で、誰にとっても役立ちます。私たちはそれらをコミュニティと共有することにしました。
このリポジトリです。システム内でタスクをディスパッチする役割を担うメインサービスである karton.system サービスを含みます。また、他のシステムによってライブラリとして使用される karton.core モジュールも含みます。
タスクとキューの管理および監視のための小さな Flask ダッシュボード。
「ルーター」です。サンプルやファイルを認識し、ファイル形式に応じてさまざまなタスクタイプを生成します。これにより、他のシステムは特定の形式のタスク(たとえば zip アーカイブのみ)だけをリッスンできます。
汎用アーカイブ展開ツール。システムにアップロードされたアーカイブは展開され、すべてのファイルが個別に処理されます。
マルウェア抽出ツール。Yara ルールと Python モジュールを使用して、マルウェアサンプルや解析結果から静的設定を抽出します。これは釣り竿であり、魚ではありません。モジュール自体は共有していません。ただし、独自のものを書くのは簡単です!
パイプラインの非常に重要な部分です。レポーターは、解析中に生成されたすべてのファイル、タグ、コメント、その他のインテリジェンスを MWDB に送信します。まだ MWDB を使用していない場合や、単に他のバックエンドを好む場合でも、独自のレポーターを書くのは簡単です。
パイプライン内のすべてのファイルに対して Yara ルールを自動的に実行し、サンプルに適切にタグを付けます。ルールは含まれていません ;)。
hex、base64 などの一般的な方法でエンコードされたファイルをデコードする Karton システムです。(それがどれほど一般的か、信じられないでしょう)。
コンパイルされた AutoIt 実行ファイルから埋め込まれた AutoIt スクリプトとリソースを抽出する AutoIt-Ripper の小さなラッパーです。
DRAKVUF エンジンを内部に備えた自動ブラックボックス マルウェア解析システムで、ゲスト OS 上にエージェントを必要としません。
これらのシステムを組み合わせて、基本的なマルウェア解析パイプラインを形成する方法は次のとおりです:
Qiling Framework を使用して UPX などの一般的なパッカーを展開する、モジュール式の Karton Framework サービスです。
MalDuck 向けの、機能豊富でモジュール式のマルウェア設定抽出ユーティリティ
Karton フレームワーク向けの Detect-It-Easy 分類器
Karton フレームワーク向けの RetDec 展開モジュール
モジュール性を重視したマルウェア類似性プラットフォーム。
スケーラブルな Windows ドライバー脆弱性解析パイプライン。
