跳转至

2025版 iOS与Android移动应用程序安全清单

保护源代码

  • 基于最小特权原则的代码访问控制;受保护的分支和强制审查。
  • 集成到 CI/CD 中的静态分析和机密扫描;在发现高危漏洞时阻止合并。
  • 开发者工作站卫生以及针对存储库和构建制品的防止数据丢失 (DLP) 措施。
  • 依赖项和供应链卫生(锁定版本、持续监控)。
  • 使用专用的机密管理工具(例如 HashiCorp Vault、AWS Secrets Manager 或 GitHub Secrets),而不是将机密存储在 .env 文件或配置文件中。
  • 保护制品存储库中的构建制品,控制访问权限,并将构建提升到生产环境。
  • 没有硬编码的机密,没有不安全的加密默认值,保持一致的代码审查覆盖率。

身份验证 (MFA) 和会话安全

  • 多因素身份验证 (MFA),在可能的情况下首选基于应用程序或推送的因素,而不是 SMS。
  • 针对敏感操作的帐户锁定和升级身份验证 (step-up authentication)。
  • 会话卫生:短期令牌、刷新令牌 (refresh tokens) 的安全存储以及稳健的注销/轮换流程。
  • OTP 重用保护、一致的锁定阈值以及抵御暴力破解和重放攻击的能力。

端到端加密通信 (TLS + 证书固定)

  • 强制执行现代 TLS;不允许明文端点和协议降级。
  • 实施 SSL/TLS 证书固定以降低不受信任网络上的 MITM 风险。
  • 验证所有证书并在验证错误时执行故障关闭 (fail closed)。
  • 不允许混合内容或回退 (fallback) 到不安全的传输方式;制定计划的固定轮换机制和紧急取消固定路径。

渗透测试和持续的安全测试

  • 将自动扫描与专家主导的手动测试相结合,以查找业务逻辑缺陷。
  • 包含特定于移动设备的攻击向量:侧信道攻击 (side-channel)、内存转储 (memory dumps)、本地权限提升以及进程间通信 (IPC) 漏洞利用。
  • 包含对特定应用程序功能的测试,如深层链接 (deep linking)、自定义 URL 方案和意图处理程序 (Android intent handlers),以识别授权绕过或数据泄漏。
  • 包含反映真实攻击者行为的暴力破解、模糊测试 (fuzzing) 和注入测试。
  • 将发现结果视为具有修复 SLA 的待办事项;重新测试并捕获关闭证据。
  • 涵盖身份验证、会话管理、存储、API 调用和客户端保护的测试覆盖率。

API 安全治理

  • 维护所有移动设备使用的 API 的清单,包括文档和所有者。
  • 强制执行强大的身份验证和授权;应用最小特权原则 (PoLP)。
  • 添加中介(网关策略)、速率限制 (rate limiting)、输入验证以及一致的日志记录/监控。
  • 防止损坏的对象级别授权 (IDOR)、注入缺陷和错误配置。

运行时保护 (RASP) 和防篡改

  • 检测越狱/root、钩子框架、附加的调试器和模拟器使用。(请注意,针对越狱/root 的运行时检查并不完美;复杂的攻击者可以绕过静态检查)。
  • 适应性响应:阻止、降低功能或提示重新验证;始终记录信号。
  • 运行时检查不能轻易被绕过;在良性条件下,响应措施不会损害用户体验 (UX)。

安全的数据存储 (Keychain/Keystore)

  • 绝不以明文形式存储机密;使用平台密钥库 (keystores) 存储凭据和密钥。
  • 使用现代算法在服务器端对密码进行哈希和加盐处理;加密处于静态的敏感记录。
  • 保护备份和临时存储;对敏感数据实施安全删除。
  • 敏感数据不会出现在日志、屏幕截图、缓存或未加密的备份中。

日志记录、监控和事件响应准备

  • 为敏感操作和状态更改创建审计跟踪;集中遥测。
  • 针对异常行为和失败的安全检查发出警报;定期调查和调整。
  • 维护操作手册 (runbooks) 并练习事件演练以减少检测/响应时间。
  • 日志避免敏感数据暴露,同时保留足够的上下文以供调查。

更新、依赖项和最低操作系统策略

  • 将软件成分分析 (SCA) 工具集成到 CI/CD 中,以在提交时捕获易受攻击的依赖项。使用锁文件(Podfile.lockpackage-lock.jsongradle.lock)确保可重现的构建并防止传递依赖项的意外。
  • 频繁发布更新;快速修补易受攻击的 SDK 和第三方依赖项。
  • 定义并审查最低操作系统版本策略;淘汰不安全的操作系统版本并向用户发送明确的通知。
  • 为重要的安全更新提供应用内提示。
  • 不使用会削弱安全性的已弃用 (deprecated) API;对依赖项风险进行监控并采取措施。

逆向工程保护

  • 应用代码混淆、符号剥离和防篡改检查。
  • 检测常见的动态检测 (dynamic instrumentation) 尝试并做出适当反应。
  • 加密敏感的本地资产;在启动和运行时验证应用程序的完整性。
  • 通过多层保护措施来减缓攻击者的速度并增加其攻击成本,而不会损害性能。

合规性和审计就绪情况

  • 将您的清单映射到公认的移动安全要求和行业需求。
  • 维护证据:策略、测试报告、重新测试确认和变更日志。
  • 在适用时考虑行业义务(隐私和金融部门指南)。
  • 能够在审计或评估期间证明控制覆盖范围和发现结果的关闭情况。

90 天安全强化路线图

graph TD H1["<b>第 1-2 周:基线与策略</b>"] A1["清点应用程序、SDK、API<br/>记录数据流和威胁路径"] A2["发布代码、机密和加密策略<br/>启用 SAST 和机密扫描"] H2["<b>第 3-6 周:核心强化</b>"] B1["强制执行 TLS 和证书固定<br/>记录轮换和紧急取消固定方案"] B2["强化身份验证和会话管理<br/>锁定和 OTP 处理"] B3["集中日志并启用运行时检查<br/>Root/越狱/钩子检测"] H3["<b>第 7-10 周:深度与覆盖率</b>"] C1["API 测试:授权、注入、IDOR"] C2["强化存储:Keystore/Keychain<br/>加密记录和安全删除"] C3["模糊测试和负面测试<br/>开始按季度进行渗透测试"] H4["<b>第 11-13 周:保障与扩展</b>"] D1["混淆和防篡改检查"] D2["重新测试发现并维护证据<br/>审查最低操作系统策略"] D3["发布变更日志和最后更新标记"] H1 --> A1 --> A2 --> H2 --> B1 --> B2 --> B3 --> H3 --> C1 --> C2 --> C3 --> H4 --> D1 --> D2 --> D3 classDef phase fill:#D5E4F2,stroke:#333,stroke-width:2px,color:#000,font-weight:bold classDef task fill:#E8F4F8,stroke:#666,stroke-width:1px,color:#000 class H1,H2,H3,H4 phase class A1,A2,B1,B2,B3,C1,C2,C3,D1,D2,D3 task

应避免的常见陷阱

  • 将令牌或 PII 以明文形式存储(日志、缓存、备份)。
  • 仅信任客户端验证;没有服务器端授权。
  • 忽视对第三方 SDK 的审计。
  • 固定 (pinning) 但没有安全的轮换机制或紧急取消固定措施。
  • 授权薄弱 → IDOR / 权限提升。
  • 过度依赖单一的运行时检查,而不是深度防御(多层防御)。
  • 将一次渗透测试视为结束,而没有进行重新测试和提供证据。

快速核对表

领域 要求
代码与 CI 静态分析 + 机密扫描;受保护的分支和强制审查
身份验证与会话 尽可能使用 SMS 以外的 MFA;锁定;短期令牌和安全存储
传输 强制执行现代 TLS;具有计划轮换和安全回退机制的证书固定
API 清单;PoLP;速率限制;授权中间件;一致的日志记录
测试 自动扫描 + 专家渗透测试;模糊测试;附带证据的重新测试
运行时 Root/越狱/钩子/调试器检测;适应性响应
存储 Keystore/Keychain 的使用;加密记录;安全删除;备份保护
可观测性 集中式日志;警报;操作手册;定期演练
更新 依赖项和 SDK 卫生;清晰的最低操作系统策略
逆向工程 混淆;防篡改;完整性检查;加密资产
合规性 映射控制、证据库、变更日志和“最后更新”徽章