對手機應(yīng)用程序的攻擊并不是什么新鮮事了,網(wǎng)絡(luò)上也有很多這方面的教程。不過即便如此,依然有很多滲透測試員無法對其攻擊技術(shù)進行分類,甚至也做的不好。手機應(yīng)用的攻擊手法和其他形式的攻擊非常相似。但是如果你不經(jīng)常練習(xí)這些手法,也是毫無用處。
所以我們該如何提高自己的水平呢?事實上google應(yīng)用商店有超過1.5百萬的App,其中也不乏存在漏洞的App,甚至也有專門的測試App,大家都可以下載來玩。
我們總結(jié)下移動應(yīng)用的分析手法,主要包括:
文件系統(tǒng)分析
網(wǎng)絡(luò)分析
源代碼分析
動態(tài)分析
在本文中,我們將針對文件系統(tǒng)分析進行說明。如果有必要的話,將來還會對這進行一些擴展。
要想訪問文件系統(tǒng)的內(nèi)容,我們需要獲取一定的權(quán)限。在Android中通常指的就是Root權(quán)限。有很多人說:“有root權(quán)限當然好辦了,如果沒有的話你不就什么都做不了,而且大多數(shù)用戶的設(shè)備都沒有root過” 。這點問的好,在我為一個企業(yè)演示什么是真正的安全威脅的時候,就想著能不能寫一個工具可以不用通過root權(quán)限就能訪問文件系統(tǒng),于是 BackHack就誕生了。
BackHack大概是2年開始創(chuàng)建的,但是由于工作忙,一直把它放在一邊。直到前幾周,我發(fā)現(xiàn)了一款新游戲: Alto’s Adventure。這個游戲很適合用來消磨時間,制作的也非常漂亮。我花了很長時間闖關(guān)并且收集金幣,就是這種情況下,我決定讓backHAck重見天日,看看我對這個APP做些什么。
首先,我們得確保安裝了Android Studio,或者至少安裝了Android Debug Bridge.當然我們也需要我們的設(shè)備開啟調(diào)試模式。這個時候,發(fā)送“adb devices”指令,并且確定你的設(shè)備已連接。
現(xiàn)在,我們運行backHack。(python backHack.py)
backHack使用一個很簡單的目錄系統(tǒng)做的界面,非常容易使用。首先我們需要選擇想要“嘿嘿嘿”的app。進入選項1出現(xiàn)右圖,然后選擇1選項可以列出設(shè)備上的app列表,選項2提供搜索app的功能,或者選擇選項3直接輸入app的名稱。我們的目的是分析Alto’s adventure,所以我們選擇用選項2搜索’alto’,如下圖,可以看到找到一個名字是“com.noodlecake.altosadventure”的app,然后我們把這個名字復(fù)制粘貼到選項3中,返回主目錄:
接下來,我通過選項2 Backup and Extract App來備份app。在這一步驟,程序?qū)嵝涯憬怄i你的設(shè)備,并且確定這個備份操作:
一旦備份成功,backHack就會提取出這個備份, 將文件系統(tǒng)的內(nèi)容放在apps/
然后我們可以隨便看看文件系統(tǒng)里面有什么。通常,sp(shared_prefs)文件夾和db文件夾(database)是個好地方。在Alto’s Adventure中,有一個名叫“com.noodlecake.altosadventure.xml”的XML文件夾。
我們查看這個文件,發(fā)現(xiàn)app的配置信息,包括金幣和等級。我發(fā)現(xiàn)可以很容易更改這個值,看下改了后會發(fā)生什么事,我們把金幣設(shè)置成999999999 并且等級設(shè)置成60。(60是最高等級,而我就不把金幣設(shè)置到$1,000,000,000,就不就不,急死強迫癥患者—。—)
保存文件后,我們返回backHack并且選擇選項3,這樣就能重新打包你的app然后重啟你的設(shè)備。然后,軟件提示恢復(fù)app,如下圖:
現(xiàn)在,app已經(jīng)恢復(fù)了,我們打開app看看會發(fā)生什么。
999,999,999的金幣,等級變成了61級!(注意,XML文件中我們設(shè)置成60的參數(shù)是的是currentGoalLevel,這個參數(shù)實際上意味這著“完成目標等級”。當然,金幣達到 1,000,000,000。猜猜他們是否已經(jīng)達到上限了?)
好吧,這是個很有趣的方式,可以在游戲的時候得到一些額外的金幣和等級,同樣這個方法可以用在任何app上。
很多時候,這不僅僅只是修改下app數(shù)據(jù),你還能可能找到一些密碼和其他敏感信息,backHack很好的展示了沒有root的設(shè)備也會有的風(fēng)險,因此,其實所有沒有鎖的設(shè)備都能被獲取到。