第 88 章 移动应用安全测试方法论(OWASP MASTG)
前面 10/11/47/48 章是"移动逆向视角";本章是"安全测试方法论视角"(OWASP MASTG):不只是逆向 App,而是系统地评估它的安全——数据存储、通信、认证、客户端逻辑、平台交互。这是移动渗透测试(而非仅逆向)的完整框架。
📍 知识点地图 | 主题:移动MASTG | 前置:第10-11章 | 后续:— | 核心概念:六域测试、存储/网络/认证、加固
88.1 OWASP MASTG 框架(先懂全貌)
MASTG(Mobile Application Security Testing Guide)五大域:
1. 数据存储与隐私(MASVS-STORAGE)
2. 密码学(MASVS-CRYPTO)
3. 认证与会话(MASVS-AUTH)
4. 网络通信(MASVS-NETWORK)
5. 平台交互(MASVS-PLATFORM)
6. 代码质量与防篡改(MASVS-RESILIENCE)
威胁模型:
谁攻击: 本地攻击者/远程攻击者/恶意 App/物理访问
目标: 数据/凭据/业务逻辑/品牌
88.2 测试环境搭建(先准备好)
Android:
□ 模拟器/真机(root 或 Magisk)
□ Frida/Objection(第 6 章)
□ Burp/mitmproxy(流量,第 88.5)
□ 证书安装(用户证书→系统证书)
□ MobSF(自动化静态+动态分析)
iOS:
□ 越狱设备或免越狱 Gadget(第 48 章)
□ frida-ios-dump(解密)
□ 同 Android 的流量方案
88.3 数据存储测试(MASVS-STORAGE,高频漏洞区)
检查点:
□ 明文敏感数据: SharedPreferences/数据库/文件(密码/Token)
Android: /data/data/<pkg>/ 下的文件
iOS: App 容器/Documents/Keychain
□ 日志泄露: Logcat/系统日志中的敏感信息
□ 缓存: WebView 缓存/图片缓存/剪贴板
□ 备份: android:allowBackup=true → adb backup 拿数据
□ 键盘记录防护: 输入类型/截屏防护
□ Keychain/Keystore 使用: 是否把密钥明文存文件
工具:
adb shell run-as <pkg> cat /data/data/<pkg>/shared_prefs/*.xml
objection: env / sqlite connect
MobSF 静态扫描(自动标出存储风险)
88.4 密码学测试(MASVS-CRYPTO)
检查点:
□ 弱算法: MD5/SHA1/DES/RC4(明文可逆/可碰撞)
□ 硬编码密钥: 反编译找硬编码 key(第 10/11 章)
□ 自定义加密: DIY 加密(第 9 章模式识别)
□ 密钥存储: 明文文件 vs Keystore/Keychain
□ 随机数: 可预测(影响 Token/IV)
□ TLS 实现: 证书校验是否被禁用
工具:
jadx/class-dump 找硬编码(静态)
Frida Hook 加密函数(动态拿密钥,第 6 章)
objection: android keystore list
88.5 网络通信测试(MASVS-NETWORK)
检查点:
□ 明文 HTTP(敏感数据明文传输)
□ 证书校验缺失/可绕过(SSL Pinning 绕过,第 6 章)
□ 主机名校验缺失(中间人)
□ 敏感数据进 URL/Header(日志/Referer 泄露)
□ WebSocket/gRPC 通信(第 66 章)
□ 第三方 SDK 通信(埋点/广告——常被忽略的泄露点)
流程:
1. 代理配置(Burp/mitmproxy)
2. 证书安装(CA 信任)
3. SSL Pinning 绕过(Objection 一行)
4. 全流量观察(登录/支付/敏感操作)
5. 记录: 哪些数据明文/可拦截
88.6 认证与会话测试(MASVS-AUTH)
检查点:
□ 弱认证: 无锁定/弱密码策略
□ 会话管理: Token 有效期/可预测/绑定设备?
□ 本地认证绕过: 本地密码校验(可 patch 跳过,第 10 章 smali)
□ 生物识别: 是否仅本地(可绕过)
□ 登录逻辑: 响应差异/重放/暴力(第 59 章)
□ Token 存储: 明文/可提取(配合 88.3)
□ 两步验证绕过: 客户端校验(非服务端)
测试:
Frida 改本地校验返回值(第 6 章)
Burp 重放 Token/改参数
patch smali 跳过本地认证(第 10 章)
88.7 平台交互测试(MASVS-PLATFORM)
检查点:
□ 组件暴露(Android): exported 组件(第 10 章 manifest)
- Activity/Service/BroadcastReceiver 未保护
- Intent 注入/越权调用
□ Deep Link/URL Scheme: 可被劫持/注入
□ WebView: JavaScript 接口暴露(RCE 风险)/https 校验
□ 剪贴板/共享: 敏感数据泄漏
□ 输入校验: 客户端侧注入(SQLite/命令)
□ 更新机制: 更新包校验(篡改更新)
测试:
adb shell am start -n <pkg>/.<Activity>(直接启动组件)
Frida 追踪 Intent/WebView
manifest 审计(第 10 章 manifest-summary)
88.8 防篡改与加固测试(MASVS-RESILIENCE)
检查点:
□ Root/越狱检测: 是否有 + 能否绕过(第 8 章方法论)
□ 调试检测: 反调试(第 8 章)
□ 完整性校验: 签名/哈希自校验
□ 加固: 加壳(第 47 章)/混淆(第 40 章)
□ 模拟器检测: 风控类常见
评估:
绕过难度(决定客户端防护强度)
防护覆盖面(检测了哪些维度)
绕过后的影响(业务是否完全依赖客户端安全)
88.9 完整测试流程(端到端)
1. 侦察: App 基本信息/技术栈/加固(第 10/11 章)
2. 静态: MobSF + 手工反编译(密钥/硬编码/组件暴露)
3. 动态: Frida/Objection(运行时观察/绕过)
4. 网络: 代理全流量(明文/证书/pinning)
5. 存储: 数据文件检查(明文敏感数据)
6. 认证: 登录/会话/Token 测试
7. 平台: 组件/WebView/Deep Link
8. 加固: 检测绕过评估
9. 报告: 按 MASTG 域组织发现
88.10 检查清单
□ 环境就绪(root/Frida/代理)
□ 数据存储(明文/日志/备份/Keychain)
□ 密码学(弱算法/硬编码 key/随机数)
□ 网络(明文/证书/WebSocket/SDK)
□ 认证会话(Token/本地校验/生物)
□ 平台交互(组件/WebView/Deep Link)
□ 加固(root 检测/反调试/加壳)
□ 报告: 按 MASVS 域组织
动手练习
- 用 MobSF 扫描一个测试 App,分析它的静态报告(存储/网络/组件风险)。
- 对一个测试 App 完成"数据存储"测试:SharedPreferences/数据库/logcat 找敏感数据。
- 用 Frida 绕过测试 App 的本地认证校验(patch 返回值)。
- 按 MASTG 五域给一个测试 App 写完整测试报告。
深入阅读
- 仓库:
skills/mobile-reverse/SKILL.md(四阶段移动方法论) - 仓库:
skills/apk-reverse/references/apk-security-checklist.md(MASTG 安全清单) - 仓库:
skills/mobile-reverse/references/anti-detection-bypass.md(检测绕过) - 仓库:
skills/mobile-reverse/references/frida-objection-deep.md(动态测试) - 外部: OWASP MASTG 官方文档(完整清单)