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机制, 云资产清单, 内核级文件系统, 子域名枚举, 安全漏洞, 客户端加密, 恶意软件分析, 攻击向量分析, 暴力破解, 漏洞复现, 系统安全, 逆向工程