iOS Pentesting without Jailbreak

Reading time: 10 minutes

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

主要思想

使用 entitlement get_task_allow 签名的应用程序允许第三方应用程序运行一个名为 task_for_pid() 的函数,参数为初始应用程序的进程 ID,以便获取其任务端口(能够控制它并访问其内存)。

然而,这并不像简单地提取 IPA、用该权限重新签名并将其刷回设备那么简单。这是因为 FairPlay 保护。当应用程序的签名更改时,DRM(数字版权管理)密钥会 失效,应用程序将无法工作

在旧的越狱设备上,可以安装 IPA,使用你喜欢的工具进行解密(例如 Iridium 或 frida-ios-dump),然后将其提取回设备上。不过,如果可能,建议直接向客户端请求解密后的 IPA。

获取解密的 IPA

从 Apple 获取

  1. 在 iPhone 上安装要进行渗透测试的应用程序
  2. 在你的 macos 上安装并启动 Apple Configurator
  3. 在你的 Mac 上打开 Terminal,并 cd 到 /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps。稍后 IPA 将出现在此文件夹中。
  4. 你应该能看到你的 iOS 设备。双击它,然后点击顶部菜单栏中的 Add + → Apps。
  5. 点击 Add 后,Configurator 将从 Apple 下载 IPA,并尝试将其推送到你的设备。如果你之前遵循我的建议并已安装 IPA,将会出现提示要求你重新安装该应用程序。
  6. IPA 应该下载到 /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps,你可以从那里获取它。

查看 https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed 以获取有关此过程的更多详细信息。

解密应用程序

为了解密 IPA,我们将安装它。然而,如果你有一部旧的越狱 iPhone,可能其版本不被该应用程序支持,因为通常应用程序只支持最新版本。

因此,为了安装它,只需解压 IPA:

bash
unzip redacted.ipa -d unzipped

检查 Info.plist 以获取最低支持版本,如果您的设备早于该版本,请更改该值以使其受支持。

将 IPA 压缩回去:

bash
cd unzipped
zip -r ../no-min-version.ipa *

然后,使用以下命令安装IPA,例如:

bash
ideviceinstaller -i no-min-version.ipa -w

注意,您可能需要从 Cydia 安装 AppSync Unified tweak 以防止任何 invalid signature 错误。

安装后,您可以使用 Cydia 中的 Iridium tweak 来获取解密的 IPA。

修补权限和重新签名

为了使用 get-task-allow 权限重新签名应用程序,有几种可用的工具,如 app-signercodesigniResignapp-signer 具有非常用户友好的界面,可以非常轻松地重新签名 IPA 文件,指明要重新签名的 IPA、将其设置为 get-task-allow 以及要使用的证书和配置文件。

关于证书和签名配置文件,Apple 通过 Xcode 为所有账户提供 免费的开发者签名配置文件。只需创建一个应用并配置一个。然后,通过导航到 SettingsPrivacy & Security,配置 iPhone 以信任开发者应用,并点击 Developer Mode

使用重新签名的 IPA,现在可以在设备上安装它以进行渗透测试:

bash
ideviceinstaller -i resigned.ipa -w

启用开发者模式 (iOS 16+)

自 iOS 16 起,Apple 引入了 开发者模式:任何携带 get_task_allow 使用开发证书签名的二进制文件在设备上启用开发者模式之前将拒绝启动。除非此标志开启,否则您也无法附加 Frida/LLDB。

  1. 安装或推送 任何 开发者签名的 IPA 到手机。
  2. 导航到 设置 → 隐私与安全 → 开发者模式 并将其切换为开启。
  3. 设备将重启;输入密码后,您将被要求 开启 开发者模式。

开发者模式保持激活状态,直到您禁用它或清除手机,因此此步骤每个设备只需执行一次。Apple 文档 解释了安全隐患。

现代侧载选项

现在有几种成熟的方法可以侧载并保持重新签名的 IPA 更新,而无需越狱:

工具要求优势限制
AltStore 2 / SideStoremacOS/Windows/Linux 伴侣,每 7 天使用免费开发者配置文件重新签名 IPA通过 Wi-Fi 自动重新加载,支持到 iOS 17需要在同一网络上的计算机,Apple 限制 3 个应用
TrollStore 1/2设备在 iOS 14 – 15.4.1 受 CoreTrust 漏洞影响永久 签名(无 7 天限制);安装后无需计算机不支持 iOS 15.5+(漏洞已修复)

对于当前 iOS 版本的常规渗透测试,Alt/Side-Store 通常是最实用的选择。

Hooking / 动态插桩

一旦您的应用使用 get_task_allow 并且 开发者模式开启,您可以像在越狱设备上一样进行 Hook:

bash
# Spawn & attach with objection
objection -g "com.example.target" explore

# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause

最近的 Frida 版本 (>=16) 自动处理指针认证和其他 iOS 17 的缓解措施,因此大多数现有脚本可以开箱即用。

使用 MobSF 进行自动化动态分析(无越狱)

MobSF 可以使用相同的技术 (get_task_allow) 在真实设备上对开发签名的 IPA 进行插桩,并提供带有文件系统浏览器、流量捕获和 Frida 控制台的 Web UI【】。最快的方法是通过 Docker 运行 MobSF,然后通过 USB 连接你的 iPhone:

bash
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
-v /var/run/usbmuxd:/var/run/usbmuxd \
opensecurity/mobile-security-framework-mobsf:latest
# Browse to http://127.0.0.1:8000 and upload your resigned IPA

MobSF 将自动部署二进制文件,在应用沙箱内启用 Frida 服务器,并生成交互式报告。

iOS 17 和锁定模式的注意事项

  • 锁定模式(设置 → 隐私与安全)阻止动态链接器加载未签名或外部签名的动态库。当测试可能启用此模式的设备时,请确保其 已禁用,否则您的 Frida/objection 会话将立即终止。
  • 指针认证(PAC)在 A12+ 设备上全系统强制执行。Frida ≥16 透明地处理 PAC 去除 — 只需在新的主要 iOS 版本发布时保持 frida-server 和 Python/CLI 工具链的最新状态。

参考文献

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