OWASP 类别: MASVS-CODE:代码质量
概述
应用备份旨在保存用户数据,以便稍后将其恢复到新设备或在数据丢失的情况下进行恢复。关于应用备份的现有安全建议比较细致,因 Android 版本和设备制造商而异。共同点是这些建议旨在确保不会泄露任何敏感数据。
标准 Android 备份系统为应用将数据备份到云端或通过自动备份(默认启用,无需任何操作即可实现,也可以扩展)和键值备份将数据传输到新设备提供了最安全、最可靠且最简单的解决方案。我们建议使用此解决方案,因为它将生成的备份数据存储在其他第三方应用无法访问的目录中,并有助于实现静态加密、传输加密以及允许从备份中排除敏感数据的配置。
如果应用实现的备份解决方案不依赖于标准 Android 备份系统,则可能会增加因错误导致敏感数据泄露的可能性。非标准备份解决方案将用户数据暴露于泄露的示例包括提供“导出”或“备份”功能的应用,这些功能会在其他应用可读的目录中创建应用数据的副本,因此容易泄露(直接或通过其他漏洞)。
影响
在设置应用备份时遵循安全建议可以防止潜在的敏感数据泄露。根据实际数据和攻击者的意图,敏感数据泄露可能导致信息泄露、用户模拟和经济损失。
缓解措施
使用标准 Android 备份系统
标准 Android 备份系统始终对传输中和静止状态下的备份数据进行加密。无论使用哪个 Android 版本,以及您的设备是否设置了锁屏,都会应用此加密。从 Android 9 开始,如果设备设置了锁屏,则备份数据不仅会被加密,而且会使用 Google 无法访问的密钥进行加密(锁屏密码保护加密密钥,从而实现端到端加密)。
如果您的备份包含特别敏感的数据,我们建议您要么排除这些数据,要么(如果无法排除)要求端到端加密,如下节所述。
从备份中排除数据
您可以使用规则文件指定要从备份中排除哪些数据,该文件通常称为backup_rules.xml
,并放置在res/xml
应用程序文件夹中。根据使用的 Android 版本,备份规则的配置方式略有不同。
- 对于 Android 12(API 级别 31)及更高版本,请在
AndroidManifest.xml
中的<application>
元素中添加android:dataExtractionRules
属性。 - 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 及更低版本,请在
AndroidManifest.xml
中的<application>
元素中添加android:fullBackupContent
属性。 - 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 备份服务备份键值对
- 控制 Android 12 或更高版本上的备份
- 控制 Android 11 及更低版本上的备份
- 了解 Google 合同和策略中的 PII
- 测试备份和恢复
- 密码学
- Android 密钥库系统
- ADB
- 开发者选项