atroubledsnake/SNEK_Blue-War-Hammer

GitHub: atroubledsnake/SNEK_Blue-War-Hammer

这是一个基于Blue Hammer研究重新实现的安全概念验证工具,通过深入分析Windows Defender更新机制与VSS交互,演示高级Windows API编程及潜在攻击路径。

Stars: 103 | Forks: 31

# SNEK Blue War Hammer - 漏洞文档与重新实现 - SNEK Blue War Hammer 专业的概念验证,演示了 Windows Defender 利用技术。本项目展示了安全研究概念,仅供教育目的使用。 基于 [Nightmare-Eclipse](https://github.com/Nightmare-Eclipse/BlueHammer) 的公开漏洞研究。 ### 来自 ATroubledSnake 的说明 我修改了许多内容,这些内容是我们不知道有成员使用了 AI 添加的。对于之前上传的糟糕状态,我们深表歉意,希望大家原谅我们 ;P ## 概述 SNEK Blue War Hammer 是一个研究工具,用于检查 Windows Defender 更新机制及其与系统文件访问控制的交互。该实现演示了高级 Windows API 编程模式,包括 RPC 通信、COM 接口、VSS 操作以及内核级文件系统操作。 该工具专为安全研究人员和系统管理员设计,旨在了解更新机制中的潜在攻击路径。 ## 依赖项和运行时要求 本项目混合使用了 Win32 API、COM、Windows Update Agent 接口、原生 NT API,以及从 `windefend.idl` 生成的 RPC 存根,并包含用于系统工件分析的额外库。 主要依赖项: - `wininet.lib` - `ktmw32.lib` - `Shlwapi.lib` - `Rpcrt4.lib` - `ntdll.lib` - `Cabinet.lib` - `Wuguid.lib` - `CldApi.lib` - `userenv.lib` - `Secur32.lib` - `wbemuuid.lib` 代码还引入了 `windefend_h.h` 和 `offreg.h` 用于 RPC 和注册表访问。 ## 结构 源文件分为以下主要部分: - 顶层导入、宏定义和运行时加载的 NT 导入。 - MIDL 生成代码所需的 RPC 分配辅助函数。 - Defender RPC 调用逻辑。 - Cabinet 提取和更新文件检索函数。 - Windows Update 扫描和更新检测逻辑。 - VSS 和 Defender 触发逻辑。 - 系统工件解析和分析。 - 主应用程序入口点。 ## 原生 NT 导入 代码在运行时使用 `GetProcAddress` 从 `ntdll.dll` 获取 NT 原生函数。 这些函数不是标准 Win32 API 的一部分,用于底层操作,例如: - `NtCreateSymbolicLinkObject` - `NtOpenDirectoryObject` - `NtQueryDirectoryObject` - `NtSetInformationFile` 这种运行时解析允许该工具与底层内核对象和重解析点交互,而无需静态依赖。 ## RPC 分配辅助函数 函数 `midl_user_allocate` 和 `midl_user_free` 是 MIDL 生成的 RPC 存根所必需的。 它们为客户端运行时提供 malloc/free 回调,用于 RPC 参数的封送和反封送。 ## Defender RPC 调用流 ### 调用 CallWD `CallWD` 建立与本地 Defender 服务的 RPC 绑定,并调用 `ServerMpUpdateEngineSignature`。 - 它使用 Defender 接口 UUID 构建 RPC 字符串绑定。 - 它从该字符串创建绑定句柄。 - 它调用 Defender 引擎更新 RPC 方法。 - 它在调用完成时发出完成事件信号。 该调用在专用工作线程上执行,以便主代码可以继续并发监视文件系统事件。 ### WDCallerThread `WDCallerThread` 是一个轻量级包装器,将调用转换为线程兼容的入口点。 它验证输入指针并调用 `CallWD`。 ## Defender 更新提取 ### 获取更新文件 `GetUpdateFiles` 直接从 Microsoft 下载最新的 Defender 更新包,并从 CAB 格式中提取它。 该函数执行以下操作: - 创建 `InternetOpen` 会话。 - 打开 Defender 更新 URL。 - 查询 HTTP 内容长度以确定下载缓冲区的大小。 - 将整个更新包读取到内存中。 - 在下载的包中定位嵌入的 CAB 文件。 - 使用 FDI(Microsoft Cabinet API)回调在内存中提取 CAB 载荷。 - 返回包含文件名、缓冲区和大小的 `UpdateFiles` 结构体链表。 该函数是漏洞利用的核心,因为它提供了随后用于触发 Defender 行为的原始更新文件。 ## 更新扫描逻辑 ### 检查 WD 更新 `CheckForWDUpdates` 使用 Windows Update Agent COM 接口来确定是否有新的 Defender 更新可用。 该函数执行以下步骤: - 初始化 COM。 - 创建 `IUpdateSession` 对象。 - 创建 `IUpdateSearcher` 对象。 - 使用 `Type='Software'` 条件搜索可用更新。 - 检查每个返回的更新是否包含 Defender 相关元数据。 - 找到合适的更新时返回成功。 如果 COM 初始化或任何更新接口调用失败,该函数将 `*criterr` 设置为 true 并报告失败。 ## VSS 触发逻辑 ### 为 VS 触发 WD `TriggerWDForVS` 尝试强制 Defender 创建卷影副本路径。 它通过以下方式实现: - 在 `%TEMP%` 下生成唯一的临时目录。 - 将一个精心制作的文件写入该目录。 - 创建工作线程以监视卷影副本/VSS 状态。 - 等待 Defender 访问该文件并创建新的 VSS 就绪位置。 只有当 Defender 被成功诱导产生预期的卷影副本路径时,该函数才返回 `true`。 ## 系统工件解析 提取后,该工具使用系统提供的加密原语进行工件分析: - 基于MD4的哈希计算,用于旧格式兼容性 - SHA256 用于完整性验证 - DES 解密用于旧系统数据结构 - 使用系统加密提供程序进行 AES 解密 - 离线注册表配置单元解析用于工件提取 ## 构建说明 要构建该项目: 1. 在 Visual Studio 2022 中打开 `SNEK_BlueWarHammer.sln`。 2. 确保安装并配置了 vcpkg 用于 x64-windows 三元组。 3. 构建 Release|x64 配置。 4. 可执行文件将在 `x64\Release\SNEK_BlueWarHammer.exe` 中生成。 使用 MSBuild 的替代命令行构建: ``` MSBuild SNEK_BlueWarHammer.sln /p:Configuration=Release /p:Platform=x64 ``` ## 用法 运行该工具并记录日志以监控进度: ``` SNEK_BlueWarHammer.exe --log-steps ``` 命令行选项: - `--check-updates`: 仅检查 Defender 签名更新 - `--download-only`: 下载并提取更新,而不进行完整漏洞利用 - `--trigger-vss-only`: 仅执行 VSS 触发阶段,而不执行完整工作流 - `--disable-spawn`: 在工件提取后阻止 shell 执行 - `--log-steps`: 显示详细的操作进度 ## 安全注意事项 该工具演示了与 Windows 安全研究相关的技术。使用仅限于: - 受控环境中的授权安全研究 - 用于理解 Windows 内部的教育目的 - 系统管理和漏洞评估 ### 仅限科学研究使用 该工具仅旨在用于受控环境内的科学研究、教育目的和系统管理。无论使用何种工具或技术,未经授权访问计算机系统都是非法的。 ### 提供者:ATroubledSnake & The SNEK Initiative。Freeware 万岁。
标签:Cabinet 文件, COM 接口, Hpfeeds, Linux, NT API, POC, Prisma Cloud, RFI远程文件包含, RPC 通信, Secur32, VSS, Web报告查看器, Windows API, Windows Defender, Windows 安全, Windows 更新机制, 内核编程, 卷影副本, 客户端加密, 攻击面分析, 文件系统, 概念验证, 注册表操作, 漏洞复现, 系统调用