# iOS Pentesting Checklist {{#include ../banners/hacktricks-training.md}} ### 准备 - [ ] 阅读 [**iOS 基础**](ios-pentesting/ios-basics.md) - [ ] 准备你的环境,阅读 [**iOS 测试环境**](ios-pentesting/ios-testing-environment.md) - [ ] 阅读 [**iOS 初步分析**](ios-pentesting/index.html#initial-analysis) 的所有部分,以了解对 iOS 应用进行渗透测试的常见操作 ### 数据存储 - [ ] [**Plist 文件**](ios-pentesting/index.html#plist) 可用于存储敏感信息。 - [ ] [**Core Data**](ios-pentesting/index.html#core-data)(SQLite 数据库)可以存储敏感信息。 - [ ] [**YapDatabases**](ios-pentesting/index.html#yapdatabase)(SQLite 数据库)可以存储敏感信息。 - [ ] [**Firebase**](ios-pentesting/index.html#firebase-real-time-databases) 配置错误。 - [ ] [**Realm 数据库**](ios-pentesting/index.html#realm-databases)可以存储敏感信息。 - [ ] [**Couchbase Lite 数据库**](ios-pentesting/index.html#couchbase-lite-databases)可以存储敏感信息。 - [ ] [**二进制 Cookie**](ios-pentesting/index.html#cookies)可以存储敏感信息。 - [ ] [**缓存数据**](ios-pentesting/index.html#cache)可以存储敏感信息。 - [ ] [**自动快照**](ios-pentesting/index.html#snapshots)可以保存视觉敏感信息。 - [ ] [**钥匙串**](ios-pentesting/index.html#keychain) 通常用于存储敏感信息,这些信息在转售手机时可能会被遗留。 - [ ] 总之,只需 **检查应用程序在文件系统中保存的敏感信息** ### 键盘 - [ ] 应用程序是否 [**允许使用自定义键盘**](ios-pentesting/index.html#custom-keyboards-keyboard-cache)? - [ ] 检查是否在 [**键盘缓存文件**](ios-pentesting/index.html#custom-keyboards-keyboard-cache) 中保存了敏感信息。 ### **日志** - [ ] 检查是否 [**记录了敏感信息**](ios-pentesting/index.html#logs)。 ### 备份 - [ ] [**备份**](ios-pentesting/index.html#backups) 可用于 **访问文件系统中保存的敏感信息**(检查此检查表的初始点)。 - [ ] 此外,[**备份**](ios-pentesting/index.html#backups) 可用于 **修改应用程序的一些配置**,然后 **在手机上恢复** 备份,作为 **修改后的配置** 被 **加载** 时,某些(安全) **功能** 可能会被 **绕过**。 ### **应用程序内存** - [ ] 检查 [**应用程序内存**](ios-pentesting/index.html#testing-memory-for-sensitive-data) 中的敏感信息。 ### **破损的加密** - [ ] 检查是否可以找到 [**用于加密的密码**](ios-pentesting/index.html#broken-cryptography)。 - [ ] 检查是否使用 [**过时/弱算法**](ios-pentesting/index.html#broken-cryptography) 来发送/存储敏感数据。 - [ ] [**钩取并监控加密函数**](ios-pentesting/index.html#broken-cryptography)。 ### **本地身份验证** - [ ] 如果应用程序中使用了 [**本地身份验证**](ios-pentesting/index.html#local-authentication),你应该检查身份验证的工作方式。 - [ ] 如果使用的是 [**本地身份验证框架**](ios-pentesting/index.html#local-authentication-framework),则可能很容易被绕过。 - [ ] 如果使用的是 [**可以动态绕过的函数**](ios-pentesting/index.html#local-authentication-using-keychain),你可以创建一个自定义的 frida 脚本。 ### 通过 IPC 暴露敏感功能 - [**自定义 URI 处理程序 / 深度链接 / 自定义方案**](ios-pentesting/index.html#custom-uri-handlers-deeplinks-custom-schemes) - [ ] 检查应用程序是否 **注册了任何协议/方案**。 - [ ] 检查应用程序是否 **注册以使用** 任何协议/方案。 - [ ] 检查应用程序 **是否期望从自定义方案接收任何类型的敏感信息**,这些信息可以被注册相同方案的另一个应用程序 **拦截**。 - [ ] 检查应用程序 **是否没有检查和清理** 通过自定义方案的用户输入,某些 **漏洞可能被利用**。 - [ ] 检查应用程序 **是否暴露了任何敏感操作**,可以通过自定义方案从任何地方调用。 - [**通用链接**](ios-pentesting/index.html#universal-links) - [ ] 检查应用程序是否 **注册了任何通用协议/方案**。 - [ ] 检查 `apple-app-site-association` 文件。 - [ ] 检查应用程序 **是否没有检查和清理** 通过自定义方案的用户输入,某些 **漏洞可能被利用**。 - [ ] 检查应用程序 **是否暴露了任何敏感操作**,可以通过自定义方案从任何地方调用。 - [**UIActivity 共享**](ios-pentesting/ios-uiactivity-sharing.md) - [ ] 检查应用程序是否可以接收 UIActivities,是否可以利用任何特殊构造的活动来利用漏洞。 - [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md) - [ ] 检查应用程序是否 **将任何内容复制到通用剪贴板**。 - [ ] 检查应用程序是否 **使用通用剪贴板中的数据**。 - [ ] 监控剪贴板以查看是否有任何 **敏感数据被复制**。 - [**应用扩展**](ios-pentesting/ios-app-extensions.md) - [ ] 应用程序是否 **使用任何扩展**? - [**WebViews**](ios-pentesting/ios-webviews.md) - [ ] 检查使用了哪种类型的 webviews。 - [ ] 检查 **`javaScriptEnabled`**、**`JavaScriptCanOpenWindowsAutomatically`**、**`hasOnlySecureContent`** 的状态。 - [ ] 检查 webview 是否可以使用协议 **file://** **(`allowFileAccessFromFileURLs`、`allowUniversalAccessFromFileURLs`)** 访问本地文件。 - [ ] 检查 Javascript 是否可以访问 **Native** **方法**(`JSContext`、`postMessage`)。 ### 网络通信 - [ ] 执行 [**MitM 通信**](ios-pentesting/index.html#network-communication) 并搜索网络漏洞。 - [ ] 检查 [**证书的主机名**](ios-pentesting/index.html#hostname-check) 是否被检查。 - [ ] 检查/绕过 [**证书钉扎**](ios-pentesting/index.html#certificate-pinning)。 ### **其他** - [ ] 检查 [**自动修补/更新**](ios-pentesting/index.html#hot-patching-enforced-updateing) 机制。 - [ ] 检查 [**恶意第三方库**](ios-pentesting/index.html#third-parties)。 {{#include ../banners/hacktricks-training.md}}