Android 屬性 allowBackup 安全風險淺析

1. allowBackup 安全風險描述

Android API Level 8 及其以上 Android 系統提供了爲應用程序數據的備份和恢復功能,此功能的開關決定於該應用程序中 AndroidManifest.xml 文件中的 allowBackup 屬性值,其屬性值默認是 True。當 allowBackup 標誌爲 true 時,用戶便可經過 adb backup 和 adb restore 來進行對應用數據的備份和恢復,這可能會帶來必定的安全風險。android

Android 屬性 allowBackup 安全風險源於 adb backup 允許任何一個可以打開 USB 調試開關的人從Android 手機中複製應用數據到外設,一旦應用數據被備份以後,全部應用數據均可被用戶讀取;adb restore 允許用戶指定一個恢復的數據來源(即備份的應用數據)來恢復應用程序數據的建立。所以,當一個應用數據被備份以後,用戶便可在其餘 Android 手機或模擬器上安裝同一個應用,以及經過恢復該備份的應用數據到該設備上,在該設備上打開該應用便可恢復到被備份的應用程序的狀態。安全

尤爲是通信錄應用,一旦應用程序支持備份和恢復功能,攻擊者便可經過 adb backup 和 adb restore 進行恢復新安裝的同一個應用來查看聊天記錄等信息;對於支付金融類應用,攻擊者可經過此來進行惡意支付、盜取存款等;所以爲了安全起見,開發者務必將 allowBackup 標誌值設置爲 false 來關閉應用程序的備份和恢復功能,以避免形成信息泄露和財產損失。app

2. allowBackup 安全影響範圍

Android API Level 8 以及以上系統。spa

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 命令進行備份整個應用的數據3d

    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應用啓動後以下左圖所示與登陸以後以下右圖所示:rest

    TB12ICfHpXXXXctaXXXgR0z3pXX-537-451.jpg

    經過adb命令備份該應用登陸以後的應用數據:code

    TB1rzaLGXXXXXagaFXXisSGPpXX-688-114.png

    TB1D3JDGXXXXXccaXXXA0gJJXXX-720-1280.png

    經過做者 Nikolay Elenkov 寫的解密程序 Android Backup Extractor 解密出備份的文件 allowBackup.ab,可得知該 POC 應用的數據(登陸用戶名和密碼)以下圖所示:xml

    TB1TD9nHpXXXXclXpXXnq.t_XXX-766-252.png

    在另一臺 Android 手機上,安裝該 POC 應用,而後經過恢復上面備份的數據,可使得新安裝的應用達到登陸狀態:htm

    TB1hLaqHpXXXXcvXXXXaa2PRVXX-438-44.png

    恢復數據以前:

    TB1qKO_HXXXXXbDaXXXLwJp0pXX-529-428.jpg

    點擊「恢復個人數據」,恢復數據以後,在沒有輸入用戶名和密碼的狀況下,經過恢復數據,點擊應用圖標,直接進入登陸狀態:

    TB1JTWmHpXXXXXOXFXXqJ18FpXX-1080-1920.png

  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應用啓動後以下左圖所示與登陸以後以下右圖所示:

    TB1H.epHpXXXXcdXXXXrVMtUpXX-521-437.jpg

    經過adb命令備份該應用登陸以後的應用數據:

    TB1V9GmHpXXXXc_XpXXRFMb4FXX-695-69.png

    經過解密出備份的文件」allowBackup.ab」,經過以下圖所示可得知該POC應用的備份的數據爲空,所以備份不成功:

    TB1h1S0HXXXXXcLXVXXD4go_XXX-766-195.png

    在另一臺Android手機上,安裝該POC應用,而後經過恢復上面備份的數據,可使得新安裝的應用達到登陸狀態:

    TB1r7OnHpXXXXcDXpXXwKTEOpXX-475-128.png

    恢復數據以前:

    TB1ah1aGVXXXXcDapXXxKht0pXX-532-452.jpg

    恢復數據以後,從新打開應用,發現沒有直接進入登陸狀態:

    TB1LpaoHpXXXXcXXpXXqJ18FpXX-1080-1920.png

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>

轉自 阿里聚安全博客常見漏洞系列

相關文章
相關標籤/搜索