影响Internet Explorer 8用户的新漏洞分析与防护措施

本文详细分析了影响Internet Explorer 6、7和8版本的零日漏洞,包括漏洞触发机制、攻击组件分析,并提供了多种防护方案如禁用JavaScript/Flash、使用EMET工具及临时修复补丁,同时介绍了如何检测攻击尝试。

新漏洞影响Internet Explorer 8用户

今天,MSRC发布了安全公告2794220,提醒使用Internet Explorer 6、7和8的客户注意有限的针对性攻击。Internet Explorer 9和10用户不受影响。

漏洞与利用详情

该漏洞中,IE尝试引用和使用先前已释放的对象。此类漏洞的利用组件通常包括:

  • 触发IE漏洞的JavaScript
  • 堆喷射或类似内存准备,确保释放后访问的内存有用
  • 绕过ASLR平台级缓解措施的方法
  • 绕过DEP平台级缓解措施的方法

我们分析了四个利用样本(所有已观察到的针对性攻击),它们非常相似:

  • 混淆的JavaScript触发漏洞
  • 基于Flash ActionScript的堆喷射
  • 使用Java6 MSVCR71.DLL或Office 2007/2010 hxds.dll绕过ASLR(http://www.greyhathacker.net/?p=585)
  • 通过ROP小工具链绕过DEP(根据ASLR绕过方式不同而不同)

阻止代码执行的方法

最佳防护是避免存在易受攻击的代码。IE9或10不包含易受攻击代码,IE团队正在全力开发安全更新以修复早期版本。在更新可用前,IE8用户可通过以下更改阻止当前针对性攻击:

  • 禁用JavaScript可防止漏洞触发
  • 禁用Flash可阻止基于ActionScript的堆喷射准备内存
  • 禁用ms-help协议处理程序并确保不允许运行Java6,可阻止ASLR绕过和相关ROP链

另一种对浏览体验影响较小的替代方案是安装EMET并启用保护IE。EMET的强制ASLR缓解可阻止基于Java6和hxds.dll的ASLR绕过。EMET的导出地址过滤(EAF)缓解可阻止已分析攻击中的shellcode。EMET 3.5的ROP缓解可阻止已分析利用中的Java6和hxds.dll ROP链。

基于应用兼容性填充程序的保护工具

我们正在开发基于应用兼容性填充程序的Fix It保护工具,可在全面更新前保护系统。该填充程序不修复漏洞,但通过运行时对mshtml进行两字节更改(将je指令替换为jmp),防止漏洞被利用执行代码。

填充程序修改mshtml!CElement::FindDefaultElem函数始终返回NULL,导致IE遇到利用时安全崩溃而非代码执行。由于函数返回NULL,无法访问已释放对象,利用失败。该填充程序可能在某些情况下产生默认表单按钮未被默认选择的副作用。

填充程序正打包并代码签名为一键可部署的Microsoft Fix It工具。我们今天发布sdb本身供测试,以便在最终工具可用前提前了解Fix It工具机制。填充程序适用于最新版IE6、7和8,对安装早期或后期版本IE的系统无效。填充程序针对特定mshtml.dll版本,因此通过Windows Update安装官方更新后会自行失效。但由于应用启动时有轻微性能影响,建议在不再需要时卸载。

32位和64位填充程序附于本文,也可通过以下URL获取:

  • mshtml_shim32.sdb (SHA1: 695750970F6595D247FA30775579BD22E034252B)
  • mshtml_shim64.sdb (SHA1: 29444332522F8F06A88953071B3BA13C14FBD70A)

安装与卸载

  • 安装:32位系统运行sdbinst –p mshtml_shim32.sdb;64位系统运行sdbinst –p mshtml_shim32.sdbsdbinst –p mshtml_shim64.sdb
  • 卸载:32位系统运行sdbinst –u mshtml_shim32.sdb;64位系统运行sdbinst –u mshtml_shim32.sdbsdbinst –u mshtml_shim64.sdb

检测针对IE9和10的(失败)利用尝试

针对IE9和10的利用尝试对攻击者无效,但敏锐的防御者可发现管理的IE9或10系统已被针对。漏洞触发关键元素为:

1
window.location = unescape("%u0d0c%u10abhttps://www.example.com…)

在无漏洞系统上,此JavaScript片段会产生将编码堆喷射地址包含在HTTP GET请求中的副作用。网络或代理日志会显示以下HTTP请求:

1
2
GET /exploit.html HTTP/1.1
GET /%E0%B4%8C%E1%82%ABhttps://www.example.com HTTP/1.1

可见,值0x10AB0C0D以UTF8编码并作为HTTP请求部分发送。真实利用不使用example.com,堆喷射地址因目标OS平台和利用机制而异,但如果在代理日志中看到编码内存地址,应调查组织是否被针对。

结论

我们重申IE9和10不受影响,目前仅观察到非常针对性的攻击。我们正全力开发完整安全更新。接下来预计会看到我们宣布可用Fix It工具阻止易受攻击代码路径的更新。在此期间,如有任何问题,请通过switech@microsoft.com联系我们。

特别感谢Elia Florio分析此漏洞的利用。

  • Cristian Craioveanu和Jonathan Ness,MSRC工程团队

12月31日更新:Fix It工具已可用。请参见http://support.microsoft.com/kb/2794220获取下载链接和详情。

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