关于iOS 10.3.1 ziVA内核漏洞利用的简单分析

摘要: Zimperium放出了iOS 10.3.1的内核漏洞的利用,配合P0的过沙盒漏洞可以做到内核的任意读写。

12-13 03:09 首页 阿里聚安全

Zimperium放出了iOS 10.3.1的内核漏洞的利用,配合P0的过沙盒漏洞可以做到内核的任意读写。


■ 先回答吃瓜群众的几个关键的问题:


1、这是越狱么?不是。但离越狱已经很近了,大概66%,对非 iphone7的用户已经90%以上了。


2、iOS 10.3.2和iOS 10.3.3可以用么?不可以,并且苹果已经关闭了10.3.1的签名服务器,现在已经无法刷10.3.1版本了。


OK,吃瓜群众可以撤了,下面要讲的是这个漏洞利用的简单分析。


这次放出的代码不是一个POC,而是一个完整的内核利用exp。研究价值是非常巨大的。


EXP 的下载地址是:https://github.com/doadam/ziVA


这个漏洞利用所做的事情就是在沙盒外,利用三个内核驱动的漏洞获取内核任意读写的能力,并将自己的进程提权为root。


■ 整个EXP的流程如下:


exp 流程


1. 首先执行system("id");表明自己是普通的 mobile 用户。


2. 然后调用offsets_init()获取一些偏移量,这里只获取了iPhone 6 10.2的偏移量,想要其他的机型和版本的话,还要自己去计算。


3. initialize_iokit_connections()所做的是初始化一些 iokit userclient,包括AppleAVEDriver以及IOSurfaceRoot。


4. heap_spray_init()是堆喷前的准备,这里用到了一种新的堆风水姿势:利用伪造的sysctl buffer和 IOSurface的external method来进行堆喷。


5. kernel_read_leak_kernel_base()首先利用了AppleAVE.kext的CVE-2017-6989内核信息泄露洞获取了IOSurface对象在内核堆上的地址,然后利用IOSurface的一个race condition漏洞(貌似是CVE-2017-6979)获取了IOFence的vtable,从而计算出kernel slide。


6. offsets_set_kernel_base()和heap_spray_start_spraying()分别设置了kernel base和并根据计算出来的 kernel slide构造rop并进行了堆喷。


7. apple_ave_pwn_use_fake_iosurface()利用了AppleAVE.kext的CVE-2017-6995类型混淆漏洞来伪造 iosurface对象控制pc,做到内核内存的任意读写。


8. test_rw_and_get_root()利用内核内存的任意读写修改内核堆中的credentials信息,并将自己的进程提升为 root 权限。


9. 最后再执行一次 system("id");证明exp成功获取了 root 权限。


总结一下,虽然这个exp的利用需要在沙盒外才行,但因为 PJ0已经发布了一个沙盒外代码执行的 exp,所以这两个 exp 配合即可做到iOS 10.3.1上的内核任意读写。随后绕过kpp并给kernel打补丁后,即可完成非完美越狱。可以说目前越狱的进度已经达到了66% (Sandbox Escape 33% + Kernel RW 33%)。


一站式解决企业业务的安全问题

移动安全 | 数据风控 | 内容安全 | 实人认证


首页 - 阿里聚安全 的更多文章: