首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用Apple漏洞逃离沙箱

大家好,我是小编

昨天2018胡润富豪榜出炉

我查了一下自己的排名

放到大中华区来看

跟化腾爸爸只相差10E多一点而已

前言

今天教大家如何从默认应用程序的沙箱内调查iOS mach消息的IPC,并最终逃离沙箱。

Apple在最新的操作系统版本中解决了本文介绍的漏洞,并为每个漏洞分配了2个CVE:

CVE-2018-4087

CVE-2018-4095

Apple发布的消息:

tvOS 11.2.5对应URL:

https://support.apple.com/en-il/HT208462

iOS 11.2.5对应URL:

https://support.apple.com/en-il/HT208463

watchOS 4.2.2对应URL:

https://support.apple.com/en-il/HT208464

bluetoothd

不同的沙箱进程可以与不同的守护进程进行通信,如mediaserverd、bluetoothd和其他使用IPC的守护进程。下文中将重点介绍与bluetoothd的通信。

bluetoothd启动com.apple.server.bluetooth端口,并在该端口上接收mach消息。

Mach消息是* OS中的一种IPC形式,为了给更高的IPC框架腾出空间,苹果公司并不鼓励这项操作。

函数apple_bluetoothd_mig_server将接收到的mach消息发送给com.apple.server.bluetooth,并通过mach消息ID进行处理。

为了简化整个过程,该服务使用bootstrap_check_in注册它的端口,我们可以使用从launchd检索到的mach端口服务进行通信。

下面是apple_bluetoothd_mig_server:

处理mach消息的函数时,从msgh_id中减去0xFA300的值,然后获得回调点,最后用输入消息调用它。

如果mach消息的函数低于或等于0x83,就意味着我们有0x84个可用的回调。

由于二进制文件没有符号,我们用一个小工具来解析这个结构,从不同的数据库图像中获得的更多信息。

创建可用回调的完整列表:

machUnderfined_handler功能没有被定义,因为使用的图像是iPod touch,并且某些功能并不存在。

我们用mach__BTLocalDeviceAddCallbacks这个回调函数,它是mach消息ID为3的消息句柄。

使用mach__BTLocalDeviceAddCallbacks_3函数检查mach消息的大小是否为0x48。然后尝试使用session_token将回调添加到匹配的会话中。

当一个客户端使用bluetoothd创建会话时,会有一个session_token给到bluetoothd。Apple使用session_token作为客户端和bluetoothd之间的端口名称,它与通信所用的端口完全相同。

那么问题来了,因为mach端口具有特定的结构,这使得它非常容易被破解。

session_token属于mach_port_t类型。在本文的PoC中,使用从launchd到bluetoothd的端口,以便与bluetoothd直接通信。

通过使用launchd到bluetoothd的端口,强制执行session_token,并最终通过劫持bluetoothd和客户端之间的会话向客户端注册新的回调。

攻击过程:

1.bluetoothd连接到客户端并获得用于mach通信的会话令牌,以便它的自我识别。

2.由于session_toke由通信机器端口组成,并且由mach_port_t结构构成,所以恶意应用程序(即沙箱应用程序)可以强制使用session_toke。

3.在成功强制执行session_toke之后,恶意应用程序可以在客户端进程上注册一个新消息,该消息将在发送到客户端时被调用。

它意味着从沙箱环境运行的这个恶意应用程序,会设法在具有不同沙箱环境的bluetoothd客户端上添加回调。

设法劫持的所有bluetoothd客户端列表:

SpringBoard

mDNSResponder

aggregated

wifid

Preferences

CommCenter

iaptransportd

findmydeviced

routined

UserEventAgent

carkitd

mediaserverd

bluetoothd

coreduetd

wifid在运行PoC后的注册状态

利用方法

这个漏洞可以用来泄露每个客户端的机器端口,并且会在每个客户端上暴露巨大的攻击面。

攻击者可以通过被泄漏的端口跳转到合适的小工具,并将端口发送回沙箱应用程序。

苹果的修复程序

Apple将session_toke从实际的端口改为随机令牌,但该修复程序仍然不能确保会话不会被劫持。

苹果的修复

PoC源代码

即可获得文中的PoC源代码下载地址。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301A1EI7C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券