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 系统,则需要安全地存储备份数据,同时指定要从备份中排除的数据更为复杂。这需要在代码级别指定,因此容易出错,存在数据泄露风险。在这种情况下,我们还建议您定期测试实现,以确保预期的备份行为没有发生任何变化。
资源
- allowBackup 属性说明
- 文件级加密
- D2D 传输行为变更
- 通过自动备份功能备份用户数据
- 使用 Android Backup Service 备份键值对
- 在 Android 12 或更高版本上控制备份
- 在 Android 11 及更低版本中控制备份
- 了解 Google 合同和政策中的个人身份信息
- 测试备份和恢复功能
- 加密
- Android 密钥库系统
- ADB
- 开发者选项