Sunny3303/BlueHound
GitHub: Sunny3303/BlueHound
BlueHound 是一款基于 BloodHound/SharpHound 数据的 Active Directory 威胁建模引擎,用于自动检测攻击路径、权限暴露风险并量化安全态势。
Stars: 0 | Forks: 0
# BlueHound
**Active Directory 威胁建模引擎** — 分析 SharpHound 数据以检测针对 Tier-0 资产的攻击路径,对行为风险进行评分,并随着时间的推移跟踪安全态势。
```
██████╗ ██╗ ██╗ ██╗███████╗██╗ ██╗ ██████╗ ██╗ ██╗███╗ ██╗██████╗
██╔══██╗██║ ██║ ██║██╔════╝██║ ██║██╔═══██╗██║ ██║████╗ ██║██╔══██╗
██████╔╝██║ ██║ ██║█████╗ ███████║██║ ██║██║ ██║██╔██╗ ██║██║ ██║
██╔══██╗██║ ██║ ██║██╔══╝ ██╔══██║██║ ██║██║ ██║██║╚██╗██║██║ ██║
██████╔╝███████╗╚██████╔╝███████╗██║ ██║╚██████╔╝╚██████╔╝██║ ╚████║██████╔╝
╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝
```
## 功能
- **五大检测类别**,涵盖 12 条经过单独调优的规则,涉及权限暴露、Kerberos 滥用、委派配置不当、ADCS 利用以及 Tier-0 可达性
- **四维行为风险评分** — 隐蔽性 (30%)、可利用性 (25%)、持久化 (25%)、爆炸半径 (20%) — 生成归一化的 0–10 全局评分
- **快照差异比对引擎**,用于在多次评估之间检测权限蔓延、新攻击路径以及 Tier-0 暴露倒退
- **REST API + React 仪表盘** — 预构建的前端直接从 Python 包中提供服务,无需单独的服务器
- 对所有 Neo4j 变更执行**写入保护**,确保分析运行始终为只读
- **PyPI 分发** — 只需一条 `pip install bluehound` 即可安装所有内容,包括已编译的仪表盘
## 快速开始
### PyPI
```
pip install bluehound
bluehound --version
```
### 从源码构建
```
git clone https://github.com/vShresthh/BlueHound
cd bluehound
pip install -e ".[dev]"
```
### Windows (PowerShell)
```
.\install.ps1
```
### Linux / macOS (Shell)
```
chmod +x install.sh && ./install.sh
```
## 使用说明
```
# 1. 将 SharpHound collection ZIP 导入 Neo4j
bluehound ingest XXXXXXXXXXXXXXXXX.zip
# 2. 分析导入的 snapshot
bluehound analyze snapshots/20XX-XX-XX_XXXXXX/
# 3. 打开 dashboard
# http://localhost:8080
# 4. 手动针对已保存的结果启动 dashboard 服务器
bluehound serve --port 8080
# 5. 对比两个 snapshot 的差异以追踪 posture 变化
bluehound diff .bluehound\results\baseline .bluehound\results\current
# 6. 列出所有 snapshot
bluehound list-snapshots
```
## 架构
```
SharpHound ZIP
│
▼
┌──────────────────┐
│ Ingestion │ SharpHoundIngester — normalizes, validates,
│ Layer │ writes to Neo4j, saves snapshot metadata
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Graph │ GraphView — cached, typed, read-only view
│ Abstraction │ over Neo4j nodes and relationships
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Detection │ DetectionContext — pre-computed indexes:
│ Context │ admin_to_computers, group_closure, tier0_sids,
│ │ ACE lookups, certificate template data
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Detection │ DetectionEngine orchestrates 5 category modules
│ Engine │ → 12 rules → List[Finding]
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Risk Scoring │ EdgeRiskEvaluator + RiskEngine → RiskResult
│ Engine │ (global score, exposure level, attack paths)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Output │ ThreatModelAssembler → ThreatModelResult JSON
│ Assembly │ saved to .bluehound/results/
└────────┬─────────┘
│
├───────────────────────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────────┐
│ Diff Engine │ │ API + Dashboard │
│ (optional) │ │ FastAPI + React │
│ SnapshotDiff │ │ localhost:8080 │
└──────────────────┘ └──────────────────────┘
```
## 检测类别索引
| ID | 类别 | 规则 | MITRE 覆盖范围 |
|----|----------|-------|----------------|
| **A** | 权限与身份暴露 | A1 过多的本地管理员 · A2 孤立的特权账户 · A3 隐藏的特权成员身份 · A4 Tier-0 上的危险 ACE | T1078, T1484.001 |
| **B** | Kerberos 滥用 | B1 可被 Kerberoasting 的账户 · B2 可被 AS-REP Roasting · B3 用户账户上的 SPN | T1558.003, T1558.004 |
| **C** | 委派滥用 | C1 非约束委派 · C2 到 Tier-0 的 RBCD · C3 机器账户配额 | T1134.001, T1098 |
| **D** | ADCS 利用 | D1 易受 ESC1 攻击的模板 · D2 ESC4 模板权限 · D3 ESC8 NTLM Relay | T1649, T1187 |
| **E** | Tier-0 可达性 | E1 用户→Tier-0 路径 · E2 工作站→DC 管理员 | T1078.003, T1484.001 |
有关各规则的完整文档,请参阅 [docs/detection-catalog.md](docs/detection-catalog.md)。
## 使用场景
**红队 / 渗透测试人员** — 无需手动解析 BloodHound 数据,即可快速识别目标域中价值最高的攻击路径和 ESC 配置错误。
**蓝队 / 防御者** — 将 BlueHound 作为定时任务每周运行,并使用差异引擎在攻击者之前发现权限蔓延。
**紫队演练** — 使用 MITRE ATT&CK 映射将 BlueHound 的发现与 SIEM 中的检测规则覆盖范围进行关联。
**安全审计人员** — 导出结构化的 ThreatModelResult JSON,以便集成到审计报告或 GRC 工具中。
**CI/CD 安全门禁** — `bluehound diff` 命令在检测到倒退时会以退出代码 1 退出,这使其适合作为部署流水线中的阻断步骤。
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 图数据库 | 通过 `neo4j` Python 驱动程序连接的 Neo4j 5.14+ |
| CLI 框架 | Click 8.1+ |
| 终端输出 | Rich 13.7+ |
| REST API | FastAPI 0.104+ |
| API 服务器 | 包含标准扩展的 Uvicorn |
| 前端 | React 18 + TypeScript + Vite + Tailwind CSS + Recharts + SWR |
| 配置 | PyYAML 6.0+ + python-dotenv |
| 分发 | 通过 setuptools + wheel 分发的 PyPI |
| Python | 3.11+ (使用 `slots=True` dataclasses) |
## 配置
BlueHound 按优先级顺序从三个来源读取 Neo4j 连接设置:首先是环境变量,其次是 `~/.bluehound/config.json`,最后是内置默认值。
```
# Environment variables
export BLUEHOUND_NEO4J_URI=bolt://localhost:7687
export BLUEHOUND_NEO4J_PASSWORD=mypassword
```
```
// ~/.bluehound/config.json
{
"neo4j": {
"uri": "bolt://localhost:7687",
"username": "neo4j"
}
}
```
密码绝不会存储在配置文件中。如果在环境变量中未找到,BlueHound 将以交互方式提示输入。
## 文档
- [架构深度解析](docs/architecture.md)
- [检测目录](docs/detection-catalog.md)
- [ADCS 深度解析](docs/adcs-deep-dive.md)
- [用户指南](docs/user-guide.md)
- [API 参考](docs/api-reference.md)
- [开发指南](docs/development.md)
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:BloodHound, HTTP/HTTPS抓包, Windows活动目录, 威胁建模, 态势感知, 攻击路径分析, 模拟器, 网络测绘, 逆向工具, 防御方工具