Android属性allowBackup安全风险浅析

news/2024/7/5 2:36:29


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文件内容:

<?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[3]解密出备份的文件”allowBackup.ab”,可得知该POC应用的数据(登录用户名和密码)如下图所示:

在另外一台Android手机上,安装该POC应用,然后通过恢复上面备份的数据,可以使得新安装的应用达到登录状态:

恢复数据之前:

点击“恢复我的数据”,恢复数据之后,在没有输入用户名和密码的情况下,通过恢复数据,点击应用图标,直接进入登录状态:

 

2) 在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风险修复建议

阿里聚安全建议将allowBackup属性值显示设置为false:

出于安全考虑,阿里聚安全建议关闭应用备份功能; 在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

[消息来源:阿里聚安全常见漏洞介绍,POC 以及解决方案系列,作者/Jason_HZ,转载来自FreeBuf黑客与极客(FreeBuf.COM)]


转载地址:http://www.freebuf.com/articles/terminal/60778.html



http://www.niftyadmin.cn/n/3648902.html

相关文章

软件测试管理--目录

前 言第一部分 基础篇第1章 测试管理概论1.1 三个基础测试概念1.2 软件测试基本流程1.3 软件测试管理攻略1.3.1测试管理主要内容1.3.2本书测试管理攻略第2章 软件测试背景2.1 测试案例2.2 软件测试发展历史2.3 国内IT企业测试行业分析第二部分 管理篇第3 章管理团队第4 章测试…

如何在Ubuntu 18.04上使用Docker Compose打包Laravel应用程序进行开发

介绍 (Introduction) To containerize an application refers to the process of adapting an application and its components in order to be able to run it in lightweight environments known as containers. Such environments are isolated and disposable, and can be …

自定义view-实现计步器的效果

首先看下效果图 在做这个项目之前先了解下文字获取 我之前也写过一篇文章是自定义view——自定义圆环进度条:http://blog.csdn.net/qq_24675479/article/details/78880078 今天详细讲解一下baseLine 基线&#xff08;参考文章&#xff1a;文淑大神的自定义View之绘图篇&#x…

马克吐温刷墙与碗底的诱惑

马克吐温刷墙马克.吐温小时侯&#xff0c;有一天因为逃学&#xff0c;被妈妈罚着去刷围墙。围墙有30码长&#xff0c;比他的头顶还高出很多。他把刷子蘸上灰浆&#xff0c;刷了几下。看着这么长的围墙&#xff0c;他灰心丧气地坐了下来。伙伴桑迪提着水桶走过来。“桑迪&#x…

Android 解决APN无权限问题

在ICS40以前的版本中&#xff0c;如果程序需要设置APN&#xff0c;只需要在AndroidManifest文件中声明这个权限即可。在40的机器上运行则会抛出以下异常&#xff1a;java.lang.SecurityException: No permission to write APN settings: Neither user *** nor current process …

Android:No permission to write APN settings(沒有写入 APN 设置的权限)

如果你想读Android 4.2以及以上版本的APN&#xff0c;我觉得你改变一下方法即可。我试了&#xff0c;而且可以实现。在Android 4.1 以及以下版本 &#xff1a;Cursor c getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"…

自定义view之实现文字不同颜色

效果图 定义属性 <declare-styleable name"ColorTrackTextView"><attr name"originColor" format"color"/><attr name"changeColor" format"color"/></declare-styleable> 自定义布局&#x…

[Regex]ASP.NET 中的正则表达式-微软速成课程

ASP.NET 中的正则表达式发布日期&#xff1a; 8/17/2004| 更新日期&#xff1a; 8/17/2004速成课程Steven A. Smith适用范围&#xff1a;Microsoft .NET FrameworkMicrosoft ASP.NET正则表达式 API摘要&#xff1a;正则表达式是一种处理文本的有用工具。无论是验证用户输入、搜…