iOS 安全测试¶
在本章节中,我们将深入探讨安全测试环境的搭建,并介绍一些用于测试 iOS 应用安全性的实用流程和技术。这些是 MASTG 测试用例的基础。
iOS 测试设置¶
虽然您可以使用 Linux 或 Windows 主机进行测试,但您会发现许多任务在这些平台上很难或不可能完成。此外,Xcode 开发环境和 iOS SDK 仅适用于 macOS。这意味着您肯定希望在 macOS 上进行源代码分析和调试 (这也会使黑盒测试更容易)。
主机设备¶
以下是最基本的 iOS 应用测试设置
- 理想情况下,拥有管理员权限的 macOS 主机
- Xcode 和 Xcode 命令行工具 已安装。
- 允许客户端到客户端流量的 Wi-Fi 网络。
- 至少一台已越狱的 iOS 设备 (所需 iOS 版本)。
- mitmproxy 或其他拦截代理工具。
获取 iOS 设备的 UDID¶
UDID 是一个 40 位的字母和数字的唯一序列,用于标识 iOS 设备。您可以在 macOS Catalina 及更高版本的 Finder 应用中找到 iOS 设备的 UDID,因为 iTunes 在 Catalina 中不再可用。打开 Finder 并在侧边栏中选择连接的 iOS 设备。
单击包含型号、存储容量和电池信息的文本,它将显示序列号、UDID 和型号。
您可以通过右键单击 UDID 来复制它。
也可以在设备通过 USB 连接时,通过 macOS 上的各种命令行工具获取 UDID
-
通过使用 I/O Registry Explorer 工具
ioreg
$ ioreg -p IOUSB -l | grep "USB Serial" | "USB Serial Number" = "9e8ada44246cee813e2f8c1407520bf2f84849ec"
-
$ idevice_id -l 316f01bd160932d2bf2f95f1f142bc29b1c62dbc
-
通过使用 system_profiler
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:" 2019-09-08 10:18:03.920 system_profiler[13251:1050356] SPUSBDevice: IOCreatePlugInInterfaceForService failed 0xe00002be Serial Number: 64655621de6ef5e56a874d63f1e1bdd14f7103b1
-
通过使用 instruments
instruments -s devices
在真机上测试 (已越狱)¶
您应该有一个越狱的 iPhone 或 iPad 来运行测试。这些设备允许 root 访问和工具安装,从而使安全测试过程更加直接。如果您无法访问越狱设备,您可以应用本章后面描述的解决方法,但请为更困难的体验做好准备。
在 iOS 模拟器上测试¶
与 Android 模拟器完全模拟真实 Android 设备的硬件不同,iOS SDK 模拟器提供了更高层次的 iOS 设备模拟。最重要的是,模拟器二进制文件被编译为 x86 代码,而不是 ARM 代码。为真实设备编译的应用无法运行,这使得模拟器对于黑盒分析和逆向工程毫无用处。
在模拟器上测试¶
Corellium 是唯一公开可用的 iOS 模拟器。它是一种企业 SaaS 解决方案,具有按用户许可模式,不提供社区许可。
获取特权访问¶
iOS 越狱通常与 Android Root 相比,但该过程实际上完全不同。为了解释这种差异,我们将首先回顾 Android 上的“Root”和“刷机”概念。
- Root:这通常涉及在系统上安装
su
二进制文件,或用 Root 的自定义 ROM 替换整个系统。只要引导加载程序可访问,就不需要利用漏洞来获得 Root 访问权限。 - 刷自定义 ROM:这允许您在解锁引导加载程序后替换设备上运行的操作系统。引导加载程序可能需要利用漏洞才能解锁它。
在 iOS 设备上,刷自定义 ROM 是不可能的,因为 iOS 引导加载程序只允许启动和刷写 Apple 签名的映像。这就是为什么即使官方 iOS 映像如果没有 Apple 的签名也无法安装,并且这使得 iOS 降级只能在之前的 iOS 版本仍然签名时才有可能。
越狱的目的是禁用 iOS 保护 (尤其是 Apple 的代码签名机制),以便任意未签名代码可以在设备上运行 (例如,自定义代码或从替代应用商店下载的代码,如 Cydia 或 Sileo)。“越狱”一词是指自动化禁用过程的一体化工具的口语参考。
为给定版本的 iOS 开发越狱并非易事。作为安全测试人员,您很可能希望使用公开可用的越狱工具。不过,我们仍然建议研究已用于越狱各种 iOS 版本的技术 —— 您会遇到许多有趣的漏洞,并了解很多关于操作系统内部结构的知识。例如,适用于 iOS 9.x 的 Pangu9 利用了至少五个漏洞,包括一个 use-after-free 内核错误 (CVE-2015-6794) 和 Photos 应用中的任意文件系统访问漏洞 (CVE-2015-7037)。
有些应用会尝试检测它们运行的 iOS 设备是否已越狱。这是因为越狱会禁用 iOS 的一些默认安全机制。但是,有几种方法可以绕过这些检测,我们将在 “iOS 反逆向工程防御”一章中介绍它们。
越狱的益处¶
最终用户经常越狱他们的设备以调整 iOS 系统的外观、添加新功能以及从非官方应用商店安装第三方应用。但是,对于安全测试人员来说,越狱 iOS 设备具有更多好处。它们包括但不限于以下内容
- 对文件系统的 Root 访问。
- 可以执行未经 Apple 签名的应用程序 (包括许多安全工具)。
- 不受限制的调试和动态分析。
- 访问 Objective-C 或 Swift 运行时。
越狱类型¶
有有线、半有线、半无线和无线越狱。
-
有线越狱不会在重启后保留,因此重新应用越狱需要在每次重启期间将设备连接 (有线) 到计算机。如果未连接计算机,设备可能根本无法重启。
-
除非设备在重启期间连接到计算机,否则无法重新应用半有线越狱。设备也可以自行启动到非越狱模式。
-
半无线越狱允许设备自行启动,但用于禁用代码签名的内核补丁 (或用户区修改) 不会自动应用。用户必须通过启动应用或访问网站来重新越狱设备 (不需要连接到计算机,因此称为无线)。
-
无线越狱是最终用户最受欢迎的选择,因为它们只需要应用一次,之后设备将永久越狱。
注意事项¶
随着 Apple 不断加强其操作系统,为 iOS 开发越狱变得越来越复杂。每当 Apple 意识到漏洞时,它都会进行修补,并将系统更新推送给所有用户。由于无法降级到特定版本的 iOS,并且由于 Apple 只允许您更新到最新的 iOS 版本,因此拥有一台运行可用于越狱的 iOS 版本的设备是一项挑战。某些漏洞无法通过软件修补,例如影响所有 CPU 直到 A12 的 BootROM 的 checkm8 漏洞。
如果您有一个用于安全测试的越狱设备,请保持原样,除非您 100% 确定升级到最新的 iOS 版本后可以重新越狱。考虑获取一个 (或多个) 备用设备 (每次主要的 iOS 版本发布都会更新),并等待公开发布越狱。一旦公开发布越狱,Apple 通常会迅速发布补丁,因此您只有几天时间可以降级 (如果 Apple 仍然签名) 到受影响的 iOS 版本并应用越狱。
iOS 升级基于质询-响应过程 (生成所谓的 SHSH Blob 作为结果)。只有在对质询的响应由 Apple 签名时,设备才允许安装操作系统。这就是研究人员所说的“签名窗口”,也是您无法简单地存储下载的 OTA 固件包并在您想要时将其加载到设备上的原因。在次要的 iOS 升级期间,两个版本都可以由 Apple 签名 (最新的一个和之前的 iOS 版本)。这是您可以降级 iOS 设备的唯一情况。您可以从 IPSW 下载网站检查当前的签名窗口并下载 OTA 固件。
对于某些设备和 iOS 版本,如果在签名窗口处于活动状态时收集了该设备的 SHSH Blob,则可以降级到旧版本。有关此的更多信息,请访问 cfw iOS 指南 - 保存 Blob
使用哪个越狱工具¶
不同的 iOS 版本需要不同的越狱技术。 确定您的 iOS 版本是否有可用的公共越狱。谨防假冒工具和间谍软件,它们通常隐藏在与越狱组/作者的名称相似的域名后面。
iOS 越狱场景发展如此迅速,以至于提供最新的说明很困难。但是,我们可以将您指向一些目前可靠的来源。
请注意,您对设备所做的任何修改都由您自己承担风险。虽然越狱通常是安全的,但可能会出错,您最终可能会使您的设备变砖。除您自己外,任何其他方均不对任何损害负责。