Android漏洞挖掘三板斧——drozer+Inspeckage(Xposed)+MobSF
一、簡介
最近在學習Android APP客戶端漏洞挖掘過程中,對Android APP端漏洞挖掘做了一個基本的梳理總結本節主要是在介紹Android APP漏洞挖掘過程中,使用常見的Android漏洞挖掘工具的安裝和使用辦法,幫助Android漏洞挖掘人員提供便利。本文里面一部分的介紹采摘與網絡博客,大家可以點擊對應的網址進行查看。
為什么選擇drozer+Inspeckage+Mobsf三個工具呢,這是因為在我進行Android APP漏洞挖掘的過程中,這三個工具很好的提供了自動化的分析和一些對應的hook技術,極大的方便了Android APP漏洞挖掘工作。下面將依次介紹每一種工具的安裝和使用,后續繼續會用一些案例來實際操作。
二、Android APP漏洞介紹
根據中國互聯網協會APP數據安全測評服務工作組在2020年發布的《移動應用安全形勢研究報告》中顯示,2020 年度收錄存在安全漏洞威脅的 APK 860 萬余個,同 一 App 普遍存在多個漏洞。其中存在的 Janus 漏洞風險 App 數量最多,占監測總量的 78.13%;其次是 Java 代碼加殼檢 測,占總量的 62.45%;排在第三位的是動態注冊 Receiver 風險,占總量的 61.16%。

根據愛加密的Android客戶端常見漏洞調研顯示,Android方向的漏洞總共可以分為三個方面:組件安全、業務安全、數據安全。

我們可以看出針對不同的安全問題,我們在進行Android APP漏洞挖掘的過程中,也應該有針對性的進行漏洞挖掘。我們更加具體的組件分類,可以大致查看一些Android APP常見安全漏洞:https://ayesawyer.github.io/2019/08/21/Android-App%E5%B8%B8%E8%A7%81%E5%AE%89%E5%85%A8%E6%BC%8F%E6%B4%9E/

根據Android 安全分析平臺的Android APP審計系統顯示,這也為我們進行Android APP客戶端的漏洞挖掘提供了詳細的方案:

綜上,我們對Android APP漏洞挖掘和Android安全測試就有了一個初步的認識,接下來我們來看這三個神器具體是怎么安裝和使用,幫助我們移動安全分析人員提供便利。
三、工具的安裝和使用
1.drozer
(1)drozer介紹
drozer是一款針對Android系統的安全測試框架,可以分成兩個部分:其一是“console”,它運行在本地計算機上;其二是“server”,它是一個安裝在目標Android設備上的app,當使用console與Android設備交互時,就是把Java代碼輸入到運行在實際設備上的drozer代理(agent)中。根據drozer官方的描述,drozer主要是有助于Android研究人員去測試一些共享的Android漏洞,對于遠程攻擊,可以生成shellcode來幫助開發人員將drozer Agent 部署為遠程管理員工具,從而最大程度利用設備。drozer是一個全面的安全審計和攻擊框架,可以進行更快的Android安全評估,通過自動化繁瑣和耗時的工作,幫助減少Android安全評估所花費的時間。還可以針對真實的Android設備進行測試,drozer不需要啟用USB調試或其他開發功能,還可以自動化和擴展,測試公共漏洞的暴露程度。
(2)安裝準備
(1)drozer官方地址:https://labs.f-secure.com/tools/drozer/(2)drozer github:https://github.com/mwrlabs/drozer(3)下載及drozer用戶手冊:https://labs.mwrinfosecurity.com/tools/drozer/
(3)安裝
我們在這里主要列舉Windows端和Linux端的安裝:
①Windows端:
我們在Windows安裝時,首先需要配置環境:
jdk1.8python 2.7android sdk其中python的版本必須為2.7版本,因為drozer現在只支持python2.7版本
我們先從官網上下載drozer(RPM)和agent.apk。

服務端安裝:
我們下載drozer(RPM)后解壓,然后點擊setup安裝,一路默認安裝就可以了,它會自動安裝到C:\drozer文件夾下。

我們檢測是否成功安裝,進入bin目錄下,在cmd中執行drozer.bat,出現下面的圖就說明成功安裝了。

客戶端安裝:
我們將agent.apk 安裝到手機上:
adb install agent.apk
安裝完成后手機啟動drozer,點擊右下角開啟端口轉發按鈕。

然后我們在電腦的終端中輸入命令轉發端口:
adb forward tcp:31415 tcp:31415
最后我們在終端中進入drozer的安裝目錄下,輸入命令運行:
drozer console connect

此時我們就可以正常使用drozer框架,來進行我們的測試工作了。
②Linux端安裝(Kali)
Linux上的安裝因為需要的庫比較多,所以很容易出錯,大家最好按照這個步驟一步步來。
首先,我們需要將python環境配置成python 2.7.0wget https://github.com/FSecureLABS/drozer/releases/download/2.4.4/drozer-2.4.4-py2-none-any.whl ##下載drozerapt-get --assume-yes install python-pippip2 install wheelpip2 install pyyamlpip2 install pyhamcrestpip2 install protobufpip2 install pyopensslpip2 install twistedpip2 install service_identitypip2 install drozer-2.4.4-py2-none-any.whl安裝jdk8: apt-get install --assume-yes openjdk-8-jdk-headless安裝adb: apt-get --assume-yes install adb ##已經有adb不需要再次安裝下載客戶端并安裝:https://labs.f-secure.com/tools/drozer/在客戶端中打開31415端口,然后進行端口轉發:adb forward tcp:31415 tcp:31415最后啟動drozer:drozer console connect參考網址:https://blog.csdn.net/LoopherBear/article/details/84030567https://github.com/FSecureLABS/drozer/issues/350https://github.com/FSecureLABS/drozer/issues/357#issuecomment-652669536
一些drozer安裝常規問題解決方案:https://blog.csdn.net/Jession_Ding/article/details/82528142
(4)基本使用
drozer的一些常用指令:
> list //列出目前可用的模塊,也可以使用ls> help app.activity.forintent //查看指定模塊的幫助信息> run app.package.list //列出android設備中安裝的app> run app.package.info -a com.android.browser //查看指定app的基本信息> run app.activity.info -a com.android.browser //列出app中的activity組件> run app.activity.start --action android.intent.action.VIEW --data-uri http://www.google.com //開啟一個activity,例如運行瀏覽器打開谷歌頁面> run scanner.provider.finduris -a com.sina.weibo //查找可以讀取的Content Provider> run app.provider.query content://settings/secure --selection "name='adb_enabled'" //讀取指定Content Provider內容> run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo //列出指定文件路徑里全局可寫/可讀的文件> run shell.start //shell操作> run tools.setup.busybox //安裝busybox> list auxiliary //通過web的方式查看content provider組件的相關內容> help auxiliary.webcontentresolver //webcontentresolver幫助> run auxiliary.webcontentresolver //執行在瀏覽器中以http://localhost:8080即可訪問以sieve示例> run app.package.list -f sieve //查找sieve應用程序> run app.package.info -a com.mwr.example.sieve //顯示app.package.info命令包的基本信息> run app.package.attacksurface com.mwr.example.sieve //確定攻擊面> run app.activity.info -a com.mwr.example.sieve //獲取activity信息> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList //啟動pwlist> run app.provider.info -a com.mwr.example.sieve //提供商信息> run scanner.provider.finduris -a com.mwr.example.sieve //掃描所有能訪問地址> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/--vertical //查看DBContentProvider/Passwords這條可執行地址> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'" //檢測注入> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts //查看讀權限數據> run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /home/user/database.db //下載數據> run scanner.provider.injection -a com.mwr.example.sieve //掃描注入地址> run scanner.provider.traversal -a com.mwr.example.sieve> run app.service.info -a com.mwr.example.sieve //查看服務
我們在測試過程中,常用測試指令:
1.連接drozer:drozer.bat console connect 2.列出詳細APP信息:run app.package.info -a com.xxx.xxxx 3.查看APP的配置信息run app.package.manifest com.xxx.xxxx 3.分析是否存在攻擊攻擊點run app.package.attacksurface com.xxx.xxxx 4.查看暴露的provider權限run app.provider.info -a com.xxx.xxxx 5.獲取Activity信息命令 run app.activity.info -a示例 run app.activity.info -a com.xxx.xxxx 6.檢測SQL注入命令 run scanner.provider.injection -a示例 run scanner.provider.injection -a com.xxx.xxxx 7.檢測目錄遍歷命令 run scanner.provider.traversal -a示例 run scanner.provider.traversal -a com.xxx.xxxx 8.獲取所有可訪問的Uri命令 run scanner.provider.finduris -a示例 run scanner.provider.finduris -a com.xxx.xxxx 9.SQL注入命令 run app.provider.query [--projection] [--selection]示例 run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ 列出所有表 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;--" 10.讀取文件系統下的文件示例 run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts 11.下載數據庫文件到本地示例 run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db
2、Inspeckage(xposed)
(1)Inspeckage介紹
Inspeckage是一個用來動態分析安卓app的xposed模塊。Inspeckage對動態分析很多常用的功能進行了匯總并且內建一個webserver。整個分析操作可以在友好的界面環境中進行。
(2)安裝準備
Xposed框架安裝Inspeckage模塊網址:http://repo.xposed.info/module/mobi.acpm.inspeckage //也可以直接到Xposed模塊庫中搜索 Xposed框架安裝:(1)4.4以下Android版本安裝比較簡單,只需要兩步即可 1.對需要安裝Xposed的手機進行root 2.下載并安裝xposedInstaller,之后授權其root權限,進入app點擊安裝即可 但是由于官網不在維護,導致無法直接通過xposedinstaller下載補丁包(2)Android 5.0-8.0 由于5.0后出現ART,所以安裝步驟分成兩個部分:xposed.zip 和 XposedInstaller.apk,zip文件是框架主體,需要進入Recovery后刷入,apk文件用于Xposed管理 1.完成對手機的root,并刷入reconvery(比如twrp),使用Superroot 2.下載你對應的zip補丁包,并進入recovery刷入 3.重啟手機,安裝xposedInstaller并授予root權限即可 官網地址:https://dl-xda.xposed.info/framework/(3)由于Android 8.0后,Xposed官方作者沒有再對其更新,我們一般就使用國內大佬riyu的Edxposed框架 Magisk + riyu + Edxposed 具體安裝過程,大家百度搜索
(3)安裝
我們先下載安裝Inspeckage模塊,在xposed中勾選:

然后手機重啟,激活Xposed中該模塊,就完成正常的安裝了。
(4)基本使用
客戶端:
我們進入Inspeckage應用程序,可以配置其相關的信息:

(1)序號1 Only user app : 默認只顯示用戶安裝的APP,關閉可以顯示系統自帶的APP(2)序號2 選擇準備要測試的APP列表,這里是我們測試的目標APP(3)序號3 表示我們的Inspeckage模塊是否啟動,如果這里為紅色,說明可能沒有安裝Xposed框架,或者沒有啟動Inspeckage模塊(4)序號4 上面為我們手機的局域網地址,下面為我們USB訪問的地址,也是我們電腦上主界面訪問地址(5)序號5 我們在訪問主界面前,需要進行端口轉發(6)序號6 啟動對應APP 我們可以在主界面查看其相關信息
我們查看APP的配置界面:

(1)序號1 我們連接的地址,我們可以全選,也可以設置成手機局域網或主機地址,這樣我們在主界面訪問時就需要輸入對應ip地址(2)序號2 服務端端口號 序號3 Web套接字端口號 我們對端口號可以自定義
客戶端使用步驟:
(1)我們首先在choose target中選擇目標應用程序,然后我們點擊Launch,啟動該目標程序(2)然后我們進行端口轉發,轉發手機的8008端口到本地:adb forward tcp:8008 tcp:8008(3)接著我們在電腦上訪問 http://127.0.0.1:8008 就可以看到Inspeckage的web界面。(如果web也買你沒有輸出結果,查看APP is running是否為true,Logcat左邊分那個自動刷新按鈕是否開啟)
服務端:
我們在電腦上訪問 http://127.0.0.1:8008,就可以進入服務端的web界面。
首先我們來介紹Tag界面:

Data dir:數據文件樹

主要提供我們APP運行過程中一些數據存儲的位置。
主界面的各字段含義依次為:
Logcat 實時查看該app的logcat輸出Tree View 可以實時瀏覽app的數據目錄并直接下載文件到本地Package Information 應用基本信息(組件信息、權限信息、共享庫信息)Shared Preferences LOG:app XML文件讀寫記錄;Files:具體XML寫入內容Serialization 反序列化記錄Crypto 常見加解密記錄(KEY、IV值)Hash 常見的哈希算法記錄SQLite SQLite數據庫操作記錄HTTP HTTP網絡請求記錄File System 文件讀寫記錄Misc. 調用Clipboard,URL.Parse()記錄WebView 調用webview內容 IPC 進程之間通信記錄+Hooks 運行過程中用戶自定義Hook記錄參考網址:https://blog.csdn.net/tom__chen/article/details/78216732
我們進入設置界面:
Replace界面:
Replace界面主要是用來替換hook的方法參數和返回值的,所以我們順便看一下hook界面。

點擊新建hook界面:

點擊替換界面:

Location界面:

這里官方是指可以替換GPS位置信息,不過平時在使用過程中用的并不多
Fingerprint(指紋信息)界面:

這個功能界面還是十分強大的,我們可以在這里替換一些我們設備常見的參數值,這樣可以在我們進行一些測試工作的時候,可以繞過一些檢測,比如我們可以更改IMEI、IMSI等等。
Tip界面:

這里主要是介紹我們在Android分析操作過程中的一些檢測方法,一些例子。
Logcat界面:

這里主要提供我們在程序運行過程中的一些日志信息,和我們ddms的作用一致。
總結: Inspeckage是一款功能強大的Android安全測試工具,為用戶提供了可視化的UI界面,很大程度上幫助用戶去進行測試工作,可以對APP應用的基本配置信息進行檢測,而且還可以提供用戶簡單的hook操作,用戶可以很方便并且可視化的進行一些hook操作,還可以去修改設備和設備上應用程序的很多基本屬性,還可以添加代理,繞過一些證書的固定。參考網址: 官方網址:https://github.com/ac-pm/Inspeckage#information-gathering https://repo.xposed.info/module/mobi.acpm.inspeckage 博客網址:https://blog.csdn.net/tom__chen/article/details/78216732
3、MobSF
(1)MobSF基本介紹
移動安全框架(MobSF)是一種自動化的移動應用程序(Android / iOS / Windows)測試框架,能夠執行靜態,動態和惡意軟件分析。它可用于 Android,iOS 和 Windows 移動應用程序的有效和快速安全分析,并支持二進制文件(APK,IPA 和 APPX)和壓縮源代碼。MobSF 可以在運行時為 Android 應用程序進行動態應用程序測試,并具有由 CapFuzz(一種特定于 Web API 的安全掃描程序)提供支持的 Web API 模糊測試。
(2)安裝準備
安裝MobSF一般有兩種方式,一種是使用drozer安裝,另外是使用源碼安裝,我們這里僅顯示源碼安裝案例。
官方地址:https://github.com/MobSF/Mobile-Security-Framework-MobSF
(3)安裝
Windows安裝:
安裝環境:
Windows10Python 3.7jdk 1.8.0
安裝要求
安裝 Git:https://git-scm.com/download/win安裝 Python3.7(3.8會出現錯誤):https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64.exe安裝 JDK 8+:https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html安裝 Microsoft Visual C++ Build Tools: https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16安裝 OpenSSL: https://slproweb.com/products/Win32OpenSSL.html安裝 wkhtmltopdf: https://wkhtmltopdf.org/downloads.html //wkhtmltopdf主要是為了將生成的報告轉換成pdf版本wkhtmltopdf 操作指南:https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf將包含 wkhtmltopdf 二進制文件的文件夾添加到環境變量PATH
安裝步驟:
步驟1:下載好項目之后,可以重命名項目文件夾名稱MobSf,打開cmd窗口進入該項目目錄。將項目內的requirements.txt打開,最后一行libsast==1.2.2改為libsast==1.3.4。
步驟2:安裝OpenSSL和wkhtmltopdf,并配置好wkhtmltopdf環境后,我們在終端進入文件夾,然后運行run.bat。
步驟3:我們打開瀏覽器,在輸入網址:127.0.0.1:8000,如果需要修改默認端口,可以在run.bat中修改SET conf="0.0.0.0:8000"中的端口號。


一般我們在運行的時候,會出現一些報錯,例如:

原因解析: 由于眾所周知的網絡原因,導致無法訪問一些域名如raw.githubusercontent.com這個域名 解決辦法: 步驟1:通過IPAddress.com首頁,輸入raw.githubusercontent.com查詢到真實IP地址如:185.199.108.133 步驟2:在本地電腦host文件中添加記錄185.199.108.133 raw.githubusercontent.com即可
例如:IPAddress.com首頁

然后我們進入C:\WINDOWS\system32\drivers\etc,修改hosts文件并保存。

然后我們重新啟動run.bat,再輸入127.0.0.1,就可以發現正常的進入不報錯誤。

同理在后面訪問過程中,出現類似錯誤按照此解決方案就可以解決。

但是由于這一般是由于網絡受限原因導致,所以可能改了仍然會存在報錯,但是一般不會影響正常使用,要徹底解決可以修改代碼,大家可以嘗試一下。
docker安裝:
(1)下載鏡像:docker pull opensecurity/mobile-security-framework-mobsf
(2)啟動容器:docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
參考網址:
https://www.mad-coding.cn/2019/10/11/%E4%BD%BF%E7%94%A8docker%E5%AE%89%E8%A3%85%E7%A7%BB%E5%8A%A8%E5%AE%89%E5%85%A8%E6%A1%86%E6%9E%B6%EF%BC%88MobSF%EF%BC%89/#0x01-%E5%BC%80%E5%A7%8B%E5%AE%89%E8%A3%85
Linux安裝:
參考網址:https://blog.csdn.net/Alexhcf/article/details/107438583
Mac安裝:
安裝環境:Mac OS 10.14Python 3.8java 12.0.2MobSF v3.1 beta安裝步驟:參考網址:http://www.51ste.com/share/det-5952.html
(4)基本使用

我們直接拖入一個APP開始分析:


我們可以看見APP正在進行逆向分析:

靜態分析:
我們點擊最近掃描就可以看見我們最近掃描的一些APP情況:

我們隨便點擊一個應用的靜態報告,就可以看見詳細的靜態分析結果。

動態分析:
我們需要安裝Genymotion并注冊賬號,創建一個模擬器,這里我創建的是7.0模擬器。
Genymotion官方地址:https://www.genymotion.com/download/

我們啟動創建的模擬器:

然后重新啟動MobSF,在平臺上點擊Dynamic Analyzer發現新的內容,點擊MobSFy Android Runtime給模擬器安裝插件。


然后我們點擊動態分析,開始進行動態分析。
在這個過程中,我們可能會遇到各種錯誤,這里我們依次來解決:
問題1:Genymotion模擬器無法聯網問題: 我們需要去檢測Genymotion模擬器的相關配置,具體解決方案參考:https://www.jianshu.com/p/ecb88d6bd815問題2:廢話不多說、電腦上的360管家等最好關閉,雖然這里不一定是這個導致,不過作為一名逆向人員,最好不要打開這些管家問題3:安裝Genymotion時,需要將VirusBox安裝到默認路徑下,不然會報錯,安裝后重啟電腦


點擊start Instrumentation 開始自動化的遍歷掃描。

我們還可以實時查看API監測情況:

然后我們產生動態分析報告。

四、總結
本文針對Android APP漏洞做了一個初步的介紹,先調研了當下的一些主流漏洞,以及常見的Android APP端漏洞挖掘方式,還結合APP漏洞審計系統,詳細的列出了當下Android APP端漏洞挖掘的初步思路,為漏洞挖掘安全人員提供一個參考。
本文還介紹了Android APP漏洞挖掘過程中的三種常用的工具drozer+Inspeckage(Xposed)+MobSF,詳細介紹了三種工具的安裝和具體使用教程,能很好的幫助Android 漏洞挖掘和滲透測試人員的工作。
本文的知識總結來自個人學習總結和網絡上大量博客的收集,所有的博客都會列在參考列表中,可能還有一些總結不足,后續逐步完善以及歡迎各位大佬指正。五
參考網址
Android APP漏洞:
《移動應用安全形勢報告》(2020):https://www.isc.org.cn/zxzx/xhdt/listinfo-40058.htmlhttps://ayesawyer.github.io/2019/08/21/Android-App%E5%B8%B8%E8%A7%81%E5%AE%89%E5%85%A8%E6%BC%8F%E6%B4%9E/https://xuanxuanblingbling.github.io/ctf/android/2018/02/12/Android_app_part1/
drozer:
https://labs.f-secure.com/tools/drozer/http://rui0.cn/archives/30
Inspeckage:
https://www.e-learn.cn/topic/3470422https://blog.csdn.net/tom__chen/article/details/78216732https://repo.xposed.info/module/mobi.acpm.inspeckage
MobSF:
https://www.codeleading.com/article/13073244765/https://blog.csdn.net/Alexhcf/article/details/107438583https://github.com/MobSF/Mobile-Security-Framework-MobSFhttp://www.51ste.com/share/det-5952-3.htmlhttps://bbs.pediy.com/thread-218973.htm