BloodHound CE 内部侦察指南:从低权限立足点到域管理员的攻击路径分析实战
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本文基于开源仓库 Anthropic-Cybersecurity-Skills 中
skills/conducting-internal-reconnaissance-with-bloodhound-ce技能文档撰写,围绕其完整侦察工作流展开,并辅以仓库内配套脚本与参考文档的源码级佐证。读者将掌握:用 Docker Compose 部署 BloodHound CE、使用 SharpHound v2 与 BloodHound.py 采集 AD 数据、导入图数据库后通过内置查询与自定义 Cypher 挖掘 ACL 滥用、Kerberoasting、委派滥用等攻击路径,最终将路径按可行性与隐蔽性排序并产出可交付的报告。
法律声明:本技能仅用于授权的安全测试与教育目的。对你不拥有或未经书面许可的系统进行未授权使用属于违法行为,可能触犯计算机欺诈相关法律。
概述:为什么用图论做 AD 侦察
BloodHound Community Edition(CE)是 SpecterOps 开发的现代 Web 化 Active Directory 侦察平台,其核心思想是用图论揭示 AD 环境中隐藏的关系与攻击路径。它将安全主体(用户、计算机、组、OU、GPO)建模为节点,把权限、组成员关系、会话、信任关系和 ACL 建模为边,从而把"这个低权限账号能否到达 Domain Admins"这一经典问题,转化为一次最短路径查询——这是人工审计极易遗漏的视角。
与旧版 BloodHound 相比,BloodHound CE 使用 PostgreSQL 后端配合专用图数据库(Neo4j),提供更优的性能、现代化的 Web UI 与增强的 API 能力(详见 映射攻击路径技能 中对容器化技术栈的描述:Go API 服务器 + PostgreSQL 关系存储 + Neo4j 图数据库)。数据采集由两类收集器完成:
- SharpHound v2(面向 CE 的 .NET 收集器)采集本地 AD:对象、组成员关系、ACL、会话、本地管理员、信任、GPO、ADCS 证书服务与 LAPS 可读性,输出 ZIP 格式的 JSON;
- AzureHound(跨平台 Go 二进制)通过 Microsoft Graph 与 Azure REST API 采集 Azure AD / Entra ID 数据,输出单个 JSON 文件。
红队通常的做法是:先拿到任意域内低权限立足点,再用 BloodHound CE 采集 AD 对象与关系,将攻击路径可视化,从被攻陷账号一路延伸到 Domain Admin 等高价值目标;也可用于验证加固效果——确认已知攻击路径是否已被封堵。
何时使用
- 在安全评估中开展 AD 内部侦察(本技能的核心场景);
- 按事件响应流程处理相关安全事件后的溯源分析;
- 执行定期的安全测试或审计活动;
- 通过动手测试验证安全控制措施的有效性。
前置条件
- 熟悉红队概念与常用工具;
- 具备可供安全执行的测试或实验环境;
- Python 3.8+ 并安装所需依赖(
neo4j、bloodhound、requests,参见 API 参考); - 对目标系统拥有明确的测试授权。
目标
- 使用 Docker Compose 部署 BloodHound CE 服务器;
- 使用 SharpHound v2 或 BloodHound.py 采集 AD 数据;
- 将采集数据导入 BloodHound CE 进行图分析;
- 识别从已控主体到 Domain Admins 的最短攻击路径;
- 发现基于 ACL 的攻击路径、可 Kerberoast 的账号与委派滥用;
- 执行自定义 Cypher 查询进行高级攻击路径分析;
- 为参与方文档生成攻击路径报告。
MITRE ATT&CK 映射
本技能对应活动在 MITRE ATT&CK 框架中的技术映射如下(完整表格见 标准参考):
| 技术 ID | 技术名称 | 战术 |
|---|---|---|
| T1087.002 | 账号发现:域账号 | 发现 |
| T1069.002 | 权限组发现:域组 | 发现 |
| T1482 | 域信任发现 | 发现 |
| T1615 | 组策略发现 | 发现 |
| T1018 | 远程系统发现 | 发现 |
| T1033 | 系统所有者/用户发现 | 发现 |
| T1016 | 系统网络配置发现 | 发现 |
其中侦察活动的主体可归纳为T1069 权限组发现(枚举组间权限以构建攻击图),由 T1087(账号发现)、T1482(域信任发现)与 T1018(远程系统发现)支撑。
工作流:五阶段内部侦察
阶段 1:BloodHound CE 部署
使用 Docker Compose 部署 BloodHound CE:
curl -L https://ghst.ly/getbhce -o docker-compose.yml docker compose pull docker compose up -d访问 Web 界面:https://localhost:8080
使用默认管理员凭据登录(密码显示在 Docker 日志中):
docker compose logs | grep "Initial Password"立即修改默认管理员密码。
实现细节:该 Compose 栈实际拉取 PostgreSQL、Neo4j 与 BloodHound API 服务(在 映射攻击路径技能 的前置条件小节中可见同一部署命令及其说明)。首次登录会生成随机初始密码,需在 Web UI 中重置。日志中的初始密码通过
docker compose logs bloodhound | grep -i "Initial Password"提取。
阶段 2:使用 SharpHound v2 采集数据
将 SharpHound v2 传输到已攻陷的 Windows 主机后,按场景选择采集模式:
# 全量采集(所有方法) .\SharpHound.exe -c All --outputdirectory C:\Temp # DCOnly 采集(仅 LDAP,更隐蔽) .\SharpHound.exe -c DCOnly # 会话采集:循环映射已登录用户 .\SharpHound.exe -c Session --loop --loopduration 02:00:00 # 从指定域采集 .\SharpHound.exe -c All -d child.domain.local采集模式说明(对应 工作流参考 中的隐蔽采集方案):
| 模式 | 行为 | 隐蔽性考量 |
|---|---|---|
All | 全量采集所有方法 | 覆盖面最全,但会对多台主机产生探测流量 |
DCOnly | 仅通过 LDAP 查询域控 | 不触碰主机(无会话/本地管理员数据),噪声最低 |
Session | 采集登录会话 | 配合--loop --loopduration可在时间窗口内被动收集高层级用户的登录关系 |
| 指定域 | -d指定目标域 | 多域环境中逐个覆盖所有可到达域 |
隐蔽场景的进阶用法(来自 工作流参考):
# 定向采集:指定容器/OU .\SharpHound.exe -c All --searchbase "OU=Servers,DC=domain,DC=local" # 会话循环:长时间被动枚举 .\SharpHound.exe -c Session --loop --loopduration 04:00:00 --loopinterval 00:05:00备选方案:从 Linux 使用 BloodHound.py 采集
bloodhound-python -u user -p 'Password123' -d domain.local -ns 10.10.10.1 -c AllBloodHound.py(Python ingestor)支持all、group、localadmin、session、trusts、objectprops、acl等采集方法(见 API 参考),--zip参数可直接输出 ZIP 压缩结果。
- 将生成的 ZIP 文件外带至分析工作站。
阶段 3:数据导入与初步分析
- 通过 BloodHound CE Web 界面的File Ingest上传采集数据;
- 在界面中将已攻陷账号标记为Owned——这是后续路径查询(
{owned:true})的种子节点; - 运行内置分析查询:
- 到 Domain Admin 的最短路径(Shortest Path to Domain Admin)
- 可达 DA 的可 Kerberoast 用户(Kerberoastable Users with Path to DA)
- 可 AS-REP Roast 的用户(AS-REP Roastable Users)
- 拥有 DCSync 权限的用户(Users with DCSync Rights)
- 无约束委派的计算机(Computers with Unconstrained Delegation)
阶段 4:自定义 Cypher 查询
在 BloodHound CE 搜索栏中执行自定义 Cypher,覆盖内置查询之外的定制化分析:
// 从已控主体到 Domain Admins 的最短路径 MATCH p=shortestPath((n {owned:true})-[*1..]->(m:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"})) RETURN p // 可 Kerberoast 且可达 DA 的用户 MATCH (u:User {hasspn:true}) MATCH p=shortestPath((u)-[*1..]->(g:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"})) RETURN p // 存在 DA 成员会话的计算机 MATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"}) RETURN c.name, u.name // 基于 ACL 的攻击路径(GenericAll、WriteDACL、GenericWrite 等) MATCH p=(u:User)-[:GenericAll|GenericWrite|WriteDacl|WriteOwner|ForceChangePassword*1..]->(t) WHERE u.owned = true RETURN p // 可 DCSync 的用户 MATCH (u)-[:MemberOf*0..]->()-[:DCSync|GetChanges|GetChangesAll*1..]->(d:Domain) RETURN u.name, d.name // 启用 LAPS 但可被非管理员读取的计算机 MATCH (c:Computer {haslaps:true}) MATCH p=(u:User)-[:ReadLAPSPassword]->(c) RETURN p查询要点(对应 API 参考 中的关键 Cypher 模式):
- 路径查询使用
shortestPath+ 变长关系[*1..],可自由扩展跳跃深度; - 节点属性过滤:
hasspn(是否设置 SPN → Kerberoastable)、dontreqpreauth(是否免预认证 → AS-REP Roastable)、unconstraineddelegation(是否无约束委派)、haslaps(是否启用 LAPS); - 边类型过滤:
GenericAll|GenericWrite|WriteDacl|WriteOwner|ForceChangePassword聚合 ACL 滥用边,DCSync|GetChanges|GetChangesAll聚合 DCSync 权限边。
扩展:混合路径分析:若目标同时包含本地 AD 与其同步的 Entra ID 租户,还可执行跨越本地/云边界的混合攻击路径查询,例如
MATCH p=(u:User)-[:SyncedToEntraUser]->(:AZUser)-[:AZHasRole|AZGlobalAdmin*1..]->(r) RETURN p定位"本地用户同步至云端持有特权目录角色的账号"(详见 映射攻击路径技能 的 Step 7)。
阶段 5:攻击路径优先级排序
- 按下述标准对攻击路径评分:
- 跳跃数(越短优先级越高);
- 隐蔽性要求(避开高噪声技术,如需要触碰主机的 HasSession 边);
- 每跳的工具可用性;
- 每一步被检测到的可能性。
- 为最高优先级路径制定执行计划;
- 确定链条中每一步所需工具;
- 为每种技术规划 OPSEC 考量。
关键攻击路径类型
| 路径类型 | 描述 | 示例 |
|---|---|---|
| ACL 滥用 | 利用配置错误的 ACL | 对 DA 组拥有 GenericAll |
| Kerberoasting | 破解服务账号密码 | SPN 账号 → DA |
| AS-REP Roasting | 攻击未启用预认证的账号 | 免预认证用户 → 密码破解 |
| 委派滥用 | 利用无约束/约束委派 | 计算机 → 模拟 DA |
| GPO 滥用 | 修改应用到特权 OU 的 GPO | GPO 写入 → 在 DA 上执行代码 |
| 会话劫持 | 利用已攻陷主机上的 DA 会话 | 管理员会话 → 令牌窃取 |
完整边/路径语义对照可参考 映射攻击路径技能 的 "Key Edge / Path Types" 表:MemberOf(嵌套组成员到达 DA)、GenericAll/WriteDacl(对对象完全/ACL 控制)、ForceChangePassword(重置他人密码)、HasSession(用户登录主机 → 窃取令牌)、ADCSESC1..ESC8(证书服务配置错误)等。
工具与资源
| 工具 | 用途 | 平台 |
|---|---|---|
| BloodHound CE | Web 化图分析平台 | Docker |
| SharpHound v2 | AD 数据采集(.NET,面向 CE) | Windows |
| BloodHound.py | AD 数据采集(Python) | Linux |
| AzureHound | Azure AD / Entra ID 数据采集 | 跨平台 |
| PlumHound | 自动化 BloodHound 报告 | Python |
| BloodHound Query Library | 社区 Cypher 查询库 | Web |
配套 Python 依赖(来自 API 参考):
| 库 | 安装 | 用途 |
|---|---|---|
| neo4j | pip install neo4j | Neo4j 图数据库驱动,执行 Cypher |
| bloodhound | pip install bloodhound | Python ingestor,AD 数据采集 |
| requests | pip install requests | BloodHound CE REST API 客户端 |
仓库配套脚本:从查询到报告的自动化
本技能目录下提供两个可直接用于实战的 Python 脚本,分别覆盖自动化侦察查询与离线攻击路径分析报告。
自动化侦察:agent.py
agent.py 是一个命令行侦察代理,既能调用bloodhound-python采集数据,也能直连 Neo4j 执行四类核心查询。核心用法:
# 先采集后分析(需提供 AD 凭据与 DC IP) python agent.py --collect --domain domain.local --ad-user user \ --ad-pass 'Password123' --dc-ip 10.10.10.1 \ --neo4j-uri bolt://localhost:7687 --neo4j-user neo4j \ --neo4j-password '<neo4j密码>' --output report.json # 仅分析已导入的数据 python agent.py --neo4j-uri bolt://localhost:7687 \ --neo4j-user neo4j --neo4j-password '<neo4j密码>' --output report.json脚本内部封装了与 SKILL.md 阶段 4 同源的 Cypher 逻辑,可从源码层面印证查询实现:
query_shortest_path_to_da():MATCH p=shortestPath((u:User)-[*1..]->(g:Group {name:$group})),额外过滤u.enabled = true,按跳跃数升序返回前 10 个用户;query_kerberoastable_users():WHERE u.hasspn = true AND u.enabled = true,同时返回serviceprincipalnames与admincount,按管理员计数降序排序;query_unconstrained_delegation():WHERE c.unconstraineddelegation = true,附带操作系统信息;query_as_rep_roastable():WHERE u.dontreqpreauth = true AND u.enabled = true。
collect_bloodhound_data()底层通过subprocess调用bloodhound-python -d <domain> -u <user> -p <pass> -ns <dc_ip> -c <method> --zip,设置了 300 秒超时,并会对FileNotFoundError(未安装 bloodhound)与超时分别返回结构化错误——这与 SKILL.md 阶段 2 的 Linux 采集命令完全对应,且自动附加了--zip参数。
离线分析:process.py
process.py 无需图数据库,直接读取 BloodHound 导出的 JSON 数据(用户与计算机文件)生成优先级报告:
python process.py bloodhound_users.json [bloodhound_computers.json]脚本会统计用户侧指标(总数、启用数、Kerberoastable、AS-REP Roastable、AdminCount、PasswordNotRequired)与计算机侧指标(无约束/约束委派、LAPS 启用/禁用、不受支持操作系统、域控清单),并按固定优先级输出攻击向量清单:Kerberoastable 账号 → AS-REP Roastable 账号 → 无约束委派滥用 → ACL 路径 → GPO 修改路径 → 不受支持操作系统利用。analyze_computers()中不受支持操作系统的判定覆盖2003/2008/xp/vista/windows 7关键词,可直接用于识别过时主机。
两个脚本的输出结构,均与 报告模板 中的字段(Kerberoastable、AS-REP Roastable、Unconstrained Delegation、DCSync Rights、Unsupported OS)对齐,便于一键生成交付物。
报告与文档化
报告模板 提供了标准化的交付骨架,包含四个核心区块:
- 参与方详情:活动名称、目标域、采集日期、BloodHound CE 版本、SharpHound 版本;
- 采集摘要:用户、计算机、组、GPO、OU、域、信任、会话的计数;
- 已识别攻击路径:按路径描述、跳跃数、起始/终止节点、风险等级逐条记录;
- 高价值发现:Kerberoastable、AS-REP Roastable、无约束委派、DCSync 权限、不受支持操作系统;
- 修复优先级:按 Critical / High / Medium 分级给出修复建议。
完整工作流总览(部署 → 采集 → 导入 → 分析 → 攻击规划 → 报告)可参考 工作流参考 中的结构图。
验证标准
完成本技能后应逐项核对:
- BloodHound CE 已部署且可访问;
- 已从范围内所有域采集 SharpHound v2 数据;
- 数据成功导入 BloodHound CE;
- 已控主体已在界面中标记为 Owned;
- 已识别到 Domain Admin 的最短路径;
- 已记录基于 ACL 的攻击路径;
- 已列出可 Kerberoast 与 AS-REP Roast 的账号;
- 已执行自定义 Cypher 查询进行高级分析;
- 攻击路径已按可行性与隐蔽性排序;
- 已生成包含所有路径与证据的报告。
结语
BloodHound CE 把 AD 侦察从"逐项枚举"升级为"图论寻径":先用 SharpHound v2(Windows)或 BloodHound.py(Linux)完成低噪声数据采集,再借助内置查询与自定义 Cypher 从已控主体出发定位通往 Domain Admins 的最短路径,最后依据跳跃数与隐蔽性对路径排序并形成报告。配合本仓库的 agent.py、process.py 与 报告模板,一个从立足点到交付物的完整侦察闭环即可在授权环境中落地。请始终牢记:仅在拥有明确书面授权的环境中执行此类侦察活动。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考