
マルウェア/IOCの取り込みおよび処理エンジン
_ ___ _
/\/\ __ _| | / _ (_)_ __ ___
/ \ / _` | |/ /_)/ | '_ \ / _ \
/ /\/\ \ (_| | / ___/| | |_) | __/
\/ \/\__,_|_\/ |_| .__/ \___|
|_|
MalPipeは、モジュール型のマルウェア(およびインジケータ)収集・処理フレームワークです。複数のフィードからマルウェア、ドメイン、URL、IPアドレスを取得し、収集したデータを強化して結果をエクスポートするように設計されています。
現時点では、以下のフィードがサポートされています:
これらの手順に従うと、開発およびテスト目的でプロジェクトのコピーをローカルマシンにセットアップして実行できます。ライブシステムへのデプロイ方法については、デプロイの項を参照してください。
MalPipeのデプロイには、必要なPythonライブラリのインストールと各種モジュールの設定が必要です。
Pythonの依存関係は以下を実行してインストールできます:
pip install -r requirements.txt
設定を開始するためのサンプル設定が config_example.json に用意されています。このファイルには、各フィード/プロセッサ/エクスポーターの必要な設定が含まれたJSONオブジェクトが含まれています。フィード設定の説明を以下に示します:
...
"feeds": {
...
"MalShare": {
"ENABLED" : true,
"API_KEY" : "00000000000000000000000000000000000000000000000000000000000",
"EXPORTERS" : ["DetailsPrinter", "JSONLog"],
"PROCESSORS" : ["YaraScan", "DNSResolver"]
},
...
一部のフィードは毎日更新されるため、フィードにはスケジュール形式とアクティブ形式の2種類があります。これらをいつ実行するかの設定は、個々のモジュール内の設定外で定義されます。
プロセッサは収集したデータを強化/標準化するために使用されます。例えば、VirusTotalからのデータは収集した各ファイルのyara結果を含んでいますが、MalShareは含んでいません。PROCESSORSキーにYaraScanを追加することで、ファイルをスキャンしてこのデータも含めることができます。
モジュール設定の例を以下に示します:
...
"processors": {
...
"YaraScan": {
"ENABLED" : false,
"RULES_PATH": "/yara_rules/Malware.yara"
},
...
現在、以下のプロセッサが実装されています:
ASNLookupDNSResolverFileTypeRDNSYaraScan最終コンポーネントはエクスポーターで、これはデータの出力先を制御します。これらは収集したデータをマルウェアリポジトリ、SIEM、JSONログファイルにエクスポートしたり、ユーザーに表示するために使用できます。
...
"exporters": {
...
"JSONLog": {
"ENABLED" : true,
"PRETTY" : true,
"LOG_PATH": "./temp/"
},
...
現在、以下のプロセッサが実装されています:
DetailsPrinterGenericWebStorageJSONLogLocalFileStorageセットアップ後、MalPipeは以下を使用して実行できます:
python malpipe.py
MalPipeのモジュールは、タイプ別にmalpipe/の下に配置されています:
新しいモジュールの作成は簡単です。
MalPipeモジュールはPythonクラスとして定義されます。以下はモジュールヘッダーの例です:
class ModuleName(Processor):
def __init__(self):
md = ProcessorDescription(
module_name="ModuleName",
description="Description",
authors=["Author Name"],
version="VersionNumber"
)
Processor.__init__(self, md)
self.types = ['ipaddresses']
self.parse_settings()
設定は、設定をインポートしてクラス変数に設定することで行えます。以下に示します:
from malpipe.config import CONFIG
...
self.yara_rule_path = CONFIG['processors'][self.get_module_name()]['RULES_PATH']
各プロセッサには、フィードから呼び出されるrun関数が必要です。
モジュール作成後、設定を config.json の processors、feeds、または exporters キーに追加する必要があります。新しいモジュールがプロセッサまたはエクスポーターの場合、関連するフィードにも追加する必要があります。以下に例を示します:
...
"processors": {
...
"SuperNewModule": {
"ENABLED" : true,
"DOCOOLSTUFF": true
},
...
"feeds": {
...
"0DayMalwareFeed": {
"ENABLED" : true,
"EXPORTERS" : ["DetailsPrinter", "JSONLog"],
"PROCESSORS" : ["SuperNewModule"]
}
...
問題はIssueを作成するか、プルリクエストを開始してお知らせください。追加のモジュールや機能をご希望の場合は、Issueを開くことを検討してください。
このプロジェクトに参加したコントリビューターのリストもご覧ください。
このプロジェクトはGNU General Public License v3.0の下でライセンスされています - 詳細はLICENSE.mdファイルを参照してください。