首页   

macos 系统 Nday 漏洞从挖掘到利用

信安之路  · 互联网安全  · 5 年前

本文作者:Peterpan0927(信安之路病毒分析小组成员 & 360 涅槃团队成员)

成员招募:信安之路病毒分析小组寻找志同道合的朋友

最近挖了三个 Nday 漏洞,结合在一起能够实现 MacOS 的内核本地提权,就当作一个练手的小项目分享给大家,下面先讲一下这三个小漏洞:

queryCompletion in AVEBridge

由于com.apple.AVEBridge这个模块中的函数比较少,于是我就写了一个比较小的 C 语言脚本来Fuzz一下,这个比较简单,所以一下子就找到了:

这里rsi是我们可控的一个参数,这里相当于我们可以劫持控制流做ROP进行提权,但还需要一个信息泄漏作为配合。

ReadRegister32

这是我在另一个模块AppleIntelFramebufferAzul中找到的一个漏洞,因为我的目的很明确,就是需要信息泄漏,所以我就从有类似特征的函数进行入手了,如函数名位Readxxx,有memcpy类似的函数。

这个函数也十分简单:

通过逆向和调试我找到了这个函数的最上级调用是从IntelFBClientControl::actionWrapper函数开始的,通过调试我们发现传到ReadRegister32的参数a3是用户空间可控的,且没有做任何边界检查,也就是说这个是一个越界读,并且在它的上级函数中发现:

而这个a5正好是IOConnectCallMethod中要传回用户空间的那个outputStruct的地址,也就是说这是一个信息泄漏

getDisplayPipeCapability

这也是一个信息泄漏的问题,同样在AppleIntelFramebufferAzul中,首先来看看一部分代码:

其中a2是我们可控数据且没有做大小检查,a3outputStruct地址,也就是说如果我们进入memcpy分支,同样可以做到一个信息泄漏。

漏洞利用

这里我用来做提权的有两个漏洞,queryCompletion我们可以通过参数来控制越界 call,这个的利用就比较简单,直接通过堆喷构造数据然后泄漏kslide做 ROP 即可,但是我们在10.13上需要寻找新的gadget,上一次还用的是project-zeropwn4fun上用的一个,一开始我的思路有问题,总想着有这样一个pattern

但是这样毫无疑问是自己把自己给框住了,事实上可以存在这样的一种pattern

而且我们的出发点可以放在二进制搜索上,直接从切入一段机器码,不需要理会其上下文,比如我们可以在 ida 中搜索:50 5c 然后通过 ida 的undefinecode来找到我们需要的gadget,这样的话很快就能找到了,但是我因为思路问题卡了两天。

接下来就是需要一个 info leak 来泄漏kslide了。

我一开始找到的一个infoleakReadRegister32,但是这个限制比较多,只能从一个很靠后的地址往后读,后面基本没有什么有效信息了,也不会有对象来给我们计算kslide。所以我在尝试了一段时间后放弃了

后来我又找到了一个,这个的利用条件相对来说也比较苛刻(我们可以控制 *a2):

从上面可以看到我们需要满足以下几个条件才可以进入memcpy的分支:

1、v5有效

2、*(v5+0x1dc)不为 0

3、*(v5 + 0x3f70 )是一个有效内核地址

4、*(*(v5 + 0x3f70 ) + 0x100 )为0

并且要想泄漏kslide还需要满足一个条件,那就是从(v5 + 0x2170)(v5 + 0x2170 + 0x1d8)的地址上存在着有效数据供我们使用。

我刚一看,就有两个想法:

就地解决

在这个对象内部来找,看看有没有合适的,这是最简单的一种做法,后来我在一次实验中在偏移0x1398处找到了符合条件的,当时十分高兴:

后来想到一个问题,如果这个值超出了对象,那就是我们不可控的了,而且还有一个问题就是就算在对象内,有这么多次的解引用也不一定每次都能满足,我重启后果然失效了,我后来看了一下这个对象的大小就是0x1f60,果然不出所料

堆喷

另外一个就是做堆喷,来调偏移,这里我是通过mach_msg来实现的,泄漏分为两步:

第一次先读回来一个数据,里面泄漏了到底是哪一个消息

我们释放这个消息,通过一个内核对象占住,第二次读回来,泄漏对象虚表

target on MacOS 10.13 or 10.13.1

poc

具体的还有一些细节问题在 poc 的注释中做了一些解释

代码放在我的 github 上了:

https://github.com/Peterpan0927/L1br4

参考链接

labs_mwrinfosecurity:

https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-apple-AVEBridge-invalid-read-advisory-2018-01-19.pdf

《mac OS X internals》 第九章

文章首发

360 涅槃团队, 一支专注于苹果系统安全研究和漏洞挖掘的团队

http://nirvan.360.cn/blog/?p=1053

推荐文章
娱乐资本论  ·  我呆了三个月,才敢在印尼做TIKTOK  ·  1 年前  
生态梦网  ·  京津首个!中新天津生态城正式获批!  ·  1 年前  
军事纵横  ·  中国海域传出一声巨响!33国罕见表态!  ·  5 年前  
© 2022 51好读
删除内容请联系邮箱 2879853325@qq.com