| name | conducting-internal-reconnaissance-with-bloodhound-ce |
| description | 使用 BloodHound 社区版(Community Edition)进行内部活动目录(Active Directory)侦察,绘制攻击路径图,识别权限提升链,并发现域环境中的错误配置。 |
| domain | cybersecurity |
| subdomain | red-teaming |
| tags | ["red-team","reconnaissance","bloodhound","active-directory","attack-paths","privilege-escalation","graph-analysis"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 BloodHound CE 进行内部侦察
概述
BloodHound 社区版(CE)是由 SpecterOps 开发的现代化基于 Web 的活动目录侦察平台,使用图论来揭示 AD 环境中隐藏的关系和攻击路径。与传统 BloodHound 应用不同,BloodHound CE 使用带有专用图数据库的 PostgreSQL 后端,提供更好的性能、现代化的 Web UI 和增强的 API 能力。红队使用 BloodHound CE 收集 AD 对象、ACL、会话、组成员关系和信任关系,然后可视化从低权限账户到高价值目标(如域管理员)的攻击路径。SharpHound 收集器(CE 版使用 v2)从活动目录收集数据,而 AzureHound 则从 Azure AD / Entra ID 环境收集数据。
目标
- 使用 Docker Compose 部署 BloodHound CE 服务器
- 使用 SharpHound v2 或 BloodHound.py 收集 AD 数据
- 将收集的数据导入 BloodHound CE 进行图分析
- 识别从已控制主体到域管理员的最短攻击路径
- 发现基于 ACL 的攻击路径、Kerberoastable 账户和委派滥用
- 执行自定义 Cypher 查询进行高级攻击路径分析
- 生成攻击路径报告用于演练记录
MITRE ATT&CK 映射
- T1087.002 - 账户发现:域账户
- T1069.002 - 权限组发现:域组
- T1482 - 域信任发现
- T1615 - 组策略发现
- T1018 - 远程系统发现
- T1033 - 系统所有者/用户发现
- T1016 - 系统网络配置发现
实施步骤
阶段一: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"
- 立即修改默认管理员密码
阶段二:使用 SharpHound v2 收集数据
- 将 SharpHound v2 传输到已控制的 Windows 主机:
# 执行全量收集
.\SharpHound.exe -c All --outputdirectory C:\Temp
# 仅 DC 收集(仅 LDAP,更隐蔽)
.\SharpHound.exe -c DCOnly
# 会话收集,用于映射已登录用户
.\SharpHound.exe -c Session --loop --loopduration 02:00:00
# 从特定域收集
.\SharpHound.exe -c All -d child.domain.local
- 替代方案:从 Linux 使用 BloodHound.py:
bloodhound-python -u user -p 'Password123' -d domain.local -ns 10.10.10.1 -c All
- 将生成的 ZIP 文件导出到分析工作站
阶段三:数据导入与初步分析
- 通过 BloodHound CE Web 界面上传收集的数据(文件摄入)
- 在界面中将已控制的账户标记为"Owned"
- 运行内置分析查询:
- 到域管理员的最短路径
- 具有到 DA 路径的 Kerberoastable 用户
- AS-REP Roastable 用户
- 具有 DCSync 权限的用户
- 具有非约束委派的计算机
阶段四:自定义 Cypher 查询
- 在 BloodHound CE 搜索栏中执行自定义 Cypher 查询:
// 查找从已控制主体到域管理员的最短路径
MATCH p=shortestPath((n {owned:true})-[*1..]->(m:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"}))
RETURN p
// 查找具有到 DA 路径的 Kerberoastable 用户
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
阶段五:攻击路径优先级排序
- 按以下标准对已识别的攻击路径评分:
- 跳数(越少 = 优先级越高)
- 隐蔽性要求(避免嘈杂的技术)
- 每一跳的工具可用性
- 每个步骤的检测可能性
- 为优先级最高的路径制定执行计划
- 识别攻击链中每个步骤所需的工具
- 为每种技术规划 OPSEC 注意事项
工具与资源
| 工具 | 用途 | 平台 |
|---|
| BloodHound CE | 基于 Web 的图分析平台 | Docker |
| SharpHound v2 | AD 数据收集(.NET,用于 CE) | Windows |
| BloodHound.py | AD 数据收集(Python) | Linux |
| AzureHound | Azure AD / Entra ID 数据收集 | 跨平台 |
| PlumHound | 自动化 BloodHound 报告 | Python |
| BloodHound 查询库 | 社区 Cypher 查询存储库 | Web |
关键攻击路径类型
| 路径类型 | 描述 | 示例 |
|---|
| ACL 滥用 | 利用错误配置的 ACL | DA 组上的 GenericAll |
| Kerberoasting | 破解服务账户密码 | SPN 账户 → DA |
| AS-REP Roasting | 攻击不需要预认证的账户 | 无预认证用户 → 密码破解 |
| 委派滥用 | 利用非约束/约束委派 | 计算机 → 模拟 DA |
| GPO 滥用 | 修改应用于特权 OU 的 GPO | GPO 写入 → DA 上代码执行 |
| 会话劫持 | 利用已控制主机上的 DA 会话 | 管理员会话 → 令牌窃取 |
验证标准