一吏饿、MobSF介紹
MobSF踪危,全稱(Mobile-Security-Framework),是一款優(yōu)秀的開源移動應用自動測試框架猪落。該平臺可對安卓陨倡、蘋果應用程序進行靜態(tài)、動態(tài)分析许布,并在web端輸出報告。靜態(tài)分析適用于安卓绎晃、蘋果應用程序蜜唾,而動態(tài)分析暫時只支持安卓應用程序。
MobSF使用Django框架開發(fā)庶艾,使用sqlite進行的存儲袁余,支持對apk、ipa及zip壓縮的源代碼進行掃描分析咱揍,同時颖榜,MobSF 也能夠通過其API Fuzzer功能模塊,對 Web API 的安全性進行檢測煤裙,如收集信息掩完,分析安全頭部信息,識別移動API 的具體漏洞硼砰,如XXE且蓬、SSRF、路徑遍歷题翰,以及其他的與會話和API調(diào)用有關的邏輯問題恶阴。
二诈胜、代碼結(jié)構(gòu)
MobSF源代碼結(jié)構(gòu)主要包含靜態(tài)分析、動態(tài)分析冯事、API Fuzzer三個部分焦匈,本文不關注Django框架本身及Web處理相關的內(nèi)容。如圖:
三昵仅、靜態(tài)分析
靜態(tài)分析的處理流程集功代碼在目錄StaticAnalyzer\views\android下static_analyzer.py程序文件中缓熟。分析代碼流程可知,在MobSF框架中靜態(tài)分析主要包含三個部分岩饼,分別是Manifest Analysis荚虚、Cert Analysis、Code Analysis籍茧。流程如下:
Manifest Analysis
在解壓apk后版述,MobSF使用AXMLPrinter2.jar工具提取app中的AndroidManifest.xml文件內(nèi)容,并進行分析寞冯。
??????? ManifestAnalysis主要功能是對AndroidManifest.xml進行解析渴析,提取其中permission、granturipermissions吮龄、application俭茧、activties、services漓帚、intents母债、actions等,分析所有權(quán)限并對權(quán)限進行分級尝抖,包含正常毡们、危險、簽名昧辽、系統(tǒng)四個類別衙熔。對各屬性配置進行檢查,看是否存在不安全的配置搅荞,如allowBackup红氯、debuggable、exported等屬性設置咕痛。詳細代碼功能可見manifest_analysis.py程序文件痢甘。
Cert Analysis
??????? MobSF證書分析功能函數(shù)在cert_analysis.py文件中,MobSF首先嘗試獲取Hardcoded Certificates/Keystores茉贡,然后通過CertPrint.jar工具解析apk中證書的信息产阱,并完成證書相關問題的分析。
Code Analysis
???????? MobSF靜態(tài)代碼分析功能函數(shù)在code_analysis.py文件中块仆,反編譯的代碼在converter.py中构蹬。其中使用Dex2Jar將dex轉(zhuǎn)變?yōu)閖ar文件王暗,使用Dex2Smali將dex轉(zhuǎn)變?yōu)閟mali代碼,使用jd-core.jar庄敛、cfr_0_115.jar俗壹、procyon-decompiler-0.5.30.jar將jar包轉(zhuǎn)為為可讀的java代碼。
???????? 源代碼分析部分主要利用正則表達式對java源碼進行匹配來實現(xiàn)的藻烤。主要通過匹配常見方法中的關鍵詞來提取源碼中用到的方法绷雏。 通過匹配敏感關鍵詞來提取賬號密碼等信息:
???????? 源代碼分析部分主要利用正則表達式對java源碼進行匹配來實現(xiàn)的。主要通過匹配常見方法中的關鍵詞來提取源碼中用到的方法怖亭。 通過匹配敏感關鍵詞來提取賬號密碼等信息:
????? 通過匹配常見API字符串來判定是否有調(diào)用這些API:
???????? 要檢測的api列表(部分)及對應的安全問題:
????????? 通過正則匹配URL的格式來提取源碼中的URL:
????????? 通過正則匹配Email的格式來提取源碼中的Email:
四涎显、動態(tài)分析
???????? MobSF同時還支持對安卓程序的動態(tài)分析,使用virtualbox運行app兴猩,并使用virtualbox提供的接口完成代理設置期吓、虛擬機的操作,利用adb命令安裝運行app倾芝,并獲取app的運行相關信息讨勤,進行分析。 其動態(tài)分析主要目錄結(jié)構(gòu)如下圖:
1晨另、準備工作
????? 安裝夜神模擬器潭千,并啟用網(wǎng)絡橋接模式(選擇夜神模擬器的原因是支持網(wǎng)絡橋接,mac版本的暫時不支持網(wǎng)絡橋接)
2借尿、修改MobSF配置文件
????? 在MobSF/settings.py刨晴,設置ANDROID_DYNAMIC_ANALYZER = "MobSF_REAL_DEVICE"
并將DEVICE_IP并DEVICE_ADB_PORT設置為夜神模擬器的IP和端口
3、adb命令連接模擬器
adb connect 192.168.3.31:5555
4路翻、查看是否連接成功
adb devices
5割捅、啟動mobsfy.py腳本,這一步將配置模擬器以支持MobSF動態(tài)分析
python3 mobsfy.py /Users/liping5/Mobile-Security-Framework-MobSF/MobSF/settings.py /Users/liping5/Mobile-Security-Framework-MobSF/scripts/mobsfy.py
6帚桩、根據(jù)提示輸入模擬器的IP和PORT編號,然后按enter鍵嘹黔,選擇設備類型Device
7账嚎、腳本成功執(zhí)行后,會看到Xposed Installer視圖
8儡蔓、點擊確定郭蕉,選擇安裝/更新 Version 89右側(cè)的?圖標,下載安裝Xposed框架
9喂江、Xposed框架安裝完成召锈,重啟模擬器。再次打開Xposed Installer获询,選擇左上角的模塊涨岁。啟用Droidmon拐袜,JustTrustMe和RootCloak這些模塊,然后再次重啟模擬器
10梢薪、系統(tǒng)重新啟動后蹬铺,轉(zhuǎn)到WLAN設置,高級選項秉撇,然后在代理設置下選擇手動甜攀。并設置【代理服務器主機名】為運行MobSF的主機的IP(在本例中即模擬器的宿主機IP)。并在這將PROXY_IP在MobSF / settings.py中琐馆。設置【代理服務器端口】為1337规阀。并在MobSF/settings.py配置文件中修改Host/Server/ SETTINGS的PROXY_IP
至此,已成功將夜神模擬器與MobSF動態(tài)分析環(huán)境配置在一起瘦麸。
11谁撼、工作流程:
1)adb命令連接模擬器
adbconnect192.168.3.31:5555
2)運行MobSF服務
python3 /Users/liping5/Mobile-Security-Framework-MobSF/manage.py runserver
3)點擊Start Dynamic Analyzer
Environment Created
?????? 該功能主要由GetEnv函數(shù)實現(xiàn)Web代理設置,adb命令接口實現(xiàn)app的安裝瞎暑、運行彤敛。MobSF與虛擬運行環(huán)境連接后,即開始動態(tài)分析流程了赌。
Start / Stop Screen
?????? MobSF中提供實時操作功能墨榄,其實現(xiàn)主要利用屏幕錄制軟件screencast提供的服務,其實現(xiàn)代碼如下:
Install / Remove MobSF RootCA
Start /Stop Exported Activity Tester
???????? 這部分主要是想盡量多的觸發(fā)樣本中所有行為勿她,MobSF的做法是:遍歷AndroidManifest.xml中的所有Exported Activity袄秩,并利用am start來依次啟動,以方便xposed能獲取到更多的日志逢并。
其主要流程是:
1)獲取靜態(tài)分析得到的exported activity列表之剧。
2)遍歷activity,并用adb -s IP:PORT shell am start -n PACKAGE/ACTIVITY 啟動相應的activity砍聊。
3)獲取當前activity運行時的屏幕截圖 adb -s IP:PORT shell screencap -p /data/local/screen.png背稼。
4)保存該截屏。
5)強制關閉該應用 adb -s IP:PORT shell am force-stop PACKAGE玻蝌。
Start / Stop Activity Tester
??????? 與Exported Activity不同的是蟹肘,這個測試將會遍歷AndroidManifest.xml中所有Activity,而不單單是Exported俯树。其流程與處理Exported Activity基本相同帘腹,截取屏幕并將圖片保存在本地,代碼如下:
??????? 在FinalTest函數(shù)中MobSF會將程序運行過程中的所有dalvikvm的Warning和ActivityManager的Information收集起來许饿。
???????? MobSF對日志的分析功能主要在APIAnalysis和RunAnalysis兩個函數(shù)中阳欲,和靜態(tài)日志分析一樣,動態(tài)日志分析也是以正則匹配為主,APIAnalysis主要對x_logcat.txt中Droidmon.apk產(chǎn)生的日志進行處理球化,主要進行API調(diào)用分析秽晚,包括API的class、參數(shù)赊窥、返回值等爆惧,對需要監(jiān)控的api函數(shù)在DynamicAnalyzer\tools\onDevice目錄下的hooks.json文件中。包含監(jiān)控函數(shù)詳細的類名锨能、方法名稱等扯再。
??????? RunAnalysis函數(shù)主要處理樣本運行后留下的WebTraffic.txt、logcat.txt址遇、x_logcat.txt日志文件熄阻。
在RunAnalysis函數(shù)中,MobSF首先用正則匹配出所有可能的url倔约,然后再一一對url進行相應分析秃殉。
五、API Fuzzer
? ? ? ?? MobSF框架中API Fuzzer模塊主要對 Web API 的安全性進行檢測浸剩,如收集信息钾军,分析安全頭部信息,識別API的具體漏洞绢要,目前支持SSRF吏恭、XXE、Path Traversal等漏洞的掃描重罪,XXE及Path Traversal測試Payloads在APITester\payloads\路徑下: