关于 performing-ios-app-security-assessment
面向获授权的 iOS 应用安全测试人员,提供静态与运行时评估流程,使用 Frida 和 Objection 检查应用行为、存储和网络安全。内容包括 IPA 分析、证书固定绕过及 Keychain 检查。
主要功能
- 01静态分析 IPA 文件
- 02使用 Frida 和 Objection 进行运行时检查
- 03绕过 SSL 证书固定并拦截流量
- 04提取并审查 Keychain 数据
- 05检查应用存储与传输安全
适用场景
- 01按 OWASP MASVS/MASTG 测试应用
- 02检查凭据是否安全存储
- 03分析应用网络请求与 TLS 配置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-ios-app-security-assessment安装后在 Claude Code 中输入/performing-ios-app-security-assessment确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
执行 iOS 应用安全评估
免责声明
本技能仅用于授权的安全测试、渗透测试项目、CTF 竞赛和教育目的。未经授权访问应用或设备是违法的。在执行任何安全评估之前,务必获得书面授权。滥用这些技术可能违反您所在司法管辖区的计算机欺诈和滥用法。
何时使用
在以下情况下使用本技能:
- 依据 OWASP MASVS/MASTG 标准对 iOS 应用进行授权的渗透测试
- 使用 Frida 插桩和 Objection 运行时探索对 iOS 应用进行动态分析
- 绕过 SSL/TLS 证书固定,以通过代理拦截和分析应用网络流量
- 提取和审计 iOS Keychain 内容,以发现不安全的凭据存储做法
- 对 IPA 包进行静态分析,以识别硬编码密钥、权限和二进制保护
- 评估 iOS 应用中的越狱检测和防篡改控制
请勿在未获得明确书面授权的情况下针对应用使用。除非项目范围允许,否则请勿在包含真实用户数据的生产设备上使用。
前置条件
- Python 3.10+ 及 pip
- Frida 工具包:
pip install frida-tools frida - Objection:
pip install objection - 目标 iOS 设备(已越狱并安装 frida-server,或未越狱并使用已修补的 IPA)
- 安装 Xcode 命令行工具的 macOS(推荐用于代码签名和 ideviceinstaller)
- 用于在绕过 SSL 固定后进行流量拦截的 Burp Suite 或 mitmproxy
- 对于已越狱设备:SSH 访问权限以及设备上运行的 frida-server
- 对于未越狱设备:用于 IPA 重签名的 Apple Developer 证书
工作流
步骤 1:IPA 静态分析
在运行时测试之前提取并分析 IPA 二进制文件:
# Unzip IPA for static analysis
unzip target.ipa -d target_app/
# Check binary architectures and protections
otool -hv target_app/Payload/*.app/AppExecutable
otool -l target_app/Payload/*.app/AppExecutable | grep -A4 LC_ENCRYPTION
# Extract Info.plist for entitlements and URL schemes
plutil -p target_app/Payload/*.app/Info.plist
# Search for hardcoded secrets in binary strings
strings target_app/Payload/*.app/AppExecutable | grep -iE "api[_-]?key|secret|password|token|firebase"
# Check embedded provisioning profile
security cms -D -i target_app/Payload/*.app/embedded.mobileprovision
# Identify linked frameworks
otool -L target_app/Payload/*.app/AppExecutable
步骤 2:环境搭建与 Frida 附加
# For jailbroken device: verify Frida server is running
frida-ps -U
# Spawn target app with Frida
frida -U -f com.target.app --no-pause
# For non-jailbroken device: patch IPA with Frida Gadget
objection patchipa --source target.ipa --codesign-signature "Apple Development: [email protected]"
# Install patched IPA
ideviceinstaller -i target-patched.ipa
# Attach Objection to running app
objection --gadget "com.target.app" explore
步骤 3:绕过 SSL 固定
绕过证书固定以启用流量拦截:
# Using Objection's built-in bypass
objection --gadget "com.target.app" explore --startup-command "ios sslpinning disable"
# Using Frida script for more comprehensive bypass
frida -U -f com.target.app -l ssl_pinning_bypass.js --no-pause
# Verify bypass by configuring device proxy to Burp Suite
# Device Settings -> Wi-Fi -> HTTP Proxy -> Manual -> <burp_ip>:8080
# Install Burp CA certificate on device via http://<burp_ip>:8080/cert
Frida SSL 固定绕过脚本会挂钩 NSURLSession、NSURLConnection 以及 AFNetworking/Alamofire 的信任评估委托,以在 TLS 握手层面覆盖证书验证。
步骤 4:Keychain 提取与凭据分析
# Dump all accessible keychain items via Objection
ios keychain dump
# Dump keychain with raw data output
ios keychain dump --json
# Check keychain item accessibility attributes
# Items with kSecAttrAccessibleAlways or kSecAttrAccessibleAfterFirstUnlock
# are accessible without device unlock - this is a finding
# Search for specific credential types
ios keychain dump | grep -i "password\|token\|secret\|oauth"
# Inspect NSUserDefaults for sensitive data leaks
ios nsuserdefaults get
# Check for sensitive data in app cookies
ios cookies get
步骤 5:运行时方法挂钩与分析
# List all loaded classes
ios hooking list classes
# Search for security-relevant classes
ios hooking search classes Auth
ios hooking search classes Crypto
ios hooking search classes Biometric
ios hooking search classes Jailbreak
# Hook authentication methods to observe parameters and return values
ios hooking watch method "+[AuthManager validateCredentials:password:]" --dump-args --dump-return
# Monitor biometric authentication (LocalAuthentication framework)
ios hooking watch class LAContext
# Bypass jailbreak detection
ios jailbreak disable
# Search memory for sensitive strings
memory search "Bearer " --string
memory search "password" --string
# Dump loaded modules for third-party library identification
memory list modules
步骤 6:数据存储评估
# List files in app sandbox
env
# Check for SQLite databases with sensitive data
sqlite connect Documents/app.db
sqlite execute query "SELECT name FROM sqlite_master WHERE type='table'"
# Inspect plist files for cached credentials
ios plist cat Library/Preferences/com.target.app.plist
# Check for sensitive data in app caches
find Library/Caches/ -type f
# Monitor pasteboard for credential leakage
ios pasteboard monitor
# Check binary cookies
ios cookies get
步骤 7:网络与传输安全评估
在绕过 SSL 固定后,分析拦截到的流量:
# Verify App Transport Security (ATS) configuration in Info.plist
# Check for NSAllowsArbitraryLoads = true (disables ATS)
ios plist cat Info.plist | grep -A5 NSAppTransportSecurity
# Hook URL session delegates to monitor all network calls
ios hooking watch class NSURLSession
ios hooking watch class NSURLSessionConfiguration
# Check for certificate transparency validation
ios hooking search classes CT
ios hooking search classes Certificate
关键概念
| 术语 | 定义 |
|---|---|
| Frida | 动态插桩工具包,可将 JavaScript 引擎注入目标进程,从而支持对 iOS 应用行为进行运行时挂钩、跟踪和修改 |
| Objection | 基于 Frida 构建的运行时移动探索工具包,为常见安全测试提供预置命令,包括 keychain dump、SSL 固定绕过和方法挂钩 |
| SSL Pinning | 客户端证书验证,用于限制应用信任哪些 TLS 证书,从而阻止基于代理的流量拦截;可通过挂钩信任评估函数来绕过 |
| Keychain | 用于凭据和令牌的 iOS 安全存储 API;其中的项目具有可访问性属性,用于控制何时可读取它们(例如仅在设备解锁时) |
| IPA | iOS App Store Package;一种 ZIP 归档文件,包含应用二进制文件、框架、资源和描述文件,可提取用于静态分析 |
| OWASP MASTG | 移动应用安全测试指南;按 MASVS 验证类别组织的 iOS 和 Android 安全测试综合方法论 |
| Frida Gadget | 注入 IPA 的共享库(.dylib),用于非越狱测试;无需越狱设备即可启用 Frida 插桩 |
| Method Swizzling | Objective-C 运行时技术,可在运行时交换方法实现;Frida 使用它来拦截和修改方法行为 |
工具与系统
- Frida:动态插桩框架,可在运行时将 JavaScript 注入原生应用进程
- Objection:基于 Frida 的高级移动安全工具包,提供预置的探索命令
- frida-tools:命令行实用工具,包括 frida-ps(进程列表)、frida-trace(方法跟踪)、frida-discover(API 发现)
- Burp Suite:HTTP/HTTPS 拦截代理,用于在绕过 SSL pinning 后分析应用流量
- ideviceinstaller:跨平台命令行工具,用于通过 USB 安装和管理 iOS 应用
- otool / rabin2:二进制分析工具,用于检查 Mach-O 头、链接的库和加密信息
- Cycript / Frida REPL:交互式控制台,用于探索 Objective-C 运行时并修改内存中的对象
常见陷阱
- Frida 检测导致应用崩溃:部分应用通过扫描 frida-server 进程名、Frida 的 RPC 端口或 gadget 签名来实现 Frida 检测。使用
--startup-command在检测检查执行前将其 hook,或重命名 frida-server 二进制文件。 - Keychain 范围限制:Objection 只能访问应用 keychain 访问组内的 keychain 项。系统范围的 keychain 项需要 jailbreak 级别的工具,如 keychain-dumper。
- Swift 名称混淆:Swift 方法名在 Objective-C 运行时中被混淆。使用
ios hooking list classes并 grep 反混淆后的名称,或使用带通配符模式的 frida-trace。 - App Transport Security 强制实施:即使绕过 SSL pinning,ATS 仍可能阻止你的代理连接。验证 Info.plist 中的 ATS 配置允许你的代理证书链。
- 代码签名失效:用 Frida Gadget 修补 IPA 会使原始代码签名失效。你需要有效的 Apple Developer 证书来重新签名修补后的 IPA。
- 非持久性修改:所有 Frida/Objection hook 仅在运行时有效,应用重启后即重置。立即记录发现并捕获证据。
输出格式
## Finding: Insecure Keychain Storage with kSecAttrAccessibleAlways
**ID**: IOS-001
**Severity**: High (CVSS 7.5)
**OWASP MASTG**: MASTG-TEST-0055 (Testing Data Storage)
**MASVS Category**: MASVS-STORAGE
**Description**:
The application stores OAuth refresh tokens in the iOS Keychain with
the accessibility attribute kSecAttrAccessibleAlways, making them
readable even when the device is locked or after a reboot without
user authentication.
**Proof of Concept**:
1. Attach Objection to com.target.app: objection --gadget com.target.app explore
2. Execute: ios keychain dump
3. Observe refresh_token item with Accessible: kSecAttrAccessibleAlways
4. Token value is accessible without device unlock
**Impact**:
An attacker with physical access to a locked device or forensic
image can extract OAuth refresh tokens and gain persistent access
to the user's account without knowing device passcode.
**Remediation**:
Store sensitive credentials with kSecAttrAccessibleWhenUnlockedThisDeviceOnly
and enable biometric protection via kSecAccessControlBiometryCurrentSet.
评论
支持 Markdown