Android 属性 allowBackup 安全风险浅析
2016-04-05 22:12
483 查看
1. allowBackup 安全风险描述
Android API Level 8 及其以上 Android 系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的 allowBackup 属性值,其属性值默认是 True。当 allowBackup 标志为 true 时,用户即可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。Android 属性 allowBackup 安全风险源于 adb backup 容许任何一个能够打开 USB 调试开关的人从Android 手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;adb restore 容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他 Android 手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过 adb backup 和 adb restore 进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将 allowBackup 标志值设置为 false 来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。
2. allowBackup 安全影响范围
Android API Level 8 以及以上系统。3. allowBackup 安全风险详情
allowBackup 风险位置:AndroidMannifest.xml文件
android:allowBackup属性
allowBackup 风险触发前提条件:未将
AndroidMannifest.xml文件中的
android:allowBackup属性值设为
false
allowBackup 风险原理:当 allowBackup 标志值为 true 时,即可通过 adb backup 和 adb restore 来备份和恢复应用程序数据
4. allowBackup 详细风险 POC
不在AndroidManifest.xml文件设置 allowBackup 属性值,其默认值为
true,则应用可通过 adb 命令进行备份整个应用的数据AndroidManifest.xml 文件内容:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alibaba.jaq.allowbackuppoc" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:label="@string/app_name"> <activity android:name="LoginActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".HomeActivity"/> </application></manifest>该POC应用启动后如下左图所示与登录之后如下右图所示:
通过adb命令备份该应用登录之后的应用数据:
通过作者 Nikolay Elenkov 写的解密程序 Android Backup Extractor 解密出备份的文件
allowBackup.ab,可得知该 POC 应用的数据(登录用户名和密码)如下图所示:
在另外一台 Android 手机上,安装该 POC 应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:
恢复数据之前:
点击“恢复我的数据”,恢复数据之后,在没有输入用户名和密码的情况下,通过恢复数据,点击应用图标,直接进入登录状态:
在
AndroidManifest.xml文件显示设置 allowBackup 属性值为
false,即
android:allowBackup="false",则 Android 应用不可通过 adb 命令进行备份和恢复整个应用的数据AndroidManifest.xml文件内容:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alibaba.jaq.allowbackuppoc" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:allowBackup="false" android:label="@string/app_name"> <activity android:name="LoginActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".HomeActivity"/> </application></manifest>该POC应用启动后如下左图所示与登录之后如下右图所示:
通过adb命令备份该应用登录之后的应用数据:
通过解密出备份的文件”allowBackup.ab”,通过如下图所示可得知该POC应用的备份的数据为空,因此备份不成功:
在另外一台Android手机上,安装该POC应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:
恢复数据之前:
恢复数据之后,重新打开应用,发现没有直接进入登录状态:
5. allowBackup 风险修复建议
出于安全考虑,阿里聚安全建议关闭应用备份功能:在 AndroidMenifest.xml 文件中,将相应组件的“android:allowBackup”属性设置为
“false”,如下示例:
全选复制放进笔记<application android:allowBackup="false" android:label="@string/app_name"> <activity android:name="LoginActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".HomeActivity"/></application>
相关文章推荐
- 【Android】XML文件的解析
- Android startActivityForResult的使用
- Android Studio
- [android] 手机卫士应用程序更新和签名
- Android实现第三方登录
- android视图学习---从源码角度来理解onMeasure过程
- android fitsystemwindows简单使用
- 初步了解Android
- at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
- Android开发环境搭建
- android日常 游戏:跳舞男孩
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory AndroidStudio
- Android Studio导入项目
- 通过Android源代码分析startActivity()过程(上)
- Android学习方法
- Android动态加载—Res文件
- Android编程获取sdcard音乐文件的方法
- 自定义 View 基础和原理
- Android--登录界面
- Android--通知之Notification