快速演变的漏洞利用技术
大家好,我们是Vincenzo和Fermin!
下周我们将在BlueHat会议上进行两场演讲。Vincenzo将与Tim Kornau、Ralf Philipp Weinmann和Thomas Dullien一起讨论返回导向编程(ROP)以及如何自动化生成ROP载荷。此外,Fermin和Andrew Roths将介绍EMET(增强缓解体验工具包)及其如何防止漏洞被成功利用。
自2004年以来,漏洞利用领域发生了许多变化。攻防研究人员之间的猫鼠游戏带来了两个重要且改变游戏规则的缓解措施:ASLR(地址空间布局随机化)和DEP(数据执行保护)。
实际上,针对支持DEP和ASLR的现代平台和应用程序的漏洞利用,要么利用ASLR的弱点(例如未随机化的DLL),要么利用DEP强制执行的缺失(例如JIT喷射)。
从实践角度来看,这意味着漏洞利用在大多数情况下按以下方式工作:
- 在进程地址空间中找到未随机化的DLL。
- 从DLL中链接一些ROP小工具(我们可以将小工具视为执行特定任务的一组汇编指令)。
- 使用ROP shellcode禁用/绕过DEP。
- 执行标准(非ROP)载荷。
在我们的演示中,我们将展示一个工具包,允许您使用自定义语言编写载荷,该载荷将被转换为ROP shellcode。
有些人可能会指出,大多数情况下ROP载荷非常小,因此可能不需要这样的工具。不幸的是,我们在过去几年中了解到,漏洞利用领域发展迅速。
例如,在某些移动平台(如iPhone OS)中,无法执行工作流程的第三步。因此,整个载荷必须由ROP小工具组成。此外,为了击败ASLR,通常需要编写ROP蛋猎手来定位内存中的载荷片段。
这两种常见场景中,像我们这样的工具可以派上用场。
已经进行了一些关于永久停止ROP载荷的方法的研究,可能有一天我们会实现这一目标,但目前我们拥有的一些最佳缓解措施是像EMET这样的工具,它使上述漏洞利用工作流程变得更加困难。
如您所知,EMET 2.0已于几周前发布。它是一个工具,能够为任意应用程序部署安全缓解技术,帮助防止这些应用程序(尤其是业务线和第三方应用程序)中的漏洞被成功利用。更多信息,请参见SRD博客。
EMET提供了多种缓解措施,甚至适用于低级操作系统(DEP、堆页预分配、SEHOP、强制ASLR和EAT过滤)。
强制ASLR是最有趣的缓解措施之一。即使应用程序选择了ASLR,某些使用的DLL可能被放置在可预测的映射中。这是因为这些DLL未使用/DYNAMICBASE链接器选项编译。当启用强制ASLR时,EMET通过强制重新定位这些DLL来解决此问题。
以最新Adobe漏洞的Metasploit模块为例。该漏洞利用依赖于位于非ASLR感知模块icucnv36.dll上的几个小工具。
使用的第一个ROP小工具将堆栈放置在受控位置。攻击者可以重用非ASLR模块中的这些汇编指令行来实现这一点。
|
|
当启用EMET和强制ASLR时,该DLL将被重新定位到随机位置。漏洞利用将尝试跳转到0x4a80cb38,但由于DLL已被重新定位,将ESP更改为受控位置的操作将失败。
|
|
甚至该漏洞的Metasploit模块作者也建议安装EMET,以便更难成功利用此漏洞。
显然,EMET不是最终的答案,但我们现在拥有的是一个稍微更复杂的漏洞开发工作流程:
- 找到内存泄漏或类似的弱点,如Pwn2Own 2010所示,允许我们找到DLL的基地址。
- 从DLL中链接一些ROP小工具(我们可以将小工具视为执行特定任务的一组汇编指令)。
- 使用ROP shellcode禁用/绕过DEP。
- 执行标准(非ROP)载荷。
这个工作流程显然需要攻击者付出更多努力来编写可靠的漏洞利用。
归根结底,EMET和我们的工具再次证明了这个游戏正在快速发展!请保持关注,并来观看我们的ROP演讲以及Fermin和Andrew的EMET演讲。
- Vincenzo Iozzo和Fermin J. Serna