IE/Edge崩溃可利用性分析与微软安全防护技术解析

本文详细解析了微软IE/Edge浏览器中针对Use-After-Free漏洞的防护技术(Memory Protector与MemGC),包括其工作原理、崩溃可利用性判断方法及实际案例分析,帮助安全研究人员理解现代浏览器的安全缓解机制。

引言

Internet Explorer(IE)和Edge通过多项安全防护技术显著提升了用户安全性。这些缓解措施不仅使某些漏洞类型无法被利用,还大幅提高了攻击者开发有效漏洞利用的成本。由于这些变化,分析崩溃的可利用性变得更为复杂,必须综合考虑缓解措施的影响。本文旨在为安全社区提供技术指导,帮助判断漏洞是否真正可被利用。

Use-After-Free漏洞缓解技术

Use-After-Free(UAF)是现代面向对象软件中的常见漏洞类型,通常由对象释放后仍被引用导致。微软开发了两项主要防护技术:

  1. Memory Protector(MP)

    • 针对栈或寄存器中保存的悬垂指针,通过延迟释放和扫描机制防止内存被恶意重用。
    • 支持"Stress Mode"(通过注册表启用),可立即触发释放以简化分析。
  2. MemGC

    • 当前仅用于Edge和IE11,扩展了MP的功能,额外扫描堆引用,确保对象仅在无任何引用时释放。

可利用性与服务策略

  • MemGC防护的UAF漏洞:除非出现罕见的零写入导致可利用状态,否则视为已完全缓解,不发布安全更新。
  • MP防护的UAF漏洞
    • 栈/寄存器引用类漏洞视为已缓解(除特殊情况外);
    • 堆引用类漏洞仍需通过安全更新修复。

崩溃分析实战

Memory Protector示例

  1. 启用Stress Mode:强制立即释放对象,排除延迟释放干扰。
  2. 分析崩溃现场:若悬垂指针始终存在于栈/寄存器中(如示例中从释放点到崩溃点全程存在引用),则判定为不可利用。
  3. 关键检查点:通过Windbg脚本扫描栈帧,确认引用位置是否覆盖关键代码路径。

MemGC验证步骤

  1. 定位空指针解引用:确定对象基址并验证其是否被零写入。
  2. 追踪分配/释放调用栈:通过edgehtml!MemoryProtection::HeapAllocHeapFree确认对象受MemGC保护。
  3. 堆栈引用扫描:若发现受保护对象存在堆/栈引用,则判定为已缓解。

结论

MemGC和MP技术大幅降低了UAF漏洞的可利用性。分析IE/Edge崩溃时,必须结合缓解机制的行为进行综合评估。

致谢

感谢Chris Betz、Matt Miller等团队成员对本文的贡献。
——MSRC工程部漏洞与缓解团队:Stephen Fleming & Richard van Eeden

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计