本节摘要:移动应用安全保护代码逻辑、本地敏感数据、与后端通信、设备权限交互及越狱/Root 运行环境。SOURCE 强调一旦漏洞被利用,可触发身份盗窃、PCI 罚款与品牌声誉连锁崩塌——本节用后果链图把「技术漏洞」翻译成业务语言。
某社交 App 把 refresh token 存在未加密 SQLite,取证人员用 sqlite3 直接读出——攻击面不在服务器,而在用户口袋里的设备。移动应用安全(Mobile Application Security)是一套技术、流程与实践,目标是:

SOURCE 1.1.2 从六个维度论证:
| 维度 | 移动特有后果 | 法规/标准 |
|---|---|---|
| 用户数据 | 身份盗窃、金融欺诈 | GDPR 最高 4% 全球营收罚款 |
| 企业数据 | ERP/CRM 移动端成内网入口 | 个保法、等保 |
| 品牌信任 | 一次泄露上头条,用户转竞品 | — |
| 合规 | 未达 PCI DSS 可停收单 | PCI DSS、HIPAA |
| 财务 | 直接盗刷 + 事件响应 + 诉讼 | — |
| 设备被控 | 恶意 App 进僵尸网络 | — |
| 检查项 | 通过标准 |
|---|---|
| 敏感数据本地存储 | 无 Token/密码明文;用 Keystore/Keychain |
| 传输 | 全链路 HTTPS + 证书校验;关键 App 做 Pinning |
| 认证 | 服务端校验;客户端仅持有短期 Token |
| 日志 | 生产包无 android:debuggable=true |
| 依赖 | SBOM 扫描无 Critical CVE |
⚠️ 常见坑:把「上架应用商店」等同于「安全审计通过」——商店审核不替代 SAST/DAST。
💡 关键直觉:移动安全贯穿需求、设计、开发、测试、部署、运行全生命周期,不是发版前一周补洞。
下一节讨论移动相对 Web 难在哪里——碎片化与物理可访问性。
五层保护对象再往下走一步,是「给数据分类」。没有分类就无法确定每类数据的保护强度:公开信息、业务半敏感、账号敏感、支付与生物特征,应分等级并各自制定存储、传输、生命周期策略。先做数据清单,再决定保护手段,比反过来从工具入手靠谱。
# 数据资产分类清单(示例) 数据项: 设备号 | 分类: 半敏感 | 存储: 明文本地 | 生命周期: 卸载即清 数据项: 会话Token | 分类: 高敏感 | 存储: Keystore加密 | 生命周期: 注销即删 数据项: 银行卡PAN | 分类: 极高 | 存储: 不落客户端 | 生命周期: 仅内存短用
合规压力来自 GDPR、个保法、PCI DSS 等,但本质要求一致:能少收集就少收集,收集了要加密、要能删除。把「数据清单 + 保护强度」写进需求文档,是安全从文档走向落地的最小动作。
| 分类 | 示例 | 存储要求 | 传输要求 |
|---|---|---|---|
| 公开 | 版本号 | 无限制 | 无限制 |
| 半敏感 | 设备号 | 可明文 | HTTPS |
| 高敏感 | Token | Keystore | HTTPS+Pinning |
| 极高 | 生物特征 | 不落 App | 系统 API |
安全目标可以拆成三层:防泄露(机密性)、防篡改(完整性)、防不可用(可用性),落到业务上分别对应数据资产、业务逻辑、服务可用。评审时每一类数据都要标注它的 C/I/A 优先级,再决定保护投入。合规节奏建议按三个节点推进:上架前完成数据清单与隐私政策核对,发版时跑一次安全扫描门禁,运营期按季度复查第三方 SDK 与漏洞。把安全从「一次突击」改成「三个节点」的节奏,成本更低且可预期。
| 节点 | 动作 | 交付物 |
|---|---|---|
| 上架前 | 数据清单+政策核对 | 隐私清单 |
| 发版时 | SAST/DAST 门禁 | 扫描报告 |
| 运营期 | SDK 与漏洞复查 | 依赖台账 |