)
BlueHammer 批处理 Oplock 竞态攻击FSCTL_REQUEST_BATCH_OPLOCK 如何冻结 Windows Defender完整原理指南【免费下载链接】BlueHammerRepository hosting the bluehammer vulnerability项目地址: https://gitcode.com/gh_mirrors/bl/BlueHammerBlueHammer 是针对 Windows DefenderWinDefend服务的一个本地权限提升漏洞 PoC仓库定位是 README.md 所说的 hosting the bluehammer vulnerability。它的核心武器是 Windows 文件系统控制码FSCTL_REQUEST_BATCH_OPLOCK——一个批处理 Oplock机会锁异步请求。本文用通俗的方式讲清楚这个 API 在攻击链里扮演时间控制器如何把 Defender 的文件操作精确卡住最终让攻击者从系统保护最严的 VSS 快照里读走 SAM 账户数据库。⚠️ 安全提示本项目是漏洞研究代码请只在授权的测试环境中分析不要在生产机器上运行。 一分钟看懂 BlueHammer 做了什么整个攻击可以拆成 4 步步骤动作用到的武器1等待 Defender 签名更新窗口轮询更新接口2冻结 Defender制造一个可用的 VSS 卷影快照Batch Oplock Cloud Files 回调3用符号链接劫持 Defender 的读请求Batch Oplock制造竞态窗口4从 VSS 快照读走 SAM、解析哈希、改密码事务文件CreateFileTransactedOplock 是贯穿第 2、3 步的关键。下面先看它是什么。 什么是 Oplock为什么偏偏选 Batch 类型Oplock机会锁是 NTFS 的缓存一致性协议一个进程频繁读文件时可以申请独占缓存权其他进程再来碰这个文件时系统会先通知break持锁者保证数据不脏。Windows 提供几种 Oplock 强度BlueHammer 选的是最弱的Batch类型语义什么时候被打破Batch批处理最宽松我有读缓存权只要别的进程打开该文件哪怕只读就 breakLevel-II无其他进程打开时授予别的进程以写方式打开时 breakExclusive独占完全独占任何新打开都 breakBatch Oplock 对攻击者最有价值的特性是请求可以异步挂起。调用DeviceIoControl(handle, FSCTL_REQUEST_BATCH_OPLOCK, ..., ovd)并传入OVERLAPPED结构后线程会停在GetOverlappedResult上休眠直到文件系统发出 break 通知才瞬间被唤醒。换句话说攻击者把 Oplock 当成一枚信号枪——Defender 一碰目标文件攻击线程立刻醒来接管战场。这就是竞态攻击的精确计时器。 源码中的三处关键用法按执行顺序1️⃣ 用 Oplock 冻结 Defender锁住 VSS 快照FreezeVSS线程FunnyApp.cpp先用 Cloud Files 接口注册一个同步根目录然后等待 Defender 进程来访问它系统会通知回调 FunnyApp.cpp。确认是 Defender 进程后攻击者才发出 Oplock 请求DeviceIoControl(hlock, FSCTL_REQUEST_BATCH_OPLOCK, NULL, NULL, NULL, NULL, NULL, ovd); // 异步挂起FunnyApp.cppDefender 一打开这个.lock文件Oplock 就被 break攻击线程打印WD is frozen and the new VSS can be used.FunnyApp.cpp。此时快照已就绪Defender 被钉在快照创建的那个时间点上。2️⃣ 在 RstrtMgr.dll 上埋一颗监听器TriggerWDForVSFunnyApp.cpp还做了一次 Oplock 请求但目标换成了系统目录下的RstrtMgr.dll重启管理器组件Defender 恢复更新流程会加载它。攻击者以GENERIC_READ | SYNCHRONIZE打开该 DLL 并请求 Batch OplockFunnyApp.cpp随后写一个 EICAR 测试文件诱导 Defender 开始扫描动作——Oplock break 的时刻就是 Defender 状态机切换的确切时刻攻击者借此把创建快照、布置劫持这些动作卡在对齐的时间点上。3️⃣ 核心竞态mpasbase.vdm 上的 Oplock 陷阱这是整个漏洞的高潮FunnyApp.cpp攻击者伪造一个Defender 定义更新目录通过本地 RPC 端点接口定义见 windefend.idl桩代码生成在 windefend_c.c诱骗 Defender 去加载更新库mpasbase.vdm在 Defender 真正读取之前攻击者先打开该文件并异步请求Batch Oplock——请求挂起等待DefenderSYSTEM 权限打开mpasbase.vdm的瞬间Oplock break 触发攻击线程被唤醒就在这条 I/O 流水线暂停的毫秒级窗口里攻击者在命名对象目录里种下符号链接mpasbase.vdm→ VSS 快照中的\Windows\System32\Config\SAMFunnyApp.cppDefender 的读请求继续执行时内核按新符号链接解析它以为自己读的是病毒库实际读出来的是 SAM 数据库攻击者再用CreateFileTransacted事务句柄扣押这个文件FunnyApp.cpp阻止 VSS 快照回收从容解析出 NTLM 哈希最终改密码或为所有用户弹出 shellDoSpawnShellAsAllUsersFunnyApp.cpp。这是一个典型的TOCTOU时间检查/时间使用竞态系统安全检查文件路径的那一刻和 Defender 真正使用文件的那一刻之间攻击者利用 Oplock 唤醒窗口悄悄替换了路径指向。⏱️ 为什么这个竞态能赢Batch Oplock 的唤醒是同步点它不靠 sleep 猜时间而是由内核在 Defender 发起打开动作的同一瞬间通知攻击者窗口对齐精度极高Defender 自身行为是触发源更新检查、签名加载、EICAR 扫描都是 Defender 的正常动作攻击只是顺势引导快照 符号链接 事务三件套VSS 提供了绕过独占锁读系统文件的通道符号链接完成目标替换事务保证快照存活每一步都精确衔接。️ 修复与防御启示微软已随 2025 年的 Windows 安全更新修复该漏洞普通用户最重要的一条防御就是保持系统补丁和 Defender 定义更新对安全工程师而言这个案例提醒我们任何先校验路径、后打开文件的 SYSTEM 级流程都要考虑符号链接/对象链接劫持 异步 Oplock组合的竞态可能蓝队可关注VSS 快照的创建时机、ProgramData下 Defender 更新目录的写入来源、以及命名对象目录中异常的符号链接对象。 项目文件索引文件作用FunnyApp.cpp攻击主程序Oplock、VSS、符号链接、SAM 解析全在此windefend.idlDefender 本地 RPC 接口的 IDL 定义windefend_c.c / windefend_s.c由 IDL 生成的客户端桩 / 服务器骨架offreg.h offreg.lib离线注册表offreg工具用于直接操作系统 hiveFunnyApp.vcxprojVisual Studio 工程文件一句话总结FSCTL_REQUEST_BATCH_OPLOCK本身是 Windows 合法的缓存协议调用但 BlueHammer 把它用成了竞态攻击的节拍器——谁先拿到 Oplock 唤醒信号谁就能在 Defender 读文件的那一瞬间改写规则。【免费下载链接】BlueHammerRepository hosting the bluehammer vulnerability项目地址: https://gitcode.com/gh_mirrors/bl/BlueHammer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考