MASTG-TEST-0009:敏感数据备份测试
概述¶
静态分析¶
本地¶
检查 AndroidManifest.xml
文件中是否存在以下标志
android:allowBackup="true"
如果标志值为 **true**,请确定应用程序是否保存任何类型的敏感数据(检查测试用例“测试本地存储中的敏感数据”)。
云端¶
无论您使用键/值备份还是自动备份,都必须确定以下内容
- 哪些文件被发送到云端(例如,SharedPreferences)
- 这些文件是否包含敏感信息
- 敏感信息在发送到云端之前是否已加密。
如果您不想与 Google Cloud 共享文件,您可以从自动备份中排除它们。 存储在设备上的静态敏感信息在发送到云端之前应进行加密。
- **自动备份**:您可以通过应用程序清单文件中的布尔属性
android:allowBackup
配置自动备份。自动备份 默认情况下,针对 Android 6.0(API 级别 23)的应用程序已启用此功能。您可以使用属性android:fullBackupOnly
在实现备份代理时激活自动备份,但此属性仅适用于 Android 6.0 及以上版本。 其他 Android 版本改为使用键/值备份。
android:fullBackupOnly
自动备份包括几乎所有应用程序文件,并在用户的 Google Drive 帐户中为每个应用程序存储高达 25 MB 的数据。 仅存储最新的备份;之前的备份将被删除。
- **键/值备份**:要启用键/值备份,您必须在清单文件中定义备份代理。 在
AndroidManifest.xml
中查找以下属性
android:backupAgent
要实现键/值备份,请扩展以下类之一
要检查键/值备份实现,请在源代码中查找这些类。
动态分析¶
执行所有可用的应用程序功能后,尝试通过 adb
进行备份。 如果备份成功,请检查备份存档中是否存在敏感数据。 打开终端并运行以下命令
adb backup -apk -nosystem <package-name>
现在 ADB 应该响应“现在解锁您的设备并确认备份操作”,并且应该在 Android 手机上要求您输入密码。 这是一个可选步骤,您无需提供。 如果手机没有提示此消息,请尝试以下包含引号的命令
adb backup "-apk -nosystem <package-name>"
当您的设备的 adb 版本早于 1.0.31 时,会出现此问题。 如果是这种情况,您还必须在主机上使用 1.0.31 的 adb 版本。 1.0.32 之后的 adb 版本破坏了向后兼容性。
通过选择*备份我的数据*选项,从您的设备批准备份。 备份过程完成后,文件 * .ab * 将位于您的工作目录中。 运行以下命令以将 .ab 文件转换为 tar。
tail -c +25 backup.ab |openssl zlib -d > backup.tar
如果您收到错误 openssl:Error: 'zlib' is an invalid command.
,您可以尝试使用 Python 代替。
tail -c +25 backup.ab | python -c "import zlib,sys;sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))" > backup.tar
Android 备份提取器是另一个替代备份工具。 要使该工具工作,您必须下载 Oracle JCE 无限制强度管辖策略文件,适用于 JRE7 或 JRE8 并将其放置在 JRE lib/security 文件夹中。 运行以下命令以转换 tar 文件
java -jar abe.jar unpack backup.ab
如果它显示一些密码信息和用法,这意味着它没有成功解压缩。 在这种情况下,您可以尝试使用更多参数
abe [-debug] [-useenv=yourenv] unpack <backup.ab> <backup.tar> [password]
[password]
是您之前在 android 设备上要求您输入的密码。 例如,这里是:123
java -jar abe.jar unpack backup.ab backup.tar 123
将 tar 文件解压到您的工作目录。
tar xvf backup.tar