flowdroid 簡介

一、整理自論文:html

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

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

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

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

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

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

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

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

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

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

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

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

  apk文件做爲靜態污點分析的輸入

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

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

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

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

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

四、論文貢獻:

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

五、activity生命週期

  由此致使的結果是,分析安卓程序構建調用圖時不能簡單的從尋找main方法着手。必須對安卓生命週期中全部可能的傳遞關係進行建模。FlowDroid採用dummy main的方法來對生命週期進行仿真。然而生命週期並不是這麼簡單。存在某些函數來保存和恢復狀態。回調函數也能夠形成額外的狀態變化。

六、

七、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文件中跟蹤函數調用路徑,生成函數調用控制流圖

八、

  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的整個路徑。

九、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內部組件通訊的分析,對於多線程問題只能模擬成任意順序序列,不能並行處理

十、DroidBench測試準確性與高效性:

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

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

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

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

十一、

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個)。

十二、Android隱私安全研究進展

相關文章
相關標籤/搜索