使用 Objection 与 Frida 进行 iOS 应用运行时安全测试:从环境搭建到 MASVS 全面评估
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
导读:本指南以 Anthropic-Cybersecurity-Skills 仓库中的 analyzing-ios-app-security-with-objection 技能文档为核心,系统讲解如何借助 Objection(基于 Frida 的运行时移动探索工具包)在授权渗透测试中对 iOS 应用执行运行时安全评估——包括 Keychain 与文件系统敏感数据检查、SSL Pinning 绕过、Jailbreak 检测绕过、认证逻辑 Hook 与二进制防护分析。读者完成后将掌握一套从设备准备、REPL 交互到报告输出的完整可复现评估流程,并能结合仓库提供的自动化脚本将常见检查批量执行。
该技能定位于移动安全(mobile-security)子域,其 frontmatter 声明覆盖 MITRE ATT&CK 的 T1635、T1414、T1417.001、T1409 等移动端技术,并映射 NIST CSF、NIST AI RMF 与 ATLAS 框架(详见 SKILL.md 头部元数据)。本文所有命令与步骤均以该技能文档及其 API 参考、标准映射、工作流 为事实依据。
何时使用本技能
在以下场景中启用该技能:
- 在授权渗透测试中对 iOS 应用执行运行时安全评估(非源码审计,而是黑盒/灰盒视角的运行时观察);
- 检查 iOS Keychain、文件系统与内存中的敏感数据暴露;
- 绕过客户端安全控制(SSL 证书固定、Jailbreak 检测)以验证其有效性;
- 在无法获得源码的情况下评估应用运行时行为。
技能文档同时给出了明确的红线:切勿在未经明确授权的生产设备上使用——Objection 会修改应用运行时行为,可能触发安全监控告警。这一点在评估范围界定(ROE)阶段就必须书面确认。
前置条件
依据 SKILL.md,测试环境需要:
| 组件 | 要求 |
|---|---|
| Python | 3.10+ 且已安装 pip |
| Objection | pip install objection |
| Frida 工具链 | pip install frida-tools |
| 目标设备 | 已越狱(运行 frida-server)或未越狱(重打包 IPA 注入 Frida Gadget) |
| 未越狱方案 | objection patchipa将 Frida Gadget 注入 IPA |
| 主机环境 | 推荐 macOS(Xcode、ideviceinstaller) |
| 连接方式 | USB 连接目标设备,或网络 Frida server |
注意:
pip install objection与pip install frida-tools两条命令缺一不可——Objection 是高层工具,而 Frida 是其底层动态插桩引擎,frida-ps、frida-trace等 CLI 来自 frida-tools 包。
七步运行时评估工作流
技能文档给出了一套从环境准备到平台交互的完整评估流水线,以下逐步展开并结合仓库参考资料补充参数细节。
第一步:准备测试环境
越狱设备方案:通过 Cydia/Sileo 在设备端安装 Frida server,SSH 到设备后启动守护进程,并在主机端验证连通性:
# 在设备端启动 Frida server(通过 SSH) ssh root@<device_ip> "/usr/sbin/frida-server -D" # 列出 USB 连接设备上的进程,验证 Frida 连通 frida-ps -U未越狱设备方案(须授权):使用 Objection 将 Frida Gadget 注入 IPA 并重签名安装:
# 将 Frida Gadget 注入 IPA(需提供开发者签名) objection patchipa --source target.ipa --codesign-signature "Apple Development: test@example.com" # 安装打过补丁的 IPA ideviceinstaller -i target-patched.ipa这一步的决策逻辑可参考 workflows.md 中的决策矩阵:
| 设备状态 | 是否有 IPA | 采用方案 |
|---|---|---|
| 已越狱 | 不需要 | 直接 Frida server + Objection attach |
| 未越狱 | 有 | objection patchipa重打包 |
| 未越狱 | 无 | 向客户索取 IPA 或走设备管理流程 |
| 模拟器 | N/A | 受限,可考虑 Corellium 等平台上的 Frida |
第二步:将 Objection 附加到目标应用
# 按 bundle ID 附加到已运行的应用 objection --gadget "com.target.app" explore # 或全新启动(spawn)应用,并附带启动命令 objection --gadget "com.target.app" explore --startup-command "ios hooking list classes"附加成功后 Objection 会进入交互式 REPL,后续所有检查命令都在该 REPL 内执行。--startup-command的典型价值在于:某些应用在启动早期就执行 Frida 检测,通过启动命令可在生命周期早期挂钩反 Frida 逻辑。
第三步:数据存储安全评估(MASVS-STORAGE)
这是运行时评估中信息量最大的一环,覆盖 Keychain、NSUserDefaults、SQLite 与剪贴板:
# 转储应用可访问的 Keychain 条目 ios keychain dump ios keychain dump --json # 结构化输出,便于后续自动化解析 # 查看应用沙箱环境路径与 Info.plist env ios plist cat Info.plist # 检查 NSUserDefaults 中的敏感数据 ios nsuserdefaults get # 打开并查询 SQLite 数据库 sqlite connect app_data.db sqlite execute query "SELECT * FROM credentials" # 监控剪贴板敏感数据 ios pasteboard monitorapi-reference.md 补充了同属存储检查的ios cookies get(列出 HTTP Cookie),并将其纳入 agent.py 的OWASP_MOBILE_CHECKS中M2_Insecure_Data_Storage检查组合(keychain dump + cookies get + nsuserdefaults get)。iOS 应用沙箱的典型路径及内容映射可参考 api-reference.md:
| 路径 | 内容 |
|---|---|
/Documents | 用户生成数据 |
/Library/Caches | 缓存数据 |
/Library/Preferences | Plist 设置 |
/tmp | 临时文件 |
/Library/Cookies | Cookie 存储 |
第四步:网络安全评估(MASVS-NETWORK)
# 禁用 SSL/TLS 证书固定 ios sslpinning disable ios sslpinning disable --quiet # 静默模式 # 挂钩网络相关类,监控方法调用 ios hooking watch class NSURLSession ios hooking watch class NSURLConnection禁用 pinning 后,将设备代理指向 Burp Suite,即可解密并审查 HTTPS 流量,重点观察 API 端点、认证流程与传输中的敏感数据。--quiet参数适用于希望在输出中减少冗余日志的自动化场景。
第五步:认证与授权检查(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 # 监控生物识别认证调用(Face ID / Touch ID) ios hooking watch class LAContextLAContext是 iOS 本地认证框架的核心类,挂钩它可以观察生物识别校验结果是否可被绕过(例如直接篡改evaluatePolicy:localizedReason:reply:的回调结果)。
第六步:二进制防护评估(MASVS-RESILIENCE)
# 检查并绕过 Jailbreak 检测 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/jailbreak_bypass 示例脚本 展示了底层思路:拦截NSFileManager - fileExistsAtPath:,当路径命中越狱特征(/Applications/Cydia.app、/usr/sbin/sshd、/etc/apt)时把返回值替换为0,从而骗过基于文件存在性的检测。
第七步:平台交互评估(MASVS-PLATFORM)
# 查看二进制信息与已注册框架 ios info binary ios bundles list_frameworks # 挂钩 URL Scheme 处理器(深链安全) ios hooking watch method "-[AppDelegate application:openURL:options:]" --dump-args # 监控剪贴板访问(自 iOS 14 起有系统级粘贴提示,此处为应用内行为观测) ios pasteboard monitor # 检索 UITextField 相关类,检查自定义键盘/输入限制 ios hooking search classes UITextFieldURL Scheme 处理器的挂钩对应 OWASP MASTG 的 MASTG-TEST-0060,用于验证深链是否可被任意参数注入。
关键概念速查
SKILL.md 给出了五个核心术语的定义,它们是理解整个工作流的基础:
| 术语 | 定义 |
|---|---|
| Objection | 基于 Frida 的运行时移动探索工具包,内置了常见安全测试任务的预制脚本 |
| Frida Gadget | 注入应用进程的共享库,使未越狱设备也能进行 Frida 插桩 |
| Keychain | iOS 安全凭据存储系统;Objection 可转储目标应用访问组内的条目 |
| SSL Pinning Bypass | 运行时修改证书校验逻辑,允许代理拦截 HTTPS 流量 |
| Method Hooking | 在运行时拦截 Objective-C/Swift 方法调用,观察参数、返回值并修改行为 |
关于 Keychain 的访问范围需要强调:Objection 只能转储应用 keychain access group 内的条目,系统级 Keychain 条目需要越狱级工具处理——这是 常见陷阱 中明确指出的边界。
工具链全景
| 工具 | 作用 |
|---|---|
| Objection | 高层 Frida 移动安全探索工具,提供预制命令 |
| Frida | 动态插桩框架,向原生应用进程注入 JavaScript |
| Frida-tools | 提供frida-ps、frida-trace、frida-discover等 CLI 工具 |
| ideviceinstaller | 通过 USB 安装/管理 iOS 应用的跨平台工具 |
| Burp Suite | SSL Pinning 绕过后用于拦截流量的 HTTP 代理 |
Frida CLI 底层命令
当预制命令无法满足需求时,可直接降级使用 Frida CLI(见 api-reference.md):
frida -U -n AppName # 按进程名附加 frida -U -f com.app.id # 启动(spawn)并附加 frida -U -n AppName -l script.js # 加载自定义脚本 frida-ps -U # 列出运行进程 frida-ls-devices # 列出连接的设备自定义 Frida 脚本的典型骨架——用ObjC.choose遍历类实例并挂钩方法:
ObjC.choose(ObjC.classes.ClassName, { onMatch: function(instance) { Interceptor.attach(instance['- methodName:'].implementation, { onEnter: function(args) { console.log('arg1:', ObjC.Object(args[2])); } }); }, onComplete: function() {} });深入源码:自动化评估脚本如何实现
技能目录下提供两个可直接复用的 Python 脚本,将上述手工流程封装为可批量执行的自动化工具,展示了 Objection 命令驱动评估的工程化落地方式。
agent.py:OWASP Mobile Top 10 检查器
agent.py 的核心设计是:
run_objection(command, app_id)通过subprocess执行objection -g <app_id> explore -c <command>,并做超时与缺失依赖(pip install objection)的错误兜底;run_frida(script_code, app_id)执行frida -U -n <app_id> -e <script>运行单行脚本;OWASP_MOBILE_CHECKS字典将 OWASP Mobile Top 10 分类与具体检查命令绑定,例如 M2(不安全数据存储)绑定ios keychain dump、ios cookies get、ios nsuserdefaults get,M3(不安全通信)绑定ios sslpinning disable;run_owasp_assessment(app_id)遍历所有分类,逐条执行检查并记录命令输出预览(前 200 字符)与退出码;FRIDA_SCRIPTS内置了 SSL Pinning Bypass、Jailbreak Bypass、Keychain 查询三个可复用的脚本片段。
运行方式:python agent.py com.example.app,无参数时输出可用检查清单。
process.py:可配置的批量评估与 JSON 报告
process.py 面向更正式的评估交付物,其亮点在于:
ObjectionAssessor类将每个检查封装为独立方法,且每个 finding 都附带category(如MASVS-STORAGE)、owasp_mobile(如M9)与severity(HIGH/MEDIUM/INFO/PASS)字段,直接服务于后续报告;check_frida_connectivity()先通过frida-ps -U验证设备连通性,失败即退出——防止在错误目标上产生误导性结果;check_nsuserdefaults()内置敏感词模式列表(password、token、secret、key、auth、session、credential、api_key等),自动从 NSUserDefaults 输出中标记敏感条目;search_sensitive_memory()对password、Bearer、eyJ(JWT 前缀)、api_key、secret等模式执行memory search,统计命中次数;generate_report()汇总严重度分布,输出结构化 JSON,可直接作为正式报告的机器可读底稿。
命令行接口:
python process.py --bundle-id com.target.app [--device-id UDID] [--output report.json] [--checks keychain nsuserdefaults ssl jailbreak memory]支持通过--serial <UDID>/-D <UDID>在多设备场景下精确指定目标(见 process.py 中的命令构造逻辑)。
评估结果与框架映射
OWASP Mobile Top 10 (2024) 映射
api-reference.md 给出了完整的检查对应关系:
| ID | 类别 | 对应 Objection 检查 |
|---|---|---|
| M1 | Improper Credential Usage | ios keychain dump |
| M2 | Inadequate Supply Chain Security | 二进制分析 |
| M3 | Insecure Authentication | 挂钩认证类 |
| M4 | Insufficient Input/Output Validation | 挂钩输入方法 |
| M5 | Insecure Communication | ios sslpinning disable |
| M6 | Inadequate Privacy Controls | ios nsuserdefaults get |
| M7 | Insufficient Binary Protections | 检查 PIE、ARC、栈 canary |
| M8 | Security Misconfiguration | ios plist cat Info.plist |
| M9 | Insecure Data Storage | 文件系统 + Keychain 审查 |
| M10 | Insufficient Cryptography | 挂钩加密类 |
OWASP MASVS v2.0 控制映射
standards.md 将 Objection 命令映射到 MASVS 六大类别:
| MASVS 类别 | Objection 命令 | 评估点 |
|---|---|---|
| MASVS-STORAGE | ios keychain dump、ios nsuserdefaults get、sqlite connect | Keychain/NSUserDefaults/数据库中的敏感数据 |
| MASVS-CRYPTO | memory search、挂钩加密框架调用 | 密钥存储、算法选择 |
| MASVS-AUTH | 挂钩 LAContext 与认证类 | 生物识别绕过、会话管理 |
| MASVS-NETWORK | ios sslpinning disable、挂钩 NSURLSession | 证书固定、明文流量 |
| MASVS-PLATFORM | 挂钩 URL Scheme 处理器、剪贴板监控 | 深链安全、剪贴板暴露 |
| MASVS-CODE | memory list modules、二进制检查 | 调试符号、框架分析 |
| MASVS-RESILIENCE | ios jailbreak disable、Frida 检测挂钩 | 防篡改、防调试 |
OWASP MASTG 测试用例对应
| 测试 ID | 描述 | Objection 方案 |
|---|---|---|
| MASTG-TEST-0053 | 本地存储敏感数据 | ios keychain dump+ 文件系统检查 |
| MASTG-TEST-0057 | 备份敏感数据 | 检查备份排除属性 |
| MASTG-TEST-0060 | 自定义 URL Scheme | 挂钩application:openURL:options: |
| MASTG-TEST-0063 | 日志敏感数据 | 挂钩 NSLog 调用 |
| MASTG-TEST-0066 | ATS 强制执行 | 检查 Info.plist ATS 配置 |
Apple 平台安全要求核对
| 要求 | 评估方法 |
|---|---|
| Keychain 访问控制 | 通过 keychain dump 验证kSecAttrAccessible值 |
| App Transport Security | 检查 Info.plist 中的NSAllowsArbitraryLoads例外 |
| Data Protection API | 验证敏感文件的文件保护属性 |
| Secure Enclave 使用 | 挂钩 SecKey 操作,检查受生物识别保护的密钥 |
常见陷阱与规避
技能文档在 Common Pitfalls 中明确了四个高频问题:
- 附加时应用崩溃:部分应用实现了 Frida 检测。对策是使用
--startup-command在应用生命周期早期挂钩反 Frida 检查逻辑。 - Keychain 访问范围限制:Objection 只能转储应用访问组内的条目,系统级 Keychain 条目需越狱级工具处理。
- Swift 名称修饰(name mangling):Swift 方法名在运行时是修饰后的形态,需用
ios hooking list classes配合 grep 查找去修饰(demangled)名称。 - 修改不持久:所有 Objection 修改均为运行时生效,应用重启即复位。发现需立即记录,否则重启后必须重做整个会话。
评估报告输出规范
技能目录提供了标准化的 报告模板,建议最终交付包含以下板块:
- Engagement Information:应用名、Bundle ID、iOS 版本、设备型号、越狱状态、评估日期、分析师、Objection 版本;
- Executive Summary:运行时分析发现的高层叙述;
- Keychain Analysis:Service / Account / Data Type / Protection Class / Risk 表格;
- Data Storage Assessment:NSUserDefaults、SQLite 数据库、文件系统三个子表;
- Network Security:SSL Pinning 是否存在、绕过是否成功、ATS 配置严格与否;
- Binary Protection Assessment:Jailbreak 检测、Frida 检测、调试检测、代码混淆状态;
- Memory Analysis:密码 / 认证令牌 / API Key / JWT 的搜索命中与风险;
- Recommendations:按 Critical / High / Medium 分级列出修复建议。
同时建议结合 workflows.md 的完整评估流程(环境搭建 → 设备准备 → 附加 Objection → 运行时分析 → 记录发现 → 生成报告)与第二条 SSL Pinning 绕过流程(配置 Burp → 设置设备代理 → 附加 Objection → 禁用 pinning → 抓取流量 → 分析 API 端点)来组织测试节奏。
结语
本技能将零散的手工 Frida 插桩抽象为一套命令化的、可复现的 iOS 运行时安全评估方法论。评估者既可按照七步工作流逐项执行,也可直接复用仓库中的 agent.py 与 process.py 将检查自动化,并依托 api-reference.md、standards.md 与 template.md 完成从 OWASP Mobile Top 10 / MASVS 映射到正式报告输出的完整闭环。需要强调的是,所有运行时修改都不持久、且会改变应用行为,评估务必在授权范围内进行,并养成“发现即记录”的工作习惯。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考