利用Elderwood套件编写漏洞利用程序(第一部分)
Dan Guido
2013年5月14日
攻击技术, 漏洞利用
在本三部分系列的第二篇中,我们研究Elderwood套件提供的工具,用于从已发现漏洞开发漏洞利用程序。
Elderwood与劳工部黑客事件
- 利用Elderwood套件编写漏洞利用程序(第一部分)
- 利用Elderwood套件编写漏洞利用程序(第二部分)
即使是在Windows XP这样古老的平台上,要利用浏览器漏洞也必须避免或绕过多种缓解措施。Elderwood提供的工具可以克服这些障碍,几乎不需要了解其底层实现。历史上,Elderwood套件用于浏览器漏洞利用主要针对Internet Explorer中的释放后使用漏洞。利用释放后使用漏洞的方法已有详细文档和系统化说明,快速搜索即可找到多个详细教程。这类漏洞利用需要克服三个主要障碍:
- 堆喷射技术
- DEP绕过
- ASLR绕过
套件的每个组件都以直接的方式抽象了克服这些障碍的方法。我们研究这些组件的工作原理、可靠性、技术复杂性,并描述这些组件如何向套件用户公开。漏洞利用代码的支持目标和可靠性直接与这些组件的设计和实现决策相关。
堆喷射与DEP绕过(today.swf)
数据执行保护(DEP)防止内存被隐式执行。漏洞利用通常会在内存中创建有效负载作为数据,然后尝试执行它。当启用DEP时,攻击者必须明确标记其有效负载为可执行。为了绕过这种保护,漏洞利用可以利用已在内存中且标记为可执行的代码。许多漏洞利用将函数调用链接在一起,以标记其有效负载可执行,这种做法有时称为面向返回的编程(ROP)。Windows XP及更高版本上的Internet Explorer 8利用了DEP,必须绕过此缓解措施才能成功执行代码。
Today.swf为用户执行DEP绕过。此Flash文档在内存中设置许多ROP链,以便其中一个位于已知位置(堆喷射)。当Internet Explorer被利用时,ROP链将堆栈转向伪堆栈之一,而不是合法堆栈。堆栈转向后,ROP链执行一系列指令,使去混淆代码的可执行副本将xsainfo.jpg转换为DLL并执行它。这可以从Flash插件内部完成,因为它与浏览器渲染进程共享相同的内存空间,与Chrome、Safari和Firefox不同。
SWF在JavaScript漏洞利用代码加载之前包含。当swf加载时,堆喷射代码自动运行。用户不需要了解其所用技术的细节。最终结果是堆充满堆栈帧,套件用户可以假设特定地址0x10ab0d0c处有适当的值。这意味着用户只需要知道跳转到的单个值。
|
|
对于跟随我们分析的读者,用于混淆漏洞利用的Flash组件的软件方便地位于Google搜索“SWF Encryption”的第一页结果中。DoSWF是第一个不需要电子邮件地址即可下载安装程序的结果,并且作为额外好处,它是由北京的一家中国公司开发的。
与许多公开漏洞利用一样,仅使用浏览器内的JavaScript引擎也可以执行相同的任务。这将消除对第三方插件的依赖。相反,此漏洞利用仅适用于安装并启用Flash的浏览器。在JavaScript中执行精确堆操作的技术和库已有详细文档,并且至少自2007年以来就已存在。
ASLR绕过(Microsoft Office和Java 6)
地址空间布局随机化(ASLR)是Windows Vista及更新版本中的一种漏洞利用缓解措施,可随机化代码在内存中的位置。ASLR通过使用于ROP小工具的代码位置未知以供重用,从而挫败攻击者控制程序流的能力。绕过ASLR的最简单方法是通过定位未使用动态基址标志编译的模块来完全避免它,这表明缺乏对此功能的支持。这使得漏洞利用显著更容易,并完全消除了此缓解措施带来的优势。一旦此类模块以固定虚拟地址加载,攻击者就可以重新利用其中的已知指令序列,就像ASLR不存在一样。
为了绕过ASLR,套件附带了加载多个未使用动态基址标志编译的模块的代码。在这种情况下,添加了来自Microsoft Office 2007/2010和不支持ASLR的Java 6插件的模块。这些模块内的内存地址用于构建嵌入在Flash文档中的ROP链。
利用此功能绕过ASLR是微不足道的。很可能,套件提供了一个脚本来调用加载正确模块所需的各种插件加载例程。不需要进一步的工作。套件作者使用现有的研究和技术现成地开发这些脚本:使用Oracle的示例代码加载Java以实现其ASLR绕过。此示例代码在Google搜索“force java 6”时出现,这很显著,因为作者需要专门加载此版本而不是最新版本,后者利用了ASLR。
|
|
尝试加载这些插件后,config.html根据哪些成功设置一个值。它将“test”div标签的innerHTML设置为true、false、default或cat。Today.swf读取此值以确定加载其内置ROP链中的哪一个。这意味着today.swf直接依赖于config.html及其加载的插件的结果,表明它们可能是一起开发并为套件用户提供的。
与堆喷射和DEP绕过一样,这些技术依赖于第三方组件才能运行。除非安装并启用了这些插件之一,否则漏洞利用将在Windows 7上失败。套件依赖Java过时,因为其当前版本确实利用了ASLR。此问题在2011年7月的Java 6更新中得到解决,Java 7从未受到影响。就Microsoft Office而言,此弱点在攻击前几个月就在公开教程中描述过,然而,直到攻击后才得到修补。
我们试图测量运行这些插件的浏览器数量,以评估这些ASLR绕过的有效性,从而评估整个漏洞利用的效果。我们发现,跟踪浏览器统计信息的流行网站忽略了跟踪Microsoft Office插件的使用情况,而是选择列出更常见的插件,如Silverlight、Google Gears和Shockwave。就Java 6而言,如果这是最佳情况且没有次要版本的Java已修补,则只有大约30%的网站访问者可以被成功利用。
结论
Elderwood套件附带了可重用组件,用于开发释放后使用漏洞的漏洞利用程序。它提供了使用Adobe Flash喷射堆的能力、一组加载不支持ASLR的模块的技术,以及多个用于不同版本Windows的ROP链以绕过DEP。这些工具的用户几乎不需要了解它们完成的任务。例如,用户不需要了解内存布局和堆分配的任何内容,他们可以简单地使用套件提供的常量地址。事实上,读到这里的读者可能比需要使用它们的人更深入地了解这些组件。
使用这些工具可以满足许多漏洞开发需求,然而,一些任务特定于发现的漏洞。为了使用由SWF放置在内存中的ROP小工具,工具包用户必须控制程序流。这特定于每个漏洞的利用,工具包无法帮助用户执行此任务。我们将在下一节讨论工具包用户针对此问题的具体解决方案。
如果您有兴趣了解更多关于现代攻击如何开发和执行的信息,请考虑下月初参加SummerCon并参加我们的培训之一。订阅我们的新闻通讯以及时了解我们的培训、产品和博客文章。
如果您喜欢这篇文章,请分享:
Twitter、LinkedIn、GitHub、Mastodon、Hacker News
页面内容:堆喷射与DEP绕过(today.swf)、ASLR绕过(Microsoft Office和Java 6)、结论
最近文章:使用Deptective调查您的依赖项、系好安全带,Buttercup,AIxCC的评分回合正在进行中!、使您的智能合约超越私钥风险、Go解析器中意外的安全陷阱、我们审查首批DKLs23库的收获、来自Silence Laboratories的库
© 2025 Trail of Bits。
使用Hugo和Mainroad主题生成。