technoherder/BlueHammerFix

GitHub: technoherder/BlueHammerFix

这是一个针对 Windows Defender 本地提权漏洞 BlueHammer 的修复版概念验证工具,配套提供了完整的检测规则与技术分析报告。

Stars: 39 | Forks: 15

# BlueHammer ## 概述 BlueHammer 是一个针对 Windows Defender 签名更新机制的本地提权 (LPE) 概念验证。它串联了多个 TOCTOU 竞态条件,通过卷影副本 (Volume Shadow Copy) 泄露 SAM 数据库,提取 NTLM 哈希,并从标准用户提升至 SYSTEM 权限。 原作者为 Tom Gallagher、Igor Tsyganskiy 和 Jeremy Tinder(根据源代码注释)。 ## 红队分析 该仓库由红队识别并分析,用于研究目的。原始 PoC 包含多个导致无法可靠执行的 Bug。此分支包含 Bug 修复、检测规则和实验室测试文档。 ### 完成的工作 - 对利用链进行了完整的静态分析(7 个阶段) - 识别并修复了原始源代码中的 9 个 Bug - 添加了 `--force` 标志以绕过 Windows Update API 轮询,便于实验室测试 - 加固了更新过滤器,以区分签名更新 (KB2267602) 和平台更新 (KB4052623) - 在 Windows 10 VM (MalDev 环境) 上进行了实验室测试,并启用了 EDR/NDR 监控 - 开发了 7 条 Sigma 检测规则和 4 条 YARA 规则 - 生成执行摘要和完整的技术报告 ## 利用链摘要 | 阶段 | 描述 | 实验室验证 | |---|---|---| | 1 | 轮询 Windows Update API 以检查待处理的 Defender 签名更新 | 是 | | 2 | 从 Microsoft CDN 下载更新包,提取 .vdm 文件 | 是 | | 3 | 放置 EICAR 测试文件,对 RstrtMgr.dll 设置 oplock,触发 VSS 创建 | 是 | | 3 | 注册 Cloud Files 同步根,通过 PID 识别 MsMpEng.exe,通过 oplock 冻结 | 是 | | 5 | RPC 调用 Defender 更新端点,对 .vdm 设置 oplock,使用 junction + 对象管理器符号链接将读取重定向至 VSS 中的 SAM | 是 | | 6 | 使用 LSA 启动密钥解密 SAM 哈希,通过 SamiChangePasswordUser 修改密码,登录,恢复 | 是 | | 7 | 创建临时 SYSTEM 服务,在用户会话中生成 conhost.exe | 是 | ## 已应用的 Bug 修复 | # | 位置 | Bug | 修复 | |---|---|---|---| | 1 | Line 688 | `InternetCloseHandle` 后 `hint2` 未置空 | 更改为 `hint2 = NULL` | | 2 | Line 3380 | 清理检查了两次 `hint` 而非 `hint`/`hint2` | 将保护条件更改为 `if(hint2)` | | 3 | Lines 3384-3385 | 对 `malloc` 分配的缓冲区执行 `UnmapViewOfFile` | 移除了无效的清理代码 | | 4 | Line 2188 | `ZeroMemory` 大小为 `size+1` 而非 `size*2+1` | 修复了缓冲区大小 | | 5 | Lines 2113, 2117 | `sizeof(data)` 是指针大小 (8) 而非数组大小 (7) | 使用显式常量 `DATA_LEN = 7` | | 6 | Line 1294 | VSS 查找线程无限自旋且无休眠 | 在重试之间添加了 `Sleep(50)` | | 7 | Line 1863 | `UnprotectAES` 中泄露了加密句柄 | 添加了 `CryptDestroyKey`/`CryptReleaseContext` | | 8 | Line 2049 | `UnprotectDES` 中泄露了加密密钥 | 添加了 `CryptDestroyKey` | | 9 | Line 1724 | 在线程完成前调用了 `GetExitCodeThread`(返回 `STILL_ACTIVE`) | 在检查退出代码前添加了 `WaitForSingleObject` | ## 构建 **要求:** - Visual Studio 2022 (v143 工具集) - Windows SDK 10.0.26100.0 - x64 目标平台 ``` Open FunnyApp.sln Select: Release | x64 Build -> Build Solution Output: x64\Release\FunnyApp.exe ``` **注意:** 预构建的 `x64\Release\FunnyApp.exe` 来自原始仓库,不受信任。请始终从源代码构建。 ## 使用方法 ``` FunnyApp.exe Normal mode — waits for pending signature update via Windows Update API FunnyApp.exe --force Force mode — skips update check, downloads directly from CDN ``` 建议使用普通模式。它仅在存在真实的定义版本差距时继续,这能保证 RPC 调用成功。强制模式适用于实验室测试,但如果已安装的定义已与 CDN 版本匹配,可能会失败并返回 `0x8050A003`。 ### 前置条件 - Windows Defender 实时保护必须开启 - 必须存在待处理的签名定义更新(普通模式会自动处理此情况) - 标准用户权限(利用本身不需要管理员权限) - 能够连接到 `go.microsoft.com` (Microsoft CDN) 的互联网连接 ### 实验室设置技巧 要创建用于测试的定义版本差距: 1. 通过 Windows 安全 GUI 禁用篡改保护 2. 回滚定义:`MpCmdRun.exe -RemoveDefinitions -All` 3. 恢复定义:`MpCmdRun.exe -SignatureUpdate` 4. 等待下一次 Microsoft 定义发布(每 2-4 小时) 5. 运行 `FunnyApp.exe` — 它将自动检测待处理的更新 ## 仓库结构 ``` FunnyApp.cpp Main exploit source (3,450+ lines) FunnyApp.sln / .vcxproj Visual Studio 2022 project windefend.idl MIDL interface definition for WD RPC windefend_c.c / _s.c / _h.h MIDL-generated RPC stubs and header offreg.h / offreg.lib Microsoft Offline Registry Library detection_rules/ sigma/ bluehammer_samlib_load.yml Non-LSASS process loading samlib.dll bluehammer_rapid_password_change.yml Password change-logon-restore cycle bluehammer_junction_basenamed.yml Junction to BaseNamedObjects bluehammer_temp_service_creation.yml GUID-named temporary service bluehammer_oplock_rstrtmgr.yml Exclusive handle on RstrtMgr.dll bluehammer_cloudfiles_abuse.yml Cloud Files API by non-provider bluehammer_lsa_bootkey_access.yml LSA boot key registry access bluehammer_defender_rpc_call.yml Non-Defender RPC to IMpService yara/ bluehammer.yar 4 rules: exact match + 3 variant rules reports/ EXECUTIVE_SUMMARY.md For security leadership / CISO TECHNICAL_REPORT.md For SOC / detection engineering / IR LAB_IOC_OBSERVATION_GUIDE.md Stage-by-stage IoC checklist for lab testing ``` ## MITRE ATT&CK 覆盖 | 技术 | 描述 | 阶段 | |---|---|---| | T1068 | 利用程序进行权限提升 | 3-5 | | T1543.003 | Windows 服务 | 7 | | T1562.001 | 禁用或修改工具 | 4 | | T1574.005 | 可执行安装程序文件权限滥用 | 5 | | T1003.002 | SAM | 6 | | T1552.002 | 凭据位于注册表中 | 6 | | T1098 | 账户操纵 | 6 | | T1569.002 | 服务执行 | 7 | | T1005 | 本地系统数据 | 5 | ## 主要发现 1. **无恶意软件、C2 或反向 Shell。** 唯一的网络连接是连接到 Microsoft 的合法更新 CDN。无数据渗漏,无信标通信,无持久化。 2. **新颖的 Cloud Files API 滥用。** 使用 `CfRegisterSyncRoot` + 回调通过 PID 识别安全进程并选择性冻结它们,这种方法很有创意,且目前在行业内缺乏监控。 3. **可组合的原语。** 该利用包含 6 种独立技术(oplock TOCTOU、Cloud Files 冻结、junction+symlink 链、非特权 VSS 创建、通过 SamiChangePasswordUser 进行本地传递哈希、临时服务提权),即使 Microsoft 修补了此特定漏洞,这些技术也可以重新组合以针对不同目标。 4. **存在检测盲区。** Cloud Files 同步根注册、对象管理器符号链接创建以及非 LSASS 进程调用的 `SamiChangePasswordUser` 在大多数环境中默认不受监控。
标签:0day挖掘, AMSI绕过, Cloudflare, CSV导出, DNS信息、DNS暴力破解, EDR, Exploit, LPE, MITRE ATT&CK, NDR, NTLM哈希, PoC, Prisma Cloud, RPC, SAM数据库, Sigma规则, TOCTOU, VSS, Web报告查看器, Windows, Windows 10, Windows Defender, YARA规则, 内核安全, 卷影副本, 威胁检测, 子域名枚举, 客户端加密, 数据展示, 暴力破解, 本地提权, 流量嗅探, 漏洞修复, 漏洞分析, 目标导入, 竞态条件, 系统安全, 红队, 网络安全培训, 网络安全审计, 脆弱性评估, 路径探测