mwnickerson/bloodhound_mcp

GitHub: mwnickerson/bloodhound_mcp

一个将 LLM 连接到 BloodHound 的 MCP 服务器,支持用自然语言进行 Active Directory 和 Azure 环境的攻击路径分析。

Stars: 115 | Forks: 25

# BloodHound MCP [![许可证:GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](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报告查看器, 大语言模型, 攻击路径分析, 逆向工具