hacktricks/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md

118 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# iOS Pentesting without Jailbreak
{{#include ../../banners/hacktricks-training.md}}
## 主要思想
使用 **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](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12)
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](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-signer``codesign``iResign``app-signer` 具有非常用户友好的界面,可以非常轻松地重新签名 IPA 文件,指明要重新签名的 IPA、**将其设置为 `get-task-allow`** 以及要使用的证书和配置文件。
关于证书和签名配置文件Apple 通过 Xcode 为所有账户提供 **免费的开发者签名配置文件**。只需创建一个应用并配置一个。然后,通过导航到 `Settings``Privacy & 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 文档](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) 解释了安全隐患。
### 现代侧载选项
现在有几种成熟的方法可以侧载并保持重新签名的 IPA 更新,而无需越狱:
| 工具 | 要求 | 优势 | 限制 |
|------|--------------|-----------|-------------|
| **AltStore 2 / SideStore** | macOS/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](https://mobsf.github.io/Mobile-Security-Framework-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 工具链的最新状态。
## 参考文献
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
- Apple 开发者文档 在设备上启用开发者模式: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
- 移动安全框架 (MobSF): <https://mobsf.github.io/Mobile-Security-Framework-MobSF/>
{{#include ../../banners/hacktricks-training.md}}