BloodBash深度审计报告"

admin 2026-10-17 08:12:32 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

BloodBash 深度审计报告

网安之家-CyberHomestead

2026年8月20日 10:51
湖北

在小说阅读器读本章

去阅读

BloodBash 深度审计报告(技术贴)

仓库:https://github.com/SquidSec/BloodBash
审计版本:v1.4.2(单文件 BloodBash.py = 11,117 行 / 462 KB,Python 3.9+,MIT,386 stars)
作者:SquidSec(Russell / DotNetRussell,https://squidoffense.com/)
审计日期:2026-08-19
交付物:本文档(MD)
说明:源码经 jsDelivr CDN 完整获取,已审计:CLI 全参数面(build_arg_parser 全 290 行)、图构建引擎(build_graph 565 行)、路径成本模型与有界 DFS、ADCS ESC1–14 检测、SQLite 缓存指纹体系、黄金路径/老虎机动画、四大 YAML profile、pyproject 打包。审计后下载文件已彻底删除。


0. 摘要

BloodBash 是\"无服务器版 BloodHound\"——官方一句话自述:

\"A Bloodhound alternative. BloodBash will ingest the same files bloodhound does but no server is required to use this tool. It's great for quick AD enumeration.\"

它直接吃 SharpHound / AzureHound 的 JSON/ZIP 采集输出,在内存里用 networkx 建 MultiDiGraph,跑 30+ 类攻击面检测(DCSync / RBCD / ADCS ESC1–14 / 危险 ACL / GPO 滥用 / Shadow Credentials / Kerberoast / 信任滥用 / Azure 特权角色……),并做加权攻击路径发现(GenericAll 边成本 1、MemberOf 边成本 10 的 Dijkstra + 有界 DFS)——全程零网络、零服务、零 Neo4j,一条命令出结果,还能反向导出 BloodHound 兼容 JSON / Graphviz DOT / HTML 报告包。

它是 DEF CON 34 AD CTF 官方指定分析器(仓库内 DC34/ 是完整的 Ludus + Ansible 比赛环境部署套件),也是红队\"拿到 SharpHound 包但懒得搭 Neo4j\"场景的速答工具。

⚠️ 合规声明:BloodBash 是纯离线分析器——不对目标发起任何连接、不执行任何利用;它只分析你已合法采集的数据。仍仅限授权评估使用。本文档基于公开仓库源码,仅用于教育与防御评估。


1. 名字寓意

组成部分 含义
Blood 直接继承 BloodHound 的血统——吃同样的 SharpHound 数据、识别同样的边(GenericAll/DCSync/RBCD…),是\"猎犬家族\"的终端分支
Bash ① Bash/终端原生——从 GUI 网页应用回到一条 shell 命令;② \"bash it out\"(敲出来就出结果)的工程俚语

合起来:\"把 BloodHound 塞回 bash\"——名字本身就是对 Neo4j + Go API + React 前端 + Docker Compose 四件套的反抗。代码里的 Vegas 老虎机彩蛋(--golden-path 中奖动画)呼应了它在 DEF CON(拉斯维加斯)CTF 中的出身。


2. 技术定位:它\"检测\"什么?——攻击面原理抽丝剥茧

BloodBash 本身不利用漏洞;它把 SharpHound 采集到的 AD 关系数据映射成\"可利用的攻击面清单\"。因此\"漏洞原理\"分两层:它识别的每类攻击面的底层原理 + 它自己的检测逻辑。

2.1 识别的攻击面与其底层原理(含 OS/协议层分析)

检测项 底层原理(OS / 协议层) BloodBash 的判定信号
DCSync 目录复制服务(DRSUILogon)DRSGetNCChanges RPC:持有 DS-Replication-Get-Changes(-All) 扩展权限的主体可向 DC 请求任意对象的凭据哈希——等价\"远程读 NTDS.dit\" GetChanges /GetChangesAll 入边 + 预期主体白名单过滤(EXPECTED_DCSYNC_RIDS:512/516/518 等 RID 与跨林 EA)——只报\"意外持有者\"
RBCD Kerberos S4U2Proxy:资源自身 msDS-AllowedToActOnBehalfOfOtherIdentity(存储为 NT 安全描述符)声明\"谁可以代表任意用户向我认证\"——写入者即拿到基于资源的约束委派 AllowedToAct /AddAllowedToAct 边;方向反转处理(SharpHound 把资源作为主体存列表,BloodBash 翻转为 principal→resource);另设 Can Configure RBCD(有 WriteProperty/GenericWrite 于计算机者 = 可自行注入)
ADCS ESC1–14 证书模板把\"谁可注册 + 可写什么 SAN + EKU 是否客户端认证\"三者配错时,低权用户可申请任意身份证书 → PKINIT 以 DA 身份取 TGT。如 ESC1 = EnrolleeSuppliesSubject(申领者自填 SAN)+ 客户端认证 EKU + 低权可注册 模板属性(EKU OID 1.3.6.1.5.5.7.3.2 等)、EDITF_ATTRIBUTESUBJECTALTNAME2 位、注册 ACL(Enroll/AutoEnroll/GenericAll 等入边)、NO_SECURITY_EXTENSION(0x00080000) 位(ESC9/10);并诚实标注 ESC6/8/10–12 需要 SharpHound 可能没采集的 CA 注册表/HTTP 角色数据
Kerberoast / AS-REP Roast 前者:任何用户可请求\"有 SPN 的账户\"的 ST,离线爆破服务密钥;后者:DontReqPreauth 账户可无预认证取 AS-REP,离线爆破 hasspn 属性 / UAC DONT_REQ_PREAUTH 位(decode_uac 解码);Privileged Roast 变体 = 可烤账户嵌套进 DA/EA 组(血统追踪 is_member_of_privileged_group,深度 25)
Shadow Credentials 向目标 msDS-KeyCredentialLink 写入攻击者公钥 → 以该主体身份做 PKINIT(NT hash 不碰) AddKeyCredentialLink 出边 + 预期持有者白名单(如 KEY CREDENTIAL ENROLL 管理组)过滤噪音
危险 ACL GenericAll/WriteDacl/WriteOwner/Owns/AllExtendedRights——\"能改 ACL 者终将自己加冕\" 高价值对象上的非常权入边集合;--indirect 追间接(组传递);_interesting_acl_score 按权限×目标类型打分排序
GPO 滥用 / GPO 内容 对 GPO 或其链接的 OU 有写权 = 推送计划任务/脚本到 OU 下所有机器(Groups.xml 等偏好文件历史遗留凭据) GPO 出边(GenericWrite 等)+ --gpo-content-dir 直接解析 GPO XML 报告(内建 cpassword 检测语料 testData/gpo-xml-fixtures/)
Unconstrained / Constrained Delegation 前者:服务账户收到的任意 TGT 缓存在 LSASS(可窃);后者:S4U2Self/S4U2Proxy 允许代表用户访问指定服务 unconstraineddelegation 属性(排除 DC 的误报抑制——DC 本来就该有)+ AllowedToDelegate 边
SID History 保留的旧域 SID 在跨域迁移后仍被信任方接受 → 权限走私 HasSIDHistory 边 + 域 SID 上下文标注(format_sid_with_domain_context)
LAPS / LAPS Readers 本地管理员密码存 ms-MCS-AdmPwd,能读该属性者 = 机器本地管理员 计算机部署状态(msLAPS-EncryptedPassword/legacy 属性缺失检测)+ 读权限入边(排除默认特权组)
Trust / SID Filtering 跨林/跨域信任的 SID 过滤未启用时,SID History 注入跨边界生效 信任边打分 _trust_edge_abuse_score(label, sid_filtering)
密码卫生 描述字段写密码、永不过期、无密码要求(PASSWD_NOTREQD 位 → 可设空密码) 属性正则/位检测;pne-kerb-false-negatives-tests 专门防\"PNE+Kerberos 位\"假阴性
Azure 面 Privileged Role(GA 等价)、App/SP Secrets(可轮换劫持)、MFA Bypass 信号、Guest 访问、SP 滥用 AzureHound JSON 的 data 属性 + 待处理边队列(__azure_pending_edges__)二阶段缝合

2.2 BloodBash 自身的\"OS 调用面\"分析(审计者视角)

作为一个纯离线 Python 程序,它的系统调用面极小——这本身就是安全属性:

系统交互 实现 审计结论
文件读 load_json_dirs 递归读目录 / zipfile 解包(_safe_extract_zip:596) zip 解包内建 zip-slip 路径穿越防护(逐条目校验目标路径),可安全分析敌意样本包
文件写 SQLite 缓存(~/.cache/bloodbash/)、导出 md/json/html/csv/yaml/dot、日志 导出目录由用户指定;日志默认 bloodbash.log
网络 零 ——无 requests/urllib/socket 出站 分析敌意/敏感数据无外泄回调风险;可安全在隔离网段跑
进程 无子进程、无 shell 拼接 无注入面
哈希 compute_collection_fingerprint:1909 ——SHA-256(规范化 JSON{文件路径+size+mtime\_ns, schema 版, 程序版本}) 缓存指纹含程序版本号:升级后自动失效旧缓存(防陈旧图)

一句话:BloodBash 的\"攻击面\"只有文件 I/O,且 zip 解包做了穿越防护——这是可以把敌方 CTF 数据包直接丢给它的原因。


3. 前世今生

时间 里程碑
2016 BloodHound 1.0(@wald0/@CptJesus/@harmj0y):Neo4j + Electron + PowerShell 收集器,定义\"图论打 AD\"范式
2019 BloodHound.py(dirkjanm)让 Linux 远程采集成为可能——但分析端仍要 Neo4j
2021 PlumHound:把 BloodHound 常用 Cypher 变成批量报表脚本——\"无 GUI 分析\"的先声,但仍依赖 Neo4j 服务
2022–2023 BloodHound CE(SpecterOps):Go API + React + PostgreSQL + Neo4j,功能更强、部署更重(Docker Compose 四容器)
2024 SquidSec 发布 BloodBash:单文件 Python + networkx 内存图,吃 SharpHound JSON、零服务;为 DEF CON 34 AD CTF 打造(DC34/ 内含 Ludus 比赛靶场模板 + Ansible 布旗 + SharpHound/bloodbash.exe 投放剧本)
2025–2026 v1.x 系列迭代:ADCS ESC1–14、Azure 模块、SQLite 图缓存、黄金路径动画、YAML profile、报告包/CSV 包/zip 交付、PlumHound 风格导出、13 个 Ludus 实测场景 + 合成语料 + 变异测试工具链

血统:BloodHound(数据与边语义)→ PlumHound(报表化思路)→ BloodBash(彻底去服务化)。它导出的 --export-bh BloodHound 兼容 JSON 意味着:BloodBash 可以做 BloodHound 的前置预处理器(快速分诊 → 值得深挖才上图数据库)。


4. 为何诞生

源码与 DC34 材料给出三个明确动机:

  1. 1. BloodHound 太重:一次\"我就想看看有没有 DCSync\"的回答需要 Docker/Neo4j/API/前端四件套;CTF 选手和一线红队要的是秒级 triage——BloodBash 裸目录参数 = --quick-wins(cli_has_explicit_analysis_intent:7467 实现了\"没给检查标志就自动跑快速分诊\"的默认行为);
  2. 2. DEF CON CTF 需要可分发的分析器:DC34/ansible/plant_collect_ui.yml 把 SharpHound.exe + bloodbash.exe 一起投放到靶机,选手采集后本地分析——零依赖环境(目标机都能跑,因为 PyInstaller 出的 exe);
  3. 3. 可测试性:BloodHound 的图算法埋在 Neo4j 里难以回归测试;BloodBash 把全部逻辑放进纯 Python 函数,配套 13 个 Ludus 场景采集包 + ground\_truth.json + 合成语料生成器 + 变异工具(tools/generate_synthetic_sharphound.py、mutate_corpus.py、run_scenario_battery.py)——这是同类工具里罕见的测试工程化投入。

5. 攻击链与渗透测试定位

5.1 链上位置:采集与利用之间的\"分析中枢\"

[采集] SharpHound.exe / bloodhound-python / AzureHound   (外部,需凭据+触网)
   │  JSON/ZIP 落盘
   ▼
[分析] ★ BloodBash(本工具,纯离线)
   │  ├─ 攻击面清单:DCSync/RBCD/ESC/ACL/烤串/委派/LAPS/信任/Azure
   │  ├─ 路径发现:short/abuse/deep 三模式 → 到高价值目标的最优链
   │  ├─ 落脚点画像:--from-user 出站档案(我能打哪)/ --owned 入站路径(打我者谁)
   │  └─ 防守输出:--path-break(砍哪条边断最多路)/ 各类 inventory
   ▼
[利用] bloodyAD / Impacket / Certipy / Rubeus ...        (外部执行器)
   ▼
[闭环] 重新采集 → BloodBash 复核(缓存指纹自动失效)→ 下一轮

5.2 典型渗透流程

# ① 目标域内采集(任选)
SharpHound.exe -c All --zipfilename loot.zip          # Windows 落地
bloodhound-python -u u -p 'P' -d corp.local -c All    # Linux 远程

# ② 拖回分析机,秒级分诊(裸目录 = --quick-wins)
bloodbash ./loot/                       # 或直接 bloodbash loot.zip

# ③ 拿到落脚点后:出站档案(我能打哪 + 到 DA 的路径)
bloodbash ./loot/ --from-user jsmith --from-user-export dossier/

#④ 已控主体:反查\"从它能到哪\"(入站路径)
bloodbash ./loot/ --owned 'WEB01$,jsmith' --shortest-paths --path-mode abuse

# ⑤ 交付:HTML 报告包 + PlumHound 式 CSV 包 + zip
bloodbash ./loot/ --all --report-pack report/ --csv-pack csvs/ --export-zip deliverable.zip

6. 源码级审计:骚操作与细节妙处

行号基于 BloodBash.py @ v1.4.2(11,117 行)。

6.1 边成本模型:把\"滥用难度\"编码成 Dijkstra 权重(_PATH_EDGE_COSTS:4731)

GenericAll/WriteDacl/WriteOwner/Owns/GenericWrite = 1
AddKeyCredentialLink/AllowedToAct/WriteAccountRestrions/GetChanges(All)/AllExtendedRights = 1
AddMember/AddSelf/AdminTo/CanRDP/CanPSRemote/ExecuteDCOM/HasSession/HasSIDHistory = 2
Gplink = 6 → Contains = 9 → MemberOf/Member = 10

妙处:--path-mode abuse 下 Dijkstra 的边权重不再是\"跳数\"而是滥用成本——一条 4 跳但全是 GenericAll 的链会排在 2 跳但绕道组嵌套的链前面,因为后者实际要\"先成为组成员\"(现实中往往不可控)。这是对 BloodHound 默认最短路径的语义改进:路径的\"可操作性\"而非\"拓扑长度\"优先。

6.2 有界滥用 DFS:防 all_simple_paths 爆炸(_bounded_abuse_dfs_paths:4821)

密集 MemberOf 图上 nx.all_simple_paths 会组合爆炸。BloodBash 的对策:\\ abusing 边优先扩展\\(邻居按边成本排序)、纯成员边扇出截断(member_n[:12])、全局扩展预算(max_expansions=4000)+ seen_paths 去重——在 25k 节点/500k 边的企业图上保持可交互(LARGE_GRAPH_NODES/EDGES 阈值自动触发 --fast)。

6.3 \"预期主体白名单\"降噪哲学(DCSync/Admin/KeyCredential 三处)

初代工具报 DCSync 会把 DOMAIN ADMINS 本身也列出来——废话式发现。BloodBash 为每类高危权限内置预期持有者集合:

  • • EXPECTED_DCSYNC_RIDS(:84 起):512/516/518 等 RID + 跨林根 EA;
  • • is_expected_admin_principal / _is_expected_key_credential_holder:本地管理员组、密钥注册管理组;
  • • 只报意外持有者——信噪比是它比裸 Cypher 查询\"好用的核心\"。配套 testData/pne-kerb-false-negatives-tests 甚至专门回归\"密码永不过期+Kerberos 必需\"组合的假阴性。

6.4 采集格式兼容层:吃三代 SharpHound(_parse_json_dir:789 + build_graph:1274)

  • • 老版 MemberName 引用 → 名字→SID 解析(name_to_oid 注册表);
  • • SharpHound CE 的 Members 装在组上(而非用户的 MemberOf)→ 统一翻转成 member → MemberOf → group;
  • • CE 嵌套会话集合 {Results:[{UserSID,ComputerSID}]} 与 Sessions/PrivilegedSessions/RegistrySessions 三键去重;
  • • AllowedToAct 方向反转(:1326 注释明说):SharpHound 把资源当主体存列表,BloodBash 翻转为 principal→resource 才符合 BloodHound 路径语义;
  • • PrimaryGroupSID 不在 Members 里也补边(Domain Users 这类巨型组的常见坑);
  • • 内置著名组成员注入(add_well_known_group_memberships:1183):Authenticated Users/Everyone 等 SharpHound 不显式列出的隐式成员关系补进图——否则大量 ACL 路径会断。
  • • Azure 数据二阶段缝合:第一遍收集 __azure_pending_edges__ 待定边,第二遍在 OID 归一化后落图。

6.5 SQLite 图缓存:指纹 + 元数据 + 版本失效(:1839-2135)

  • • 指纹 = SHA-256({schema, app_version, files:[{path,size,mtime_ns}]} 规范化 JSON)——文件 mtime 纳秒级参与,任何文件变动即失效;
  • • write/read_graph_cache_meta 在 SQLite 里存元数据表,graph_cache_is_valid 校验后才加载——程序升级自动弃缓存(app 版本进指纹);
  • • --rebuild-cache 强制重建、--no-cache 完全旁路。11K 行工具对\"第二次分析同一包要秒开\"的工程执念。

6.6 黄金路径 + Vegas 老虎机(find_golden_path:6279 + _render_slot_machine:6493)

--golden-path 只找一条到 DA 的最优路:反图 BFS 圈定 80 个候选落脚点(排除本身就是高权名的\"噪音起点\")→ 快速跳短路 + abuse 加权路择优 → 交互式 TTY 上老虎机滚轮动画揭晓路径(--no-animate 关闭)。这是把\"给客户演示攻击路径\"做成了一场表演——DEF CON 血统的仪式感。

6.7 恶意 ZIP 防护(_safe_extract_zip:596)

解包逐条目校验解析后路径不越出目标目录(zip-slip 防护)——分析不可信来源的\"SharpHound 包\"(CTF 对手塞私货)时不会被打。同类工具几乎没人做。

6.8 YAML Profile:分析即配置(profiles/*.yaml + apply_profile_to_args:7624)

四个内置 profile(quick/quick-wins/adcs-heavy/hygiene)把\"检查集 + 模式参数 + 导出动作\"打包成声明式 YAML;--profile adcs-heavy 一条命令等于十余个标志。自定义 profile 就是给团队沉淀方法论。

6.9 防守侧输出:Path Break / Busiest Paths / Stepping Stones

  • • collect_path_breaks:7964:计算\"删除哪条边能打断最多攻击路径\"并打分排序——给蓝队的整改优先级;
  • • collect_busiest_paths:7867:哪个人在最多条路径上(重点盯防对象);
  • • collect_stepping_stones:4981:路径中反复出现的中继节点。
    红队工具长出蓝队灵魂,这是它与\"纯攻击 BloodHound 查询集\"的分野。

6.10 工程杂项亮点

  • • 结构化帮助(StructuredHelpArgumentParser:10321 + print_structured_help:10209):-h 输出\"Start with these 3\"入门表 + 速查表,--help-advanced 才给全量——11K 行工具的帮助系统本身做了渐进披露设计;
  • • Finding 折叠上限(FINDING_COLLAPSE_CAPS):每类发现最多列 25/30/40 条 + 汇总行,防止企业级图刷屏;
  • • DeferredSection(:285):节先注册后决定是否打印——空节自动隐藏(--quiet-empty-sections);
  • • 严重度评分表(SEVERITY_SCORES):ESC1-8/DCSync=10、RBCD/危险权限=9……统一排序输出(print_prioritized_findings:157)。

7. 开发与设计架构

7.1 分层(11,117 行单文件,206 个函数)

BloodBash.py
├─ 常量层      SEVERITY_SCORES / EXPECTED_DCSYNC_RIDS / _PATH_EDGE_COSTS / FINDING_COLLAPSE_CAPS
├─ 采集层      load_json_dirs → _parse_json_dir(三代 SharpHound + Azure + zip-slip 防护)
│              + _resolve_object_type/_normalize_object_type(CE 别名归一)
├─ 图层        build_graph(networkx MultiDiGraph;边翻转/名SID解析/著名组注入/CE嵌套集合)
│              + SQLite 缓存(指纹/元数据/版本失效)
├─ 检测层      30+ print_*/collect_* 函数(每类攻击面一对\"打印+结构化收集\")
│              + 白名单降噪(expected principals)+ 严重度挂钩
├─ 路径层      edge_traversal_cost / _dijkstra_path_weighted / _bounded_abuse_dfs_paths
│              / discover_paths_between / find_golden_path / stepping stones / busiest / path-break
├─ 画像层      build_compromise_dossier(--from-user 出站)/ paths_to_owned(--owned 入站)
├─ 导出层      export_results(md/json/html/csv/yaml) / export_bloodhound_compatible / export_to_dot
│              / export_report_pack(多页HTML) / export_csv_pack(PlumHound式) / export_zip_pack
├─ 配置层      load_analysis_profile + 4 内置 YAML + setup wizard
└─ CLI 层      StructuredHelpArgumentParser + build_arg_parser(~70 参数)+ main 编排
测试(仓库根) test_bloodbash.py + 11 个专项测试 + testData/ 40+ 语料目录
               + synthetic-corp-lab(ground_truth.json) + tools/(语料生成/变异/场景跑批)
               + ludus-env-data/ 13 场景采集包

7.2 设计原则

  1. 1. 零服务:networkx 内存图换 Neo4j——牺牲超大规模交互探索,换取零部署与秒启动;
  2. 2. 检测即函数:每类攻击面一个纯函数(输入图,输出 findings),可独立回归测试;
  3. 3. 信噪比优先:预期主体白名单 + 发现折叠 + 严重度排序;
  4. 4. 红蓝同体:攻击路径与 path-break/busiest 整改建议同一数据底座;
  5. 5. 数据兼容大于内部洁癖:宁可写三层格式归一,也要吃下三代采集器输出。

依赖仅 4 个:networkx / rich / tqdm / pyyaml(pyproject)——PyInstaller 出单 exe(DC34 靶机上直接投放的就是它)。


8. Cheatsheet:命令配方(-h 参数 = 可编程功能模块)

设计哲学:把每个 flag 当作功能模块,按\"输入源(目录/zip/--merge)→ 分析意图(checks/paths/dossier)→ 约束(--domain/--fast/--path-mode)→ 输出(export/report-pack/log)\"四段式拼装。

8.1 入门三连(工具 -h 自己推荐的)

bloodbash ./sharphound_json/                  # 裸目录 = 自动 --quick-wins 分诊
bloodbash ./loot.zip                          # 直接吃 zip
bloodbash --list-domains ./loot/              # 先看采集覆盖了哪些域/租户

8.2 采集源模块(输入段)

bloodbash dir1 --merge dir2 dir3 backup.zip   # 多域/多森林合并分析
bloodbash loot.zip --rebuild-cache            # 强制重解析(无视缓存)
bloodbash loot/ --db /tmp/g.db --cache-dir /tmp/cc   # 自定义缓存位置(无 HOME 环境时)
bloodbash loot/ --no-cache                    # 一次性分析不留痕

8.3 分析意图模块(组合矩阵)

# 单项精查(按需拼装)
bloodbash loot/ --dcsync                          # 意外 DCSync 持有者
bloodbash loot/ --adcs                            # ESC1-14
bloodbash loot/ --rbcd                            # 已配置的 RBCD
bloodbash loot/ --dangerous-permissions --indirect  # 危险 ACL(含间接/组传递)
bloodbash loot/ --privileged-roast                # 能烤的特权账户(嵌套 DA/EA)
bloodbash loot/ --unconstrained-delegation        # 非DC无约束委派
bloodbash loot/ --shadow-credentials              # 影子凭据路径
bloodbash loot/ --laps                            # LAPS 部署状态
bloodbash loot/ --trust                           # 信任/SID过滤滥用
bloodbash loot/ --sessions                        # 本地管理/RDP/DCOM/会话
bloodbash loot/ --gpo-abuse --gpo-content-dir ./gpo_xml/   # GPO 权限+内容(cpassword)
bloodbash loot/ --sid-history --constrained-delegation      # 组合链

# 路径模块(三种探索模式)
bloodbash loot/ --shortest-paths --path-mode short   # 跳数最短
bloodbash loot/ --shortest-paths --path-mode abuse   # 滥用成本最低(推荐)
bloodbash loot/ --deep-paths                         # 深度包=deep模式+垫脚石+最忙路径+断路
bloodbash loot/ --golden-path --from-user jsmith --no-animate   # 单路径快速揭晓(CI友好)

# 角色视角模块
bloodbash loot/ --from-user jsmith --from-user-export ./dossier/  # 出站:我能打哪
bloodbash loot/ --owned 'WEB01$,jsmith' --owned-inventory        # 入站:已控资产盘点
bloodbash loot/ --from-user-file footholds.txt --owned-file owned.txt   # 文件喂主体列表(#注释)

# 防守视角模块
bloodbash loot/ --path-break --path-break-top 20     # 砍哪 20 条边断最多路
bloodbash loot/ --busiest-paths all --busiest-paths-top 10   # 谁在最多路径上
bloodbash loot/ --inventory                           # 结构+密码年龄+僵尸+特权盘点
bloodbash loot/ --password-age --stale-accounts --privilege-inventory   # 拆开单跑

# Azure 模块
bloodbash azure_out/ --azure-privileged-roles --azure-app-secrets
bloodbash azure_out/ --azure-mfa-bypass --azure-guest-access --azure-sp-abuse
bloodbash mixed/ --domain <tenantId>                  # 按租户过滤

8.4 约束与性能模块

bloodbash loot/ --all --fast                  # 全量+大图自动降载
bloodbash loot/ --shortest-paths --path-mode deep --path-depth 8 --max-paths 5
bloodbash loot/ --dangerous-permissions --indirect --fast
bloodbash loot/ --deep-analysis               # 开满速组环检测(慢)
bloodbash loot/ --all-findings                # 末尾全发现表(含空类)
bloodbash loot/ --quiet-empty-sections        # 空节隐藏(默认)

8.5 输出与交付模块

bloodbash loot/ --all --export html           # nargs='?' const=md → --export 空值=md
bloodbash loot/ --quick-wins --export json --log-file run1.log
bloodbash loot/ --all --report-pack ./report/ --export-zip client.zip   # 多页HTML+zip
bloodbash loot/ --csv-pack ./csvs/            # PlumHound 式多CSV包
bloodbash loot/ --export-bh                   # 反导出 BloodHound 兼容 JSON(进 Neo4j 深挖)
bloodbash loot/ --dot graph.dot               # Graphviz(dot -Tsvg graph.dot -o g.svg)

8.6 Profile 模块(声明式配方)

bloodbash loot/ --profile quick-wins      # 内置:日0分诊
bloodbash loot/ --profile adcs-heavy      # 证书专项+HTML报告包
bloodbash loot/ --profile hygiene         # 卫生盘点
bloodbash loot/ --profile ./my.yaml       # 自定义(checks 列表+参数+导出一把梭)

8.7 脚本化\"命令配方\"(参数即模块 → 自动化体系)

# 配方A:接客流水线——采集→分诊→档案→交付全自动
cat > triage.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
LOOT=\"${1:?usage: triage.sh <sharphound_dir>}\"
ENG=\"${2:-engagement-$(date +%Y%m%d)}\"
bloodbash \"$LOOT\" --profile quick-wins --log-file \"$ENG-triage.log\" --export md
bloodbash \"$LOOT\" --from-user-file footholds.txt --from-user-export \"$ENG-dossiers/\"
bloodbash \"$LOOT\" --all --report-pack \"$ENG-pack\" --export-zip \"$ENG.zip\"
echo \"[+] deliverable: $ENG.zip\"
EOF

# 配方B:多域巡检——对每个子域过滤并断路建议
for d in $(bloodbash loot/ --list-domains | awk '/FQDN|domain/{print $NF}'); do
  bloodbash loot/ --domain \"$d\" --path-break --path-break-top 10 --export csv
done

# 配方C:CI 回归——语料变异+跑批+差异报警(仓库自带工具链)
python tools/generate_synthetic_sharphound.py --seed 42 --out corpus/
python tools/mutate_corpus.py corpus/ --mutate add-dcsync --out corpus-m/
bloodbash corpus/  --export json > base.json
bloodbash corpus-m/ --export json > mutated.json
diff <(jq -S . base.json) <(jq -S . mutated.json) && echo \"REGRESSION!\" && exit 1

# 配方D:JSON 输出 → 动态注入下游(jq 管道)
bloodbash loot/ --all --export json | jq '.findings[] | select(.score>=9) | .category'
bloodbash loot/ --from-user jsmith --export json | \\
  jq -r '.paths[] | [.source, (.hops|join(\"->\")), .target] | @tsv' | \\
  while IFS=$'\\t' read -r src hops dst; do
      echo \"[$src] $hops => $dst\"   # 此处可接 bloodyAD/impacket 自动化
  done

# 配方E:血统互通——BloodBash 预分诊 → BloodHound 深挖
bloodbash loot/ --export-bh          # 生成 bloodbash_bh_*.json
# 拖进 BloodHound CE 界面做交互式图探索

参数模块化心法:输入源(directory/--merge/--db) × 意图(checks/paths/dossier/inventory) × 约束(--domain/--fast/--path-mode/--path-depth) × 输出(--export/--report-pack/--csv-pack/--log-file) —— 四个正交维度任意笛卡尔组合;YAML profile 是\"组合的宏\",shell 是\"组合的程序\",JSON 导出是\"组合的 API\"。


9. 落地到实网攻防环境

9.1 前置与部署

场景 部署
分析机(Kali/任意 Linux/macOS) pipx install git+https://github.com/SquidSec/BloodBash.git (依赖仅 4 个纯 Python 库)
目标内网无 Python 环境 Release 页 PyInstaller 单文件 bloodbash.exe(DC34 正是这么投放的)
数据来源 SharpHound(-CE)/bloodhound-python/AzureHound 的 JSON 或 zip;--merge 合并多域多批

9.2 实战路径(红队 / 蓝队 / CTF 三视角)

  • • 红队日 0:拿到立足点 → 采集 → bloodbash loot/(自动 quick-wins)看意外 DCSync/ESC/RBCD → 有 foothold 就 --from-user 出站档案定下一步横向;
  • • 红队深度:--deep-paths 找多跳替代路(主路被封时备用);--golden-path --from-user <低权用户> 给客户演示\"一条链通到 DA\";
  • • 蓝队整改:--path-break 拿\"删边优先级\"清单 → 按分值逐条修 ACL → 重采集复核(缓存指纹自动失效,验证修复生效);
  • • CTF/教学:仓库 ludus-env-data/ 13 场景(FCP→Kerberoast→…→ShadowCreds)+ DC34 全套靶场模板,是现成的 AD 攻防训练课程;
  • • OPSEC 注意:BloodBash 全程离线,分析动作零网络痕迹——痕迹只在采集端(SharpHound 的 LDAP 批量查询),与分析器无关。

9.3 与同类工具协作

bloodhound-python/SharpHound(采集)→ BloodBash(秒级分诊)
    ├─ 小问题:直接出报告交付(--report-pack --export-zip)
    ├─ 大森林:--export-bh 进 BloodHound CE 交互深挖
    └─ 可利用路径:--export json | jq 注入 bloodyAD/Impacket 自动化

10. AI 辅助设计:头脑风暴与多版本对比

本节示范\"用 AI(如本次对话)围绕 BloodBash 做方案设计\"的方法论:问题分析 → 任务拆解 → 多方案对比 → 迭代 → 代码交付。

10.1 问题分析(Prompt 模板)

角色:你是 AD 攻防架构师。
背景:我方 200 节点域,已有 SharpHound 采集数据,需在 15 分钟内向客户输出
     \"到域管的前 5 条可利用路径 + 整改优先级\",且分析机不能联网。
约束:无 Docker 权限;团队只会 bash;需可重复执行。

10.2 任务拆解(AI 产出)

    1. 数据摄取与校验(多批次 zip 合并、采集健康度)
    1. 攻击面分诊(高严重度清单)
    1. 路径发现(可操作性优先)
    1. 整改建议(path-break)
    1. 交付物生成(HTML+zip)
    1. 可重复性(脚本化 + 缓存 + 日志)

10.3 多版本方案对比(AI 并行评估)

维度 方案A:BloodHound CE 方案B:PlumHound+Neo4j 方案C:BloodBash ★ 方案D:手写 jq 脚本
部署 Docker 四容器 Neo4j 单服务 pipx 一条命令 零部署
离线 ✔(装好后) ✔ ✔(天然零网络) ✔
首次出结果 10–30 分钟 5–15 分钟 <1 分钟(裸目录分诊) 取决于开发
交互图探索 ★★★ 最佳 ★★ ★(--dot 可看静态图) ✗
路径可操作性排序 需手写 Cypher 需手写 Cypher 内建 abuse 成本模型 ✗
整改建议 生态查询 生态查询 --path-break 原生 ✗
团队 bash 门槛 Web 界面低 低 低(CLI+profile) 高
可测试性 弱 弱 强(40+ 语料+ground truth) 自定义

结论(AI 推荐):C 为主(分诊/交付/整改),复杂森林图探索临时借 A(--export-bh 桥接)——正是 BloodBash 设计者预期的生态位。

10.4 方案迭代示例(两轮)

  • • v1:bloodbash loot/ --all --export html → 客户反馈\"报告太厚\";
  • • v2:--profile 自定义 YAML 只留 score≥8 的 checks + FINDING_COLLAPSE_CAPS 已内建折叠 + --report-pack --export-zip 一页式交付 → 迭代即改配置不改代码——profile 机制让方案迭代成本趋近于零。

10.5 代码交付(AI 生成即用物)

见 §8.7 配方 A–E:triage.sh(接客流水线)、多域巡检循环、CI 语料回归、jq 下游注入、BH 互通桥——全部可直接落地。


11. 检测与防御(防守方对照)

层 要点
针对采集端 (BloodBash 无网络行为,检测面在 SharpHound) LDAP 批量枚举(会话/ACL/组)告警;SharpHound 特征查询频率基线
数据防外带 SharpHound JSON 落盘即高价值数据——终端 DLP 对大批量 JSON/zip 外发告警
整改闭环 用 --path-break 的删边清单修复 ACL → 重采集 → 对比 --export json 差异验证
卫生基线 定期 --inventory(密码年龄/僵尸账户/特权组)+ --profile hygiene 做巡检
架构加固 Tiering 模型收敛高权路径;预期 DCSync/Admin 白名单之外即事件(与工具同款思路自检)

12. 结论

  • • 工具性质:单文件 11K 行、四依赖、零网络、零服务的 SharpHound/AzureHound 离线分析器——BloodHound 生态的\"终端速答分支\",DEF CON 34 CTF 御用分析器;红蓝双用(攻击分诊 / path-break 整改)。
  • • 最大价值:秒级分诊(裸目录即用)+ 滥用成本路径模型(abuse 模式比跳数更贴近实战)+ 预期主体降噪(只报意外)+ 测试工程化(13 Ludus 场景 + ground truth + 语料变异)。
  • • 代码质量:三代格式兼容层、zip-slip 防护、SQLite 指纹缓存(版本感知)、有界 DFS 防爆炸、结构化帮助、发现折叠——单文件巨兽但工程纪律罕见地好。
  • • 边界:交互式大规模图探索仍输 BloodHound CE(--export-bh 桥接即可);无利用执行能力(设计如此)。

附:主要参考来源

  • • BloodBash(审计对象):https://github.com/SquidSec/BloodBash
  • • SquidSec:https://squidoffense.com/ · DEF CON 34 AD CTF 材料(仓库 DC34/)
  • • BloodHound(数据语义源头):https://github.com/SpecterOps/BloodHound
  • • PlumHound(报表化先声):https://github.com/plumhound/plumhound
  • • Certified Pre-Owned(ESC 语义):https://posts.specterops.io/certified-pre-owned-d953c1db56c9
  • • Ludus(靶场模板来源):https://github.com/francisck/ludus

BloodBash深度审计报告" 网络安全文章

BloodBash深度审计报告"

BloodBash是无服务器版BloodHound,单文件Python工具,直接解析SharpHound/AzureHound采集数据,在内存中构建图并检测30+类AD攻击面(如DCSync、RBCD、ADCSESC1-14等),全程零网络、零服务、零Neo4j。它专为快速AD枚举和CTF场景设计,支持反向导出BloodHound兼容JSON。核心优势是去服务化、秒级分诊,且zip解包内建路径穿越防护,适合隔离环境分析敌意数据。
800" 网络安全文章

800"

文档内容为一条小说阅读记录,显示标题800阿乐你好,发布于2026年8月20日12:41,地点河南,包含在小说阅读器读本章和去阅读的链接及图片,无实质技术或安全内容。
评论:0   参与:  0