threatkb について
threatkbは、指定したSTIXファイルのMITRE ATT&CKデータを検索するローカルCLI兼stdio MCPサーバーです。技術の詳細、関連する緩和策や検出情報、戦術を参照でき、ネットワークサービスを使いません。
主な機能
- 01IDまたは名前で技術を検索
- 02技術の完全なレコードを取得
- 03関連する緩和策と検出を一覧表示
- 04データセットの戦術を一覧表示
- 05ローカルSTIXファイルを読み込み
活用シーン
- 01分析中にATT&CK技術を検索
- 02技術に関連する緩和策を確認
- 03ローカルデータセットの検出記録を確認
MCP 対応
技術検索、詳細レコード、緩和策、検出、戦術、サーバー情報のツールを公開します。THREATKB_DATA_FILEで指定されたローカルSTIXデータセットを読み込みます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
6掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| tech_name | string | いいえ | 名前のあいまい一致に使用する技術名。 |
| technique_id | string | いいえ | MITRE ATT&CK の技術 ID(例:T1059)。 |
詳細
threatkb
threatkb は、お使いのマシンに保存したデータセットファイルから、MITRE ATT&CK ナレッジベースに関する質問に回答します。ATT&CK ID またはおおよその名前でテクニックを検索したり、テクニックの完全なレコード(プラットフォーム、キルチェーンフェーズ、リファレンス、サブテクニック、緩和策、検出)を取得したり、テクニックに関連付けられた緩和策や検出を一覧表示したり、データセットに登録されている戦術を一覧表示したりできます。1つのバイナリで、コマンドラインインターフェイスと stdio MCP サーバーを提供します。
このツールにはデータセットが同梱されておらず、ネットワークサービスもありません。THREATKB_DATA_FILE 環境変数を使って、enterprise-attack.json 形式(MITRE がエンタープライズマトリックス向けに公開しているレイアウト)の STIX バンドルを指定します。環境変数が設定されていない場合やファイルを読み込めない場合、クエリコマンドは推測で回答せず、不足しているデータセットを示すエラーを返します。threatkb が ATT&CK データを捏造することはありません。この状態でも threatkb info は実行でき、理由とともに dataset_loaded: false を報告します。
インストール
THREATKB_DATA_FILE=/path/to/enterprise-attack.json npx @reneturcios/threatkb tactics
または、コンテナイメージを実行します。
docker run -i -e THREATKB_DATA_FILE=/data/enterprise-attack.json \
-v /path/to/data:/data ghcr.io/cloudcorprecords/threatkb
コンテナはデフォルトで MCP サーバーを起動します(下記を参照)。CLI として使うには、CLI の引数を渡してください。
CLI
export THREATKB_DATA_FILE=/path/to/enterprise-attack.json
threatkb query --id T1059
threatkb query --name "command and scripting"
threatkb full --id T1059
threatkb full --name PowerShell
threatkb mitigations T1059
threatkb detections T1059
threatkb tactics
threatkb info
threatkb --version
結果は JSON として出力されます。テクニック検索では {results: [...], count: N} が返されます。緩和策および検出のクエリでは、指定した1つのテクニックについて {technique_id, results: [...], count: N} が返されます。不明なテクニック ID はエラーになります。終了コード:成功時は 0、クエリ失敗時(データセット不足を含む)は 1、使用方法のエラー時は 2 です。
検索ルール:ID 検索では完全一致し、大文字と小文字は区別されません(t1059 で T1059 が見つかります)。名前検索ではあいまい検索が行われます。まず名前が完全一致するもの、次にクエリで始まる名前、次にクエリを含む名前、最後にクエリ内のすべての単語を含む名前が対象になります。
MCP サーバー
1つのバイナリで両方のインターフェイスを提供します。mcp サブコマンドで stdio MCP サーバーを起動します。
npx -y @reneturcios/threatkb mcp
MCP クライアントの設定:
{
"mcpServers": {
"threatkb": {
"command": "npx",
"args": ["-y", "@reneturcios/threatkb", "mcp"],
"env": {
"THREATKB_DATA_FILE": "/path/to/enterprise-attack.json"
}
}
}
}
ツール
| ツール | 入力 | 返される内容 |
|---|---|---|
query_technique | technique_id または tech_name(実際にはどちらか一方が必須) | 一致したテクニックの概要を {results, count} として返します。 |
search_technique_full | technique_id または tech_name | 同じ検索結果を、プラットフォーム、キルチェーンフェーズ、リファレンス、サブテクニック、緩和策、検出を含む詳細情報とともに返します。 |
query_mitigations | technique_id(必須) | そのテクニックに関連付けられた緩和策を返します。 |
query_detections | technique_id(必須) | そのテクニックに関連付けられた検出を返します。 |
list_tactics | (なし) | データセット内のすべての戦術を {results, count} として返します。 |
server_info | (なし) | サーバー名、バージョン、データセットのパス、データセットが読み込まれたかどうか、読み込まれている場合はオブジェクト数を返します。 |
STIX データセットの読み取り方法
threatkb は、意図的に簡略化した STIX モデルの一部をインデックス化します。制限を明確にするため、その内容を以下に記載します。
- テクニックは
attack-patternオブジェクトです。ATT&CK ID は、mitre-attackをソース名とするexternal_referencesエントリーから取得します。戦術は、テクニックのkill_chain_phasesのフェーズ名から取得します。 - 戦術は
x-mitre-tacticオブジェクトです(x_mitre_shortnameを持ちます)。 - 緩和策は
course-of-actionオブジェクトで、mitigatesリレーションシップによってテクニックに関連付けられます。 - 検出は、テクニックを指す
detectsリレーションシップです。リレーションシップのソース(通常はx-mitre-data-component)を解決し、リンクされている場合はデータソース名も含めます。テクニックのx_mitre_detectionガイダンステキストも、検出エントリーとして返します。 - サブテクニックは、
x_mitre_is_subtechniqueまたはドット区切りの ID によって認識されます。親は、存在する場合はsubtechnique-ofリレーションシップから取得し、そうでない場合は ID のプレフィックスから取得します。
失効・非推奨フラグ、アナリティクス、データソースのカバレッジ評価、グループやソフトウェアへの帰属は対象外です。
開発
npm install
npm run build # tsc -> dist/
npm test # node test runner over test/*.test.ts, on a hand-written STIX fixture, no real dataset needed
npm run dev # run the CLI from source via tsx
ライセンス
MIT — LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。