备份的安全建议

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> 属性,系统会在点对点迁移期间传输所有应用数据。请务必注意,即使目标应用以 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 备份系统

如果您无法使用 Standard Android Backup 系统,则需要安全地存储备份数据,同时指定要从备份中排除的数据更为复杂。这需要在代码级别指定,因此容易出错,存在数据泄露风险。在这种情况下,我们还建议您定期测试实现,以确保预期的备份行为没有发生任何变化。

资源