iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

iOS冰与火之歌(番外篇) 

基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

蒸米@阿里移动安全


0x00 序

这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用的iOS PEGASUS(又称Trident三叉戟)0day漏洞了。为了修复该漏洞,苹果专门发布了一个iOS 9.3.5版本。这个漏洞的厉害之处在于可以直接从沙盒内对内核进行攻击(无需沙盒逃逸),并且同时影响iOS(9.3.4)和OS X (10.11.6)。因此,本篇文章将会从PEGASUS漏洞形成的原因开始分析,然后一步一步教大家写出OS X上利用PEGASUS提权的攻击代码。

《iOS冰与火之歌》这一系列文章的目录如下:

1. Objective-C Pwn and iOS arm64 ROP

2. 在非越狱的iOS上进行App Hook(番外篇)

3. App Hook答疑以及iOS 9砸壳(番外篇)

4. 利用XPC过App沙盒

5. UAF and Kernel PWN

6. 基于PEGASUS(三叉戟)的OS X 10.11.6本地提权 (番外篇)

另外文中涉及代码可在我的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应该是这样的:


但是我们对OSNumber的长度进行了修改,变成了0x200:



发送这个给内核后,内核在反序列化的时候就会出现错误。随后我们使用 io_registry_entry_get_property_bytes() 这个用户态函数就可以获取到内核返回的数据了。

因为我们修改了OS number的长度,所以返回的数据不光有我们发送给内核的number,还有栈上数据,比如函数ret时候的返回地址-0xFFFFFF80003934BF。

通过这个地址我们就可以计算出来kslide了。

0x03 CVE-2016-4656 内核代码执行

CVE-2016-4656这个漏洞其实有两种触发UAF的方法,我们这里先讲比较简单的那一种(两种方法在Stefan Esser的文章中都有介绍)。简单UAF漏洞形成的原因是OSUnserializeBinary支持用OSString和OSSymbol来作为key,并且支持用OSObject去引用之前的key。但是OSString和OSSymbol不一样的地方在于,OSString key转换为OSSymbol的过程中OSString已经被free掉了,但这个OSString却被加入了对象列表里。

因此当我们OSObject类型去引用一个已经被释放了的OSString的时候,就会产生UAF崩溃:

通过汇编崩溃的位置我们可以找到源码对应的位置是在341行创建OSObject对象的时候:

因此,如果我们能够在OSString被free的时候,立刻申请一段和OSString一样大小的内存并且构造好对应的vtable数据,当程序执行到OSObject创建的时候,内核就能成功的被我们控制。

那么如何编写利用代码呢?我们还是先创建一个序列化后的dictionary。对内核来说,这个dictionary应该是这样的:

<dict>
<string>A</string>
<bool>true</bool>
<key>B</key>
<data>vtable data...</data>
<object>1</object>
</dict>

内核随后会解析这个dictionary,正如我们之前分析的,OSString-”A”在创建完后就被free掉了,这时候,我们立刻创建OSSymbol-”B”以及和OSString-”A”大小相同的OSData,就可以在OSString-”A” free后重新控制这块内存,随后当内核使用OSObject引用OSString-”A”,并调用retain()函数的时候,其实就是在调用我们已经控制的vtable了。

0x04 利用ROP提权

首先我们先申请一块内存来放vtable和ROP chain,在OS X上有一种取巧的方法,如果我们是32位的程序的话,可以使用NULL page。因此,我们先用vm_allocate()申请到NULL Page,然后将vtable和ROP chain都保存在NULL page里:

随后在OS X上用rop提权的代码我们可以直接使用tpwn的:首先获得当前进程的ucred,然后将cr_svuid设置为0,最后用thread_exception_return退出进程。

0x05 测试EXP

编写完代码后,我们来尝试执行一下我们的exp。

首先说一下测试环境:Mac OS X EI Capitan 10.11.6 (15G31),在没有安装2016-01的security update的情况下(这时候内核相当于iOS 9.3.4,如果安装完2016-01 update就相当于iOS 9.3.5)。

接下来我们编译一下我们的exp:

clang -framework IOKit -framework Foundation -framework CoreFoundation -m32 -Wl,-pagezero_size,0 -O3 exp.m lsym.m -o exp

然后运行:

可以看到我们已经成功的获取了root权限。

0x06 总结

这篇文章介绍了如何利用PEGASUS(Trident三叉戟)做到内核信息泄露以及内核代码执行,然后利用rop获取root权限。另外,因为PEGASUS(Trident三叉戟)同时存在于iOS和OS X,有兴趣的同学可以在我们发布的攻击代码的基础上,尝试一下iOS攻击代码的编写。

基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权exp的下载地址:https://github.com/zhengmin1989/OS-X-10.11.6-Exp-via-PEGASUS

0x07 参考资料

1. http://blog.pangu.io/cve-2016-4655/

2. https://sektioneins.de/en/blog/16-09-02-pegasus-ios-kernel-vulnerability-explained.html

3. https://bazad.github.io/2016/05/mac-os-x-use-after-free/

4. https://github.com/kpwn/tpwn


作者:蒸米@阿里移动安全,更多安全类技术文章,请访问阿里聚安全博客



阿里聚安全由阿里巴巴移动安全部出品,面向企业和开发者提供企业安全解决方案,全面覆盖移动安全、数据风控、内容安全、实人认证等维度,并在业界率先提出“以业务为中心的安全”,赋能生态,与行业共享阿里巴巴集团多年沉淀的专业安全能力。

时间: 2024-08-28 07:08:09

iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权的相关文章

【智驾深谈】特斯拉发布新一代 Autopilot 勇闯 L5,续写冰与火之歌

12月31日,2016年的最后一天,特斯拉对外宣布,开始在1000辆汽车上推送软件更新,如果一切顺利的话,下周更多的汽车将会接收到升级推送.本次更新包括了Autopilot 的交通感知巡航控制功能.前方碰撞预警和自动转向(Autosteer),其中,Autosteer 是 Autopilot 的旗舰功能,但是目前只能在"低速"下启动.特斯拉对此次升级非常慎重,软件团队在公司的内部视觉团队(特斯拉视觉).机器学习技术和数据收集车队中加入安全特性后才会展开升级推送. 早在今年10月Auto

think in java interview番外篇-谈程序员如何修练英语

一.程序员对英语能力的重视度和能力要求应该是在各行各业中排在比较靠前的 这样说吧,英语程度的好坏直接影响着一个程序员的编程.开发.创新能力. 道理很简单: 1. 计算机和软件是用英语创造出来的 2. 国内的技术普及度不怎么高,而最前沿最好最全的资料也往往是英语 3.你在读OpenSource的一些源码时,这些OpenSource也大都来源于英语 因此英语和技术对于一个程序员来说是各占50%这样的一个比重的,英语能力的好坏直接影响到一个程序员的技术能力. 说到这儿其实还是主要源于国内的技术普及度不

云栖大会番外篇:四美齐亮相,邀你来云栖!

又是2016杭州・云栖大会吗?亲,你猜对了! 不过咱们是番外篇,这回不聊400场技术分论坛,也不聊马云又会有什么语惊四座的发言. 咱们聊一聊...妹纸!没错就是妹纸! 云栖大会上可不只有程序男哦--参会时有与百来个美女擦肩而过的机会哦. 不信--先给你们剧个透...看看我们美不美-- 不只是照片哦--要不要...看视频,想不想...接到我的来电   扫码点我们的头像,就能跟我们视频啦啦-- 看完记得分享哦--

人工智能的冰与火之歌:回顾2016,展望2017(余凯)丨硬创公开课

编者按:本文内容来自地平线机器人创始人兼 CEO 余凯博士在雷锋网第 100 期硬创公开课的分享. 2016 年,人工智能在美好理想和残酷现实的夹缝中野蛮生长.当从业者们认为,人工智能时代是"技术为王"的时代,但面对价格战.商务战.公关战时,技术似乎不再是唯一的信仰.当从业者们认为,手握学术大牛.刷爆各种榜单就能所向披靡时,"AI 产品经理比科学家重要"."刷榜是没意义的"等反驳性观点也越来越被业内认可.当从业者们认为,招一大批名校博士就可与巨头

实拍“冰与火之歌” - 冰与火的完美融合,华丽惊艳荡气回肠倍感震撼(原图打包下载)

class="post_content" itemprop="articleBody"> 美国摄影师 Miles Morgan 为拍摄理想照片,曾冒生命危险攀登上夏威夷活火山,是不折不扣的风光摄影狂人.他的多数照片使用小光圈长时间曝光拍摄,无论从细节或是气氛上都相当耐人寻味,静谧又不乏动感-- 摄影狂人实拍"冰与火之歌" 下载传送门 解压密码:www.ipc.me Miles Morgan 摄影作品打包下载 | 来自 iPc.me

《冰与火之歌》竟是在DOS下用WordStar 4.0写出的

<冰与火之歌>竟是在DOS下用WordStar 4.0写出的小说<冰与火之歌>大家应该 都有所耳闻,改编的同名美剧央视也在播出.<冰与火之歌>的作者乔治·马丁不久前在一档脱口秀节目中透露了一个鲜为人知的秘密.乔治·马丁表示,他写作的工具是一台装着DOS系统的电脑,用着著名的WordStar 4.0软件.在Office办公软件大行其道的今天.乔治·马丁依旧固执地使用着WordStar 4.0 for 来写小说.至于原因,乔治·马丁说他喜爱WordStar 4.0的简洁,不

小白学数据分析-----&gt; 留存率是什么?(番外篇)

最近一个时期和很多的人进行了交流,收获了不少,也思考了不少,如今我们都能得到数据,如今我们也都能按照所谓的定义和框架分析问题,只是我觉得有时候不必要一定要一直站在框架内去分析一些问题,进步和前进的力量来自于质疑,并进行革新和再创造. 留存率这个数据指标不记得从何时起变得那么重要,重要到研发上把它作为游戏好坏的一个标准,运营商(平台)作为了一个准入的钥匙,是否值得继续下去.有时候觉得粗暴,甚至无知了有点.因为肤浅的百分比背后隐藏着更多的金子,也可能是垃圾. 以上算是一点吐槽,更多潜在的问题这里不想

屌丝重披战袍 番外篇诚意回归

由优酷土豆集团跟万合天宜联合打造的网络神剧<报告老板!>将于4月10日推出番外篇,每周四在优酷土豆双平台同步的更新.值得一提的是,此次的番外篇剧集是因客户而设计的.凭借多年的自制剧经验,以及与优秀制作机构的良好合作,优酷土豆集团不仅仅在自制网剧上累积了优秀内容跟数亿的粉丝,更是在内容营销上积极的开拓,屡次打造了成功案例,领先行业. 屌丝重披战袍  番外篇诚意回归 <报告老板!>第一季落幕后,广大网友依依不舍.4月10日起,优酷.土豆双平台同步播出<报告老板!>番外篇,网

AI创投的冰与火之歌:泡沫、跟风、短板和有钱花不出去的沮丧【转】

转自:http://36kr.com/p/5071386.html 国内的AI行业仍处于野蛮生长阶段.热钱不少,优质项目却不多.创业者拿钱难,投资者有钱却花不出去. 编者按:本文来自微信公众号"刺猬公社"(ID:ciweigongshe),作者哲铭:36氪经授权发布. 江山代有风口出,各领风骚一两年.这两年在全世界的创投圈都异军突起的人工智能(AI),最近风头似乎被共享充电宝盖过了.AI创投圈呈现出一面是冰.一面是火的奇异景象. 今年3月5日雷军表示,小米将增加对人工智能的投资.恰巧就