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

再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸

来源:本站整理 作者:佚名 时间:2017-08-14 TAG: 我要投稿

Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@keenlab也发表了关于Triple_Fetch的分析[2],但由于这个漏洞和exp有非常多的亮点,所以还剩很多可以深入挖掘的细节。因此,我们简单分析一下漏洞形成的原因,并具体介绍一下漏洞利用的细节,以及如何利用这个漏洞做到iOS 10.3.2上的沙盒逃逸。
0x01 CVE-2017-7047 Triple_Fetch漏洞形成的原因

因为chenliang对漏洞成因的分析非常详细,这里我就简单描述一下,因为使用XPC服务传输大块内存的话很影响效率,苹果为了减少传输时间,对大于0x4000的OS_xpc_data数据会通过mach_vm_map的方式映射这块内存,然后将这块数据的send right以port的方式发送到另一方。但这段内存的共享是基于共享物理页的方式,也就是说发送方和接收方会共享同一块内存,因此我们将数据发送以后再在发送端对数据进行修改,接收方的数据也会发生变化。
因此通过race condition,可以让接收端得到不同的数据(接收端认为是相同的数据),如果接收端没有考虑到这一点的话就可能会出现漏洞。比如我们刚开始让接收端获取的字符串是@”ABCD”(包括@和”),那么接收端会为这个字符串分配7个字节的空间。随后在进行字符串拷贝的时候,我们将字符串变为@"ABCDOVERFLOW_OVERFLOW_OVERFLOW",接收端会一直拷贝到遇到”符号为止,这样就造成了溢出。
Triple_Fetch攻击所选择的函数是CoreFoundation里的___NSMS1()函数,这个函数会对我们构造的恶意字符串进行多次读取操作,如果在读取的间隙快速对字符串进行三次修改,就会让函数读取到不同的字符串,让函数产生判断失误,从而造成溢出并让我们控制pc,这也是为什么把这个漏洞称为Triple_Fetch的原因。下图就是攻击所使用的三组不同的字符串:

攻击所选择的NSXPC服务是“com.apple.CoreAuthentication.daemon”。对应的二进制文件是/System/Library/Frameworks/LocalAuthentication.framework/Support/coreauthd。原因是这个进程是root权限并且可以调用processor_set_tasks() API从而获取系统其他进程的send right[3]。下图是控制了pc后的crash report:

0x02 Triple_FetchJOP &ROP&任意代码执行
利用漏洞Triple_Fetch虽然可以控制pc,但是还不能控制栈,所以需要先做stack_pivot,好消息是x0寄存器指向的xpc_uuid对象是我们可以控制的:
 

因此我们可以利用JOP跳转到_longjmp函数作为来进行stack pivot,从而控制stack:


最终发送的用来做JOP的格式伪造的xpc_uuid对象如下:

控制了stack就可以很容易的写rop了。但是beer目标不仅仅是执行rop,它还希望获取目标进程的task port并且执行任意二进制文件,因此除了exp,攻击端还用mach msg发送了0x1000个带有send right的port到目标进程中:

这些port的mach msg在内存中的位置和内容如下(msgh_id都为0x12344321):

随后,exp采用rop的方法对这些port进行遍历并且发送回发送端:
 

随后,攻击端会接收mach msg,如果获取到的msgh_id为0x12344321的消息,说明我们成果得到了目标进程的task port:

得到了task_port后,sploit()函数就结束了,开始进入do_post_exploit()。do_post_exploit()也做了非常多的事情,首先是利用coreauthd的task port以及processor_set_tasks()获取所有进程的task port。这是怎么做到的呢?
利用coreauthd的task port我们可以利用mach_vm_* API任意的修改coreauthd的内存以及寄存器,所以我们需要先开辟一段内存作为stack,然后将sp指向这段内存,再将pc指向我们想要执行的函数地址就可以让目标进程执行任意的函数了,具体实现在call_remote()中:

[1] [2]  下一页

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