# Conducting Mobile App Penetration Test

> 遵循 OWASP 移动应用安全测试指南（MASTG）对 iOS 和 Android 移动应用执行渗透测试，识别数据存储、网络通信、认证、密码学和平台专属安全控制中的漏洞。测试人员对应用二进制文件进行静态分析、运行时动态分析和 API 安全测试，以评估完整的移动攻击面。

- Skill: `killvxk/conducting-mobile-app-penetration-test` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/conducting-mobile-app-penetration-test`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/conducting-mobile-app-penetration-test/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/conducting-mobile-app-penetration-test

---

# 执行移动应用渗透测试

## 使用场景

- 在发布前测试移动应用，识别安全漏洞和数据保护问题
- 针对 OWASP MASVS（移动应用安全验证标准）L1 和 L2 级别进行合规评估
- 评估处理敏感数据的移动银行、医疗或政府应用的安全性
- 测试与后端 API 交互的移动应用，评估移动生态系统的端到端安全性
- 评估移动应用对逆向工程、篡改和运行时操控的抵抗力

**不适用场景**：未经应用程序所有者书面授权的移动应用测试、分发修改或重新打包的应用，或未使用单独测试构建版本测试公共应用商店中的应用。

## 前置条件

- 目标应用的 IPA（iOS）和 APK（Android）文件，或从私有分发渠道下载的访问权限
- 已 Root 的 Android 设备或模拟器（Genymotion、Android Studio AVD），并安装了 Frida、Objection 和 Magisk
- 已越狱的 iOS 设备或 Corellium 虚拟设备，并安装了 Frida、Objection 和 SSL Kill Switch
- 静态分析工具：jadx（Android 反编译）、Hopper/Ghidra（iOS 二进制分析）、MobSF（自动化扫描）
- Burp Suite Professional 配置为代理，拦截移动应用流量，并在测试设备上安装了 CA 证书

## 工作流程

### 步骤一：静态分析

在不执行应用的情况下分析应用二进制文件：

**Android 静态分析：**
- 反编译 APK：`jadx -d output/ target.apk` 获取 Java/Kotlin 源代码
- 检查 `AndroidManifest.xml` 中的导出组件（Activity、Service、Receiver、Content Provider）、权限和可调试标志
- 搜索硬编码的密钥：`grep -rn "api_key\|password\|secret\|token\|aws_" output/`
- 识别不安全的数据存储模式：包含敏感数据的 SharedPreferences、未加密的 SQLite 数据库、外部存储中的文件
- 检查 WebView 漏洞：`setJavaScriptEnabled(true)`、`addJavascriptInterface()` 和加载不受信任的内容
- 运行 MobSF 自动化扫描：`python manage.py runserver` 并上传 APK 进行自动化静态分析

**iOS 静态分析：**
- 解压 IPA 并定位 Mach-O 二进制文件
- 使用 `otool -L <binary>` 列出链接的框架并识别第三方库
- 使用 Ghidra 或 Hopper 分析硬编码的 URL、API 端点和嵌入的凭据
- 检查 Info.plist 中允许不安全 HTTP 连接的 App Transport Security（ATS）例外情况
- 检查嵌入式权利中的过度能力

### 步骤二：网络安全测试

拦截并分析所有网络通信：

- 在测试设备上将 Burp Suite 配置为代理，并安装 Burp CA 证书
- 演练所有应用功能，同时 Burp 捕获 API 流量
- **SSL/TLS 验证**：验证应用是否正确验证服务器证书。如果应用通过代理连接失败，则可能实现了证书固定
- **证书固定绕过**：
  - Android：使用 Frida 脚本：`frida -U -f com.target.app -l ssl-pinning-bypass.js --no-pause`
  - iOS：使用 SSL Kill Switch 或 Objection：`objection -g "Target App" explore --startup-command "ios sslpinning disable"`
- **API 流量分析**：检查所有 API 调用：
  - 未加密传输的敏感数据
  - URL 参数中的认证令牌（在日志中可见）
  - API 响应中超出 UI 显示的过量数据
  - API 端点缺少或弱认证
- **WebSocket 和自定义协议**：检查可能绕过标准代理拦截的非 HTTP 通信渠道

### 步骤三：数据存储分析

测试不安全的本地数据存储：

**Android 数据存储：**
- 访问应用数据目录：`/data/data/com.target.app/`
- 检查存储凭据、令牌和 PII 的 SharedPreferences XML 文件
- 检查 SQLite 数据库：`sqlite3 /data/data/com.target.app/databases/*.db ".dump"`
- 检查应用日志中的敏感数据：`logcat -d | grep -i "password\|token\|key"`
- 验证应用数据是否从备份中排除：AndroidManifest.xml 中的 `android:allowBackup="false"`
- 检查剪贴板中的敏感数据泄露

**iOS 数据存储：**
- 检查钥匙串中存储的凭据：`objection -g "Target App" explore`，然后 `ios keychain dump`
- 检查 NSUserDefaults/plist 文件：`find /var/mobile/Containers/Data/Application/ -name "*.plist" -exec plutil -p {} \;`
- 检查 SQLite 数据库和 Core Data 存储中未加密的敏感数据
- 检查通过截图泄露数据（iOS 在应用后台化时捕获截图）
- 验证数据保护类：敏感文件应使用 NSFileProtectionComplete

### 步骤四：认证和会话管理

测试移动端专属的认证控制：

- **生物特征绕过**：测试是否可以通过 Frida 挂钩认证回调使其始终返回成功来绕过生物特征认证
- **令牌存储**：验证认证令牌是否存储在钥匙串（iOS）或 Android Keystore 中，而非 SharedPreferences 或文件中
- **会话超时**：验证会话是否在合理的空闲超时后过期，以及令牌在注销后是否在服务端失效
- **Root/越狱检测绕过**：测试应用是否检测 Root/越狱设备，以及是否可以用 Frida 或 Magisk Hide 绕过检测
- **深度链接滥用**：测试自定义 URL 方案或通用链接是否可用于绕过认证或访问受限功能

### 步骤五：运行时操控

测试应用对运行时攻击的抵抗力：

- **Frida 挂钩**：使用 Frida 在运行时挂钩并修改应用函数：
  - 绕过 Root 检测：挂钩检测函数使其返回 false
  - 修改认证检查的返回值
  - 拦截加密函数，在加密前捕获明文数据
  - 通过挂钩 SSL 验证绕过证书固定
- **方法交换**（iOS）：使用 Frida 替换 Objective-C 方法实现
- **Intent 操控**（Android）：向导出的组件发送精心构造的 intent：`adb shell am start -n com.target.app/.InternalActivity -e "user_id" "admin"`
- **篡改检测**：修改 APK/IPA（添加代码、修改资源）、重新签名并安装。验证应用是否检测到篡改

## 核心概念

| 术语 | 定义 |
|------|------------|
| **OWASP MASTG** | 移动应用安全测试指南；涵盖 iOS 和 Android 平台的综合移动应用安全测试手册 |
| **证书固定** | 限制应用信任的 TLS 证书的移动安全控制，防止通过代理拦截实施中间人攻击 |
| **Frida** | 动态检测工具包，允许将 JavaScript 注入正在运行的进程，以挂钩函数、修改行为和绕过安全控制 |
| **Root/越狱检测** | 应用层面的检查，用于检测设备是否已被修改以授予 Root 访问权限，通常会阻止在已入侵设备上使用应用 |
| **Android Keystore** | Android 上的硬件支持凭据存储，保护密钥和密钥免受提取，即使在 Root 设备上 |
| **App Transport Security（ATS）** | iOS 安全功能，默认强制执行 HTTPS 连接；ATS 例外可能表示不安全的网络通信 |
| **深度链接** | 打开移动应用内特定界面的 URL 方案，如果未正确验证，可能绕过正常导航和认证流程 |

## 工具与系统

- **Frida / Objection**：动态检测工具，用于挂钩函数、绕过安全控制和在运行时操控应用行为
- **MobSF（移动安全框架）**：针对 Android 和 iOS 应用的自动化静态和动态分析平台
- **jadx**：Android 反编译器，将 APK 字节码转换为可读的 Java 源代码，用于手动代码审查
- **Burp Suite Professional**：HTTP 代理，用于在绕过证书固定后拦截和修改移动应用 API 流量

## 常见场景

### 场景：移动银行应用安全评估

**背景**：一家银行正在为 iOS 和 Android 推出新的移动银行应用。该应用处理账户查看、资金转账、账单支付和支票存款。由于处理金融数据，需要符合 OWASP MASVS L2 合规要求。

**方法**：
1. Android APK 的静态分析揭示了 API 端点、一个硬编码的预生产服务器 URL 和配置文件中的 AWS API 密钥
2. 证书固定已实现，但被 Frida SSL 固定绕过脚本绕过
3. API 流量分析发现余额检查端点返回与用户关联的所有账号，而非仅请求的账号
4. 本地数据存储分析发现应用在未加密的 SQLite 数据库中缓存最近 10 笔交易
5. 生物特征认证绕过：Frida 挂钩生物特征回调使其始终返回成功，无需指纹即可授予访问权限
6. Root 检测已实现但被 Magisk Hide 模块绕过，允许应用在 Root 设备上以完整数据访问权限运行

**常见陷阱**：
- 仅在模拟器上测试，遗漏硬件专属安全功能（Android Keystore 硬件支持、iOS Secure Enclave）
- 未同时测试 iOS 和 Android 版本，因为它们可能有不同的实现和不同的漏洞
- 忽略后端 API 安全（因为"单独测试过了"），而移动应用可能以不同于 Web 应用的方式调用 API 端点
- 未能测试证书固定绕过，导致网络分析不完整

## 输出格式

```
## 发现：通过 Frida 检测绕过生物特征认证

**ID**: MOB-003
**严重性**: 高（CVSS 7.7）
**平台**: Android 和 iOS
**OWASP MASVS**: MASVS-AUTH-2（生物特征认证）

**描述**:
移动银行应用的生物特征认证可以使用 Frida 动态检测绕过。
认证回调函数接受来自生物特征 API 的布尔结果，
可以被挂钩并强制返回 true，无需提供有效的指纹或人脸扫描。

**概念验证（Android）**:
frida -U -f com.bank.mobileapp -l bypass-biometric.js --no-pause

// bypass-biometric.js
Java.perform(function() {
  var BiometricCallback = Java.use("com.bank.mobileapp.auth.BiometricCallback");
  BiometricCallback.onAuthenticationSucceeded.implementation = function(result) {
    console.log("[*] 生物特征已绕过");
    this.onAuthenticationSucceeded(result);
  };
});

**影响**:
拥有已解锁设备物理访问权限的攻击者可以绕过生物特征认证，
访问受害者的银行账户、发起转账并查看金融数据，
而无需生物特征验证。

**修复建议**:
1. 使用与 Keystore 密钥绑定的 Android BiometricPrompt CryptoObject 实施服务端生物特征验证
2. 要求生物特征操作解密服务端质询，使客户端绕过无效
3. 添加运行时完整性检查以检测 Frida 和其他检测框架
4. 对高风险操作（超过阈值的转账）实施升级认证
```

