逆向工程实战手册 第 88 章

第 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 域组织

动手练习

  1. 用 MobSF 扫描一个测试 App,分析它的静态报告(存储/网络/组件风险)。
  2. 对一个测试 App 完成"数据存储"测试:SharedPreferences/数据库/logcat 找敏感数据。
  3. 用 Frida 绕过测试 App 的本地认证校验(patch 返回值)。
  4. 按 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 官方文档(完整清单)