MobSF框架及源代碼原理分析

一吏饿、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\路徑下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末樱哼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剿配,更是在濱河造成了極大的恐慌搅幅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呼胚,死亡現(xiàn)場離奇詭異茄唐,居然都是意外死亡,警方通過查閱死者的電腦和手機蝇更,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門沪编,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人簿寂,你說我怎么就攤上這事∷尥觯” “怎么了常遂?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挽荠。 經(jīng)常有香客問我克胳,道長平绩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任漠另,我火速辦了婚禮捏雌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笆搓。我一直安慰自己性湿,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布满败。 她就那樣靜靜地躺著肤频,像睡著了一般。 火紅的嫁衣襯著肌膚如雪算墨。 梳的紋絲不亂的頭發(fā)上宵荒,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音净嘀,去河邊找鬼报咳。 笑死,一個胖子當著我的面吹牛挖藏,可吹牛的內(nèi)容都是我干的暑刃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼熬苍,長吁一口氣:“原來是場噩夢啊……” “哼稍走!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柴底,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤婿脸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柄驻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狐树,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年鸿脓,在試婚紗的時候發(fā)現(xiàn)自己被綠了抑钟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡野哭,死狀恐怖在塔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拨黔,我是刑警寧澤蛔溃,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響贺待,放射性物質(zhì)發(fā)生泄漏徽曲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一麸塞、第九天 我趴在偏房一處隱蔽的房頂上張望秃臣。 院中可真熱鬧,春花似錦哪工、人聲如沸奥此。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽得院。三九已至,卻和暖如春章贞,著一層夾襖步出監(jiān)牢的瞬間祥绞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工鸭限, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜕径,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓败京,卻偏偏與公主長得像兜喻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赡麦,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容