引言
Internet Explorer(IE)和Edge通过多项安全防护技术显著提升了用户安全性。这些缓解措施不仅使某些漏洞类型无法被利用,还大幅提高了攻击者开发有效漏洞利用的成本。由于这些变化,分析崩溃的可利用性变得更为复杂,必须综合考虑缓解措施的影响。本文旨在为安全社区提供技术指导,帮助判断漏洞是否真正可被利用。
Use-After-Free漏洞缓解技术
Use-After-Free(UAF)是现代面向对象软件中的常见漏洞类型,通常由对象释放后仍被引用导致。微软开发了两项主要防护技术:
-
Memory Protector(MP)
- 针对栈或寄存器中保存的悬垂指针,通过延迟释放和扫描机制防止内存被恶意重用。
- 支持"Stress Mode"(通过注册表启用),可立即触发释放以简化分析。
-
MemGC
- 当前仅用于Edge和IE11,扩展了MP的功能,额外扫描堆引用,确保对象仅在无任何引用时释放。
可利用性与服务策略
- MemGC防护的UAF漏洞:除非出现罕见的零写入导致可利用状态,否则视为已完全缓解,不发布安全更新。
- MP防护的UAF漏洞:
- 栈/寄存器引用类漏洞视为已缓解(除特殊情况外);
- 堆引用类漏洞仍需通过安全更新修复。
崩溃分析实战
Memory Protector示例
- 启用Stress Mode:强制立即释放对象,排除延迟释放干扰。
- 分析崩溃现场:若悬垂指针始终存在于栈/寄存器中(如示例中从释放点到崩溃点全程存在引用),则判定为不可利用。
- 关键检查点:通过Windbg脚本扫描栈帧,确认引用位置是否覆盖关键代码路径。
MemGC验证步骤
- 定位空指针解引用:确定对象基址并验证其是否被零写入。
- 追踪分配/释放调用栈:通过
edgehtml!MemoryProtection::HeapAlloc
和HeapFree
确认对象受MemGC保护。 - 堆栈引用扫描:若发现受保护对象存在堆/栈引用,则判定为已缓解。
结论
MemGC和MP技术大幅降低了UAF漏洞的可利用性。分析IE/Edge崩溃时,必须结合缓解机制的行为进行综合评估。
致谢
感谢Chris Betz、Matt Miller等团队成员对本文的贡献。
——MSRC工程部漏洞与缓解团队:Stephen Fleming & Richard van Eeden