flowdroid 簡介


1、整理自論文:

FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Taint Analysis for Android Apps

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

下載見:https://github.com/secure-software-engineering/soot-infoflow-android

安裝運行見:https://github.com/secure-software-engineering/soot-infoflow-android/wiki

下一篇寫一個構建運行的博客。

已寫完,見http://www.cnblogs.com/zlz099/p/6972805.html

2、基於污點的靜態分析,目的是發現是否有從source到sink的路徑

  分析信息流所有可能的路徑,但不需要運行app 生成控制流圖CFG,追蹤從source到sink的數據流

  設置污點追蹤敏感信息流的泄露路徑。

  敏感數據的source是賬號密碼、聯系人、短信、數據庫、IMEI sink是因特網、存儲卡、進程通信、短信發送等

  靜態分析的難點主要在於安卓程序不是獨立的封閉程序,而是在安卓framework中運行的。安卓的回調函數機制增加了app生命周期的復雜度。

3、上下文敏感,流、字段、對象敏感

  apk文件作為靜態污點分析的輸入

  模擬了完整的Android應用生命周期來處理回調

  source、sink的檢測通過解析從apk文件中抽取的manifest文件、dalvik虛擬機字節碼文件和xml布局文件

  生成一種dummy main函數,模擬activity生命周期,建立函數調用控制流圖CFG

  設計DroidBench測試高效性與准確性

  不足是對於復雜的系統調用追蹤困難,不能檢測多線程引發的信息泄露

4、論文貢獻:

  • FlowDroid,學術界第一個context/object/flow sensitive的針對安卓全生命周期的污點分析方法。
  • 基於上述方法的開源工具的實現。
  • DroidBench,一個新的、開源的、全面的測試程序集。
  • 將FlowDroid與商業工具AppScan和Fortify進行對比,比較這些工具在精確度precision和召回率recall。

5、activity生命周期

  由此導致的結果是,分析安卓程序構建調用圖時不能簡單的從尋找main方法着手。必須對安卓生命周期中所有可能的傳遞關系進行建模。FlowDroid采用dummy main的方法來對生命周期進行仿真。然而生命周期並非這么簡單。存在某些函數來保存和恢復狀態。回調函數也可以造成額外的狀態變化。

6、

7、multiple entry point:Android 沒有main函數,但每個組件有lifestyle。

flowdroid生成一個dummy main方法精確模仿lifestyle。

asynchronously executing component:

  一個app可能有多個activity和service,flowdroid假定所有的項都能異步執行,分析所有dummy main方法中提到的生命周期。

  具有path不敏感性,不需要考慮所有可能的在lifecycle中的執行順序。

callbacks:兩種注冊方式,

  XML中注冊:XML文件被映射到多個控件中,設定標識符,跟蹤生成映射

  用命令的方式:在class文件中跟蹤函數調用路徑,生成函數調用控制流圖

8、

  1) w作為被污染了的變量,被向前傳遞給了heap中的x.f。

  2) 繼續追蹤x.f  

  3)每當heap中有成員被污染,使用向后分析找出相關對象的各種別名。如發現x和z.g是引用的heap中的同一位置

  4-6)z是作為參數傳遞進來的,繼續向后找看到caller的a即called的z,再往后發現b也是別名。

  7)對b.f做前向分析,判斷出其被傳遞到sink,從而展現了從source到sink的整個路徑。

9、flowdroid框架:

Manifest.xml: 應用全局配置文件,

*.dex: Dalvik虛擬機字節碼(應用程序)

layout xml 布局配置文件

Android在運行程序時首先需要解壓apk文件,然后獲取編譯后的androidmanifest.xml文件中配置信息,執行dex程序。

解壓apk文件后,flowdroid生命周期相關的函數、回調函數,以及作為source和sink的函數。

然后為生命周期和回調函數產生main方法。main方法用來產生調用圖以及inter-procedural control-flow graph(ICFG)

  1)unzipping apk文件,通過解析XML、dex、manifest文件,追蹤activity,service的生命周期

  2)flowdroid根據lifestyle和callback方法生成dummy main方法,建立ICFG控制流圖

  3)report所有從source到sink的流,包含整個路徑的信息

  4)忽略了動態加載的代碼和反射機制,它將JNI代碼當作黑盒來處理,信息跟蹤比較困難

  5)缺少對app之間和app內部組件通信的分析,對於多線程問題只能模擬成任意順序序列,不能並行處理

10、DroidBench測試准確性與高效性:

   flowdroid檢測到93%的泄露,精確度高達86%

  成功檢測Google Play的500app中隱私泄露

  識別大約1000種已知病毒庫中的惡意軟件

  性能優於商業性檢測工具AppScan Source和Fortify SCA

11、

RQ1 FlowDroid和商業的安卓污點分析工具在精度和召回率的比較情況?

RQ2 FlowDroid在Insecure Bank測試集上的效果如何?Insecure Bank是一個用來測試安卓分析工具的能力和性能的測試集。

RQ3 FlowDroid可以用於實際應用程序的泄漏檢測嗎?速度如何?

RQ4 FlowDroid在純java程序的污點分析問題的效果如何?

1) 與商業污點測試工具的比較

由於沒有專門針對安卓的測試集,因此,論文作者開發了DroidBench。該測試集包含了39個小的安卓應用程序,可用於安卓污點靜態、動態分析的評估。

比較對象:

IBM AppScan Source v8.7

HP Fortify SCA

結論:

AppScan和Fortify為了降低誤報,犧牲了回召率,因此漏報了一些實際存在的隱私泄漏錯誤。而FlowDroid回召率比上述兩個工具有顯著提高,精度上也有小幅優勢。

2) RQ2: Performance on InsecureBank

InsecureBank是Paladion Inc.制作的用於評估分析工具水平的安卓程序。它包含了許多種與實際應用程序類似的漏洞和數據泄漏。

測試環境:

  • Intel Core 2 Centrino CPU
  • 4 GB 物理內存
  • Windows 7
  • Oracle JRE V1.7 64 bit

筆記本電腦

測試結果:

FlowDroid找到了所有的數據泄漏缺陷,既沒有誤報,也沒有漏報。用時31s。

3) 在實際應用程序中的測試情況

GOOGLE PLAY

論文作者將FlowDroid應用於超過500個Google Play中的應用程序。

精度:

沒有發現惡意軟件。檢測到的主要問題是敏感數據例如位置信息泄漏在logs或者是preference文件中。

效率:

絕大多數檢測在1分鍾內完成。用時最長的app是Sumsang’s Push Service,用時4.5分鍾。

VIRUSSHARE

在VirusShare項目中測試。該項目包含了約1000個已知的惡意程序樣本。平均運行時間為16s,最短用時5s,最長用時71s。大部分app含有2個數據泄漏問題(平均每個app含1.85個)。

12、Android隱私安全研究進展

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM