diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md index 2c004fce8..0ddc7cdff 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -6,9 +6,9 @@ 使用 **entitlement `get_task_allow`** 签名的应用程序允许第三方应用程序运行一个名为 **`task_for_pid()`** 的函数,参数为初始应用程序的进程 ID,以便获取其任务端口(能够控制它并访问其内存)。 -然而,这并不像简单地提取 IPA、使用该权限重新签名并将其刷回设备那么简单。这是因为 FairPlay 保护。当应用程序的签名更改时,DRM(数字版权管理)密钥会 **失效,应用程序将无法工作**。 +然而,这并不像简单地提取 IPA、用该权限重新签名并将其刷回设备那么简单。这是因为 FairPlay 保护。当应用程序的签名更改时,DRM(数字版权管理)密钥会 **失效,应用程序将无法工作**。 -在旧的越狱设备上,可以安装 IPA,**使用你喜欢的工具进行解密**(例如 Iridium 或 frida-ios-dump),然后将其提取回设备上。尽管如此,如果可能的话,建议直接向客户请求解密后的 IPA。 +在旧的越狱设备上,可以安装 IPA,**使用你喜欢的工具进行解密**(如 Iridium 或 frida-ios-dump),然后将其提取回设备上。不过,如果可能,建议直接向客户端请求解密后的 IPA。 ## 获取解密的 IPA @@ -18,20 +18,20 @@ 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,将会出现提示要求你重新安装应用程序。 +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) 以获取有关此过程的更多详细信息。 +查看 [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) 以获取有关此过程的更详细信息。 ### 解密应用程序 -为了解密 IPA,我们将安装它。然而,如果你有一部旧的越狱 iPhone,可能其版本不被应用程序支持,因为通常应用程序只支持最新版本。 +为了解密 IPA,我们将安装它。然而,如果你有一部旧的越狱 iPhone,可能其版本不被该应用程序支持,因为通常应用程序只支持最新版本。 因此,为了安装它,只需解压 IPA: ```bash unzip redacted.ipa -d unzipped ``` -检查 `Info.plist` 以获取最低支持版本,如果您的设备早于该版本,请更改该值以使其受支持。 +检查 `Info.plist` 以获取最低支持版本,如果您的设备低于该版本,请更改该值以使其受支持。 将 IPA 压缩回去: ```bash @@ -42,7 +42,7 @@ zip -r ../no-min-version.ipa * ```bash ideviceinstaller -i no-min-version.ipa -w ``` -请注意,您可能需要从 Cydia 安装 **AppSync Unified tweak** 以防止任何 `invalid signature` 错误。 +注意,您可能需要从 Cydia 安装 **AppSync Unified tweak** 以防止任何 `invalid signature` 错误。 安装后,您可以使用 Cydia 中的 **Iridium tweak** 来获取解密的 IPA。 @@ -50,22 +50,68 @@ ideviceinstaller -i no-min-version.ipa -w 为了使用 `get-task-allow` 权限重新签名应用程序,有几种可用的工具,如 `app-signer`、`codesign` 和 `iResign`。`app-signer` 具有非常用户友好的界面,可以非常轻松地重新签名 IPA 文件,指明要重新签名的 IPA、**将其设置为 `get-task-allow`** 以及要使用的证书和配置文件。 -关于证书和签名配置文件,Apple 通过 Xcode 为所有账户提供 **免费的开发者签名配置文件**。只需创建一个应用并配置一个。然后,通过导航到 `Settings` → `Privacy & Security`,点击 `Developer Mode` 来配置 **iPhone 以信任开发者应用**。 +关于证书和签名配置文件,Apple 通过 Xcode 为所有账户提供 **免费的开发者签名配置文件**。只需创建一个应用并配置一个。然后,通过导航到 `Settings` → `Privacy & Security`,配置 **iPhone 以信任开发者应用**,并点击 `Developer Mode`。 使用重新签名的 IPA,现在可以将其安装到设备上进行渗透测试: ```bash ideviceinstaller -i resigned.ipa -w ``` -### Hook +--- -您可以使用常见工具如 frida 和 objection 轻松地挂钩您的应用程序: +### 启用开发者模式 (iOS 16+) + +自 iOS 16 起,Apple 引入了 **Developer Mode**:任何携带 `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` **并且** 开发者模式开启,您可以像在越狱设备上一样钩取您的应用: ```bash -objection -g [your app bundle ID] explore +# 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【turn6view0†L2-L3】。最快的方法是通过 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 开发者文档 – 在设备上启用开发者模式: +- 移动安全框架 (MobSF): {{#include ../../banners/hacktricks-training.md}}