OWASP 类别: MASVS-CODE:代码质量
概览
应用备份旨在保留用户数据,以便日后将其恢复到新设备或在数据丢失的情况下恢复。关于应用备份的现有安全建议是微妙的,因 Android 版本和设备制造商而异。共同的主题是,这些建议旨在确保不泄露任何敏感数据。
标准 Android 备份系统为应用提供了一种最安全、最可靠且最简单的解决方案,可将数据备份到云端或通过自动备份(此功能默认启用,无需实施工作即可使用,且可进行扩展)和键值对备份将数据传输到新设备。我们建议使用此解决方案,因为它会将生成的备份数据存储在其他第三方应用无法访问的目录中,并且支持静态加密、传输中加密以及允许从备份中排除敏感数据的配置。
如果应用实施的备份解决方案不依赖于标准 Android 备份系统,则可能会增加因失误导致敏感数据泄露的可能性。将用户数据暴露于泄露风险的非标准备份解决方案示例包括提供“导出”或“备份”功能的应用,这些功能会在其他应用可读取的目录中创建应用数据的副本,因此容易被泄露(直接泄露或通过其他漏洞泄露)。
影响
在设置应用备份时遵循安全建议可防止备份中可能包含的敏感数据泄露。根据实际数据和攻击者的意图,敏感数据泄露可能导致信息泄露、用户身份冒用和财产损失。
缓解措施
使用标准 Android 备份系统
标准 Android 备份系统始终对传输中和静态的备份数据进行加密。无论使用的 Android 版本以及设备是否设置了锁屏,都会应用此加密。从 Android 9 开始,如果设备设置了锁屏,则备份数据不仅会加密,还会使用 Google 未知的密钥进行加密(锁屏密钥可保护加密密钥,从而实现端到端加密)。
如果您的备份包含特别敏感的数据,我们建议排除这些数据;如果您无法排除,则建议按照下一节所述要求进行端到端加密。
从备份中排除数据
您可以使用规则文件指定从备份中排除哪些数据,此文件通常名为 backup_rules.xml
并放置在应用的 res/xml
文件夹中。根据所使用的 Android 版本,备份规则的配置方式存在一些差异。
- 对于 Android 12 (API 级别 31) 及更高版本,请将
android:dataExtractionRules
属性添加到AndroidManifest.xml
中的<application>
元素。 - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
然后,根据应用的数据持久性和安全要求,按照更新的配置格式,配置 backup_rules.xml
文件。
backup_rules.xml
文件配置所需的格式允许开发者为云端和设备到设备 (D2D) 传输定义自定义备份规则。如果未设置 <device-transfer>
属性,则在 D2D 迁移期间将传输所有应用数据。需要强调的是,即使目标应用针对 Android 12 或更高版本,也应始终为运行 Android 11 (API 级别 30) 或更低版本的设备指定一个单独的文件,其中包含一组额外的备份规则。
- 对于 Android 11 及更低版本,请将
android:fullBackupContent
属性添加到AndroidManifest.xml
中的<application>
元素。 - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
然后,使用 备份用户数据 一文中报告的语法,根据应用的数据持久性和安全要求配置 backup_rules.xml
文件。
要求端到端加密
如果您无法从备份中排除敏感数据,则建议要求端到端加密,这意味着仅在 Android 9 或更高版本且设置了锁屏时才允许备份。您可以使用 requireFlags="clientSideEncryption"
标志来实现此目的,从 Android 12 开始,此标志需要重命名为 disableIfNoEncryptionCapabilities
并设置为 true
。
如果您无法使用标准 Android 备份系统
如果您无法使用标准 Android 备份系统,则安全地存储备份数据以及指定要从备份中排除哪些数据会更复杂。这需要在代码级别进行指定,因此容易出错,可能导致数据泄露。在这种情况下,还建议定期测试您的实现,以确保预期的备份行为没有发生变化。
资源
- allowBackup 属性的说明
- 基于文件的加密
- D2D 传输行为变更
- 使用自动备份备份用户数据
- 使用 Android Backup Service 备份键值对
- 在 Android 12 或更高版本上控制备份
- 在 Android 11 及更低版本上控制备份
- 了解 Google 合同和政策中的 PII
- 测试备份和恢复
- 加密技术
- Android Keystore 系统
- ADB
- 开发者选项