使用 Objection 分析 iOS 应用安全性 是做什么的?
使用时机
在以下情况下使用此技能:
- 在授权渗透测试期间对 iOS 应用进行运行时安全评估
- 检查 iOS Keychain、文件系统和内存是否存在敏感数据泄露
- 在安全测试中绕过客户端安全控制(SSL Pinning、越狱检测)
- 在无源代码的情况下评估 iOS 应用的运行时行为
请勿在未获得明确授权的情况下在生产设备上使用此技能——Objection 会修改应用的运行时行为,可能触发安全监控。
前提条件
- Python 3.10+ 并安装 pip
- 安装 Objection:
pip install objection - 安装 Frida:
pip install frida-tools - 目标 iOS 设备(已越狱并安装 Frida Server,或未越狱但已重打包 IPA)
- 对于未越狱设备:使用
objection patchipa将 Frida Gadget 注入 IPA - 建议使用 macOS 进行 iOS 测试(Xcode、ideviceinstaller)
- 通过 USB 连接目标设备,或使用网络 Frida Server
工作流程
步骤 1:准备测试环境
针对已越狱设备:
# 通过 Cydia/Sileo 在设备上安装 Frida Server
# SSH 到设备并启动 Frida Server
ssh root@<device_ip> "/usr/sbin/frida-server -D"
# 验证 Frida 连接
frida-ps -U # 列出 USB 连接设备上的进程
针对未越狱设备(授权测试):
# 使用 Frida Gadget 重打包 IPA
objection patchipa --source target.ipa --codesign-signature "Apple Development: [email protected]"
# 安装重打包后的 IPA
ideviceinstaller -i target-patched.ipa
步骤 2:将 Objection 附加到目标应用
# 通过 Bundle ID 附加到正在运行的应用
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 条目
ios keychain dump
# 列出应用沙盒中的文件
ios plist cat Info.plist
env # 显示应用环境路径
# 检查 NSUserDefaults 中的敏感数据
ios nsuserdefaults get
# 列出 SQLite 数据库
sqlite connect app_data.db
sqlite execute query "SELECT * FROM credentials"
# 检查粘贴板中的敏感数据
ios pasteboard monitor
步骤 4:评估网络安全 (MASVS-NETWORK)
# 禁用 SSL/TLS 证书固定
ios sslpinning disable
# 通过在 Burp Suite 代理中观察流量来验证固定是否被绕过
# 监控网络相关类的方法调用
ios hooking watch class NSURLSession
ios hooking watch class NSURLConnection
步骤 5:检查身份验证和授权 (MASVS-AUTH)
# 列出所有 Objective-C 类
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)
# 列出应用注册的 URL Scheme
ios info binary
ios bundles list_frameworks
# 钩取 URL Scheme 处理程序
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 访问组中可访问的条目 |
| SSL Pinning 绕过 | 运行时修改证书验证逻辑,以允许代理拦截 HTTPS 流量 |
| 方法钩子 | 在运行时拦截 Objective-C/Swift 方法调用,以观察参数、返回值并修改行为 |
工具与系统
- Objection:基于 Frida 的高层移动安全探索工具包,提供预构建命令
- Frida:动态插桩框架,支持将 JavaScript 注入原生应用进程
- Frida-tools:Frida 的 CLI 工具集,包括 frida-ps、frida-trace 和 frida-discover
- ideviceinstaller:跨平台工具,用于通过 USB 安装/管理 iOS 应用
- Burp Suite:HTTP 代理,用于在 SSL Pinning 绕过之后拦截流量
常见陷阱
- 附加时应用崩溃:某些应用实现了 Frida 检测。使用
--startup-command在应用生命周期早期钩取反 Frida 检查。 - Keychain 访问范围:Objection 只能导出应用访问组内的 Keychain 条目。系统 Keychain 条目需要单独的越狱级工具。
- Swift 名称混淆:Swift 方法名在运行时会被混淆。使用
ios hooking list classes配合 grep 查找非混淆名称。 - 非持久性更改:所有 Objection 修改仅在运行时有效,应用重启后将重置。请立即记录发现。