iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)
0x00 序
这段时间火的漏洞当属阿联酋的人权活动人士被apt攻击所使用的iOS PEGASUS(又称Trident三叉戟)0day漏洞了。为了修复该漏洞,苹果专门发布了一个iOS 9.3.5版本。这个漏洞的厉害之处在于可以直接从沙盒内对内核进行攻击(无需沙盒逃逸),并且同时影响iOS(9.3.4)和OS X (10.11.6)。因此,本篇文章将会从PEGASUS漏洞形成的原因开始分析,然后一步一步教大家写出OS X上利用PEGASUS提权的攻击代码。
另外文中涉及代码可在我的github下载: https://github.com/zhengmin1989/iOS_ICE_AND_FIRE
0x01 漏洞分析
PEGASUS(三叉戟)实际上是由三个漏洞组成,分别是:
CVE-2016-4657:Safari的Webkit内核上的内存破坏漏洞。
CVE-2016-4655:内核信息泄露漏洞,可用于绕过KASLR。
CVE-2016-4656:内核UAF漏洞,可用于控制内核并执行任意代码。
关于CVE-2016-4657目前还没有公开的资料,但Stefan Esser和Pangu分别爆出了另外两个漏洞CVE-2016-4655和CVE-2016-4656的细节。利用已经曝光的这两个漏洞,其实已经可以做到iOS非完美越狱和OS X本地提权了。下面我们就来讲解一下这两个漏洞形成的原因以及如何利用。
0x02 CVE-2016-4655 内核信息泄露
CVE-2016-4655这个漏洞形成的原因是内核在序列化和反序列化OSNumber的时候没有验证长度的正确性。因此,如果我们将number的长度设置的非常长,并用io_registry_entry_get_property()去获取number数据的话,就会造成内核的信息泄露。
我们知道内核栈中会保存函数的返回地址,因此我们可以利用这个返回地址去计算出内核的kslide,从而攻破kaslr的保护。
那么如何编写利用代码呢?我们先创建一个序列化后的dictionary。对内核来说,这个dictionary应该是这样的:
相关文章