浅谈AndroidManifest文件的android:allowBackup属性
来源:互联网 发布:Linux下配置gnu 编辑:程序博客网 时间:2024/05/21 22:46
1.allowBackup安全风险描述
Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是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安全风险详情
(1)allowBackup 风险位置:
AndroidMannifest.xml文件android:allowBackup属性;
(2) allowBackup风险触发前提条件:
未将AndroidMannifest.xml文件中的android:allowBackup属性值设为false;
(3) allowBackup风险原理:
当allowBackup标志值为true时,即可通过adb backup和adb restore来备份和恢复应用程序数据;
4.allowBackup风险POC
(1) 不在AndroidManifest.xml文件设置allowBackup属性值,其默认值为”true”,则应用可通过adb命令进行备份整个应用的数据;
AndroidManifest.xml文件内容:
- <span style="font-size:18px;"><?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></span>
该POC应用启动后如下左图所示与登录之后如下右图所示:
通过adb命令备份该应用登录之后的应用数据:
通过作者Nikolay Elenkov写的解密程序Android Backup Extractor[3]解密出备份的文件”allowBackup.ab”,可得知该POC应用的数据(登录用户名和密码)如下图所示:
在另外一台Android手机上,安装该POC应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:
恢复数据之前:
点击“恢复我的数据”,恢复数据之后,在没有输入用户名和密码的情况下,通过恢复数据,点击应用图标,直接进入登录状态:
(2) 在AndroidManifest.xml文件显示设置allowBackup属性值为false,即android:allowBackup="false",则Android应用不可通过adb命令进行备份和恢复整个应用的数据;
AndroidManifest.xml文件内容:
- <span style="font-size:18px;"><?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></span>
该POC应用启动后如下左图所示与登录之后如下右图所示:
通过adb命令备份该应用登录之后的应用数据:
通过解密出备份的文件”allowBackup.ab”,通过如下图所示可得知该POC应用的备份的数据为空,因此备份不成功:
在另外一台Android手机上,安装该POC应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:
恢复数据之前:
恢复数据之后,重新打开应用,发现没有直接进入登录状态:
5.allowBackup风险修复建议
阿里聚安全建议将allowBackup属性值显示设置为false:
出于安全考虑,阿里聚安全建议关闭应用备份功能; 在AndroidMenifest.xml文件中,将相应组件的“android:allowBackup”属性设置为“false”,如下示例:
- <span style="font-size:18px;"><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</span>
更多信息请查看安全脉搏https://www.secpulse.com/archives/5228.html
- 浅谈AndroidManifest文件的android:allowBackup属性
- 浅谈AndroidManifest文件的android:allowBackup属性
- AndroidManifest中的android:allowBackup属性
- AndroidManifest文件中属性<application android:allowBackup="false">
- Android开发自动生成的AndroidManifest.xml中的allowBackup属性的含义和危险性实例讲解
- android AndroidManifest.xml下的标签android:allowBackup="true"
- android:allowBackup属性设置
- android application 属性 allowBackup
- android:allowBackup属性
- AndroidManifest文件中android属性
- AndroidManifest文件中android属性
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Android AndroidManifest.xml文件的android:supportsRtl属性详解
- Maven本地库目录配置
- 迭代器iterator
- 2012年05月30日
- Bootstrap中水平排列的表单form-inline
- SpringMVC之DispatcherServlet类
- 浅谈AndroidManifest文件的android:allowBackup属性
- JAVA中toString方法的作用
- 7637
- Unity NavMesh动态烘培和绘制
- SpringMVC之一个简单的例子
- HashSet与TreeSet
- Java的从浅至深绕坑而行的学习
- 20120531
- Map,HashMap,TreeMap