mwnickerson/bloodhound_mcp
GitHub: mwnickerson/bloodhound_mcp
一个将 LLM 连接到 BloodHound 的 MCP 服务器,支持用自然语言进行 Active Directory 和 Azure 环境的攻击路径分析。
Stars: 115 | Forks: 25
# BloodHound MCP
[](https://www.gnu.org/licenses/gpl-3.0)
一个将 LLM 连接到 BloodHound Community Edition 和 BloodHound Enterprise 的 Model Context Protocol (MCP) 服务器。用自然语言提问,获取攻击路径分析,运行 Cypher 查询,并探索 Active Directory、Azure/Entra ID 和 OpenGraph 环境 —— 所有这些都可以在你的 AI 助手中完成。
## 演示
[观看演示视频](https://youtu.be/eZBT0Iw9CMA)
## 工作原理
该服务器通过一组 **13 个复合 MCP 工具**、**10 个参考资源**以及专为攻击性安全分析调优的**系统提示词**,暴露了 BloodHound CE 的 REST API 和 Neo4j 图。
### 复合工具
每个工具使用 `info_type` 参数来选择返回的数据,从而保持工具表面精简并提高 token 效率:
| 工具 | `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`, `end_job` |
### 资源
LLM 按需加载的参考资料 —— 无需额外的 API 调用:
| 资源 URI | 内容 |
|---|---|
| `bloodhound://cypher/reference` | Cypher 语法、schema、属性名称、模式 |
| `bloodhound://cypher/offensive-queries` | 经过实战测试的模板:DCSync、Kerberoasting、GPO 滥用、委派、ADCS、shadow credentials、NTLM relay 等 |
| `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` | 自定义节点 schema 设计和最佳实践 |
| `bloodhound://opengraph/examples` | SQL Server 和 Web App OpenGraph 示例 |
### 系统提示词
`bloodhound_assistant` 提示词包含指导 LLM 的行为规则:
- 在为任何攻击场景编写 Cypher 之前,先加载攻击性查询库
- 在未检查组成员身份和 `admincount` 的情况下,绝不得出权限结论
- 遵守 BloodHound 的属性命名规范(`hasspn`、`enabled`、`admincount` —— 全小写)
- 在过滤器中正确处理大写名称存储(`DOMAIN ADMINS@CORP.LOCAL`)
- 遵循正确的 DCSync 和 GPO 边缘遍历模式
## 前置条件
- Python 3.11+
- [uv](https://docs.astral.sh/uv/)
- 已加载数据的 BloodHound Community Edition 实例
- BloodHound API 凭证(Token ID + Token Key)
## 安装说明
```
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
```
服务器默认使用 `https` 和端口 `443`。如有需要可覆盖:
```
BLOODHOUND_PORT=8080
BLOODHOUND_SCHEME=http
```
## 配置
### Claude Desktop
添加到 `claude_desktop_config.json`:
```
{
"mcpServers": {
"bloodhound_mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/bloodhound-mcp",
"run",
"main.py"
]
}
}
}
```
### Claude Code
添加到 `~/.claude/mcp.json`:
```
{
"mcpServers": {
"bloodhound_mcp": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/bloodhound-mcp",
"run",
"main.py"
]
}
}
}
```
### OpenAI Codex CLI
添加到 `~/.codex/config.toml`(如果是项目级别的配置则为 `.codex/config.toml`):
```
[mcp_servers.bloodhound_mcp]
command = "uv"
args = ["--directory", "/path/to/bloodhound-mcp", "run", "main.py"]
```
由于服务器会自动从 `.env` 加载凭证,因此不需要 `env` 块。如果你希望显式传递它们:
```
[mcp_servers.bloodhound_mcp]
command = "uv"
args = ["--directory", "/path/to/bloodhound-mcp", "run", "main.py"]
[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
- **命令:** `uv`
- **参数:** `--directory /path/to/bloodhound-mcp run main.py`
### BloodHound API Token
1. 登录 BloodHound CE 或 BloodHound Enterprise
2. 导航至 **Administration** → **API Tokens**
3. 创建新 token 并将 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 jsmith@corp.local 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 jsmith@corp.local 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
```
## 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`。
使用 `bloodhound://opengraph/guide` 和 `bloodhound://opengraph/examples` 资源进行 schema 设计和 Cypher 模式查询。对于结构化的 OpenGraph schema,请先 upsert 扩展 schema,然后使用 `file_upload` 摄入集合数据。
## 安全考量
通过此工具处理的 BloodHound 数据将传输到你 LLM 提供商的服务器。**除非你已经评估了该风险,否则请勿将其用于生产环境的 AD 数据。**
推荐用例:
- 实验室环境(GOAD、DetectionLab、自定义范围)
- 培训和认证备考
- 研究和工具开发
- 非生产域分析
最佳实践:
- 定期轮换 BloodHound API token
- 尽可能使用只读 API token
- 对于敏感环境,考虑使用本地 LLM 桥接
## 测试
```
# 完整测试套件(307 个测试)
uv run pytest
# 特定模块
uv run pytest tests/test_main_mcp_tools.py -v
uv run pytest tests/test_bloodhound_api.py -v
# 集成测试(需要运行中的 BloodHound 实例)
BLOODHOUND_INTEGRATION_TESTS=1 uv run pytest tests/test_integration.py -v
```
## 路线图
- [ ] 直接 Neo4j 访问模式(绕过 REST API 进行复杂的图遍历)
- [ ] 增强的 Azure/Entra ID 工具
- [ ] 改进的 ADCS 攻击路径覆盖
- [ ] 更多 OpenGraph 示例和模板
## 鸣谢
- **SpecterOps** 提供的 [BloodHound Community Edition](https://github.com/SpecterOps/BloodHound)
- **Orange Cyberdefense** 提供的 [GOAD](https://github.com/Orange-Cyberdefense/GOAD)(用于测试)
- **@jlowin** 提供的 [FastMCP](https://github.com/jlowin/fastmcp)
- **@xpn** 通过 Mythic MCP 项目提供的 MCP 灵感
## 许可证
GNU General Public License v3.0 —— 有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:Active Directory, Azure, DLL 劫持, MCP, Plaso, Web报告查看器, 大语言模型, 攻击路径分析, 逆向工具