mcpField
P
performing-ios-app-security-assessment

performing-ios-app-security-assessment

github.com/mukul975安全35.2k82 次安装8 周前更新
代码仓库

关于 performing-ios-app-security-assessment

面向获授权的 iOS 应用安全测试人员,提供静态与运行时评估流程,使用 Frida 和 Objection 检查应用行为、存储和网络安全。内容包括 IPA 分析、证书固定绕过及 Keychain 检查。

主要功能

  1. 01静态分析 IPA 文件
  2. 02使用 Frida 和 Objection 进行运行时检查
  3. 03绕过 SSL 证书固定并拦截流量
  4. 04提取并审查 Keychain 数据
  5. 05检查应用存储与传输安全

适用场景

  1. 01按 OWASP MASVS/MASTG 测试应用
  2. 02检查凭据是否安全存储
  3. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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;其中的项目具有可访问性属性,用于控制何时可读取它们(例如仅在设备解锁时)
IPAiOS App Store Package;一种 ZIP 归档文件,包含应用二进制文件、框架、资源和描述文件,可提取用于静态分析
OWASP MASTG移动应用安全测试指南;按 MASVS 验证类别组织的 iOS 和 Android 安全测试综合方法论
Frida Gadget注入 IPA 的共享库(.dylib),用于非越狱测试;无需越狱设备即可启用 Frida 插桩
Method SwizzlingObjective-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