天天看點

程式分析:Android漏洞挖掘技術

Android漏洞挖掘技術

靜态分析(控制流分析、資料流分析、結構分析)、動态分析、污點傳播分析

過程内分析、過程間分析(函數調用)

漏洞挖掘開源工具:FlowDroid、AppAduit  、TaintDroid、AppIntent

程式分析:Android漏洞挖掘技術

反編譯:Apk=>僞代碼=>三位址碼

Apktool(apk轉換為smali)-dex2jar(dex轉換為jar)-smali/baksmali(dex轉換為smali)

aDFAer:基于過程間分析的Android程式隐私洩露檢測的研究

Android作業系統結構:應用程式結構-安全機制(權限管理機制,沙箱機制)

隐私資料PII:日志資訊,裝置相關資訊IMEI/SIM,通訊錄和通話記錄,短消息紀錄,地理位置資訊

隐私洩露:網絡連接配接洩露,短資訊發送洩露,向手機内部洩露

自動化隐私洩露檢測工具:預處理(位元組碼>僞代碼)、控制流分析(控制流圖|調用資訊圖)、資料流分析(到達-定值分析、常量分析、别名分析、類型分析)、污點分析、傳播路徑(源點,錨點)

控制流分析(邏輯控制關系):控制流圖CFG(基本塊起始語句>生成基本塊>添加控制流邊)-調用關系圖(Worklist算法)

     基本塊起始語句:第一條語句,調轉語句的跳轉目标,所有跳轉語句的下一條語句

資料流分析(程式資料傳遞關系):

污點分析:源點(發送程式的資料點)-錨點(接收資料的程式點)-傳播路徑

動态污點分析:污點資料(對源點的資料加上特定标記)->運作程式->檢測錨點的資料中是否包含有污點資料->隻覆寫主要資料傳播路徑)

靜态污點分析:正向污點分析(所有依賴污點源點的資料全都标記為被污染的資料)、逆向污點分析(可能污點錨點的資料标記為污點資料)

檢測技術架構

靜态程式分析檢測技術:預處理、控制流和資料流分析、污點分析

程式分析:Android漏洞挖掘技術

過程内分析:每一個函數的到達定值、常量、别名和類型進行分析

過程間分析(函數調用之間的資料流合并):自底向上重複操作語句 S<-> IN [S](輸入)-OUT [S](輸出)-GEN [S](産生集)-KILL [S](消除集)

污點檢測規則:API比對規則statement、API危險程度risklevel(0,1,2)、API功能描述state-description

         檢測工具靜态邏輯視圖:Analyzer(總控子產品,圖形化顯示界面|檢測工具的驅動類)、Dedexer

(僞代碼反編譯子產品)、EntryPointAnalyzer(分析入口提取子產品)、InterAnalyzer(過程間分析子產品)、ControlFlowAnalyzer(控制流分析子產品) 、DataFlowAnalyzer(資料流分析子產品:常量分析、别名分析、反射分析、資料依賴分析、類型分析子子產品)、TaintAnalyzer(污點分析子產品)、TaintGraphBuilder(可視化生成子產品)

APPAudit:基于靜态程式分析方法的ANDROID應用程式行為審計

敏感資訊:短信、通話記錄、位置資訊、浏覽器曆史記錄

AppAudit系統:Dalvik位元組碼和Manifest檔案=>函數調用圖,擴充函數調用圖=>API分析=>可疑路徑(過高分析)->執行器(記憶體對象模型)、污點分析

AppAudit系統架構和工作流程:

程式分析:Android漏洞挖掘技術

第一階段:APK檔案-調用方法(invoke) 基本函數調用圖 擴充函數調用圖(包含所有顯示/隐式控制流) 廣度優先搜尋算法 可疑路徑集合

第二階段:可疑路徑集合(Dalvik位元組碼指令) 可疑代碼路徑p與源函數Fs和目标函數Ft的距離之和δ(p, Fs) + 條可疑代碼建立全新上下

AppAudit執行器的狀态機:

        執行exec模式(執行規則)

        檢查check模式(遇到目标函數)

        正常終止end模式

        模糊fuzzy模式(遇到操作數未知而無法繼續執行的指令)

        異常終止fail模式(未知值過多或執行上下文不足而無法恢複執行)

程式分析:Android漏洞挖掘技術

系統實作:反彙編引擎的接口層、基于API分析的可疑路徑選取、對象模型、執行器、污點分析、模糊執行、Android系統和裝置模拟子產品

程式分析:Android漏洞挖掘技術

APPAudit:http://appaudit.io/、https://github.com/mingyuan-xia/PATDroid

patdroid.core:類classes,屬性fields和原始Java類型值的抽象

patdroid.permission: 指定每個Android API需要的Android權限

patdroid.fs: 一個模拟和簡化的Android檔案系統

patdroid.dalvik: Android Dalvik JVM指令和表示

patdroid.smali: 使用SMALI從APK中提取類,方法,字段和說明

patdroid.util:參數設定、日志、資料輸出

Android位元組碼動态分析分布式架構

靜态分析-動态分析

事件機制(虛拟機事件-Binder分析事件)

JVM

ShadowVM影子虛拟機

DiSL注入架構(JVMTI工具接口)

DVM

安卓應用組成(四大元件)

程序間通信Binder機制

匿名共享記憶體Ashmem

修改Dalvik虛拟機實作->安卓系統提供JVMTI接口->動态分析需要的虛拟機事件

位元組碼注入

dex2jar工具(DVM位元組碼>JVM位元組碼>DisL架構注入>DVM位元組碼)

目标虛拟機

通信(系統服務ACS-替換JavaAgent)

分析服務

分布式動态架構:

       架構因素(複雜的控制流,資源有限)

      架構設計(分析通信服務ACS、Zygote程序、應用程式程序、System server程序)

程式分析:Android漏洞挖掘技術

TaintDroid

隐私資料  污點标記-污染源

 截取-拼裝-加密-傳遞

污點傳播

程式分析:Android漏洞挖掘技術

Dalvik層五種類型的變量存儲: 局部方法變量,方法的參數,類的靜态變量,類執行個體的字段-數組

污點标記的傳播技術:解釋代碼污點傳播(指派,參數傳遞,傳回值)、原生代碼污點傳播(JNI機制)、二級存儲污點傳播、IPC污點傳播

程式分析:Android漏洞挖掘技術

FlowDroid:精确的上下文,流,字段, 對象敏感和生存周期感覺的污染分析

Attacker Model攻擊者模型:

1 public class LeakageApp extends Activity {

2 private User user = null ;

3 protected void onRestart (){

4      EditText usernameText = ( EditText ) findViewById (R.id. username );

5       EditText passwordText =

( EditText )findViewById(R.id.pwdString);//source

6      String uname = usernameText . toString ();

7      String pwd = passwordText . toString ();

8      if (! uname . isEmpty () && ! pwd . isEmpty ())

9                this . user = new User (uname , pwd );

10    }

11 // Callback method in xml file

12 public void sendMessage ( View view ){

13              if( user == null ) return ;

14              Password pwd = user . getpwd ();

15         String pwdString = pwd . getPassword ();

16              String obfPwd = "";

17              // must track primitives :

18              for ( char c : pwdString . toCharArray ())

19                       obfPwd += c + "_"; // String concat .

20

21              String message = " User : " +

22                       user . getName () + " | Pwd: " + obfPwd ;

23              SmsManager sms = SmsManager . getDefault ();

24              sms.sendTextMessage(" +44 020 7321 0905 ",  //sink

25             null , message , null , null );

26 }

Precise Modelling of Lifecycle生命周期精确模組化

入口、異步執行元件、回調Callbacks

CFG for dummy main method:

程式分析:Android漏洞挖掘技術

Precise Flow-Sensitive Analysis精确流敏感分析

Taint analysis污點分析:

程式分析:Android漏洞挖掘技術

x.f -> z.g.f -> a.g.f -> b.f

On-demand alias analysis 按需别名分析:基于IFDS算法

向前分析:

程式分析:Android漏洞挖掘技術

向後分析:

程式分析:Android漏洞挖掘技術

維護上下文敏感度:

Listing 2: Example for context injection

1 void main () {

2       Data p = new ... , p2 = new ...

3       taintIt (source() , p);

4       sink(p.f);

5       taintIt (" public ", p2);//僅傳播字元串public,x.f别名不包括

6       sink(p2.f);//不報告

7 }

8 void taintIt ( String in , Data out ) {

9       x = out ;

10     x.f = in;

11     sink( out .f);

12 }

問題:source-> in -> x.f ->out.f -> Line6 sink->p.f -> Line4 sink

解決:向後向分析注入前向分析的上下文

程式分析:Android漏洞挖掘技術

維持流量敏感度:activation statements激活語句

Listing 3: Example for activation statements

1 Data p = new ... , p2 = p;

2 sink(p2.f);

3 p.f = source();//設為激活語句:前向分析時污點激活,後向分析污點不激活

4 sink(p2.f);//不報告

問題:第一次調用sink絕對發生在p2.f變為污染之前,後向分析p.f->p2.f,前向分析報告任何p2.f洩露,導緻了line2的誤報

FlowDroid解決方法:activation statements

Implementation

FLOWDROID的體系結構:

程式分析:Android漏洞挖掘技術
  1. 解析各種Android特定檔案(布局XML檔案,包含可執行代碼和清單的dex檔案

定義活動,服務,廣播接收者的檔案,應用程式中的内容提供者)

  1. FLOWDROID生成虛拟主方法從生命周期清單和回調方法。然後,該主要方法用于生成調用圖和一個程式間控制流程圖(ICFG)
  2. 污染分析:source->sink,報告包括完整的路徑資訊

FlowDroid源碼結構:

https://blogs.uni-paderborn.de/sse/tools/flowdroid/

https://github.com/StevenArzt

  1. Jasmin
  2. Soot
  3. Heros
  4. soot-infoflow – contains a generic taint analysis通用的污點分析
  5. soot-infoflow-android – This models the Android lifecycle 生命周期模組化
  6. some configuration files for FlowDroid (sources and sinks, taint wrappers, callback lists)

Soot架構

Class類别:argument classes(給soot指定的classes)、application classes(被soot架構分析轉換輸出的那些類),library classes(被application classes引用的類,被用于轉換分析過程中的類)

Soot對象:Scene(完整的分析環境)、SootClass(soot加載的待分析的類或者soot建立的類)、SootMethod(SootClass中的單個方法)、SootField(SootClass中的字段)、Body(方法主體)

Soot的中間語言:grimple、shimple、jimple、baf

Soot的執行流:

過程内分析的執行流:不存在函數調用

程式分析:Android漏洞挖掘技術

一般每種語言都有:transformation(轉換)、optimizations(優化)、annotion(注釋)三步

過程間分析的執行流:存在函數調用

程式分析:Android漏洞挖掘技術

soot會增加三個階段:cg(call-graph generation)、wjtp(whole jimple transformation pack)、wjap(whole jimple annotation pack)。

IS

繼續閱讀