$npx -y skills add killvxk/cybersecurity-skills-zh --skill analyzing-ios-app-security-with-objection使用基于 Frida 的工具包 Objection 对 iOS 应用程序进行运行时移动安全探测, 无需越狱即可与应用内部交互。适用于评估 iOS 应用安全态势、绕过客户端防护措施、 转储 Keychain 条目、检查文件系统存储以及评估运行时行为。当请求涉及 iOS 安全测试、 Objection 运行时分析、基于 Frida 的 iOS 评估或移动运行时探测时激活。
| 1 | # 使用 Objection 分析 iOS 应用安全 |
| 2 | |
| 3 | ## 适用场景 |
| 4 | |
| 5 | 以下情况使用本 skill: |
| 6 | - 在授权渗透测试(penetration test)期间对 iOS 应用程序执行运行时安全评估 |
| 7 | - 检查 iOS Keychain、文件系统和内存中的敏感数据暴露情况 |
| 8 | - 在安全测试期间绕过客户端安全控制(SSL pinning、越狱检测) |
| 9 | - 在无法访问源代码的情况下评估 iOS 应用的运行时行为 |
| 10 | |
| 11 | **不适用于**:在没有明确授权的情况下在生产设备上使用本 skill——Objection 会修改应用运行时行为,可能触发安全监控。 |
| 12 | |
| 13 | ## 前置条件 |
| 14 | |
| 15 | - Python 3.10+ 及 pip |
| 16 | - 已安装 Objection:`pip install objection` |
| 17 | - 已安装 Frida:`pip install frida-tools` |
| 18 | - 目标 iOS 设备(已越狱并安装 Frida server,或已重新打包 IPA 的非越狱设备) |
| 19 | - 非越狱设备需使用 `objection patchipa` 向 IPA 注入 Frida gadget |
| 20 | - iOS 测试推荐使用 macOS(需要 Xcode、ideviceinstaller) |
| 21 | - USB 连接目标设备或网络 Frida server |
| 22 | |
| 23 | ## 工作流程 |
| 24 | |
| 25 | ### 步骤 1:准备测试环境 |
| 26 | |
| 27 | **针对越狱设备:** |
| 28 | ```bash |
| 29 | # 通过 Cydia/Sileo 在设备上安装 Frida server |
| 30 | # SSH 登录设备并启动 Frida server |
| 31 | ssh root@<device_ip> "/usr/sbin/frida-server -D" |
| 32 | |
| 33 | # 验证 Frida 连接 |
| 34 | frida-ps -U # 列出 USB 连接设备上的进程 |
| 35 | ``` |
| 36 | |
| 37 | **针对非越狱设备(授权测试):** |
| 38 | ```bash |
| 39 | # 向 IPA 注入 Frida gadget |
| 40 | objection patchipa --source target.ipa --codesign-signature "Apple Development: test@example.com" |
| 41 | |
| 42 | # 安装已打包的 IPA |
| 43 | ideviceinstaller -i target-patched.ipa |
| 44 | ``` |
| 45 | |
| 46 | ### 步骤 2:将 Objection 附加到目标应用 |
| 47 | |
| 48 | ```bash |
| 49 | # 通过 bundle ID 附加到正在运行的应用 |
| 50 | objection --gadget "com.target.app" explore |
| 51 | |
| 52 | # 或启动新的应用进程 |
| 53 | objection --gadget "com.target.app" explore --startup-command "ios hooking list classes" |
| 54 | ``` |
| 55 | |
| 56 | 附加成功后,Objection 提供交互式 REPL 进行运行时探测。 |
| 57 | |
| 58 | ### 步骤 3:评估数据存储安全(MASVS-STORAGE) |
| 59 | |
| 60 | ```bash |
| 61 | # 转储应用可访问的 iOS Keychain 条目 |
| 62 | ios keychain dump |
| 63 | |
| 64 | # 列出应用沙盒中的文件 |
| 65 | ios plist cat Info.plist |
| 66 | env # 显示应用环境路径 |
| 67 | |
| 68 | # 检查 NSUserDefaults 中的敏感数据 |
| 69 | ios nsuserdefaults get |
| 70 | |
| 71 | # 列出 SQLite 数据库 |
| 72 | sqlite connect app_data.db |
| 73 | sqlite execute query "SELECT * FROM credentials" |
| 74 | |
| 75 | # 检查粘贴板中的敏感数据 |
| 76 | ios pasteboard monitor |
| 77 | ``` |
| 78 | |
| 79 | ### 步骤 4:评估网络安全(MASVS-NETWORK) |
| 80 | |
| 81 | ```bash |
| 82 | # 禁用 SSL/TLS 证书固定(certificate pinning) |
| 83 | ios sslpinning disable |
| 84 | |
| 85 | # 通过 Burp Suite 代理观察流量,验证 pinning 是否已绕过 |
| 86 | # 监控与网络相关的类方法调用 |
| 87 | ios hooking watch class NSURLSession |
| 88 | ios hooking watch class NSURLConnection |
| 89 | ``` |
| 90 | |
| 91 | ### 步骤 5:检查身份认证与授权(MASVS-AUTH) |
| 92 | |
| 93 | ```bash |
| 94 | # 列出所有 Objective-C 类 |
| 95 | ios hooking list classes |
| 96 | |
| 97 | # 搜索与认证相关的类 |
| 98 | ios hooking search classes Auth |
| 99 | ios hooking search classes Login |
| 100 | ios hooking search classes Token |
| 101 | |
| 102 | # Hook 认证方法以观察参数 |
| 103 | ios hooking watch method "+[AuthManager validateToken:]" --dump-args --dump-return |
| 104 | |
| 105 | # 监控生物认证调用 |
| 106 | ios hooking watch class LAContext |
| 107 | ``` |
| 108 | |
| 109 | ### 步骤 6:评估二进制保护(MASVS-RESILIENCE) |
| 110 | |
| 111 | ```bash |
| 112 | # 检查越狱检测实现 |
| 113 | ios jailbreak disable |
| 114 | |
| 115 | # 模拟越狱检测绕过 |
| 116 | ios jailbreak simulate |
| 117 | |
| 118 | # 列出已加载的框架和库 |
| 119 | memory list modules |
| 120 | |
| 121 | # 在内存中搜索敏感字符串 |
| 122 | memory search "password" --string |
| 123 | memory search "api_key" --string |
| 124 | memory search "Bearer" --string |
| 125 | |
| 126 | # 转储特定内存区域 |
| 127 | memory dump all dump_output/ |
| 128 | ``` |
| 129 | |
| 130 | ### 步骤 7:检查平台交互(MASVS-PLATFORM) |
| 131 | |
| 132 | ```bash |
| 133 | # 列出应用注册的 URL scheme |
| 134 | ios info binary |
| 135 | ios bundles list_frameworks |
| 136 | |
| 137 | # Hook URL scheme 处理程序 |
| 138 | ios hooking watch method "-[AppDelegate application:openURL:options:]" --dump-args |
| 139 | |
| 140 | # 监控剪贴板访问 |
| 141 | ios pasteboard monitor |
| 142 | |
| 143 | # 检查自定义键盘限制 |
| 144 | ios hooking search classes UITextField |
| 145 | ``` |
| 146 | |
| 147 | ## 核心概念 |
| 148 | |
| 149 | | 术语 | 定义 | |
| 150 | |------|-----------| |
| 151 | | **Objection** | 基于 Frida 构建的运行时移动探测工具包,提供用于常见安全测试任务的预置脚本 | |
| 152 | | **Frida Gadget** | 注入到应用进程中的共享库,无需越狱即可实现 Frida 插桩 | |
| 153 | | **Keychain** | iOS 安全凭据存储系统;Objection 可转储目标应用 keychain access group 可访问的条目 | |
| 154 | | **SSL Pinning 绕过** | 对证书验证逻辑进行运行时修改,允许代理拦截 HTTPS 流量 | |
| 155 | | **方法 Hook(Method Hooking)** | 在运行时拦截 Objective-C/Swift 方法调用,以观察参数、返回值并修改行为 | |
| 156 | |
| 157 | ## 工具与系统 |
| 158 | |
| 159 | - **Objection**:高级 Frida 驱动的移动安全探测工具包,提供预置命令 |
| 160 | - **Frida**:动态插桩(Dynamic instrumentation)框架,向原生应用进程注入 JavaScript |
| 161 | - **Frida-tools**:Frida 的 CLI 工具,包括 frida-ps、frida-trace 和 frida-discover |
| 162 | - **ideviceinstaller**:通过 USB 安装/管理 iOS 应用的跨平台工具 |
| 163 | - **Burp Suite**:SSL pinning 绕过后用于拦截流量的 HTTP 代理 |
| 164 | |
| 165 | ## 常见陷阱 |
| 166 | |
| 167 | - **附加时应用崩溃**:某些应用实现了 Frida 检测。使用 `--startup-command` 在应用生命周期早期 hook 反 Frida 检测逻辑。 |
| 168 | - **Keychain 访问范围**:Objection 只能转储应用 access group 内的 Keychain 条目。系统级 Keychain 条目需要单独的越狱级工具。 |
| 169 | - **Swift 名称混淆(name mangling)**:Swift 方法名在运行时会被混淆。使用 `ios hooking list classes` 配合 grep 查找反混淆后的名称。 |
| 170 | - **修改不持久**:所有 Objection 修改仅在运行时生效,应用重启后恢复原状。请立即记录发现的问题。 |