BloodHound Model Context Protocol Server について
BloodHound MCP は、LLM を BloodHound Community Edition および BloodHound Enterprise のデータに接続する MCP サーバーです。Active Directory、Azure/Entra ID、OpenGraph 環境の攻撃パスについて自然言語で質問できます。検証環境や許可された環境で作業するセキュリティ担当者を対象としています。
主な機能
- 0113 個の複合ツールによる BloodHound データの照会
- 02Cypher クエリの実行と保存済みクエリの一覧表示
- 03LLM がオンデマンドで読み込む 10 個のリファレンスリソース
- 04攻撃パス分析向けの組み込みシステムプロンプト
- 05OpenGraph のカスタムノードと拡張機能の管理
- 06SharpHound および AzureHound コレクションのアップロード
活用シーン
- 01Domain Admins のメンバーと管理権限の確認
- 02Kerberoastable ユーザーと ADCS ESC1 パスの検索
- 03検証用ドメインでの DCSync および GPO 悪用パスの分析
MCP 対応
本プロジェクトは MCP サーバーであり、BloodHound の REST API と Neo4j グラフを、複合ツール、リソース、システムプロンプトとして MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
BloodHound MCP
LLM を BloodHound Community Edition および BloodHound Enterprise に接続する Model Context Protocol(MCP)サーバーです。自然言語で質問し、攻撃経路を分析し、Cypher クエリを実行して、Active Directory、Azure/Entra ID、OpenGraph の各環境を AI アシスタントから調査できます。
デモ
仕組み
このサーバーは、BloodHound CE の REST API と Neo4j グラフを、13 個の複合 MCP ツール、10 個の参照リソース、および攻撃的セキュリティ分析に特化したシステムプロンプトを通じて公開します。
複合ツール
各ツールは info_type パラメーターを使用して返すデータを選択するため、ツールの種類を少なく抑え、トークンを効率的に使用できます。
| ツール | info_type の選択肢 |
|---|---|
domain_info | list、info、users、groups、computers、ous、gpos、dc_syncers、foreign_admins、foreign_group_members、linked_gpos、search |
user_info | info、sessions、memberships、admin_rights、rdp_rights、dcom_rights、ps_remote_rights、sql_admin_rights、constrained_delegation、controllables、controllers |
group_info | info、members、memberships、admin_rights、rdp_rights、dcom_rights、ps_remote_rights、controllers、controllables |
computer_info | info、sessions、local_admins、rdp_rights、dcom_rights、ps_remote_rights、sql_admins、constrained_delegation、controllables、controllers |
ou_info | info、users、groups、computers、gpos |
gpo_info | info、controllers |
graph_analysis | shortest_path、edge_composition、search |
adcs_info | templates、esc_paths |
cypher_query | run、saved_list、saved_get |
data_quality | stats、platform_list、platform_info |
asset_groups | list、members、custom_selectors |
custom_nodes | list、get、create、update、delete、validate_icon、extension_list、extension_upsert、extension_delete、extension_edges |
file_upload | upload、start_job、upload_to_job、upload_bytes、upload_bytes_to_job、end_job |
リソース
LLM が必要に応じて読み込む参照資料です。追加の API 呼び出しは不要です。
| リソース URI | 内容 |
|---|---|
bloodhound://cypher/reference | Cypher の構文、スキーマ、プロパティ名、パターン |
bloodhound://cypher/offensive-queries | 実績のあるテンプレート:DCSync、Kerberoasting、GPO の悪用、委任、ADCS、シャドウ認証情報、NTLM リレーなど |
bloodhound://guides/ad | AD のノードタイプと関係のクイックリファレンス |
bloodhound://guides/ad-methodology | AD の攻撃手法とワークフローの全容 |
bloodhound://guides/azure | Azure/Entra ID 分析のクイックリファレンス |
bloodhound://guides/azure-methodology | Azure 攻撃チェーンの全容 |
bloodhound://guides/adcs | ADCS ESC1~ESC13 のクイックリファレンス |
bloodhound://guides/adcs-methodology | ESC の詳細な分析と悪用 |
bloodhound://opengraph/guide | カスタムノードのスキーマ設計とベストプラクティス |
bloodhound://opengraph/examples | SQL Server と Web アプリの OpenGraph の例 |
システムプロンプト
bloodhound_assistant プロンプトには、LLM の動作を導くルールが含まれています。
- 攻撃シナリオの Cypher を記述する前に、攻撃クエリライブラリを読み込む
- グループメンバーシップと
admincountを確認せずに、権限に関する結論を出さない - BloodHound のプロパティ命名規則(
hasspn、enabled、admincountはすべて小文字)に従う - フィルターで大文字の名前が保存されている形式(
DOMAIN [email protected])を適切に処理する - DCSync と GPO のエッジを適切なパターンでたどる
前提条件
- Python 3.11+
- uv
- データを読み込み済みの BloodHound Community Edition インスタンス
- BloodHound API 認証情報(Token ID + Token Key)
インストール
最初にクローンせず、Git から MCP サーバーを直接実行します。
export BLOODHOUND_DOMAIN=your-bloodhound-instance.domain.com
export BLOODHOUND_TOKEN_ID=your-token-id
export BLOODHOUND_TOKEN_KEY=your-token-key
uvx --from git+https://github.com/mwnickerson/bloodhound_mcp bloodhound-mcp
再現可能な統合を行うには、リポジトリ URL の後にコミットを追加します。たとえば、git+https://github.com/mwnickerson/bloodhound_mcp@<commit> のようにします。
uvx によるインストールでは、別のチェックアウトにある .env は読み込まれないため、MCP クライアントを起動するプロセスで認証情報の環境変数を設定する必要があります。
開発する場合は、リポジトリをクローンして環境をインストールします。
git clone https://github.com/mwnickerson/bloodhound_mcp.git
cd bloodhound-mcp
uv sync
プロジェクトのルートに .env ファイルを作成します。
BLOODHOUND_DOMAIN=your-bloodhound-instance.domain.com
BLOODHOUND_TOKEN_ID=your-token-id
BLOODHOUND_TOKEN_KEY=your-token-key
起動時に、MCP サーバーは /api/v2/self に対して署名付きの読み取り専用リクエストを送信します。認証情報の無効、接続の失敗、TLS の失敗が発生すると、MCP ツール呼び出しを受け付ける前にサーバーは停止します。起動リクエストは 10 秒でタイムアウトします。
サーバーのデフォルトはポート 443 の https です。必要に応じて上書きしてください。
BLOODHOUND_PORT=8080
BLOODHOUND_SCHEME=http
追加の設定がない場合、TLS 証明書の検証は有効のままです。自己署名証明書を使用する信頼できるラボ環境では、検証を明示的に無効にできます。
BLOODHOUND_VERIFY_TLS=false
検証を無効にすると通信のセキュリティが低下し、警告がログに記録されます。信頼できないネットワークでは、このオプションを使用しないでください。
設定
Claude Desktop
claude_desktop_config.json に追加します。
{
"mcpServers": {
"bloodhound_mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/mwnickerson/bloodhound_mcp",
"bloodhound-mcp"
]
}
}
}
Claude Code
~/.claude/mcp.json に追加します。
{
"mcpServers": {
"bloodhound_mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/mwnickerson/bloodhound_mcp",
"bloodhound-mcp"
]
}
}
}
OpenAI Codex CLI
~/.codex/config.toml(プロジェクト単位の設定の場合は .codex/config.toml)に追加します。
[mcp_servers.bloodhound_mcp]
command = "uvx"
args = ["--from", "git+https://github.com/mwnickerson/bloodhound_mcp", "bloodhound-mcp"]
サーバーは Codex を起動したプロセスから認証情報を引き継ぎます。代わりに MCP の設定内に保持するには、認証情報を明示的に渡します。
[mcp_servers.bloodhound_mcp]
command = "uvx"
args = ["--from", "git+https://github.com/mwnickerson/bloodhound_mcp", "bloodhound-mcp"]
[mcp_servers.bloodhound_mcp.env]
BLOODHOUND_DOMAIN = "your-bloodhound-instance.domain.com"
BLOODHOUND_TOKEN_ID = "your-token-id"
BLOODHOUND_TOKEN_KEY = "your-token-key"
MCP Inspector
- コマンド:
uvx - 引数:
--from git+https://github.com/mwnickerson/bloodhound_mcp bloodhound-mcp
BloodHound API トークン
- BloodHound CE または BloodHound Enterprise にログインします
- Administration → API Tokens に移動します
- 新しいトークンを作成し、Token ID と Token Key を
.envにコピーします
使用方法
クエリの例
偵察:
What domains are in BloodHound?
Show me all Domain Admins in CORP.LOCAL
Find all kerberoastable users
Which computers have unconstrained delegation?
ユーザーとグループの分析:
What admin rights does [email protected] have?
Show me all sessions for the administrator account
What groups is this user a member of?
Who controls the IT ADMINS group?
攻撃経路の分析:
Find the shortest path from [email protected] to Domain Admins
Who has DCSync rights in the domain?
Show me all GPO abuse paths
Find ADCS ESC1 paths in the domain
カスタム Cypher:
Run a Cypher query to find all users with SPN set and admincount=1
Find all computers where DOMAIN USERS can RDP
コレクションのアップロード:
Upload this SharpHound ZIP from /tmp/sharphound.zip into BloodHound
Upload these base64-encoded SharpHound ZIP bytes as sharphound.zip
Start an upload job, upload these base64 JSON bytes as users.json, then end the job
SharpHound または AzureHound のコレクションをすでにメモリに保持しているエージェントは、コレクションのバイト列を base64 エンコードして、次を呼び出します。
file_upload(
info_type="upload_bytes",
file_name="sharphound.zip",
file_bytes_base64="<base64-encoded zip bytes>"
)
複数ファイルのジョブでは、start_job を呼び出し、各 base64 ペイロードに対して upload_bytes_to_job を呼び出した後、end_job を呼び出します。
OpenGraph のサポート
BloodHound 8.0+ は OpenGraph によるカスタムノードタイプをサポートしており、Active Directory と同じグラフ内で、AD 以外のインフラストラクチャ(クラウドリソース、データベース、カスタムアセット)をモデル化できます。
custom_nodes ツールは、/api/v2/custom-nodes を介してノードタイプの表示設定に対する従来の CRUD 操作を処理します。OpenGraph 拡張機能の管理が有効な BloodHound v9.0.0+ インスタンスでは、同じ複合ツールで extension_list、extension_upsert、extension_delete、extension_edges を介して /api/v2/extensions および /api/v2/extensions-edges もサポートします。
スキーマ設計と Cypher のパターンには、bloodhound://opengraph/guide および bloodhound://opengraph/examples リソースを使用してください。構造化された OpenGraph スキーマでは、まず拡張機能のスキーマを upsert し、その後 file_upload でコレクションデータを取り込みます。
BloodHound Enterprise または BloodHound CE 8.0 以降が必要です。 OpenGraph 拡張機能の管理には BloodHound 9.0.0+ が必要で、対応する機能フラグを有効にする必要があります。
セキュリティに関する考慮事項
このツールで処理された BloodHound データは、LLM プロバイダーのサーバーに送信されます。リスクを評価していない場合は、本番環境の AD データに使用しないでください。
推奨される使用例:
- ラボ環境(GOAD、DetectionLab、カスタムレンジ)
- トレーニングと認定試験の準備
- 研究とツール開発
- 本番以外のドメイン分析
ベストプラクティス:
- BloodHound API トークンを定期的にローテーションする
- 可能であれば読み取り専用の API トークンを使用する
- 機密性の高い環境ではローカル LLM ブリッジを検討する
テスト
# Full test suite
uv run pytest
# Specific modules
uv run pytest tests/test_main_mcp_tools.py -v
uv run pytest tests/test_bloodhound_api.py -v
# Integration tests (requires a live BloodHound instance)
BLOODHOUND_INTEGRATION_TESTS=1 uv run pytest tests/test_integration.py -v
ロードマップ
- 直接 Neo4j にアクセスするモード(複雑なグラフ探索では REST API を迂回)
- Azure/Entra ID ツールの強化
- ADCS 攻撃経路のカバー範囲を拡大
- OpenGraph の例とテンプレートを追加
コントリビューション
コントリビューションを歓迎します。大きな変更を提出する前に、Issue を作成してご相談ください。
- リポジトリをフォークします
- 機能ブランチを作成します
- 新しい機能のテストを追加します
uv run pytestを実行し、すべてのテストが成功することを確認します- プルリクエストを提出します
謝辞
- BloodHound Community Edition を提供した SpecterOps
- GOAD(テストに使用)を提供した Orange Cyberdefense
- FastMCP を提供した @jlowin
- Mythic MCP プロジェクトを通じて MCP の着想を与えてくれた @xpn
ライセンス
GNU General Public License v3.0 — 詳細は LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。