mcpField
M
mapping-attack-paths-with-bloodhound-ce

mapping-attack-paths-with-bloodhound-ce

github.com/mukul975安全35.2k44 次安装8 周前更新
代码仓库

关于 mapping-attack-paths-with-bloodhound-ce

面向授权安全测试人员的 BloodHound CE 使用技能,用于绘制 Active Directory 与 Entra ID 中的权限提升路径。涵盖数据采集、图分析和路径排序,也包括跨混合身份环境的路径。

主要功能

  1. 01使用 SharpHound 采集 AD 数据
  2. 02使用 AzureHound 采集 Entra ID 数据
  3. 03分析内置及自定义 Cypher 路径
  4. 04将已攻陷主体标记为 Owned
  5. 05排序并记录权限提升路径

适用场景

  1. 01从立足点追踪至 Domain Admins 的路径
  2. 02评估同步 AD 与 Entra ID 的风险
  3. 03在紫队演练中验证检测

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill mapping-attack-paths-with-bloodhound-ce

安装后在 Claude Code 中输入/mapping-attack-paths-with-bloodhound-ce确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

详细介绍

使用 BloodHound CE 绘制攻击路径

法律声明: 本技能仅用于经授权的安全测试、红队演练和教育目的。Active Directory 和 Entra ID 侦察会揭示可导致域/租户完全沦陷的权限提升链。仅限针对你拥有或已获得明确书面授权(测试授权书)的环境使用。未经授权的使用违反《计算机欺诈与滥用法》及同等法律。

概述

BloodHound Community Edition (CE) 是 SpecterOps 推出的基于图的攻击路径管理平台。它将安全主体(用户、计算机、组、OU、GPO、Entra ID 用户/组/应用/角色)建模为节点,将它们之间的权限、组成员关系、会话、信任关系和 ACL 建模为边。通过将 Active Directory 和 Entra ID 抽象为有向图,BloodHound 把“这个低权限账户能否到达 Domain Admins / Global Administrator?”这一问题转化为最短路径查询,从而找出人工审查会遗漏的权限提升链。

BloodHound CE 用容器化技术栈取代了仅依赖 Neo4j 的旧版 BloodHound:一个 Go API 服务、一个 PostgreSQL 关系型存储和一个 Neo4j 图数据库,全部位于现代化的 Web UI 和 REST API 之后。数据由 SpecterOps 维护的两个收集器采集:

  • SharpHound(CE/.NET 收集器,在已加入域的 Windows 主机上或针对其运行)采集本地 AD:对象、组成员关系、ACL、会话、本地管理员权限、信任关系、GPO、证书服务(ADCS)以及 LAPS 可读性。它输出一个包含 JSON 的 ZIP 文件。
  • AzureHound(跨平台 Go 二进制文件)通过 Microsoft Graph 和 Azure REST API 采集 Entra ID 和 Azure Resource Manager 数据:用户、组、应用注册、服务主体、目录角色、订阅/角色分配以及密钥保管库。它输出单个 JSON 文件。

在近期的 CE 版本中,当 AD 域及其同步的 Entra ID 租户都已被摄取时,BloodHound 会自动渲染 混合攻击路径——跨越本地/云边界的链路(例如,一个本地用户同步到持有特权 Entra 角色的云账户)。映射到 MITRE ATT&CK,核心活动是 T1069 – 权限组发现,并得到 T1087(账户发现)、T1482(域信任发现)和 T1018(远程系统发现)的支持。

何时使用

  • 在获得任何域立足点或 Entra 凭据后,于经授权的内部渗透测试或红队演练期间
  • 当你需要优先排列从已拥有的主体到 Tier-0 资产(Domain Admins、Global Administrator)的权限提升路径时
  • 在评估本地 AD 同步到 Entra ID 的混合身份风险时
  • 在紫队演练期间,验证检测规则在采集阶段和路径执行步骤上是否触发
  • 在为防御方客户产出攻击路径证据和修复建议时

前提条件

  • 覆盖 AD/Entra 侦察的授权范围
  • 一个立足点:任何有效的域用户(用于 SharpHound)和/或有效的 Entra 凭据或令牌(用于 AzureHound)
  • 分析工作站上安装 Docker + Docker Compose
  • 收集器:
    # Deploy BloodHound CE (pulls Postgres, Neo4j, and the BloodHound API)
    curl -L https://ghst.ly/getbhce -o docker-compose.yml
    docker compose pull
    docker compose up -d
    # Reveal the randomly generated initial admin password
    docker compose logs bloodhound | grep -i "Initial Password"
    
    # AzureHound (download the release binary for your OS from the GitHub releases page)
    #   https://github.com/SpecterOps/AzureHound/releases
    chmod +x ./azurehound
    
    # SharpHound CE collector: download SharpHound.zip from the BloodHound CE
    # web UI (Administration -> Download Collectors), transfer to a domain-joined host.
    

目标

  • 部署 BloodHound CE 并通过身份验证访问 Web UI 和 API
  • 使用 SharpHound 采集 AD 数据,使用 AzureHound 采集 Entra 数据
  • 摄取两个数据集并将已失陷的主体标记为 Owned
  • 运行内置分析(到 Domain Admins 的最短路径、可 Kerberoast 的账户、ADCS 滥用)
  • 编写自定义 Cypher 查询以发现定制和混合攻击路径
  • 为演练报告优先排列并记录权限提升路径

MITRE ATT&CK 映射

ID技术在此技能中的应用
T1069权限组发现枚举 AD/Entra 组成员身份以及主体之间的权限,以构建攻击图
T1087账户发现使用 SharpHound/AzureHound 枚举用户、计算机和服务主体
T1482域信任发现收集并分析域/林信任关系作为图的边
T1018远程系统发现枚举域计算机及其关系(会话、本地管理员)

工作流

步骤 1:部署 BloodHound CE 并登录

启动整个栈,获取生成的密码,并在首次登录时重置它。

docker compose up -d
docker compose logs bloodhound 2>&1 | grep -i "Initial Password"
# Browse to http://localhost:8080  (default user: admin)
步骤 2:使用 SharpHound 收集本地 AD 数据

在加入域的 Windows 主机上(或通过域用户的 runas/令牌),运行 CE 收集器。-c All 会收集所有收集方法;--outputdirectory 控制 ZIP 文件的落盘位置。

# Full collection
.\SharpHound.exe -c All --outputdirectory C:\Temp

# Stealthier LDAP-only collection (no host touch for sessions/local-admin)
.\SharpHound.exe -c DCOnly --outputdirectory C:\Temp

# Looped session collection to map logged-on Tier-0 users over time
.\SharpHound.exe -c Session --loop --loopduration 02:00:00 --outputdirectory C:\Temp

在 Linux 上,当你只有凭据和网络访问权限时,Python 收集器(bloodhound-ce-python)是一个替代方案:

pip install bloodhound-ce
bloodhound-ce-python -u 'jdoe' -p 'Passw0rd!' -d corp.local -ns 10.0.0.10 -c All --zip
步骤 3:使用 AzureHound 收集 Entra ID / Azure 数据

使用凭据、JWT 或刷新令牌运行 AzureHound list,写出单个 JSON 文件。

# Username/password (where allowed by CA/MFA policy)
./azurehound list -u "[email protected]" -p "$PASSWORD" -t "corp.com" -o entra.json

# Using a previously acquired JWT (e.g., from roadtx / device-code phishing)
./azurehound list --jwt "$JWT" -o entra.json

# Using a refresh token
./azurehound list --refresh-token "$REFRESH_TOKEN" -t "<tenant-id>" -o entra.json
步骤 4:将数据导入 BloodHound CE

通过 Administration -> File Ingest 上传 SharpHound ZIP 和 AzureHound JSON,或 POST 到 API。

# API ingest (after obtaining a JWT from /api/v2/login)
TOKEN=$(curl -s http://localhost:8080/api/v2/login \
  -H 'Content-Type: application/json' \
  -d '{"login_method":"secret","username":"admin","secret":"<password>"}' \
  | python -c "import sys,json;print(json.load(sys.stdin)['data']['session_token'])")

# Start a file-upload job, then PUT the collector ZIP/JSON to it
JOB=$(curl -s -X POST http://localhost:8080/api/v2/file-upload/start \
  -H "Authorization: Bearer $TOKEN" | python -c "import sys,json;print(json.load(sys.stdin)['data']['id'])")
curl -s -X PUT "http://localhost:8080/api/v2/file-upload/$JOB" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/zip' \
  --data-binary @C:/Temp/BloodHound.zip
curl -s -X POST "http://localhost:8080/api/v2/file-upload/$JOB/end" \
  -H "Authorization: Bearer $TOKEN"
步骤 5:标记已拥有的主体

在 UI 中,搜索每个已攻陷的账户/计算机,打开节点,然后切换 Mark as Owned。已拥有的主体会作为路径查找查询({owned:true})的种子。

步骤 6:运行内置分析查询

打开 Cypher 标签页,或使用搜索面板中的预建查询:

  • 到 Domain Admins 的最短路径
  • 具有到高价值目标路径的 Kerberoastable 账户
  • 可进行 AS-REP roasting 的用户
  • 具有 DCSync 权限的主体
  • ADCS 错误配置(CE 中的 ESC1-ESC8 边)
  • 具有无约束委派的计算机
步骤 7:为定制路径编写自定义 Cypher

对于内置功能未覆盖的路径,使用 Cypher,包括混合 AD 到 Entra 的链。

// Shortest path from any owned principal to Domain Admins
MATCH p=shortestPath((n {owned:true})-[*1..]->(g:Group))
WHERE g.objectid ENDS WITH "-512"
RETURN p

// Kerberoastable users (SPN set) with a path to Domain Admins
MATCH (u:User {hasspn:true})
MATCH p=shortestPath((u)-[*1..]->(g:Group))
WHERE g.objectid ENDS WITH "-512"
RETURN p

// Principals who can DCSync the domain
MATCH (n)-[:MemberOf*0..]->()-[:DCSync|GetChanges|GetChangesAll*1..]->(d:Domain)
RETURN n.name, d.name

// ACL abuse from owned principals (GenericAll/WriteDacl/WriteOwner/ForceChangePassword)
MATCH p=(n {owned:true})-[:GenericAll|GenericWrite|WriteDacl|WriteOwner|ForceChangePassword*1..]->(t)
RETURN p

// Hybrid: on-prem user synced to an Entra account holding a privileged directory role
MATCH p=(u:User)-[:SyncedToEntraUser]->(:AZUser)-[:AZHasRole|AZGlobalAdmin*1..]->(r)
RETURN p
步骤 8:优先级排序并记录

根据跳数、隐蔽性(避免像 HasSession 这样需要接触主机的嘈杂边)和工具可用性对路径进行排序。记录每条路径的主体、边、所需操作以及修复说明(例如,移除可滥用的 ACL,对账户进行分层)。

工具和资源

工具用途来源
BloodHound CE图攻击路径平台(Docker 栈)https://github.com/SpecterOps/BloodHound
SharpHound (CE)本地 AD 收集器https://github.com/SpecterOps/SharpHound
AzureHoundEntra ID / Azure RM 收集器https://github.com/SpecterOps/AzureHound
bloodhound-ce-pythonLinux Python AD 收集器https://github.com/dirkjanm/BloodHound.py
CE Quickstart官方部署文档https://bloodhound.specterops.io/get-started/quickstart/community-edition-quickstart
BloodHound Cypher 参考边/查询文档https://bloodhound.specterops.io/

关键边 / 路径类型

边 / 路径含义提权示例
MemberOf组成员身份嵌套组到达 Domain Admins
GenericAll / WriteDacl对对象的完全/ACL 控制重置特权用户的密码
ForceChangePassword可以重置另一个主体的密码接管 Tier-0 账户
HasSession用户已登录到某台计算机从已攻陷的主机窃取 DA 令牌
ADCSESC1..ESC8证书服务错误配置以特权主体身份注册证书
SyncedToEntraUser / AZGlobalAdmin混合身份边本地立足点 -> 云 Global Admin

验证标准

  • BloodHound CE 已部署且可访问;默认管理员密码已轮换
  • 已从所有范围内域收集 SharpHound 数据
  • 已为范围内租户收集 AzureHound JSON(若混合/云环境在范围内)
  • 两个数据集均已成功导入(没有失败的上传作业)
  • 已将被攻陷的主体标记为 Owned
  • 已识别通往 Domain Admins / Global Administrator 的最短路径
  • 已枚举 ADCS 和 ACL 滥用路径
  • 至少执行了一个自定义 Cypher 查询(在适用情况下包括混合查询)
  • 路径已按跳数/隐蔽性排序,并已记录修复措施

评论

支持 Markdown