| name | analyzing-ios-app-security-with-objection |
| description | 使用基于 Frida 的工具包 Objection 对 iOS 应用程序进行运行时移动安全探测, 无需越狱即可与应用内部交互。适用于评估 iOS 应用安全态势、绕过客户端防护措施、 转储 Keychain 条目、检查文件系统存储以及评估运行时行为。当请求涉及 iOS 安全测试、 Objection 运行时分析、基于 Frida 的 iOS 评估或移动运行时探测时激活。
|
| domain | cybersecurity |
| subdomain | mobile-security |
| author | mahipal |
| tags | ["mobile-security","ios","objection","frida","owasp-mobile","penetration-testing"] |
| version | 1.0.0 |
| license | Apache-2.0 |
使用 Objection 分析 iOS 应用安全
适用场景
以下情况使用本 skill:
- 在授权渗透测试(penetration test)期间对 iOS 应用程序执行运行时安全评估
- 检查 iOS Keychain、文件系统和内存中的敏感数据暴露情况
- 在安全测试期间绕过客户端安全控制(SSL pinning、越狱检测)
- 在无法访问源代码的情况下评估 iOS 应用的运行时行为
不适用于:在没有明确授权的情况下在生产设备上使用本 skill——Objection 会修改应用运行时行为,可能触发安全监控。
前置条件
- Python 3.10+ 及 pip
- 已安装 Objection:
pip install objection
- 已安装 Frida:
pip install frida-tools
- 目标 iOS 设备(已越狱并安装 Frida server,或已重新打包 IPA 的非越狱设备)
- 非越狱设备需使用
objection patchipa 向 IPA 注入 Frida gadget
- iOS 测试推荐使用 macOS(需要 Xcode、ideviceinstaller)
- USB 连接目标设备或网络 Frida server
工作流程
步骤 1:准备测试环境
针对越狱设备:
ssh root@<device_ip> "/usr/sbin/frida-server -D"
frida-ps -U
针对非越狱设备(授权测试):
objection patchipa --source target.ipa --codesign-signature "Apple Development: test@example.com"
ideviceinstaller -i target-patched.ipa
步骤 2:将 Objection 附加到目标应用
objection --gadget "com.target.app" explore
objection --gadget "com.target.app" explore --startup-command "ios hooking list classes"
附加成功后,Objection 提供交互式 REPL 进行运行时探测。
步骤 3:评估数据存储安全(MASVS-STORAGE)
ios keychain dump
ios plist cat Info.plist
env
ios nsuserdefaults get
sqlite connect app_data.db
sqlite execute query "SELECT * FROM credentials"
ios pasteboard monitor
步骤 4:评估网络安全(MASVS-NETWORK)
ios sslpinning disable
ios hooking watch class NSURLSession
ios hooking watch class NSURLConnection
步骤 5:检查身份认证与授权(MASVS-AUTH)
ios hooking list classes
ios hooking search classes Auth
ios hooking search classes Login
ios hooking search classes Token
ios hooking watch method "+[AuthManager validateToken:]" --dump-args --dump-return
ios hooking watch class LAContext
步骤 6:评估二进制保护(MASVS-RESILIENCE)
ios jailbreak disable
ios jailbreak simulate
memory list modules
memory search "password" --string
memory search "api_key" --string
memory search "Bearer" --string
memory dump all dump_output/
步骤 7:检查平台交互(MASVS-PLATFORM)
ios info binary
ios bundles list_frameworks
ios hooking watch method "-[AppDelegate application:openURL:options:]" --dump-args
ios pasteboard monitor
ios hooking search classes UITextField
核心概念
| 术语 | 定义 |
|---|
| Objection | 基于 Frida 构建的运行时移动探测工具包,提供用于常见安全测试任务的预置脚本 |
| Frida Gadget | 注入到应用进程中的共享库,无需越狱即可实现 Frida 插桩 |
| Keychain | iOS 安全凭据存储系统;Objection 可转储目标应用 keychain access group 可访问的条目 |
| SSL Pinning 绕过 | 对证书验证逻辑进行运行时修改,允许代理拦截 HTTPS 流量 |
| 方法 Hook(Method Hooking) | 在运行时拦截 Objective-C/Swift 方法调用,以观察参数、返回值并修改行为 |
工具与系统
- Objection:高级 Frida 驱动的移动安全探测工具包,提供预置命令
- Frida:动态插桩(Dynamic instrumentation)框架,向原生应用进程注入 JavaScript
- Frida-tools:Frida 的 CLI 工具,包括 frida-ps、frida-trace 和 frida-discover
- ideviceinstaller:通过 USB 安装/管理 iOS 应用的跨平台工具
- Burp Suite:SSL pinning 绕过后用于拦截流量的 HTTP 代理
常见陷阱
- 附加时应用崩溃:某些应用实现了 Frida 检测。使用
--startup-command 在应用生命周期早期 hook 反 Frida 检测逻辑。
- Keychain 访问范围:Objection 只能转储应用 access group 内的 Keychain 条目。系统级 Keychain 条目需要单独的越狱级工具。
- Swift 名称混淆(name mangling):Swift 方法名在运行时会被混淆。使用
ios hooking list classes 配合 grep 查找反混淆后的名称。
- 修改不持久:所有 Objection 修改仅在运行时生效,应用重启后恢复原状。请立即记录发现的问题。