1. 程式人生 > >移動APP漏洞自動化檢測平臺建設

移動APP漏洞自動化檢測平臺建設

前言:本文是《移動APP客戶端安全筆記》系列原創文章中的第一篇,主要講的是企業移動APP自動化漏洞檢測平臺建設,移動APP漏洞檢測發展史與前沿技術,APP漏洞檢測工具與平臺,以及筆者的一些思考。希望能對移動App自動化漏洞檢測感興趣的同學有所幫助,限於筆者技術水平與文章篇幅,有些內容暫沒有逐一詳細分析,後續我爭取多學習多分享,在此也歡迎大家指點和交流。

一、國內Android App漏洞檢測發展簡史
1.1石器時代 (2007-2011)

關鍵詞:反編繹,人工審計

  • 2007年11年,Google正式釋出了Android作業系統,2011年12月,Google釋出了Android 2.3版本,Android 應用市場App數量突破10萬個,隨著Android系統的完善及Android裝置數量的增加,Android超過塞班成為主流智慧手機作業系統。與此同時,一些安全研究人員已經敏感的嗅到了Android客戶端安全可能會成為未來的安全熱點之一,不少傳統的二進位制安全研究人員開始轉戰移動安全。
  • 這個時間段國內對Android安全問題的關注主要集中在惡意App分析與檢測,App逆向與破解以及Android系統Root。對於Android客戶端安全問題剛主要集中在資訊洩露,敏感許可權使用的方面,通常使用反編繹工具分析APK原始碼,然後進行人工審計。

Paste_Image.png

圖1 使用JD-GUI分析APK反編繹後的Java程式碼

1.2農業時代 (2012-2014)

關鍵詞:自動化審計、靜態分析、動態分析

  • 2012到2014年間,Google釋出了Android4.0-5.0系統,此間爆出不了不少Android 相關漏洞,比如影響深遠的Webview遠端程式碼執行漏洞,HTTPS中間人漏洞,讓越來越多的安全研究人員的焦點慢慢轉向Android App客戶端本身的安全漏洞挖掘上來。
    國內一些廠商也開始研發自己Android App自動化審計系統,其中最早的對外發布的
    騰訊金剛審計系統
    算是國內這類產品的鼻祖之一,其早期版本在功能上實現了Android App自動化靜態分析與簡單的動態分析,審計點包括:明文儲存敏感資訊,檔案許可權問題,日誌資訊洩露,元件許可權問題,明文傳輸,拒絕服務等。
  • 此時遇到Android APP自動化審計遇到的主要問題有:1.靜態分析主要依賴於關鍵詞匹配,如果缺少上下文分析與可達性分析,開發者正好自定義了一個相同關鍵詞的函式,或者存在漏洞的程式碼根本沒有呼叫到,則會產生誤報。2、大多Android App的程式碼與UI是緊密互動的,如果動態分析部分只進行了簡單安裝啟動App與自動隨機點選,無法覆蓋App大部分介面與功能,則無法覆蓋更多的應用執行路徑,產生有效業務資料,容易導致漏報。

Paste_Image.png

圖2 金剛審計系統主介面

1.3工業時代 (2015-至今)

關鍵詞:模糊測試、汙點分析、通用脫殼、UI自動化遍歷

  • 從2015年開始,360捉蟲獵手(現改名為360顯微鏡),阿里聚安全等開放的線上Android App漏洞檢測平臺的出現讓開發者和安全研究者更加方便的進行漏洞審計,一些開源線上檢測平臺的出現(如MobSF)也降低了定製化APP漏洞審計系統的開發門檻。同時模糊測試,汙點分析,通用脫殼,UI自動化遍歷等學術界與工業界技術也開始被應用到移動App漏洞審計中。下面簡單談談幾種技術在Android App漏洞檢測領域的應用,如果有讀者感到興趣的話後續再做詳細分享。
    1.3.1 Android App Fuzzing
  • 一般而言Fuzzing技術常用於二進位制漏洞挖掘,在移動安全領域常見於挖掘系統元件漏洞(如libstagefright),檔案解析類應用漏洞(如adobe reader,視訊播放器)及第三方元件漏洞,常使用的工具有:
    • peach/afl/honggfuzz,以及DroidFuzzer)/ MFFA等框架,為了提升成功率,通常可將幾種工具與框架元件使用,如AFL+PEACH+MFFA。除此之外,fuzzing技術同樣可用於測試Android 程序間通訊(IPC),比如intent fuzzer)可以直接檢測App拒絕服務等漏洞。

Paste_Image.png

圖3 KCon2016上安全研究人員提出的組合fuzzing框架

1.3.2 Android App 汙點分析

  • 汙點分析可分為靜態汙點分析與動態汙點分析。靜態汙點分析不需要執行程式,以FlowDroid為例,目前主流的App靜態汙點分析技術主要包括如下步驟:

    • 解析應用AndroidManifest.xml,Layout配置檔案和相關Dex位元組碼,根據預先建模的Android LifeCycle Model生成超呼叫圖 ,又稱過程間控制流圖(Inter-procedural control flow graph, ICFG);
    • 根據定義的汙點源和錨點(Source and Sink),將其轉換為基於ICFG的後向或前向資料流問題進行求解;
    • 根據求解結果,回答是否存在從某輸入到輸出的資料流流動路徑,以顯式Intent問題為例,FlowDroid會檢測到一個以傳送intent的sink方法到最後接收intent的source的路徑存在。
  • 動態汙點分析則是在程式執行中過程,通過跟蹤變數、記憶體及暫存器的值,依據執行流程跟蹤汙點資料的傳播,最後達到跟蹤攻擊路徑與獲取漏洞資訊的目的,以TaintDroid為例,需要對Android系統進行定製化修改以便對App執行過程中的汙點資料進行跟蹤,但由於Android裝置或模擬器效能瓶頸問題,動態汙點分析無法獲取App所有可能的可執行路徑。

  • 以往汙點分析常用於Android惡意App分析,資訊洩露檢測等問題,現在越來越多的廠商也應用於App漏洞檢測上(如阿里聚安全使用的基於TaintDroid方案)。相比傳統的App漏洞檢測,汙點分析可以跟蹤汙點資料的傳播過程,確定漏洞是否在實際環境中可能被觸發,檢測能力更加強大。目前也有不少開源的Android汙點分析方案與工具如:TaintDroid、FlowDroid、amadroid及CodeInspect,在此之上也發展出一些針對Android App漏洞 檢測方面的工具,如騰訊科恩實驗室Flanker之前開源的JAADS

Paste_Image.png

圖4 Flowdroid執行流程

1.3.3Android App 通用脫殼

  • App二次打包,破解等問題的泛濫催生了App加固產業的發展,兩者技術在也攻防中不斷髮展和進化,目前國內主流的加固方案有梆梆,愛加密,百度加固,360加固,阿里聚安全,騰訊御安全/樂固,通付盾,NAGA等,對於線上漏洞檢測平臺來說,如果沒有通用的自動化脫殼方案就意味無法對應用市場中的很多App程式碼進行靜態分析,甚至由於應用被加固無法運行於模擬器中或特定測試裝置中,影響動態分析結果。
    目前針對dex檔案加固主流的脫殼方法有靜態脫殼、記憶體dump、Dalvik虛擬機器插樁,第一種方法需要針對廠商加密方案不斷更新,基本不具備通用性,後面兩者的開源代表作有:

Paste_Image.png

圖5 筆者整理的國內部分APP加固方案

1.3.4移動 AppUI自動化遍歷

  • App UI自動化遍歷常在App開發測試中用於檢測App效能與相容性,目前在App漏洞檢測領域用的比較少(主要由於效率較低)。一般主流的App漏洞檢測平臺都包含動態分析,主要是安裝App後自動執行App並監測App行為,通常使用的是Android Monkey test指令碼或其它工具隨機點選APP介面。
  • 實際上,為了更深入的檢測App敏感資訊洩露與後端WEB介面漏洞,僅靠隨機點選App介面進行動態分析是不夠的(比如現在大部分App功能需要註冊登入後才能使用),如果能更好的模擬正常使用者使用App的過程,則可以擴充套件監測Logcat日誌,本地檔案儲存,網路通訊等資料審計能力。
  • 目前APP UI測試框架按原理可分為黑盒與白盒兩種,白盒測試需要在App開發時新增測試元件並呼叫,需要App完整原始碼,黑盒測試一般提取App介面的UI元素並根據演算法進行遍歷,無需App原始碼。筆者推薦的黑盒APP UI測試框架與工具主要有

Paste_Image.png

圖6 appCrawler生成的APP測試報告

二、Android App漏洞檢測
2.1 國內Android App線上漏洞檢測平臺

2.2開源Android App漏洞檢測工具
1.MobSF

  • 主要特點:基於Python Django的開源線上漏洞檢測框架,前端UI完善,基礎功能全面,安裝佈署方便,但總體來說審計點偏少,不適合實戰,更適合輔助分析與二次開發,國內目前不少線上APP檢測的平臺都有這個框架的影子。

Paste_Image.png

圖7 MobSF生成的檢測報告

  • Drozer是MWR Labs開發的一個開源Android 安全測試框架,支援編寫自定義模組。目前已經有不少介紹Drozer文章,這裡就不多說了。

Paste_Image.png

圖8 Drozer執行介面

3.Marvin
Github:https://github.com/programa-stic/
Marvin是西班牙Programa STIC組織釋出一個開源Android App漏洞檢測框架,該框架主要分為四個專案:

  • (1)Marvin-Django
    主要包含框架前端UI介面與資料庫部分;
  • (3)Marvin Dynamic Analyzer
    一個APP動態分析引擎,基於OpenNebula及Android-x86 模擬器,可搭建分散式分析系統,用於復現靜態分析釋出的漏洞與動態檢測漏洞。
  • (4)Marvin toqueton
    一個自動化遍歷APP UI的工具,用於分析APP UI控制元件並進行自動化互動遍歷,輔助動態分析。
    主要特點:
    筆者剛看到這個專案釋出時研究了一番,主要特點有可直接搜尋下載Google應用商店或者上傳應用進行分析,可編寫自定義靜態分析指令碼,使用動態引擎複查靜態分析的結果提升準確性,使用本地應用去遍歷APP UI等,但仔細實踐後發現動態分析環境(ubuntu+openNebula+Android-X86)的佈署很麻煩,多次嘗試都未成功。

Paste_Image.png

圖9 Marvin主介面

  • 使用方便,自帶WEB介面,裝Xposed外掛可以分分鐘開始挖漏洞;2.功能全面:檢視Manifest資訊,監控本地檔案讀寫,檢視檔案內容,檢視Logcat日誌,檢視網路通訊請求(支援SSL uncheck),監控IPC通訊,檢視加密操作,呼叫未匯出元件等。

Paste_Image.png

圖10 Inspeckage主介面

三、IOS App漏洞檢測

  • 一般來說iOS App由於iOS系統安全限制(非越獄環境),且無法直接反編繹獲取App原始碼,其在安全性上遠高於Android App,但近兩年前隨著XcodeGhost(分析文章),iBackDoor,AFNetworking中間人等後門事件與漏洞的曝光,iOS App安全性也慢慢受到國內開發者與安全研究人員的關注。
    3.1 常見IOS App漏洞測試工具
    測試iOS App安全性離不開一臺越獄過的iOS裝置,以及一些測試利器。在此簡單簡介兩個iOS App安全測試工具:
    1.**Idb**

Paste_Image.png

圖11 Idb主介面

  • Idb是一款開源的iOS App安全評估工具,作者是Danl A.Mayer。
    主要功能:
  • 1.檢視應用以下資訊:應用包名;註冊的URL Schemes;SDK版本;應用資料資料夾位置;應用許可權等,
  • 2.檢視/下載應用資料檔案;
  • 3.檢視應用檔案保護級別;
  • 4.Dump iOS keychain;
  • 5.檢測應用是否加密;
  • 6.檢測應用編繹安全選項(ASLR/PIE, DEP, ARC);
  • 7.檢視應用的shared libraries;
  • 8.提取應用binary中的字串;
  • 9.Class dump;
  • 10.檢視應用URL Handler;
  • 11.Invoke and fuzz URL handlers;
  • 12.檢視系統剪下板
  • 13.截圖
  • 14.安裝系統證書;
  • 15.編輯 /etc/hosts檔案;
  • 16.檢視系統日誌;

2.**Needle**


Paste_Image.png

圖12 Needle主介面

  • Needle是MWR Labs開發的一個開源iOS安全測試框架,同樣支援開發自定義模組來擴充套件Needle的功能,目前主要功能包含對iOS應用資料儲存,IPC,網路通訊,靜態程式碼分析,hooking及二進位制檔案防護等方面的安全審計。
  • 與drozer類似,Needle提供了一個shell介面,基本idb有的功能needle都有或者說以後也會有(因為可以自己寫模組),而Needle還同時支援Cycript與Frida兩個hooking方案,可以方便的載入hook指令碼與執行命令。

3.2 IOS App自動化漏洞檢測

  • 在很長一段時間內,iOS安全研究都主要集中在iOS系統安全漏洞挖掘中,由於iOS相對安全的系統機制保護與嚴格的稽核機制,iOS App安全性一般比Android App要高不少,歷史上出現的過一些iOS App漏洞也主要集中在iOS越獄環境下,但近年來XcodeGhost,AFNetworking框架中間人漏洞以及多個惡意SDK曝光也說明了iOS App安全性並沒有我們想像的那麼高,建設iOS App自動化漏洞審計平臺對於擁有大量iOS App產品的企業來說還是很有必要的。
  • 為了提升公司iOS App安全漏洞審計能力與應急能力,筆者與riusksk(林大夫)從2015年底開始一起研發iOS App漏洞審計系統(後續併入金剛),目前已經成功上線近半年,也輔助發現了一些iOS App業務安全漏洞,詳情可參考文章:淺談iOS應用安全自動化審計
  • 此外360NirvanTeam(http://nirvan.360.cn)也上線了線上檢測功能,開源方案MobSF也有iOS App線上審計功能。此類審計平臺主要審計點有:BIN檔案分析,第三方庫漏洞檢測,XCodeGhost檢測,惡意SDK檢測等。相對來說金剛更為全面,適合開發上線前自查與安全研究人員輔助分析,包含了私有API檢測,開放埠檢測,應用檔案審計,網路通訊資料審計,日誌審計,classdump等功能,後續還會繼續優化iOS App UI自動化遍歷功能與URL scheme Fuzzing功能。

Paste_Image.png

圖13 TSRC iOS App漏洞審計報告部分內容

四、構建移動App漏洞檢測平臺

  • 目前國內無論是3BAT,還是移動安全公司,都已經提供了移動APP漏洞檢測產品,筆者平時也會對這些平臺做一些深度體驗,總體來說隨著技術發展,構建APP漏洞檢測平臺門檻已經很低技術也很成熟了。
  • 在移動網際網路時代,不同的企業對於移動APP產品安全性要求是不一樣的,如金融,支付,通訊,遊戲類APP產品對App客戶端安全,業務安全,後端伺服器安全都提出了很高要求,定製企業自已的移動APP漏洞檢測平臺還是很有必要的。
    筆者僅從個人角度談談對如何構建移動App漏洞檢測平臺的幾點看法:
    • (1)在平臺建設之初可以參考業界優秀的同類產品與開源方案,目前大部分移動App漏洞檢測平臺後端基本功能都是使用Python/Java開發,便於快速開發迭代。
    • (2)移動APP安全威脅是不斷變化的,漏洞審計規則也應該支援快速更新,同時企業移動App漏洞檢測平臺應該滿足移動App產品正式上線前審計,上線後日常排查兩個基本需求。
    • (3)很多開發人員和安全工程師對漏洞的理解是不一致的,在輸出漏洞檢測報告後,還需要提供詳細的漏洞利用場景講解與修復指引。
    • (4)多多關注學術界與工業界的新研究成果,如果能加入優化與利用,可以推動平臺整個技術能力的進步。
    • (5)平臺的主要建設者應該精通移動App漏洞挖掘實戰,能夠針對企業重點產品特性(如動態載入,熱補丁等技術)提供專業的解決方案。
      同時筆者提出了一個甲方/乙方企業通用的移動App漏洞檢測平臺架構,企業可以在此基礎上直接接入Web漏洞掃描系統掃描App後端Web漏洞,也可以收集URL測試業務安全漏洞。

Paste_Image.png

圖14 移動App自動化漏洞檢測平臺架構(點選檢視大圖)

五、未來移動App漏洞檢測平臺發展方向

  • 在Google最新發布的Android 7.0系統增加了不少安全特性,如APP開發者可以使用系統提供的介面自主配置信任的證書,預設也不再信任使用者安裝的第三方CA證書,此舉可提升Android App網路通訊的安全性。
  • 可見未來移動APP安全問題還將不斷變化,目前大部分移動APP漏洞檢測平臺最終的檢測結果也需要專業的安全研究人員評估實際風險,歷史上很多移動端嚴重漏洞也是需要結合業務場景的,所以說移動App漏洞檢測平臺也只是企業移動App安全建設中的一環,此外推動移動安全人才培養,移動App安全開發規範,應用加固,盜版監測等體系建設也同樣重要。
    筆者個人認為未來移動APP漏洞檢測平臺可發展的幾個方向有:
    • 1.機器學習
      機器學習在網路安全領域常用於惡意軟體檢測,流量檢測等方面,目前也已經出現一些利用機器學習進行Android惡意應用等方面的開源工具android-malware-analysis與研究,未來同樣也可能應用於Android App漏洞檢測。
    • 2.威脅感知與大資料
      如何從移動App中挖掘資料,並分析,整合進而利用於漏洞檢測與威脅感知也是未來移動APP漏洞檢測發展方向之一。目前部分漏洞檢測平臺已經開始支援採集應用市場所有移動APP原始碼及執行過程中產生的網路通訊資料(如域名,IP,URL等),進行聚合分析與WEB介面漏洞檢測。同時四維智創,梆梆等安全公司開始推廣移動應用威脅感知產品,此類產品通過SDK收集應用的行為與網路資料,用於檢測APT攻擊,防刷單等場景。

3.社群化

  • 目前國內已經有一些社群化的WEB漏洞檢測平臺,如Seebug,Tangscan等,盤古即將公測的Janus(http://appscan.io)也同樣開始主打社群化,Janus支援社群使用者自定義檢測規則,後臺結合海量全網應用資料,可用於全網應用快速漏洞掃描。同時社群化加入了安全研究員的人工審計流程,後續可以不斷提升漏洞特徵建模的細度與廣度,提升平臺檢測能力。

參考資料:

原文連結:http://www.jianshu.com/p/c1776ad393c6