本节摘要:移动设备易丢失、网络不可信、Android 碎片化、权限模型复杂、多渠道分发——这些不是「小麻烦」,而是威胁模型里的硬约束。本节对照桌面/Web,帮你在设计评审里拒绝「照搬服务端方案到客户端」。
SOURCE 1.2 列出移动相对传统应用的核心差异:
| 挑战 | 典型现场 | 设计对策 |
|---|---|---|
| 设备碎片化 | Android 10–14 并存,厂商 ROM 差异 | 最低 SDK + 安全 API 降级策略 |
| 物理可访问 | 手机落出租车,锁屏 PIN 被 shoulder surfing | 全磁盘加密 + 生物识别 + 远程擦除 |
| 不可信网络 | 机场 Wi-Fi 伪造 AP | TLS 1.2+、Pinning、禁止明文 HTTP |
| 资源限制 | 电量/CPU 限制强加密轮数 | 硬件 Keystore、会话密钥协商 |
| 权限复杂 | 用户点「允许一次」后忘记 | 运行时权限 + 最小权限声明 |
| 分发多样 | 第三方商店侧载 APK | 签名校验、Play Integrity / App Attest |
| 后台生命周期 | 进程被杀,Token 仍在磁盘 | 短 TTL + 安全存储 + 前台刷新 |

同一套 WebView.addJavascriptInterface 在 Android 4.x 曾导致远程代码执行;老系统用户未升级,开发者若未设 minSdkVersion 或未禁用危险接口,等于为攻击者保留时间窗口。挑战不是「测几台旗舰机」,而是:
Build.VERSION.SECURITY_PATCH)纳入风控移动设备在蜂窝与 Wi-Fi 间漫游。SOURCE 指出:很多公共热点无加密或使用恶意 DNS。对策:
<!-- Android Network Security Config:禁止明文 --> <network-security-config> <base-config cleartextTrafficPermitted="false" /> </network-security-config>
iOS 侧 App Transport Security (ATS) 默认要求 HTTPS;NSAllowsArbitraryLoads 需强理由才能在 App Store 过审。
App 进入后台可能被系统回收,但磁盘上的 Session 不会自动消失。若 Token 无过期、无绑定设备指纹,捡到手机的人可在 App 恢复后继续操作。
| 症状 | 排查 |
|---|---|
| 杀进程后仍「已登录」 | Token TTL 与 Refresh 策略 |
| 切换账号残留上一用户数据 | 注销时清 Secure Storage |
| 截图里敏感信息 | FLAG_SECURE / iOS 防录屏 |
⚠️ 常见坑:只在「前台 Activity」做权限检查,后台 Service 仍读通讯录。
💡 关键直觉:移动威胁模型默认设备与网络均不可信——服务端才是信任锚点。
下一节用 CIA 与纵深防御把这些挑战收敛成可执行原则。
七项挑战本质上把威胁模型钉死了:设备可能物理失窃、网络默认不可信、系统版本不齐、资源有限、权限易被滥用、分发渠道多样、生命周期不可控。设计时把它们当作硬约束而不是「小概率事件」。举例:碎片化要求按最低支持版本做矩阵测试,并跟踪安全补丁级别;不可信网络要求 HTTPS 成为硬门槛,Pinning 用于关键业务;后台生命周期要求会话状态与密钥生命周期显式管理。
<!-- 约束落地:Android 明文流量一律禁止 --> <network-security-config> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
把约束写进代码评审清单,比口头强调有效。评审时逐条核对:是否禁明文、是否验证书、Token 是否加密存储、注销是否擦除、后台是否最小化权限调用。
| 挑战 | 设计约束 | 评审项 |
|---|---|---|
| 设备丢失 | 加密+远程擦除 | 全盘加密开启 |
| 不可信网络 | TLS1.2+ | 禁明文配置 |
| 碎片化 | 最低SDK矩阵 | 补丁级别跟踪 |
| 权限滥用 | 运行时最小权限 | 声明与用途一致 |
设备丢失是移动特有的高概率威胁,值得把整个剧本走一遍:手机被偷后,攻击者可能尝试解锁屏幕、备份数据、导出应用沙箱、在 Root 设备上直接读文件。防线依次是:锁屏与生物识别拖延解锁、全磁盘加密挡住冷启动读取、Keystore/Keychain 让密钥不可导出、远程擦除与账号下线让数据即使被读出也无法使用。任何一环缺失,链条就会断开。测试时请用一台已解锁且 Root 的设备模拟最坏情况,验证「拿到设备能否读到 Token、能否用它调接口」。
| 环节 | 防线 | 验证 |
|---|---|---|
| 解锁 | 锁屏+生物识别 | 强制 PIN |
| 读取 | 全磁盘加密 | 冷启动无明文 |
| 解密 | Keystore/Keychain | 密钥不可导出 |
| 使用 | 短 TTL+设备绑定 | 换机即失效 |