kolbicz/AppEnumGuard
GitHub: kolbicz/AppEnumGuard
AppEnumGuard 是一款 iOS 17 Relaxin/rootHide 越狱 tweak,通过拦截私有 SpringBoardServices 调用来缓解 CVE-2025-31207 应用枚举侧信道漏洞,防止沙盒应用探测设备已安装的 App 列表。
Stars: 0 | Forks: 0
# AppEnumGuard
AppEnumGuard 是一款防御性的 rootHide tweak,用于防范被追踪为 **CVE-2025-31207** 的应用程序枚举侧信道漏洞。它专为在 iOS 17.0–17.3.1 上的 **Relaxin 越狱** 设计,使用了 Relaxin 的 rootHide 架构。
本仓库还包含一个普通的沙盒 iOS 测试应用程序,用于演示易受攻击的结果并验证缓解措施的有效性。
## CVE-2025-31207
CVE-2025-31207 是 Apple 的 FrontBoard 应用程序启动逻辑中的一个信息泄露漏洞。沙盒应用程序可以通过私有的 SpringBoardServices 启动函数提交任意 bundle identifier,并利用不同的返回码来区分已安装的应用程序和未安装的应用程序。
这可能会泄露用户已安装应用程序的隐私信息,包括银行、通讯、安全、侧载(sideloading)以及越狱相关的应用程序。
Apple 将此问题描述为一个可能允许应用程序枚举已安装 App 的逻辑问题。Apple 在 iOS 和 iPadOS 18.5 中通过改进检查修复了该问题。因此,iOS 17.0–17.3.1 在操作系统层面依然受到影响。
## 兼容性
| 组件 | 支持目标 |
|---|---|
| iOS | 17.0–17.3.1 |
| 越狱 | Relaxin |
| Bootstrap/包架构 | rootHide / `iphoneos-arm64e` |
| 设备架构 | arm64e;tweak 二进制文件仅包含 arm64e 切片 |
| 安装包 | 安装 rootHide `.deb`,而不是传统的无根(rootless)构建版本 |
Relaxin 使用 rootHide bootstrap/包架构,因此 AppEnumGuard 是使用 rootHide Theos 构建的,并包含 rootHide `.jbroot` 加载路径。该安装包声明了 `firmware (>= 17.0)` 和 `firmware (<< 17.4)`,与支持的 Relaxin 17.0–17.3.1 范围相匹配。
该 tweak 和测试程序已在真实的 Relaxin/rootHide 设备上共同验证:在卸载 tweak 时,测试程序检测到了信息泄露;而在安装 tweak 后,测试程序返回了绿色的通过(pass)状态。
## 工作原理
公开的利用原语调用了私有的 SpringBoardServices 函数 `SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions`。在易受攻击的系统上,它对于已安装的应用程序和未安装的应用程序会返回不同的错误代码:
- `9`:目标存在,但启动被策略拒绝
- `7`:目标不存在
该 tweak 会被注入到 UIKit 应用程序进程中。对于普通的安装在容器(container)中的应用程序,它会在不提交私有启动请求的情况下直接返回 `7`。Apple 以及位于应用程序容器之外的其他系统进程将保留原始行为。
## 发布版下载
每个 GitHub release 都包含两个可安装的产物:
- `AppEnumGuard_1.0.0_roothide_iphoneos-arm64e.deb` — rootHide tweak
- `AppEnumGuardTester_1.0.0_sandboxed.ipa` — 沙盒验证 App
## 安装与验证
1. 安装 rootHide `.deb` 并重新注入(respring)。
2. 使用普通的开发者/侧载签名安装测试 IPA。
3. 确保为 **AppEnum Test** 启用了 tweak 注入。
4. 安装 WhatsApp,或输入另一个已知已安装应用程序的 bundle identifier。
5. 点击 **Run comparison**。
安装了 WhatsApp 时的预期结果:
| 状态 | 目标 | 缺失 | 测试结果 |
|---|---:|---:|---|
| 未安装 tweak | 9 | 7 | 红色 / 失败 (FAIL) |
| 已激活 tweak | 7 | 7 | 绿色 / 通过 (PASS) |
原始设备测试重现了这两种状态:卸载该 tweak 会产生红色的 `9 / 7` 结果,而安装它则会产生绿色的 `7 / 7` 结果。
## 构建 tweak
安装 [rootHide Theos](https://github.com/roothide/Developer),然后运行:
```
cd Tweak
THEOS=/path/to/theos-roothide \
make clean package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide
```
## 构建测试 IPA
测试程序是使用 Xcode 的 iPhoneOS SDK 编译的,不需要越狱或提升的 entitlements:
```
./scripts/build-tester-ipa.sh
```
生成的 IPA 将放置在 `dist/` 目录中。它是临时签名(ad-hoc signed)的,因此安装程序可以使用普通的开发身份对其进行重新签名。不要授予它 `platform-application` 或 `com.apple.private.security.no-sandbox` 权限,因为该测试专门设计为在普通的应用程序沙盒中运行。
## 范围与限制
- 这是针对公开的 SpringBoardServices 利用原语的用户空间缓解措施,而不是 Apple 完整的 FrontBoard 补丁。
- 禁用 tweak 注入的应用程序无法受到客户端注入 tweak 的保护。
- 只有在已知目标应用程序已安装的情况下,`7 / 7` 的测试结果才有意义。
- 测试程序有意调用了未公开的私有 API,因此不适用于提交到 App Store。
## 参考
- [Apple iOS 18.5 安全内容](https://support.apple.com/en-us/122404)
- [NVD: CVE-2025-31207](https://nvd.nist.gov/vuln/detail/CVE-2025-31207)
- [最初的公开 SpringBoardServices 概念验证](https://gist.github.com/wh1te4ever/c7909dcb5b66c13a217b49ea3e320caf)
- [rootHide 开发者文档](https://github.com/roothide/Developer)
## 许可证
MIT
标签:CVE监控, iOS 17, iOS越狱, rootHide, 信息泄露防护, 漏洞缓解, 越狱插件