iOS 测试环境

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Apple 开发者计划

一个 provisioning identity 是与 Apple 开发者账号关联的一组公钥和私钥。为了 签名应用(sign apps),你需要支付 99$/year 注册 Apple 开发者计划 来获取你的 provisioning identity。没有它,你无法在真实设备上从源代码运行应用。另一种选择是使用 jailbroken device

从 Xcode 7.2 开始,Apple 提供了创建 免费 iOS 开发 provisioning profile 的选项,允许在真实 iPhone 上编写和测试你的应用。进入 Xcode –> Preferences –> Accounts –> + (添加新的 Apple ID 凭据) –> 点击已创建的 Apple ID –> Manage Certificates –> + (Apple Development) –> Done
__然后,要在 iPhone 上运行你的应用,首先需要让 iPhone 信任这台电脑。 然后,你可以尝试**从 Xcode 在手机上运行应用,**但会出现错误。此时前往 Settings –> General –> Profiles and Device Management –> 选择未信任的配置文件并点击“Trust”。

iOS 16+ 上,本地安装的开发签名应用(或使用 get-task-allow 重新签名的应用)在运行前还必须在设备上启用 Developer Mode。该选项仅在与 Xcode 配对后或在安装过一次开发签名应用后才会出现。流程是:配对设备,从 Xcode 触发安装,然后启用 Settings –> Privacy & Security –> Developer Mode,重启,并在解锁后确认提示。

注意 由相同签名证书签名的应用可以以安全的方式共享资源,例如 keychain 项目。

provisioning profiles 存储在手机内的 /Library/MobileDevice/ProvisioningProfiles

Modern host-side device tooling

对于当前的 iOS 测试,主机端工具越来越分化为:

  • xcrun simctl 用于模拟器管理
  • xcrun xctrace list devices 用于枚举模拟器和物理设备
  • xcrun devicectl (Xcode 15+) 用于从命令行与已配对的物理设备交互

有用的示例:

# List booted simulators
xcrun simctl list | grep Booted

# List all visible devices/simulators
xcrun xctrace list devices

# List paired physical devices (Xcode 15+)
xcrun devicectl list devices

devicectl 在自动化管道中尤其有用,当你需要在不打开 Xcode 的情况下安装或启动测试构建时:

xcrun devicectl device install app --device <udid> <path_to_app_or_ipa>
xcrun devicectl device launch app --terminate-existing --device <udid> <bundle_id>

保持 Xcode 更新在测试 iOS 17+ 设备时非常重要。Apple 已将开发者服务迁移到 CoreDevice 堆栈,并且更改了 Developer Disk Images 的处理方式,因此过时的主机工具经常在配对、挂载镜像或启动应用时失败。

模拟器

Tip

注意 模拟器 (simulator) 并不等同于 仿真器 (emulator)。模拟器只是模拟设备和功能的行为,但并不实际使用它们。

模拟器

首先你需要知道的是,在模拟器内执行 pentest 比在已 jailbreak 的设备上受限得多

构建和支持 iOS 应用所需的所有工具仅在 Mac OS 上获得官方支持
Apple 用于创建/调试/插装 iOS 应用的事实标准工具是 Xcode。它可用于下载其它组件,例如构建和测试应用所需的模拟器和不同的 SDK 版本
强烈建议从 官方 App Store 下载 Xcode。其他版本可能携带恶意软件。

模拟器文件位于 /Users/<username>/Library/Developer/CoreSimulator/Devices

模拟器仍然非常适合快速测试 filesystem artifactsNSUserDefaultsplist parsingcustom URL schemesbasic runtime instrumentation。但请记住,它并不模拟若干在 pentest 中常常相关的物理设备安全属性,例如 Secure Enclavebaseband、某些 keychain access-control behaviours、真实的 biometric flows,以及针对 jailbreak 的特定执行条件。

要打开模拟器,运行 Xcode,然后在 Xcode tab –> Open Developer tools –> Simulator\ __In the following image clicking in “iPod touch […]” you can select other device to test in:

模拟器中的应用

/Users/<username>/Library/Developer/CoreSimulator/Devices 中你可以找到所有 已安装的模拟器。如果你想访问在某个模拟器中创建的应用的文件,可能很难知道 该应用安装在哪一个模拟器中。一个快速找到 正确 UID 的方法是先在模拟器中运行应用,然后执行:

xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)

一旦你知道 UID,安装在其中的应用可以在 /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application 找到。

然而,令人惊讶的是,你不会在这里找到应用。你需要访问 /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/

在这个文件夹中你可以 找到应用的包。

模拟器

Corellium 是唯一公开可用的 iOS emulator。它是一个企业级 SaaS 解决方案,采用按用户许可的模式,并且不提供任何试用许可。

无需 Jailbreak

查看这篇博文,关于如何在 non jailbroken device 上对 iOS 应用进行 pentest:

iOS Pentesting withuot Jailbreak

Jailbreaking

Apple 严格要求在 iPhone 上运行的代码必须由 Apple 签发的证书进行 签名Jailbreaking 是主动 规避此类限制 以及操作系统施加的其他安全控制的过程。因此,一旦设备被 jailbreak,负责检查已安装应用的 完整性检查 会被修补,从而被 绕过

Tip

与 Android 不同,你不能在 iOS 上切换到“开发者模式 (Developer Mode)” 来在设备上运行未签名/不受信任的代码。

Android Rooting vs. iOS Jailbreaking

虽然经常拿来比较,但 Android 上的 rooting 和 iOS 上的 jailbreaking 在本质上是不同的过程。Android 设备的 rooting 可能涉及 安装 su 二进制文件用带 root 的自定义 ROM 替换系统,如果 bootloader 被解锁,有时并不需要漏洞。Flashing custom ROMs 在解锁 bootloader 后会替换设备的操作系统,有时需要利用漏洞。

相较之下,由于 bootloader 仅允许启动 Apple 签名的镜像,iOS 设备无法刷入自定义 ROM。Jailbreaking iOS 的目的是绕过 Apple 的代码签名保护以运行未签名代码,而 Apple 不断的安全增强使这一过程变得复杂。

Jailbreaking Challenges

随着 Apple 快速修补漏洞,jailbreaking 变得越来越困难。Downgrading iOS 仅在发布后的一段有限时间内可能,导致 jailbreak 成为时间敏感的事情。用于安全测试的设备不应更新,除非可以保证能够重新 jailbreak。

iOS 更新受 challenge-response 机制(SHSH blobs)控制,只允许安装带有 Apple 签名响应的固件。该机制被称为“signing window”,限制了存储并在以后使用 OTA 固件包的能力。IPSW Downloads 网站(https://ipsw.me)是检查当前 signing windows 的资源。

Jailbreak Varieties

  • Tethered jailbreaks 需要每次重启都连接电脑。
  • Semi-tethered jailbreaks 允许在不连接电脑的情况下引导到非 jailbreak 模式。
  • Semi-untethered jailbreaks 需要手动重新 jailbreak,但不需要电脑。
  • Untethered jailbreaks 提供永久的 jailbreak 解决方案,无需重新应用。

Jailbreaking Tools and Resources

Jailbreaking 工具因 iOS 版本和设备而异。像 Can I Jailbreak?The iPhone WikiReddit Jailbreak 这样的资源提供最新信息。示例包括:

  • Checkra1n 适用于较旧的 A7-A11/iOS 12-14 时代的研究设备。
  • Palera1n 适用于 checkm8 兼容设备(A8-A11),在 iOS/iPadOS 15+ 上使用。
  • Dopamine 适用于许多 arm64/arm64e 设备,在 iOS 15/16 上使用现代的 rootless jailbreak。
  • Unc0ver 主要仍然适用于较旧的 iOS 版本,最多到 14.8。

修改你的设备存在风险,jailbreaking 应谨慎进行。

Rootless jailbreaks

现代 iOS 15+ 的 jailbreak 通常是 rootless 而非 rootful。从测试者的角度看,这很重要,因为许多旧指南仍然假设 jailbreak 文件直接位于 //Library/...,而在当前的许多设置中已不再如此。

  • Rootless jailbreaks 避免直接修改封装的系统卷。
  • 在 palera1n 上,jailbreak 文件通常存储在 /private/preboot/... 下的随机路径中,并通过稳定的符号链接 /var/jb 暴露。
  • tweaks、launch daemons 和辅助二进制文件因此可能存在于 /var/jb,而不是传统的 rootful 位置。

这对 环境验证Frida 安装jailbreak 检测绕过 有直接影响:

  • 在检查你的工具是否正确安装时,请同时检查传统路径和 /var/jb
  • 在审查应用中的 jailbreak 检测逻辑时,请记住现代检查通常会查找 rootless 伪迹和符号链接,以及像 Cydia.app 这样的经典指示器。
  • 如果第三方脚本或 tweak 假设 rootful 的文件系统布局,它可能在 rootless 设备上默默失败。

Jailbreaking Benefits and Risks

Jailbreaking 移除了操作系统施加的沙箱限制,允许应用访问整个文件系统。这种自由使得安装未经批准的应用和访问更多 API 成为可能。然而,对于普通用户而言,jailbreaking 不被推荐,因为可能带来安全风险和设备不稳定。

After Jailbreaking

iOS Basic Testing Operations

Jailbreak Detection

许多应用会尝试检测设备是否被 jailbroken,如果检测到则应用不会运行

  • 在 jailbreak 后,通常会安装一些 iOS 文件和文件夹,可以通过搜索这些来判断设备是否被 jailbroken。
  • 在现代 rootless jailbreak 中,这些文件可能出现在 /var/jb 下,或通过符号链接解析到 /private/preboot/...,而不仅仅出现在传统的 rootful 位置。
  • 在被 jailbroken 的设备上,应用会获得对沙箱外部 新文件的读/写访问
  • 某些 API 调用行为会不同
  • 出现 OpenSSH 服务。
  • 调用 /bin/sh返回 1 而不是 0。

关于如何检测 jailbreaking 的更多信息 here

你可以尝试使用 objectionios jailbreak disable 来避免这些检测。

Jailbreak Detection Bypass

  • 你可以尝试使用 objectionios jailbreak disable 来避免这些检测。
  • 你也可以安装工具 Liberty Lite (https://ryleyangus.com/repo/)。一旦添加了仓库,应用应该会出现在 “Search” 选项卡中。

References

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks