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隱私安全研究進展