Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
NoiseHound — 检测感知的 BloodHound 攻击路径评分——找到通往目标的最隐蔽路径,跨审计/EDR/SIEM 层级进行校准。 | Kitploit
工具/GitHubGitHub/warpedatom/noisehound
防御工具权限提升横向移动后渗透利用渗透测试红队对抗性攻击
GitHubwarpedatom/noisehound

NoiseHound

检测感知的 BloodHound 攻击路径评分——找到通往目标的最隐蔽路径,跨审计/EDR/SIEM 层级进行校准。

查看仓库
5389天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

NoiseHound

NoiseHound

PyPI Release License Python 3.10+ CI Security policy X (Twitter): @warped_atom

检测感知的 Active Directory 攻击路径评分。 DreadHost Research | 与 OffsetInspect (PowerShell) 和 OffsetScan (Rust) 配套使用

BloodHound(及其上的 PlumHound)可以找到通往目标的 一条 路径。 NoiseHound 摄取相同的图数据,并根据预期检测成本而不是跳数 对路径重新排名,因此操作者可以问 “什么是通往域管理员的最安静方式”, 而不仅仅是 “什么是一种方式”。

刚接触?从 操作者演练 开始 — 一个动手实践、 截图驱动的教程,带你从安装到实时的 BloodHound CE 概念验证 (分数写回 BloodHound UI)、DeadAir 引擎, 以及蓝队检测缺口报告。

项目状态(v1.0): 稳定,并已在真实 BloodHound 数据上 跨多个域测试。57 条语料库边中的 30 条现已通过 实验室测量,涵盖四个检测等级(audit、Defender for Endpoint、Elastic SIEM 和 MDI posture)——以即插即用 配置文件形式发布在 profiles/ 中,并有闭环证据 表明它们会改变路径排名(docs/VALIDATION.md)。 其余约 28 条边仍带有 专家估计;校准工具(noisehound-calibrate、 docs/CALIBRATION.md)用于测量这些边以及您自己的环境。 请将未校准的排名视为有理有据的指导,而非绝对事实。

仅限授权参与。本工具为 OPSEC 规划而对攻击路径评分, 适用于您已获得书面许可进行测试的系统。

NoiseHound 是一个独立的社区项目。它与 SpecterOps 或 BloodHound 项目没有任何从属、认可或关联关系; 它使用 BloodHound 的开放数据格式。


工作原理

  1. 摄取 BloodHound CE 导出(.zip)、原始 JSON 文件或导出目录 到内部图中。也接受规范化的 {nodes, edges} JSON 格式 用于离线分析和测试。AD CS ESC1-8 提权边 会在加载时根据证书模板和 BloodHound 收集的 CA 事实合成 (见下文)。
  2. 标注 来自边遥测语料库的每条边,附加一个 effective_noise_score (0-100)。当多个权限连接同一对节点时, 选择最安静的权限。语料库中缺失的边类型默认 采用保守分数(60),以便缺口安全失败而非低报。 可选的 环境配置文件 会根据目标声明的检测态势 调整分数(见下文)。
  3. 求解 最安静的路径。由于路径分数是瓶颈加 均值(而非简单总和),因此无法直接用 Dijkstra 优化。 求解器结合 阈值扫描(针对每个不同的噪声等级, 寻找低于该等级的最安静路径)与有界 k-最短权重路径遍历, 然后按真实路径分数对结果重新排名。阈值扫描是 正确性兜底:它能发现一条长但整体安静的路径,而纯 求和权重搜索会将其排在短但嘈杂的路径之下。
  4. 报告 以文本、JSON(与 OffsetInspect 结果模式互操作), 或样式与工具集匹配的自包含 HTML 报告形式输出。

路径评分

路径噪声故意不是简单求和。触发同一种检测 两次并不会产生两倍的噪音(SOC 分流,而非原始事件计数)。NoiseHound 使用:``` path_score = max(edge_scores) * 0.6 + mean(edge_scores) * 0.4

root@kitploit:~
这更倾向于最响亮的单步(一个坏步骤往往毁掉整个
操作),同时仍然考虑累积暴露。权重是可配置的
(`--max-weight` / `--mean-weight`),因此一旦从 APT29/Caldera
实验室获得真实检测数据,就可以根据经验进行调优。

每条路径还会报告 **检测概率**——即触发关联警报的机会
——将最响亮的边与所有边的累积 noisy-OR
混合(由 `--correlation` 调优)。它回答的问题不同于噪声分数:
一条短而响亮的路径被捕获的总体概率可能*低于*
一条长而安静的路径。使用 `--rank-by probability` 按此排序。

### 双层引擎(DeadAir)

对于大型图,求解会分派到 [DeadAir](https://github.com/warpedatom/DeadAir),这是一个配套的
Rust 引擎(OffsetScan-to-OffsetInspect 层)。NoiseHound 仍然是
功能丰富的前端——数据摄取、语料库、环境/Sigma、约束、
报告——并将准备好的图交给任一引擎来求解,因此
无论哪种方式结果都是相同的。

- `--engine auto`(默认):当找到其二进制文件*并且*图
  很大(>= 5000 节点)时使用 DeadAir;否则使用内置的 Python 求解器。
- `--engine python`:强制使用内置求解器(无需二进制文件)。
- `--engine rust`:强制使用 DeadAir(如果缺少二进制文件则报错)。

DeadAir 通过 `$NOISEHOUND_DEADAIR`、然后是 `PATH`、再然后是同级目录
`../deadair/target/{release,debug}/` 构建来查找。它在大型图上快 10-100 倍
(一个 250k 节点的图在 ~2s 内求解,而 Python 需要 ~30s),同时产生逐字节相同的
排名。输出会记录运行的是哪个引擎。

### 多目标与受约束的路径规划

噪声、跳数和检测概率会向不同方向拉扯,因此
`--pareto` 返回 **Pareto 前沿**——没有任何其他路径能在
所有三个指标上同时超越——而不是强制选出一个胜者。实际操作中
会有约束:`--avoid NODE` 让路径避开特定主机(例如
EDR 监控的跳板机、蜜罐),`--avoid-edge TYPE` 拒绝某种技术
(例如 `--avoid-edge DCSync`)。两者都可重复使用,并会即时重新求解。```bash
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" --pareto
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" --avoid FILESERVER01 --avoid-edge HasSession

NoiseHound 如何对比

BloodHound 的加权寻路并不新鲜,所以这里如实定位:

  • BloodHound / BloodHound CE 通过未加权的跳数找到 一条 路径。 没有噪声模型。
  • GoodHound 为边分配成本并找到成本最低的路径,但其成本模型 是利用难度和业务风险,而非检测噪声。
  • PlumHound / ImproHound 进行报告和层级违规分析;两者 都不会重新求解“通往目标的最安静路径”。
  • 检测映射(Sigma、DeTT&CT、事件 ID 到 ATT&CK 的引用)内容丰富, 但面向人工使用,且不关联 BloodHound 边类型。

NoiseHound 的贡献在于组合:一个机器可读的 BloodHound 边到检测遥测语料库、一个噪声加权的重新求解, 以操作者 OPSEC(“通往 DA 的最安静方式”)为框架, 一个适应目标所声明安全态势的环境模型,以及一个校准循环, 将实验室检测转化为可衡量的分数。图算法是通用技术; 语料库和框架才是重点。它的价值完全取决于语料库, 这就是为什么校准和社区贡献是一等公民——见下文。

安装```bash

cd NoiseHound python -m pip install -r requirements.txt # networkx>=3.0

optional editable install to get the noisehound command on PATH:

python -m pip install -e .

root@kitploit:~
需要 Python 3.10+。

## 用法```bash
# Text summary (default)
python -m noisehound --input export.zip --objective "Domain Admins" --source jdoe

# JSON, for downstream tooling / correlation across the DreadHost suite
python -m noisehound -i export.zip -o "Domain Admins" -s jdoe -f json --out paths.json

# Self-contained HTML report
python -m noisehound -i export.zip -o "Domain Admins" -s jdoe -f html --out report.html

首先,用你的导出数据对解析器进行健全性检查(直方图 + 语料库覆盖率,不含路径分析) - 这是在真实数据上验证 NoiseHound 的最快方式:```bash noisehound-inspect -i export.zip

root@kitploit:~
### 实时 BloodHound CE / Neo4j

无需使用 zip,将 `--input` 指向 BloodHound CE 所填充的 Neo4j 数据库,
NoiseHound 即可通过 Bolt 直接读取(已分析的)图数据。```bash
pip install 'noisehound[neo4j]'
export NEO4J_PASSWORD=bloodhoundcommunityedition   # match your BHCE compose
noisehound-inspect -i bolt://localhost:7687
python -m noisehound -i bolt://localhost:7687 -s jdoe -o "Domain Admins"

使用官方 compose 启动 BloodHound CE(捆绑 Neo4j,端口 7687): curl -L https://ghst.ly/getbhce | docker compose -f - up。

针对捆绑的示例进行尝试:```bash python -m noisehound -i samples/sample_graph.json -s jdoe -o "Domain Admins" -d CONTOSO.LOCAL python -m noisehound -i samples/sample_bloodhound_ce.zip -s jdoe -o "Domain Admins" python -m noisehound -i samples/sample_adcs_ce.zip -s jdoe -o "Domain Admins" # ADCS ESC1

Full-spectrum export exercising every edge family (sessions, delegation, DCSync, ADCS, trusts):

python -m noisehound -i samples/sample_fullspectrum_ce.zip -s ALICE -o "Domain Admins" -d CONTOSO.LOCAL -k 3

root@kitploit:~
最后一项最清晰地证明了这一论点:通往 Domain
Admins 的最安静路径是 4 跳会话路径,其排名*高于* 3 跳 RDP 路径和
1 跳 ADCS ESC1——跳数最多,噪音最少。

该示例展示了核心价值:最安静的路由是 4 跳会话
路径(得分 19.9),排名*高于* 2 跳 ForceChangePassword 快捷路径(36.4)。
跳数更少并不意味着更安静。

### 蓝队检测缺口模式

最安静的路径正是检测最薄弱之处,因此添加 `--defensive` 来翻转
面向防御者的输出:它会标记那些之所以安静仅仅是因为遥测关闭或缺失的边,
将每条边映射到能够捕获它的控制措施,并根据这些控制措施提升最安静路径
分数的程度对其进行排名。```bash
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" --defensive

On the full-spectrum sample it finds that the quietest path to Domain Admins hinges on undetected LSASS access (HasSession, 20 -> 65 if instrumented) and recommends deploying Sysmon Event 10 - closing that one gap lifts the quietest path from 19.9 to 48.4. See docs/ROADMAP.md for where this and the rest of the model are headed.

关键选项


环境配置文件

静态语料库评分无法得知目标是否启用了 4662 对象审核、是否自带 Sysmon,或是否运行了像 MDI 这样的 ITDR——然而这些因素会极大地改变边的真实噪声(DCSync 在没有 4662 审核时近乎无声,而有了审核则几乎必被检测)。与其假装一个数字适用于所有环境,不如在小型 JSON 文件中声明目标态势,NoiseHound 会依据语料库自身的遥测注释透明地调整评分:```json { "name": "CONTOSO.LOCAL-prod", "object_auditing_4662": true, "ds_change_auditing_5136": false, "edr": "MDI", "sysmon": true, "powershell_logging_4104": true, "adjustments": { "HasSession": 65 } }

root@kitploit:~
调整只会*提高*分数,使其趋近于所声明态势所隐含的检测
下限。`adjustments` 是硬性的逐边覆盖——用于记录你
针对自有实验室校准得出的值。这是由操作者提供、
而非测量所得;它不会取代 Phase 2 的实时验证,但能将
静态语料从"适用于所有环境的单一数值"转变为"适用于你
实际所处环境的数值"。在随附的示例中,声明上述配置文件
会将最隐蔽的路径从 LSASS-dump 会话路径切换为
目录写入路径——一旦主机遥测上线,这便是正确的判断。```bash
python -m noisehound -i samples/sample_graph.json -s jdoe -o "Domain Admins" \
    -e samples/env_profile.example.json

评分优先级:static -> environment-adjusted -> live (Phase 2)。


校准测试台

环境配置文件的质量取决于你填入其中的数字。 noisehound-calibrate 形成闭环:在检测实验室中运行这些技术,记录触发了什么,然后输出一份校准后的环境配置文件。

这项工作已经完成。 profiles/ 提供了三个实测配置文件,来自真实的 Hyper-V Vulnerable-AD 环境——audit、EDR(Defender for Endpoint)和 Elastic SIEM 层级,共 30 条边——由自动化测试工具(lab/)和本工具生成。你可以直接使用它们,或者自行测量:```bash

Use a shipped measured profile:

noisehound -i export.zip -s jdoe -o "Domain Admins" -e profiles/vulnad-hyperv-audit.json

Or measure your own lab:

1. noisehound-calibrate --plan -o plan.json (per-edge detection events)

2. lab/Invoke-NoiseHoundCalibration.ps1 (run + auto-count -> lab_detections.json)

noisehound-calibrate -i lab_detections.json -o env.calibrated.json noisehound -i export.zip -s jdoe -o "Domain Admins" -e env.calibrated.json

root@kitploit:~
该评分模型是一种收缩估计器,能如实反映样本量:```
p          = detections / runs                       (detection probability)
lab_score  = p * severity_loudness + (1 - p) * residual
w          = runs / (runs + smoothing)               (confidence in the lab)
calibrated = w * lab_score + (1 - w) * corpus_static

lab_score 是预期的检测成本——当它触发时的 SOC 严重性,以及未触发时的微小残差。权重 w 既防止单次运行覆盖整个语料库,又让采样充分的结果占主导地位。在该示例中,HasSession 从静态的 20 攀升至 52(实验室在 5 次运行中有 4 次捕获了 LSASS 转储),而 Kerberoast 从 60 降至 34(它从未触发)。使用 --merge existing.json 将新的校准叠加到配置文件中,同时保留其姿态标志,并使用 --smoothing / --residual 调整模型。


针对已部署的检测进行评分 (Sigma)

环境配置文件和校准是自我声明的。noisehound-sigma 根据防御者实际编写的检测进行评分:将它指向一个 Sigma 规则集,它就能计算出每条规则会在哪些语料库边上触发(匹配该边的遥测事件 ID 和 ATT&CK 技术),然后生成一个环境配置文件,提升被覆盖的边 - 作为 --environment 的直接替代。```bash noisehound-sigma -r ./sigma-rules/ -o env.sigma.json python -m noisehound -i export.zip -s jdoe -o "Domain Admins" -e env.sigma.json --defensive

root@kitploit:~
匹配策略刻意保守,因此绝不会掩盖缺口:只有当规则引用了该边生成的事件 ID,并且(在规则带有 ATT&CK 标签时)其技术与边一致时,该规则才算数——因此,DS-Access (4662) DCSync 规则不会仅仅因为与 LAPS 读取共享同一事件 ID 就被误认为覆盖了这些读取。报告既列出你的规则覆盖的内容,也(更有价值地)列出没有任何规则覆盖的攻击边。结合 `--defensive`,这回答了“在我已部署的检测条件下,哪条最隐蔽的攻击路径仍然不可见?”

---

## AD CS ESC1-8

在加载时,NoiseHound 会执行 BloodHound ADCS 后处理的精简版本,根据保留的模板/CA 事实合成提权边。脆弱模板上的 `Enroll` 权限变为从主体到域 Domain Admins 组(RID 512)的直接 `ADCSESCn` 边,因此证书提权与其他边一样可被路径化并评分:

| 边 | 条件 |
|------|-----------|
| `ADCSESC1` | 申请人提供主题 + 客户端认证 EKU,无审批/RA 签名 |
| `ADCSESC2` | 任意用途/子 CA EKU,无审批 |
| `ADCSESC3` | 同一 CA 上的注册代理模板 + 一个认证模板 |
| `ADCSESC4` | 对已发布模板的危险写入控制 |
| `ADCSESC5` | 控制 CA 对象或其宿主机 |
| `ADCSESC6` | CA 设置了 `EDITF_ATTRIBUTESUBJECTALTNAME2` |
| `ADCSESC7` | 对 CA 拥有 `ManageCA` / `ManageCertificates` |
| `ADCSESC8` | 存在漏洞的 HTTP Web 注册端点(强制认证 + NTLM 中继) |

试一试:`python -m noisehound -i samples/sample_adcs_ce.zip -s jdoe -o "Domain Admins"`。

已记录的简化(它们会以安全方式失败,即倾向于显示更多路径):不建模 CA 级注册限制(模板注册被视为充分条件);ESC5 覆盖 CA 对象及其宿主机,而非每个 PKI 容器;ESC9/10/13 不在范围内。已存在于后处理导出中的合成 ESC 边会被保留。

---

## 语料库(`edge_mappings/`)

边遥测语料库是此工具真正的核心;代码只是在其之上相对简单的图运算。每个 `edge_mappings/<Edge>.json` 将一个 BloodHound 边类型映射到其检测面:

- 预期遥测源(Windows 安全事件 ID、Sysmon 事件 ID、网络、EDR/ITDR 启发式规则),包含每个来源的可靠性以及相关审计是否默认开启
- 静态噪声评分(0-100)
- MITRE 技术、前置特权、常见滥用原语和备注```json
{
  "edge_type": "DCSync",
  "static_noise_score": 85,
  "telemetry": [
    {"source": "windows_security", "event_id": 4662,
     "detail": "Directory Service Access - requires object auditing (default OFF)",
     "reliability": "high_if_auditing_enabled", "default_enabled": false},
    {"source": "edr_heuristic", "product_class": "MDI",
     "detail": "Non-DC hosts issuing DRSGetNCChanges - high fidelity",
     "reliability": "high"}
  ],
  "mitre_technique": "T1003.006",
  "notes": "Assumes default audit policy (mostly OFF) but high EDR/MDI coverage."
}

扩展语料库是当前持续努力的重点方向。添加一个新的 JSON 文件,保持模式(加载时验证),它会被自动 发现。v0.3 提供 43 种边类型,涵盖 ACL 滥用、Kerberos、 委派、ADCS ESC1-8、LAPS/gMSA、GPO、信任和访问权限边,这些边 对路径查找很重要。

分数源自 DreadHost 红队操作员手册噪声矩阵 (Windows/Sysmon 事件映射、技术噪声评级)和标准 AD 检测事实。请根据你自己的实验室检测数据调整它们。


路线图

  • 校准 - 已完成 30/57 条边,持续进行中。 三个实测配置文件位于 profiles/(审计 / EDR / Elastic 层级),并带有闭环 验证。其余:另外约 28 条边(认证强制/中继、ADCS ESC2-13、CanRDP), MDI 运行时告警层(态势检测有效;告警路径需要一台裸机/ Ludus DC - 参见 docs/CALIBRATION.md),以及可选的 工具配置轴 (docs/TOOLING_AXIS.md),以便分数反映现成工具与原生攻击手法的差异。
  • 阶段 2 - 实时检测验证。 将静态分数替换为 live_noise_score(从真实目标的 Defender/Sysmon/audit 配置中提取), 复用 OffsetInspect 的检测边界逻辑。annotate() 已经接受 一个 live_scores 覆盖项;CLI 钩子将在阶段 2 落地。
  • 实时 Neo4j 摄取 通过 Bolt 针对 SharpHound 填充的同一数据库 (离线 zip 摄取现已提供)。
  • ADCS ESC9/10/13 合成(ESC1-8 现已提供)。
  • Rust 移植(评分引擎,petgraph),模仿 OffsetInspect -> OffsetScan 模式,一旦数据模型得到验证。

贡献

语料库是社区可扩展的,这也是贡献最有价值的地方。 添加一条边只需一个 JSON 文件,在加载时和 CI 中都会进行验证:```bash noisehound-validate # schema + consistency checks over the corpus python -m pytest tests/ -q

root@kitploit:~
关于 schema、评分指南和 PR 指南,请参阅 [CONTRIBUTING.md](https://github.com/warpedatom/noisehound/blob/HEAD/CONTRIBUTING.md);正式的 edge schema 参见 [`docs/edge_schema.json`](https://github.com/warpedatom/noisehound/blob/HEAD/docs/edge_schema.json)。

## 对照实验室校准

已测量 30 条边(参见 [`profiles/`](https://github.com/warpedatom/noisehound/blob/HEAD/profiles/));其余的在你测量之前只是估计值,而且每个环境都不尽相同。[`docs/CALIBRATION.md`](https://github.com/warpedatom/noisehound/blob/HEAD/docs/CALIBRATION.md) 是一份完整的操作手册:实验室拓扑、精确的 Windows 审计策略和 Sysmon 配置(使语料库的事件 ID 触发)、逐边演练运行手册、通过 Caldera 模拟 APT29 的真实性层,以及如何将结果汇总为校准后的配置文件。从 `noisehound-calibrate --template -o lab_detections.json` 开始。

[`lab/`](https://github.com/warpedatom/noisehound/blob/HEAD/lab/) 套件自动化了检测插桩:`Enable-Telemetry.ps1` 启用审计策略、脚本块日志记录、DCSync SACL 和 Sysmon;`Collect-Detections.ps1` 统计在一个时间窗口内触发的事件。它依赖 [GOAD](https://github.com/Orange-Cyberdefense/GOAD) 或 [Vulnerable-AD](https://github.com/WazeHell/vulnerable-AD)(或你自己的 CRTP/CRTO 实验室)来提供易受攻击的域,而不是重新实现这些环境。

## 负责任的使用

NoiseHound 适用于经授权的安全测试、紫队演练、检测工程和研究。它读取你已收集的 BloodHound 数据并计算排名;它不会对目标执行任何操作。请仅在获得明确书面授权的情况下使用。贡献内容不得包含针对特定目标或真实交战的数据。

## 测试```bash
python -m pytest tests/          # with pytest
python tests/test_noisehound.py  # dependency-light smoke run

布局```

noisehound/ engine: schema, corpus, ingest, adcs, annotate, environment, solver, report, cli, calibrate edge_mappings/ the telemetry corpus (one JSON per edge type) - the IP samples/ sample_graph.json, sample_bloodhound_ce.zip, sample_adcs_ce.zip, sample_fullspectrum_ce.zip, env_profile.example.json, lab_detections.example.json, sample_report.html docs/ WALKTHROUGH.md (start here), CYPHER.md, VALIDATION.md, CALIBRATION.md, ROADMAP.md, seed_demo_graph.cypher, seed_showcase_graph.cypher, images/ tests/ unit + end-to-end tests

root@kitploit:~
下载工具
选项含义
--input, -iBloodHound .zip、.json 或导出目录
--source, -s起始主体(jdoe 或对象 ID)
--objective, -o目标节点(Domain Admins 或对象 ID)
--paths, -k返回的最安静路径数量(默认 5)
--format, -ftext(默认)、json 或 html
--defensive蓝队视角:最安静路径上的检测缺口及修复建议
--rank-bynoise(默认)或 probability(关联告警的概率 P)
--correlationSOC 对 P(detected) 的关联系数,范围 0..1(默认 0.5)
--pareto返回噪声/跳数/P(detect) 的帕累托前沿
--engineauto(默认)、python 或 rust(DeadAir 引擎)
--avoid NODE从所有路径中排除某个节点(可重复)
--avoid-edge TYPE从所有路径中排除某种边类型(可重复)
--corpus覆盖边映射语料库目录
--environment, -e操作者声明的目标态势 JSON(调整评分)
--max-weight / --mean-weight评分权重(必须合计为 1.0)
--default-noise语料库中缺失边类型的评分(默认 60)