未分类

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

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

这次放出的代码不是一个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%)。


原文地址:https://jaq.alibaba.com/community/art/show?articleid=1045

作者:蒸米

(0)

热评文章

发表评论