The-SNEK-Initiative/SNEK_Blue-War-Hammer
GitHub: The-SNEK-Initiative/SNEK_Blue-War-Hammer
针对 Windows Defender 更新机制的漏洞文档与概念验证工具,演示了 RPC、COM、VSS 及内核级文件系统操作等高级 Windows 安全研究技术。
Stars: 156 | Forks: 43
# 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 存根所必需的。
它们为客户端运行时提供了用于封送和解送 RPC 参数的 malloc/free 回调。
## Defender RPC 调用流程
### 调用WD
`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 triplet。
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 触发阶段,不执行完整的工作流
- `--no-spawn`:在提取工件后阻止执行 shell
- `--log-steps`:显示详细的操作进度
## 安全注意事项
该工具演示了与 Windows 安全研究相关的技术。其使用仅限于:
- 在受控环境中进行的授权安全研究
- 用于了解 Windows 内部原理的教育目的
- 系统管理和漏洞评估
### 仅供科学研究
该工具仅旨在用于受控环境下的科学安全研究、教育目的和系统管理。未经授权访问计算机系统是违法行为,无论使用了何种工具或技术。
### 提供者:ATroubledSnake 和 SNEK Initiative。自由软件万岁。
标签:COM接口, DAST, Linux, Nightmare-Eclipse, PoC, Prisma Cloud, RPC通信, UML, VSS卷影复制, Win32 API, Windows API, Windows Defender, Windows Update机制, 云资产清单, 内核级文件系统, 子域名枚举, 安全漏洞, 客户端加密, 恶意软件分析, 攻击向量分析, 暴力破解, 漏洞复现, 系统安全, 逆向工程