欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

wild copy型漏洞的利用

来源:本站整理 作者:佚名 时间:2015-03-26 TAG: 我要投稿

0x00 前言


这是Project Zero上的文章,原文为《Taming the wild copy: Parallel Thread Corruption》

链接: http://googleprojectzero.blogspot.com/2015/03/taming-wild-copy-parallel-thread.html

2002年,Apache Web服务器中发现并修复了一个非常有趣的漏洞。服务器在处理分块传输编码时存在缺陷,漏洞将导致memcpy()调用的长度为负值,且目标缓冲区在堆栈上。当然,很快许多人就宣布这一漏洞是不可利用的,只能造成拒绝服务。毕竟memcpy()函数调用时长度字段采用负值,将导致巨大的内存空间拷贝,肯定会命中一个未映射的内存页导致进程终止。由于FreeBSD和其他BSD衍生版本在memcpy()实现上的一些特性,出现了可用的远程代码执行漏洞利用程序,让人感到了惊喜! GIAC文章 LINK 记录了漏洞利用代码,并分析了它是如何工作的(GIAC文章的附录D中)。

为了清楚的描述这篇文章的目的,我们将wild copy定义为满足下面两个条件的内存拷贝:

  • 攻击者对内存拷贝的长度拥有有限的控制权。

  • 内存拷贝的长度总是能够导致对未映射页的访问。

在许多其他有趣的情况下,wild copy型漏洞最终可以被利用:

  • 针对Windows结构化异常处理程序(SEH)的攻击。

  • 不止BSD衍生版本上存在类似memcpy()特性的问题。 2011年,在Ubuntu上eglibc漏洞 LINK 是由于对memcpy()函数的调用采用了任意的长度字段。memset()变体漏洞 LINK 通过Chromium漏洞奖励计划被披露。

  • Java运行时环境中安装了非常复杂的崩溃处理程序,当wild copy不可避免地触发访问异常时被调用。在堆状态任意损坏的情况下,如果崩溃处理程序不够健壮,它自身可能会崩溃,导致漏洞更加可控和可利用。

上述所有情况都有一个共同点:wild copy漏洞可利用性由次要问题(secondary issue)或特性导致。

是否有可能利用wild copy漏洞,而不依赖于次要问题?这是Project Zero要解决的一个有趣问题 -- 当我们探索漏洞利用时,我们可以更加了解问题,或者推动利用技术的发展。今天,我们要探索64位Linux上,Chrome的Flash插件的wild copy漏洞。

现在是时候引入问题122 和“parallel thread corruption”。问题122是一个Adobe Flash漏洞,2014年11月被修复,这是一个奇怪的错误,在一些平台上G711声音编解码器发生了错误,编解码器在试图解码一些样品时总是导致wild copy。漏洞触发时,会导致memmove()调用使用负值作为长度参数。在现代Linux系统中,memmove()的实现似乎没有问题,而SIGSEGV处理程序干净的清理了进程。现在来看看我们所做的工作!

0x01 选择方法


我们要去尝试“parallel thread corruption”,也就是在线程A中观察和利用线程B的异步内存破坏.线程B的内存破坏总是会导致崩溃,我们需要并行运行两个线程。还需要赢得一个棘手的竞争条件:在线程B奔溃导致线程A退出前获取代码执行.

我们将试图让内存破坏漏洞破坏Vector.\对象的头,增大其长度字段,使其超过对象真实长度,从而获取越界读写的能力,这在Flash漏洞利用中很常见。Vector.\对象中的数据直接分配在对象头之后,在此特定漏洞里,错误的memmove()最终总是将内存中的数据向后移动2048字节。因此,如果我们分配一个足够大的Vector.\,我们就能够用对象的数据部分破坏对象的头:

通过偏移和对齐可以计算出,第508个uint数据元素将放置在对象头部的长度字段。

0x02 控制Flash堆内存


我们太忘乎所以了,需要记住线程的内存破坏发生在memmove()的wild copy中。即使我的笔记本电脑也能够以每秒大约10千兆字节的速度复制内存,所以我们将需要大量的堆内存用于复制,以使我们在复制操作访问未映射页之前,有足够的时间完成漏洞利用。得到一个大而连续的堆映射听起来很容易,但事实并非如此。如果你只是天真地在Flash堆中喷射了512KB的ByteArray缓冲区,你会看到大量的进程映射,它们看起来像这样:

7fd138039000-7fd138679000 rw-p 00000000 00:00 0  7fd138679000-7fd139039000 ---p 00000000 00:00 0  7fd139039000-7fd139fb9000 rw-p 00000000 00:00 0  7fd139fb9000-7fd13a039000 ---p 00000000 00:00 0  7fd13a039000-7fd13ae79000 rw-p 00000000 00:00 0  7fd13ae79000-7fd13b039000 ---p 00000000 00:00 0  [...]

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载