移動應用安全常用元件Soot、Flowdroid簡介&基本使用
Soot
簡介
soot是java最佳化框架,提供4種中間程式碼來分析和轉換位元組碼。
l Baf:精簡的位元組碼錶示,操作簡單
l Jimple:適用於最佳化的3-address中間表示
l Shimple:Jimple的SSA變體
l Grimple:適用於反編譯和程式碼檢查的Jimple彙總版本。
soot提供的輸入格式有:java、android、class等
輸出格式有:Java位元組碼、android位元組碼、Jimple、Jasmin、shimple、baf等,這些實際業務中常使用的,當然還有其它的格式,這裡不再一一列舉。
藉助soot對android的分析能力,我們可以進一步分析安卓應用的安全漏洞,比如元件暴露、加密演算法等存在的安全問題。
基本使用
可以GIT下載最新的soot jar包,我下載的是4.1.0版本中的sootclasses-trunk-jar-with-dependencies.jar 包,這個包應該自帶了soot所需要的所有依賴。下載完成後使用powershell進入jar檔案所在的資料夾,可以輸入以 下命令:
java -cp sootclasses-trunk-jar-with-dependencies.jar soot.Main檢視soot相關的資訊
首先我們來看soot怎麼分析java程式碼(這裡以class檔案分析為例):
第一步,配置soot環境資訊
StringBuffer cp = new StringBuffer ();
cp . append ( "." );
cp . append ( File . pathSeparator + apiPath );
cp . append ( File . pathSeparator + "C:\\Program Files\\Java\\jre1.8.0_171\\lib\\rt.jar" + File . pathSeparator
+ "C:\\Program Files\\Java\\jre1.8.0_171\\lib\\jce.jar" ); System . setProperty ( "soot.class.path" , cp . toString ());
第二步,設定soot的配置屬性(各屬性說明可以參考GIT上官方文件資訊)
第三步,拿到程式碼資訊
現在,我們在看看soot怎麼分析android apk
同樣,我們可以得到apk的程式碼資訊,包括class、method、attribute等,基於這些進行進一步分析並應用到實際檢測業務中。
使用場景
使用Soot對Android應用進行靜態分析,目前包括主要的檢測場景:
l 檢測應用中敏感字串url和email、IP等
l 檢測應用中風險程式碼片段
l 檢測應用可能存在的漏洞,如元件暴露、過度申請許可權、不安全加密演算法等
FlowDroid
簡介
FlowDroid( github 連結 ) 是目前對Android app進行汙點分析效果最好的工具之一。 汙點分析的目的其實很簡單,就是為了檢查是否應用中是否存在從汙點源到洩漏點的資料流。 但是它的優點在於它構建的資料流精度很高,可以對上下文,流,物件和欄位敏感,從而使得分析結果非常精確。
它實現精準分析的原因有幾點:
l 1. 它對Android宣告週期進行了比較完整的構建,例如Activity中的OnCreate,OnResume等。透過抽象一個dummyMain作為分析的入口來支援Android應用的分析;
l 2. 它實現了精準的資料流分析,其中包含前向汙點分析和後向別名分析。他們的實現其實都是基於heros的資料流分析框架來實現的。這裡面的演算法比較複雜,我的理解是這兩種分析都是滿足上下文敏感和流敏感的,後向分析的演算法提供了物件敏感和欄位敏感的支援;
l 3. 它支援簡單的native code的汙點分析
l 當然,它也存在一些不足之處,包括:
l 1. 不能對元件間(Intent)的汙點傳播進行分析
l 2. 隱式流問題
l 3. native code不能完美支援
儘管存在一些不足之處,在各大會議上也已經提出了數十種新的靜態汙點分析演算法,相比FlowDroid在一些資料集或是DroidBench上有著更快的執行速度以及更優的精準度。但FlowDroid仍然是公共資源中可獲取的靜態汙點分析工具的唯一選擇,因為很多paper提供的原始碼幾乎沒有註釋與文件,導致使用極其困難;另外科研人員往往僅在有限的測試集上進行了執行,所以去使用這樣的程式不可避免的會遇到Bug。相比之下,FlowDroid作為被持續維護的一款框架,其穩定性上具備了一定的保證,同時其底層的Soot框架強大的功能與較為完善的文件,使得FlowDroid上手難度相對較低。
基本使用
環境配置
FlowDroid的配置方法有兩種,可以直接下載相關jar包,也可以使用maven配置依賴。jar包可以去FlowDroid的GitHub上進行下載,僅需soot-infoflow-android-classes.jar和soot-infoflow-classes.jar兩個檔案即可,另外去Soot的 倉庫 下載包含了heros與jasmin的sootclasses-trunk-jar-with-dependencies.jar,將上述三個包加入專案依賴便完成了FlowDroid的配置
執行
整個FlowDroid最頂層的類便是soot.jimple.infoflow.android.SetupApplication,大部分的設定與執行都可以透過操作這個類的例項進行。SetupApplication既可以在呼叫runInfoflow()時傳入配置引數,也可以在初始化SetupApplication時或初始化後傳入配置引數。SetupApplication的初始化函式以及runInfoflow函式有多種不同引數型別的實現,可以查閱原始碼後根據情況選擇,這裡僅提供我自己使用的一種方式:
關於Source、Sink
汙點分析中的source點表示汙點分析的起始點,而sink點表示汙點分析的結束點。換言之,FlowDroid在“掃描”這個apk後,會從source點開始分析資料流,當資料流“流到”sink點時將其標註。FlowDroid中的source與sink均為類方法,在soot-infoflow-android下有提供一份SourcesAndSinks.txt的檔案,是FlowDroid當時使用的一些可能涉及到訪問隱私資料的api,從裡面很容易看出宣告檔案的格式:
每一行作為獨立的宣告,%開頭的表示註釋,可以根據應用需求自行新增刪減Source與Sink的宣告。
使用場景
Flowdroid本身輸出結果只是資料流資訊,需要結合我們定製source、sink資訊產生業務價值,一般有以下使用場景:
l 隱私資料洩露檢測
l 汙點傳播類問題檢測
l Android元件間資料傳遞風險檢測
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70022614/viewspace-2918103/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 移動應用程式開發簡介!
- Harmony 應用開發常用元件介紹元件
- 智慧且整合的端到端移動應用程式安全解決方案——Quixxi簡介UI
- 移動web——移動web開發簡介,WebStorgae簡介Web
- 《Vue.js 3移動應用開發實戰》簡介Vue.js
- Web 應用安全性: HTTP簡介WebHTTP
- 移動應用安全:2021年的安全漏洞
- 海雲安應用安全測試、移動應用安全、開發安全再次上榜
- 鴻蒙安全控制元件簡介鴻蒙控制元件
- jQuery-簡介與基本使用jQuery
- iOS CocoaPods簡介及基本使用iOS
- 移動應用隱私合規檢測簡介及目標檢測技術的應用
- TreeViewTemplate移動元件詳細介紹View元件
- Android基本控制元件和Activity的基本應用Android控制元件
- 25-移動應用安全需求分析與安全保護工程
- Android 應用程式元件介紹Android元件
- 鴻蒙安全控制元件之位置控制元件簡介鴻蒙控制元件
- Testcontainer桌面應用簡介AI
- FreeRTOS——基本簡介
- ElasticSearch基本簡介Elasticsearch
- 使用 .NET MAUI 建立移動應用——Get StartUI
- Material Design - 常用控制元件介紹和使用Material Design控制元件
- 鴻蒙安全控制元件之儲存控制元件簡介鴻蒙控制元件
- 鴻蒙安全控制元件之貼上控制元件簡介鴻蒙控制元件
- AnyProxy簡介移動端抓包工具
- 常用索引簡介索引
- 使用Java和Dapr構建雲原生應用簡介Java
- 中移鏈合約常用開發介紹 (一)開發基本流程
- 7.3 應用場景簡介
- Git使用總結(一):簡介與基本操作Git
- Java IO流字元流簡介及基本使用Java字元
- java的基本函式(介紹)--過載概念、基本應用Java函式
- ElasticSearch基本簡介(一)Elasticsearch
- Go 常用標準庫之 fmt 介紹與基本使用Go
- SpringCloud-常用元件介紹SpringGCCloud元件
- Flutter #0 移動開發技術簡介Flutter移動開發
- 簡單介紹標準庫fmt的基本使用
- 一、Go語言基礎:入門應用簡介及常用命令Go