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 FilesJavajre1.8.0_171lib
t.jar" + **File.**pathSeparator **
** + "C:Program FilesJavajre1.8.0_171libjce.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組件間數據傳遞風險檢測
審核編輯:湯梓紅
-
移動應用
+關注
關注
0文章
65瀏覽量
15709 -
JAVA
+關注
關注
20文章
2984瀏覽量
106765
發布評論請先 登錄
KaihongOS操作系統:Button按鈕組件介紹
RF-Labs手工成型電纜組件
亞馬遜移動電源UL2056檢測認證辦理?
SQLite數據訪問組件

貼片NTC熱敏電阻在移動設備電池中的應用

DIY項目中常用的端子類型
芯盾時代入選中國移動安全解決方案市場洞察報告
aes算法在移動應用中的應用場景
RVBacktrace RISC-V極簡棧回溯組件

芯盾時代設備指紋技術如何助力移動端安全
鴻蒙ArkTS聲明式組件:Image

小米科技高級安全專家:智能汽車Tbox安全漏洞分析

評論