影响所有版本IE的新漏洞:ASLR与DEP绕过技术解析

本文详细分析了2010年披露的Internet Explorer零日漏洞,该漏洞影响所有IE版本,攻击者通过mscorie.dll的固定基址绕过ASLR和DEP防护,利用ROP技术实现远程代码执行。微软建议使用EMET工具进行动态重基址防护。

新Internet Explorer漏洞影响所有版本IE

安全研究与防御团队
作者: swiat
发布日期: 2010年12月22日
阅读时间: 2分钟

今日我们发布安全通告2488013,告知客户Internet Explorer(IE)中存在一个新公开披露的漏洞。该漏洞影响所有版本的IE。利用此漏洞可能导致在iexplore.exe进程内执行未经授权的远程代码。

概念验证利用绕过ASLR和DEP

Metasploit项目最近发布了利用此漏洞的代码,采用已知技术规避ASLR(地址空间布局随机化)并绕过DEP(数据执行保护)。

简而言之,Internet Explorer在处理某些HTML标签时会加载mscorie.dll,该库未使用/DYNAMICBASE编译(因此不支持ASLR且始终位于相同基址)。攻击者利用这些可预测的映射规避ASLR,并通过这些DLL中的ROP(返回导向编程)小工具绕过DEP,以分配可执行内存、复制其shellcode并跳转执行。请注意,若无此可预测映射,唯一公开的规避ASLR和DEP的方法包括:

  • 利用此漏洞(若当前漏洞允许)或其他漏洞作为信息泄露
  • 使用JIT-spraying或类似技术。请注意IE仅对IE9的JavaScript进行JIT编译,且已部署安全缓解措施。但第三方插件可能以不安全方式进行JIT编译

我们最近在此博客讨论了ASLR和DEP的有效性。

建议:使用增强缓解体验工具包(EMET)动态重基址所有加载的DLL

为最小化利用风险,用户可安装EMET并按照BlueHat视频所示保护iexplore.exe进程。

试图绕过ASLR和DEP的利用会使用多个ROP小工具实现不同目的。为理解EMET为何是这些利用的有效应对措施,我们重点关注将栈指针设置为攻击者控制数据(本例中为堆喷)的栈旋转小工具:

1
2
3
4
5
6
7
0:000> u 63f0575b L4
mscorie!_chkstk+0x1b:
63f0575b 94              xchg    eax,esp
63f0575c 8b00            mov     eax,dword ptr [eax]
63f0575e 890424          mov     dword ptr [esp],eax
63f05761 c3              ret
0:000>

当部署EMET时,此类利用很可能失败。原因至少包括三项缓解措施:

  • 强制ASLR:此缓解措施强制mscorie.dll每次加载到随机地址
  • 堆喷预分配:部分利用使用常见堆页面(如0x0c0c0c0c)放置ROP数据
  • EAT过滤:运行shellcode可能被此缓解措施阻断

尽管上述后两项缓解措施并非万无一失且可被规避,但强制ASLR是关闭mscorie.dll利用向量的可靠方法。当利用尝试跳转到其认为位于可预测内存地址的ROP小工具时,将触发访问违规并崩溃进程:

1
2
3
4
0:000> u 63f0575b L4
63f0575b ?? ???
^ Memory access error in 'u 63f0575b l4'
0:000>

利用将因此失败。

感谢MSRC工程团队的Richard van Eeden、Bruce Dang和Jonathan Ness协助调查此问题。


Fermin J. Serna, 安全软件工程师
文章按“原样”提供,无任何保证,不授予任何权利。

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