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活动目录, 威胁建模, 态势感知, 攻击路径分析, 模拟器, 网络测绘, 逆向工具, 防御方工具