一、整理自論文: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測試高效性與準確性
不足是對於複雜的系統調用追蹤困難,不能檢測多線程引起的信息泄露
四、論文貢獻:
五、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程序的污點分析問題的效果如何?
因爲沒有專門針對安卓的測試集,所以,論文做者開發了DroidBench。該測試集包含了39個小的安卓應用程序,可用於安卓污點靜態、動態分析的評估。
比較對象:
IBM AppScan Source v8.7
HP Fortify SCA
結論:
AppScan和Fortify爲了下降誤報,犧牲了回召率,所以漏報了一些實際存在的隱私泄漏錯誤。而FlowDroid回召率比上述兩個工具備顯著提升,精度上也有小幅優點。
InsecureBank是Paladion Inc.製做的用於評估分析工具水平的安卓程序。它包含了許多種與實際應用程序相似的漏洞和數據泄漏。
測試環境:
筆記本電腦
測試結果:
FlowDroid找到了全部的數據泄漏缺陷,既沒有誤報,也沒有漏報。用時31s。
論文做者將FlowDroid應用於超過500個Google Play中的應用程序。
精度:
沒有發現惡意軟件。檢測到的主要問題是敏感數據例如位置信息泄漏在logs或者是preference文件中。
效率:
絕大多數檢測在1分鐘內完成。用時最長的app是Sumsang’s Push Service,用時4.5分鐘。
在VirusShare項目中測試。該項目包含了約1000個已知的惡意程序樣本。平均運行時間爲16s,最短用時5s,最長用時71s。大部分app含有2個數據泄漏問題(平均每一個app含1.85個)。
十二、Android隱私安全研究進展