ios苹果商店的vpn
苹果公司在 macOS 和 iOS 中都采用了沙盒机制保护系统不受恶意软件的攻击。在世界著名的黑客大会DEFCON 的这次演讲中,来自阿里安全的安全研究员分析了最新版的 iOS 中的沙盒机制和以及如何获取沙盒配置文件。然后,讨论了 iOS 上的 IPC 机制,并回顾几个经典的沙盒逃逸漏洞。随后,安全研究员展示了 iOS 11.4 上的两个沙箱逃逸 0day 漏洞。
苹果公司在macOS 10.5中把沙盒作为“SeatBelt”引入,它提供了MACF策略的第一个全面实现。在macOS上成功试用后,苹果公司又将沙盒机制应用于iOS 6中。随着新的系统的发布或新的威胁出现,沙盒的钩子数量一直在稳步的增长。如下是iOS/macOS每个版本中钩子的数量:
一开始,苹果的沙盒使用黑名单方式,这意味着苹果将已知的危险API整合在一起,并阻止它们,默认情况下允许所有其他人使用。随着苹果沙盒的发展,它采用了一种白名单的方式,拒绝所有的API,只允许苹果信任的安全接口。
在MacOS中,配置文件可见并存储在/System/Library/Sandbox/Profiles中。在iOS中,配置文件被硬编译到了/usr/libexec/sandboxd中。解码沙箱配置文件很困难,但我们可以遍历所有Mach服务根据返回值获取mach-lookup列表(例如,通过Jonathan Levin的sbtool)。
Mach消息包含类型化数据,可以包括端口权限和对大内存区域的引用。XPC消息建立在Mach消息之上,NSXPC消息建立在XPC消息之上。通过Mach消息,沙盒应用程序可以与未被沙盒的Mach(MIG)服务,XPC服务和NSXPC服务进行通信。
但是,Bluetoothd仅使用会话令牌来识别进程,这意味着我们可以使用沙盒应用程序通过会话令牌来劫持蓝牙和沙盒外的进程之间的通信(CVE-2018-4087)。
漏洞形成的原因是ses_token太容易被暴力破解了。它只有0x10000(0x0000 - 0xFFFF)个可能的值。Apple通过向每个会话添加user_id (= arc4random()) 来修复此问题,只有进程本身知道user_id,并且bluetoothd将检查map[ses_token] == user_id。
但是,通过BTAccessoryManagerAddCallbacks()向bluetoothd发送消息后,没有任何反应! 最后,我发现了这个问题ios苹果商店的vpn。 仅当iOS设备连接到新设备时才会触发回调事件,这意味着我们需要通过手动单击蓝牙设备来触发回调。
CallBacks 1(需要的时间很长),CallBacks 2(很难触发),再来一次CallBacks 3! 这次,我们又发现了一个可以注册回调函数的新函数,并且它很容易触发!
我们的目标不仅是控制PC指针,还控制要控制整个进程。下一步是创建ROP链并对目标进程执行堆喷射。在这种情况下,我们使用MACH_MSGH_BITS_COMPLEX Mach消息以及MACH_MSG_OOL_DESCRIPTOR格式。如果我们发送消息并且没有接收消息,则ROP链将持续保留在目标的内存空间中。经过多次测试,我们可以找到一个MAGIC_ADDR 在 0x105400000这个地址。
我们可控制的寄存器:X3,X4,X5,X19,X20。 最后一个BR是X4。到目前为止,我们只能做BOP(JOP)。但是这样的话,我们很难控制程序流程。因此,我们需要一个stack pivot来控制堆栈并且从BOP 转换为 ROP。
端口为IPC提供了端点。消息可以发送到端口或从端口接收。端口可以包含权限,并且端口权限可以在消息中传递。一个进程最重要的端口是mach_task_self()。可以通过其任务端口来控制进程的内存和所有寄存器。
3. 为了将任务端口发送到我们的pwn应用程序,我们需要知道我们的pwn应用程序的端口号。但是我们不能用launchd来帮助我们。幸运的是,端口号可以通过(0x103 + 0x100 * N)猜测。这就是我们向远程进程发送0x1000端口的原因(为了提高成功率)。
但是在iOS 11中,苹果加入了一个新的缓解机制用来控制沙盒中的app获取task port:
虽然我们无法很容易的获取task port,但是我们可以利用下面的ROP gadget来调用任意函数:
在6月份的时候,文章中提到的两个“0day”漏洞被我们提交给了苹果,在iOS 11.4.1和iOS 12 beta中被修复了 (CVE-2018-4330和CVE-2018-4327)。但是在iOS 11.4以及之前版本中都可以被利用,请尽快升级您的iOS以避免潜在的攻击。