1. 程式人生 > >Android之安全防護allowBackup

Android之安全防護allowBackup

一、前言

今天在開發的過程中遇到一個問題,就是關於AndroidManifest.xml中的allowBackup屬性,也算是自己之前對這個屬性的不瞭解,加上IDE的自動生成程式碼,沒太注意這個屬性,但是沒想到這個屬性會直接導致隱私資料的丟失。下面就來看一下這個屬性的影響到底有多大。他的作用是什麼?

二、Android中的allowBackup屬性

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來備份和恢復應用程式資料

三、如何在非root裝置上獲取隱私資料

好了,上面我們就瞭解了,原來allowBackup屬性的風險很大。下面我們看看現在如果這個屬性是false的話,我們怎麼在沒有root的裝置去獲取資料呢?

首先我們看這樣一個場景,現在市場上有一些應用鎖類的app,他們就是給每個應用開啟的時候新增一個密碼,在開啟app的時候需要輸入密碼才能進入指定的應用,一般會把自己的銀行app,通訊類的app加密。現在市場上這些應用鎖的原理也很簡單,一般是三種方式實現:

1、最古老的方式,啟動一個Service然後隔一段時間去輪訓,獲取當前的topActivity,然後進行操作。

2、因為Android5.0以後,獲取當前的topActivity需要授權,所以這裡還需要做一個操作就是引導使用者去開一些功能。

3、通過輔助功能,可以監聽當前Window的變化,這種方式比上面的輪訓方式高效的多了。

其實1和2兩種方式差不多,唯一的區別就在於獲取topActivity的方式,其實google意識到了,獲取topActivity是很危險的一件事:

在之前的一篇文章中說到了:Android中通過應用鎖盜取賬號,惡意的軟體,可以通過這個功能,使用一個類似於QQ或者支付寶這樣的app,當用戶啟動QQ或者支付寶的時候,我們可以監聽到,然後就啟動我們自己的模擬QQ或者支付寶的登入頁面然後就可以獲取到使用者名稱和密碼了,完成盜取。

下面我們來看一個市場上比較火的一款應用鎖app:智慧應用鎖

我們下載apk,之後使用aapt檢視他的AndroidManifest.xml內容:

aapt dump xmltree applock.apk AndroidManifest.xml > D:\demo.txt

注:我們在拿到一個apk的時候,如果想知道apk中的一些資源和配置資訊,aapt命令是個不錯的選擇,同時,他能夠刪除apk中的一些資源,新增一些資源到apk中都是可以的。

這裡因為AndroidManifest.xml內容有點多,就重定向到一個txt檔案中,我們看到allowBackup屬性為true,因為非0的都是true。好吧,說明applock.apk這個應用咋們是可以使用adb backup命令進行隱私資料的備份的。下面咋們就來看一下如何進行備份:

1、第一步:使用adb backup -f applock.ab com.thinkyeah.smartlockfree 進行資料的備份

adb backup [-system|-nosystem] -all [-apk|-noapk] [-shared|-noshared] -f <檔案名稱> [需要備份的應用包名]
1> [-system|-nosystem]
這個指令是告訴adb 在備份時是否要連同系統一起備份
若沒有打的話 預設是-system 表示會一起備份系統
注意!若連繫統一起備份 在還原的時候會覆蓋系統檔案 對於已經升級後的手機是非常不好的
我不知道在沒有ROOT的情況下 adb是否有許可權去還原系統檔案 但就算如此 還是不建議這樣做
因此 -nosystem是建議一定要打上的指令
2> -all
這個指令除非只是要備份單一APP 不然是一定要打上去的
這個是問你是否要備份全部的APP 若有加上-nosystem的指令
那麼他就只會備份你目前已經安裝上去的APP 而不會連繫統APP一起備份
3> [-apk|-noapk]
預設是-noapk 這個的意思是是否連安裝的APK一起備份
若為-noapk 則只會備份APK的資料檔(像是遊戲存檔 設定 之類的)
4> [-shared|-noshared]
預設是-noshared 這個會問你是否連手機儲存空間或是SD卡的檔案一起備份

關於這個應用的包名,我們可以直接從上面dump出來的AndroidManifest.xml中獲取即可:

獲取包名之後,我們就可以執行命令,我們把匯出來的檔案儲存到當前目錄下:applock.ab,注意這裡的格式是ab,這個也是Android中備份檔案的格式要求。

當我們執行這個命令的時候,裝置端會出現一個提示頁面:

這時候會提示我們輸入備份密碼,這裡為了簡單,不輸入,直接點選備份即可。

下面,我們還需要藉助一個工具來解析這個ab檔案。

第二步:使用android-backup-extractor(abe)工具來解析ab檔案

這裡沒有直接下載原始碼,然後編譯了,直接在網上下載了一個編譯好的

用法也很簡單:

看到我們使用unpack引數來將ab檔案轉化成tar檔案:

java -jar abe.jar unpack applock.ab applock.tar

我們在用解壓縮軟體檢視內容:

我們現在如果想知道他的密碼,那麼可以直接檢視SharePreferences檔案即可,因為一般都會把密碼放到這裡儲存,不過這是一個非常危險的操作,如果你在不進行加密的話,那更是危險了。

我們檢視SmartLockConfig.xml內容:

好吧,被我們猜中了,他盡然把手勢密碼以明文的方式儲存在這裡。這裡他用的是手勢方式加密:03678,代表的應該是一個L:

到這裡我們就成功的破解了智慧應用鎖的加密app的功能,而且是在沒有root的情況下。下面來總結一下:

1、這個智慧應用鎖的app現在在市場的下載量還是蠻高的,已經有100W的下載量了,但是我們看到他的一不留神allowBackup屬性設定成true,這樣就導致了資料可能被外洩,不過這個屬性google不知道怎麼去對待他的,他的預設值盡然是true,而且更為有趣的是,在使用各大IDE工具,預設新建的工程之後,這個屬性的值也是true

     

上面就是現在比較常用的兩個IDE工具:Eclipse和AndroidStudio,看到當我們新建一個工程的時候,他預設都是把這個屬性設定成true的,那麼當你不設定設定個屬性的時候,也是可以進行備份的,因為預設值也是true的,所以按照google的想法,應該是為了防止資料的丟失,就留了這一個功能。便於使用者備份資料。但是這裡會隱含一些安全問題,所以我們在開發的時候,如果不去注意這個屬性的話,就會吃虧的,所以在開發的過程中一定要記得把這個屬性設定成false,特別是非常重要的需要賬號登入的app。

2、上面分析了智慧應用鎖的app,並非只是一個案例,其實現在很多app都有這個問題,我們看看豌豆莢app:

他也是沒有手動的改變這個屬性為false的,所以他的資料也是可以匯出來的。

再看看優酷視訊app:

也是一樣,不過像這些app,他們的賬號登入密碼啥的資訊肯定不是放在本地的,而是放到服務端進行驗證的,不像應用鎖這樣的,他不需要聯網也是可以進行操作的,所以密碼必須放到本地。但是隻要有這個屬性allowBackup為true的話,就會被檢視到沙盒資料,就是不安全的。最後我們再來看看微信5.0版本也有這個問題,不過他在6.0之後已經把allowBackup設定成false了:

這裡我們看到他沒有設定allowBackup屬性,但是剛剛說了,預設值就是true,所以還是可以匯出來的,下面我們可以使用上面的匯出步驟進行操作:

這裡,其實微信他把通訊錄和聊天記錄,都是儲存到db中,但是這個db是進行加密的,然後儲存到一個目錄下面的,關於這個db加密,其實是需要反編譯微信,然後動態除錯跟蹤程式碼來破解了,這個後面會寫一篇文章詳細介紹的,因為我們知道,通訊錄和聊天內容是沒有網路就可以檢視的,那麼加解密肯定是放在本地做的,只要是放在本地做的,那麼就可以進行破解。

不過這裡看到微信在後續的版本已經修復了這個問題,6.0版本之後就不能匯出來資料了,那麼5.0的使用者其實還是會受影響的。

3、還是回到這個應用鎖app中來,其實在這裡還是想吐槽一番的,作為下載量蠻高的app,盡然把密碼用明文儲存到xml中,這種做法其實是對使用者的不負責,首先這裡完全可以使用MD5來做密碼驗證就可以了,為何要暴露明文,其次是為何把這麼重要的資料儲存到xml中,稍微加點難度破解的放到so中也是可以的呀~~

4、破解場景:之前我看到好幾個同事都下載了這個app,去加密相簿app,QQ和微信啥的呀,其實現在看來並沒有什麼用,當我拿到手機的那一刻,什麼都是可以做的,而且不需要root,只需要一個命令就可以了,完全的悄無聲息,沒法察覺的就看到密碼了。

5、所以在開發的過程中,我們在最後一步發包的過程中一定要檢查一下這個屬性是否為false,因為他牽涉到你的太多隱私資訊了

補充:

1、我們可以使用adb backup命令來做一下操作,就是我們在開發過程中,如果遇到手機沒有root的,但是又想檢視沙盒資料,那麼這個也是一種方式,當然我們可以使用run-as命令來操作,不瞭解run-as的同學可以看這篇文章:Android中的run-as命令使用 但是這個也是一種方式,雖然看上去有點繁瑣。

2、與上面的adb backup命令相對應的還有一個就是adb restore命令,他是用來恢復資料的,具體用法:

adb restore applock.ab

這時候也會在客戶端出現確認頁面:

點選恢復資料即可。

那麼這裡又有一個問題了,現在如果我想改了這個應用鎖的密碼,其實很簡單:

然後在儲存成ab檔案,然後還原。密碼就被修改了。那麼比如有些應用它把一些隱私的連結url這樣的資訊儲存到xml中,那就蛋疼了,我們可以匯出來資料,然後修改url為我們自己的url,然後在還原,我擦,如果是一些上報,或者是登入的url,我們就可以在這裡做手腳,達到我們想要的目的了。

四、技術概要

1、分析了現階段應用鎖的原理以及如何使用應用鎖來進行賬號盜取

2、使用aapt命令檢視apk包中資訊

3、使用adb backup/restore進行應用資料的備份和還原

4、使用abe工具檢視備份檔案

5、我們在備份完資料之後,可以嘗試檢視一些應用的隱私資料,同時還可以篡改資訊,在還原。都是可以的。

6、在開發過程中對於沒有root的裝置,adb backup也是可以用來檢視開發應用的沙盒資料的,只是過程有點複雜。

五、總結

從這篇文章我們可以可以看到,一個屬性的不留意,會帶來多大的風險,當然這個屬性也是很蛋疼的,就是他預設值是true,所以在你不管他的情況下還是有問題的,必須手動的去設定成false才可以,所以這個也是導致現在市場上很多app都存在這樣的風險。其次這裡我們主要分析了一個智慧應用鎖的資訊,發現他犯了一個最大的錯誤就是把密碼用明文的方式儲存在xml中,破解難度為0,如果有一些你的朋友或者你的老婆,想看你的微信和QQ,同時又發現了你用了這個app去加密,那麼你就慘了,你老婆只要會adb命令,或者看到這篇文章之後,就兩步,然後看到你不想讓她看到的資料,好吧,然後就沒然後了~~,所以我們開發者在開發一個app的時候,不僅要的是使用者體驗,更重要的時候對使用者的隱私負責。我們使用者在下載和安裝一些app的時候也是需要注意的就是多留點心~~

相關推薦

Android安全防護allowBackup

一、前言 今天在開發的過程中遇到一個問題,就是關於AndroidManifest.xml中的allowBackup屬性,也算是自己之前對這個屬性的不瞭解,加上IDE的自動生成程式碼,沒太注意這個屬性,但是沒想到這個屬性會直接導致隱私資料的丟失。下面就來看一下這個屬性的影響到

Android native 安全防護 防劫持

boolean safe = AntiHijackingUtil.checkActivity(this); if (safe){ }else { Toast.makeText(activity, "某某程式已到後臺執行,請注意資訊保安", Toast.LENGT

Android安全/安全技術--22--Android應用安全防護技術

5-1、Android應用安全防護的基本策略 1、混淆策略 混淆機制有兩個用途,第一個是為了安全保護應用,第二個是為了減小應用安裝包大小,所以每個應用在發版之前必須要新增混淆這項功能。混淆機制一般有兩種:程式碼混淆和資源混淆。 程式碼混淆查閱:左側程式碼類名方法

Android應用安全防護和逆向分析-----作者

在之前的一片文章中,我們介紹了陣列操作物件的時候引用問題以及自動釋放池的概念:今天我們繼續來看一下引用計數中一個痛疼的問題:迴圈引用關於迴圈引用的問題,這裡就不做太多解釋了,就是多個物件之間相互引用,形成環狀。來看一個具體的例子:Dog類和Person類之間相互引用Dog.h

Android應用安全防護的點點滴滴

前言 facebook資料洩露,國內某公司資訊洩露,國內某酒店開房記錄洩露...,近年來,資訊保安越來越讓人堪憂,作為移動開發人員,也是憂心忡忡,在經理的指示下,開始Android資訊保安防護的旅程 一. webView 在現在安卓應用原生開發中,為了追求開發的效率以及移植的便利性,使用

【 專欄 】- Android應用安全防護和逆向分析學習筆記

Android應用安全防護和逆向分析學習筆記 這裡給大家分享的是《Android應用安全防護和逆向分析》的學習筆記,個人認為移動端的安全也是不可忽視的,我們Android工程師應該重視Android的安全這一塊,希望這個專欄的部落

Android安全機制

目前支援的“sharedUserId”屬性包括“com.android.cts.shareduid”、“com.android.cts.process.uidpid_test”、“android.uid.system”、“com.android.uid.test”、“android.uid.calendar”

Android安全防護旅---只需要這幾行程式碼讓Android程式專案變得更加安全

我們在編碼美麗微信公眾號已經弄過了很多app了,不管是協議還是外掛,我們都是那麼一路走過來了,在操作的過程中也發現了很多問題就是應用不在乎安全問題帶來的後果,因為安全始終都是不可忽視的問題,辛辛苦苦寫的程式碼被人看的體無完膚對不起自己也對不起公司,所以如果你做了這幾件事至少可

Android安全防護旅---帶你把Apk混淆成中文語言程式碼

一、前言最近想爆破一個app,沒有加殼,簡單的使用Jadx開啟檢視原始碼,結果把我逗樂了,程式碼中既然都是中文,而且是一些比較奇葩的中文字句,如圖所示:瞬間感覺懵逼了,這app真會玩,我們知道因為Jav

android黑科技系列——Android中新型安全防護策略

應該 nat term 反編譯 packages 名稱 文章 訪問 多說 一、前言 最近有一個同學,發給我一個設備流量訪問檢測工具,但是奇怪的是,他從GP上下載下來之後安裝就沒有數據了,而在GP上直接安裝就可以。二次打包也會有問題。所以這裏就可以判斷這個app應該是有簽名

Juniper SSG 防火墻安全防護拒絕服務×××[新任幫主]

死機 led scree 相對 不存在 解讀 cli for 消息 Juniper SSG 防火墻安全防護之拒絕服務×××一.拒絕服務×××的介紹: 所謂的拒絕服務就是指所有一切以耗盡網絡資源,使其無法再網絡中發揮正常的功能為目的的行為都叫拒絕服務×××,DoS×××是一種

Android 應用互調的實現並新增自定義許可權進行安全防護

最近在做一個安全漏洞修復的工作,場景是A應用必須由B應用調起,由於涉及到元件暴露所以我們需要考慮安全的問題,最後添加了自定義許可權進行解決。 一、A應用 作為被調起者,需要暴露元件給B應用。所以A的清單檔案中要新增自定義許可權(注意:這裡的許可權級別至少是signature或者signatu

Android安全防護防護———加密演算法

摘要 這篇文章本來早就應該寫了,但是由於專案一直開發新的需求,就拖後了。現在有時間了,必須得寫了。現在Android應用程式對安全防範這方面要求越來越高了。特別是金融行業,如果金融app沒有沒有做好相應安全處理,那些很容易被一些Hacker(黑客)所攻擊。並不是說做了這些安全防範,這個應用就百分之百的安全的。

安全防護工具:Anchore

安全性對任何產品來說都非常重要,比如著名的HeartBleed就曾經給很多忽視安全問題的企業帶來了很大的影響。而隨著容器化的推進,早在2015年的一次調查

Android安全機制動態許可權申請

Android6.0的SDK,對許可權的申請機制發生了一些變化。 在Android6.0之前,使用者安裝APP時就要為其授予對應的許可權,不然程式就無法安裝,而6.0之後,我們可以直接安裝,並可對應用的許可權進行管理,這樣極大的保護了使用者的隱私,但也給我們開

安全防護工具:ClamAV

ClamAV是一個C語言開發的開源病毒掃描工具用於檢測木馬/病毒/惡意軟體等。可以線上更新病毒庫,Linux系統的病毒較少,但是並不意味著病毒免疫,尤其是對於諸如郵件或者歸檔檔案中夾雜的病毒往往更加難以防範,而ClamAV則能起到不少作用。  ClamAV相關資訊如下: 專案&nbs

Android應用安全Android APP通用型拒絕服務漏洞

0xr0ot和Xbalien交流所有可能導致應用拒絕服務的異常型別時,發現了一處通用的本地拒絕服務漏洞。該通用型本地拒絕服務可以造成大面積的app拒絕服務。 針對序列化物件而出現的拒絕服務主要是由於應用中使用了getSerializableExtra() 的API,由於應用開發者沒有對

Android應用安全外部動態載入DEX檔案風險

1. 外部動態載入DEX檔案風險描述 Android 系統提供了一種類載入器DexClassLoader,其可以在執行時動態載入並解釋執行包含在JAR或APK檔案內的DEX檔案。外部動態載入DEX檔案的安全風險源於:Anroid4.1之前的系統版本容許Android應用將動態載入的DEX檔案儲存

Android資料安全URLEncoder編碼

URLEncoder編碼 客戶端在進行網頁請求的時候,網址中可能會包含非ASCII碼形式的內容,比如中文、?、&等特殊字元。而直接把這些字元放到網址中請求是不允許的,容易和get請求的轉義符衝突,也容易出現丟失或亂碼的現象,所以需要用URLEnc

Android——AIDL深入

you widget avi net 存在 rate 優點 font 接口 轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/47071927 在上一篇博文《Android之——AIDL小結》中,我們簡介