本技能用于对 iOS 和 Android 移动应用执行渗透测试,遵循 OWASP 移动应用安全测试指南(MASTG),以识别安全漏洞与数据保护问题。
适用场景
- 应用发布前测试,识别安全漏洞与数据保护问题
- 依据 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 证书
法律声明:本技能仅用于获得授权的安全测试与教育目的。未经授权针对您不拥有或未获书面许可测试的系统使用属非法行为,可能违反计算机欺诈相关法律。
工作流程
步骤 1:静态分析
在不执行应用的情况下分析应用二进制:
Android 静态分析:
- 反编译 APK:
jadx -d output/ target.apk获取 Java/Kotlin 源代码 - 审查 AndroidManifest.xml 中的导出组件(activities、services、receivers、content providers)、权限与 debuggable 标志
- 搜索硬编码密钥:
grep -rn "api_key\|password\|secret\|token\|aws_" output/ - 识别不安全的数据存储模式:含敏感数据的 SharedPreferences、未加密的 SQLite 数据库、外部存储中的文件
- 检查 WebView 漏洞:
setJavaScriptEnabled(true)、addJavascriptInterface()与加载不可信内容 - 运行 MobSF 自动化扫描,上传 APK 进行自动化静态分析
iOS 静态分析:
- 解压 IPA 并定位 Mach-O 二进制
- 使用
otool -L <binary>列出链接的框架并识别第三方库 - 使用 Ghidra 或 Hopper 分析硬编码 URL、API 端点与嵌入凭证
- 检查 Info.plist 中允许不安全 HTTP 连接的 App Transport Security(ATS)例外
- 审查嵌入的 entitlements 是否存在过度能力
步骤 2:网络安全测试
拦截并分析所有网络通信:
- 在测试设备上配置 Burp Suite 代理并安装 Burp CA 证书
- 在 Burp 捕获 API 流量时遍历所有应用功能
- SSL/TLS 验证:验证应用是否正确校验服务器证书。若无法通过代理连接,可能实现了证书固定(pinning)
- 证书固定绕过:
- Android:使用 Frida 脚本
frida -U -f com.target.app -l ssl-pinning-bypass.js --no-pause - iOS:使用 SSL Kill Switch 或 Objection
- Android:使用 Frida 脚本
- API 流量分析:审查所有 API 调用中的未加密敏感数据、URL 参数中的认证令牌、API 响应中超出 UI 显示的过多数据、API 端点缺失或较弱的认证
- WebSocket 与自定义协议:检查可能绕过标准代理拦截的非 HTTP 通信渠道
步骤 3:数据存储分析
测试不安全的本地数据存储:
Android 数据存储:
- 访问应用数据目录:
/data/data/com.target.app/ - 检查 SharedPreferences XML 文件中的凭证、令牌与 PII
- 检查 SQLite 数据库:
sqlite3 /data/data/com.target.app/databases/*.db ".dump" - 检查应用日志中的敏感数据:
logcat -d | grep -i "password\|token\|key" - 确认应用数据被排除在备份之外:AndroidManifest.xml 中
android:allowBackup="false" - 检查剪贴板是否泄露敏感数据
iOS 数据存储:
- 检查 Keychain 中存储的凭证:使用 objection 的
ios keychain dump - 检查 NSUserDefaults/plist 文件
- 检查 SQLite 数据库与 Core Data 存储中的未加密敏感数据
- 检查通过截图泄露数据(iOS 在应用后台化时截图)
- 验证数据保护等级:敏感文件应使用 NSFileProtectionComplete
步骤 4:认证与会话管理
测试移动特有的认证控制:
- 生物识别绕过:通过 Frida hook 认证回调使其始终返回成功,测试生物识别是否可被绕过
- 令牌存储:验证认证令牌存储在 Keychain(iOS)或 Android Keystore 中,而非 SharedPreferences 或文件中
- 会话超时:验证会话在合理空闲超时后过期,且登出时令牌在服务端失效
- Root/越狱检测绕过:测试应用是否检测 Root/越狱设备,以及检测能否用 Frida 或 Magisk Hide 绕过
- 深度链接滥用:测试自定义 URL scheme 或 universal links 能否绕过认证或访问受限功能
步骤 5:运行时操纵
测试应用对运行时攻击的抵抗能力:
- Frida hooking:使用 Frida 在运行时 hook 并修改应用函数,包括绕过 Root 检测、修改认证检查返回值、拦截加密函数获取明文数据、hook SSL 验证绕过证书固定
- 方法 swizzling(iOS):使用 Frida 替换 Objective-C 方法实现
- Intent 操纵(Android):向导出组件发送构造的 intent
- 篡改检测:修改 APK/IPA(添加代码、更改资源)、重新签名并安装,验证应用是否检测到篡改
关键概念
- OWASP MASTG:移动应用安全测试指南,覆盖 iOS 与 Android 的全面安全测试手册
- 证书固定:限制应用信任哪些 TLS 证书的移动安全控制,防止通过代理拦截的中间人攻击
- Frida:动态插桩工具包,可向运行进程注入 JavaScript 以 hook 函数、修改行为并绕过安全控制
- Root/越狱检测:应用层检查,检测设备是否被修改以授予 root 访问,通常在受损设备上阻止应用使用
- Android Keystore:Android 上硬件支持的凭证存储,即使在 Root 设备上也保护密钥与机密不被提取
- App Transport Security(ATS):iOS 安全特性,默认强制 HTTPS 连接;ATS 例外可能表明不安全的网络通信
- 深度链接:打开移动应用中特定屏幕的 URL scheme,若未正确校验可能绕过正常导航与认证流程
工具与系统
- Frida / Objection:动态插桩工具,用于 hook 函数、绕过安全控制并在运行时操纵应用行为
- MobSF(Mobile Security Framework):面向 Android 与 iOS 应用的自动化静态与动态分析平台
- jadx:Android 反编译器,将 APK 字节码转换为可读 Java 源代码以供人工代码审查
- Burp Suite Professional:HTTP 代理,在绕过证书固定后拦截并修改移动应用 API 流量
常见场景示例
场景:移动银行应用安全评估
背景:某银行推出新的 iOS 与 Android 移动银行应用,处理账户查看、转账、账单支付与支票存款。因涉及金融数据,需要 OWASP MASVS L2 合规。
方法:
- Android APK 静态分析发现 API 端点、硬编码的预发布服务器 URL 与配置文件中的 AWS API 密钥
- 实现了证书固定,但用 Frida SSL pinning bypass 脚本绕过
- API 流量分析发现余额查询端点返回用户关联的所有账号,而不仅是所请求的账号
- 本地数据存储分析发现应用将最近 10 笔交易缓存在未加密的 SQLite 数据库中
- 生物识别认证绕过:Frida hook 生物识别回调始终返回成功,无需指纹即可访问
- 存在 Root 检测,但用 Magisk Hide 模块绕过,使应用可在 Root 设备上运行并完全访问数据
常见陷阱:
- 仅在模拟器上测试,遗漏硬件特有的安全特性(Android Keystore 硬件支持、iOS Secure Enclave)
- 未同时测试 iOS 与 Android 版本,两者实现不同、漏洞可能不同
- 因后端 API“已单独测试”而忽略其安全,但移动应用调用 API 端点的方式可能与 Web 应用不同
- 未测试证书固定绕过,导致网络分析不完整
输出格式
发现结果按包含以下要素的格式呈现:ID、严重性(含 CVSS)、平台、OWASP MASVS 映射、描述、概念验证(PoC)、影响与修复建议。例如生物识别认证绕过发现(ID: MOB-003,严重性 High,CVSS 7.7,平台 Android 与 iOS,MASVS-AUTH-2),PoC 使用 Frida 脚本 hook 生物识别回调使其返回成功,修复建议包括服务端生物识别验证、绑定 Keystore 密钥、运行时完整性检查与高风险操作的分步认证。