文獻筆記《AppIntent - Analyzing Sensitive Data Transmission in Android for Privacy Leakage Detection》

文獻引用:Yang Z, Yang M, Zhang Y, et al. Appintent: Analyzing sensitive data transmission in android for privacy leakage detection[C]//Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security. ACM, 2013: 1043-1054.


亮點:通過區是否由用戶意願產生的數據傳播來判別是否隱私泄露,研究行爲觸發,是最近看到比較吸引人眼球的文章,感謝 綠柚子 友情助攻


文章概要

很多研究採用污點分析的思路(static taint , dynamic taint)用來分析敏感數據的傳播,對於大多數分析都能判斷哪些敏感數據流出。但這些數據的流出並不一定就表示隱私數據的泄露,這篇文章最大的亮點在於提出一種思路:根據用戶對這些敏感數據流出是否知情,來判斷是否存在隱私泄露。同時提出了一種方法應用於隱私數據泄露的檢測,簡單的說,經過自動化測試之後,當發生敏感數據傳播時,如果這些傳播是由一系列符合邏輯的操作觸發的,那麼這些敏感數據的傳播就不算隱私泄露,否則認爲是隱私泄露。本文主要工作更多在做行爲觸發。


現狀不足

本文需要根據static taint解析出導致數據傳播的路徑,並從中提取出觸發這一執行路徑的輸入序列,因此文中還是離不開符號執行(Symbolic execution),該技術被廣泛用於測試樣例的產生(test case generation)、模糊測試(fuzz testing)、安全漏洞的檢測(security flaws detection)。
但是符號執行面臨的難點在於:對於沒有用戶交互的程序符號執行效果良好,但對於用戶交互的程序則變得困難(路徑激增),目前處理GUI的符號執行主要採用隨機策略犧牲了代碼覆蓋率。

基礎知識

Android系統中主要有3中事件:系統回調週期狀態(由於回調是無止境、沒有邊界的因此符號執行對於此也有很大的難點需要克服)、GUI事件系統事件


 
OnStart->OnPause->OnResume->OnPause->OnResume..等循環 對於傳統的符號執行的搜索空間將無窮大

而對於GUI事件,由於是在APP 運行狀態下由主線程獲取事件輸入,因此事件所觸發的行爲是依據順序的。


整體架構

由於Android更多在於UI交互,並且用戶交互也是判斷敏感數據泄露的關鍵,因此本文提出一種方法 eventspace constraint guided symbolic execution。基於此方法,實現了AppIntent,主要有一下目標:
1.產生關鍵的導致app敏感數據傳播的輸入(及核心產生行爲觸發)
2.克服傳統符號執行代碼覆蓋率不足的缺點,在更多的代碼覆蓋率下確保較低的誤報率
3.提供一個直觀的工具用於分析人員確定是否發生隱私泄露

系統架構如下:



1.eventspace constraint guided symbolic execution
採用static taint進行預處理並提取出所有可能導致數據傳播路徑相關的事件,接着構建事件空間圖使用該圖引導符號執行提取關鍵的輸入。
2.動態分析平臺
主要採用InstrumentationTestRunner對APP進行重打包後觸發相關事件行爲

核心(eventspace constraint guided symbolic execution)

事件空間圖主要元素包括三類:
1.關鍵事件(粗線的點):定義爲其處理函數中,至少有一條指令包含在給定的數據傳播路徑中的事件。
2.必要事件(細線的點):定義爲是關鍵事件的先決事件,並且其指令不包含數據傳播路徑中。(一般爲包含關鍵事件activity的生命週期回調或最終導致關鍵事件觸發的組件的事件)
3.有向邊表示兩則的先後關係。

關鍵事件的提取

針對數據傳播路徑中包含的指令,通過分析其前後的調用關係,尋找到可能導致該指令觸發的關鍵事件。
例如如下SMS應用發送短信簡易流程圖


提取出關鍵事件爲:
<PushReceiver, onReceive>, <MessagePopup,OnStartjOnNewIntent>, <MessagePopup, OnClick>, and
<ComposeMessageActivity, OnClick>.但是由於Android GUI與很多佈局有關,而之前這些關鍵事件的提取只涉及到了對應的處理函數而並沒有指明對應的佈局,這樣一來並不利於指導符號執行。本文還構建一個程序依賴關係圖,從圖中switch中提取分支視圖,例如i3 和 i4 中的view爲v1.其他GUI事件也如此方法提取出來。

必要事件的提取

正如前面說的Android有自己特有的執行模型,例如OnResume()函數在APP沒有被OnCreate()和OnStart()之前是不可能被調用的,因此,必要事件的提取就是爲了補充這些內容(一般爲回調生命週期函數以及觸發包含關鍵事件的activity的發起組件例如intent的發起者)-目前的AppIntent主要工作只是針對intent.


經過以上的提取,整個事件空間圖已經就緒,接下來符號執行需要的工作就是從這事件空間圖中獲取觸發數據傳播的事件序列


引導符號執行



算法流程就如上圖,首先P代表了最後一個關鍵事件觸發之前的事件集合,C代表了能夠到達該執行點的數據

經過這樣的符號執行後,原來的事件空間約束圖變爲:



動態平臺分析

提供事件作爲輸入
動態平臺主要利用了Android InstrumentationTestRunner ,在之前分析得出的事件序列基礎上,產生出特定的測試樣例,對於一些事件輸入,包括點擊,位置變化,但是由於IR技術缺陷,並不能處理運行時事件包括打電話等。對於沒有view來約束的,將從manifest隨機選擇view爲事件提供的上下文。

提供數據作爲輸入
由符號執行產生的數據輸入很多是GUI相應元素的text。但是由於IR自身不能提供網絡數據測試,因此對於網絡輸入AppIntent不能觸發。

對GUI事件激活的view要進行顯著提示
由於view是GUI界面都子元素,因此,view能夠提供相應的上下文信息表明用戶正處於交互狀態

對於敏感數據傳輸也有要進行顯著提示
敏感數據傳輸是,我們必須對進行提示,用來通知分析者目前正有信息被傳輸,更多是由於泄露造成的(原來APP的數據傳輸並不是有用書有意識觸發的)

性能分析

較傳統符號執行更高效
相比於TaintDroid能夠明細的區分出隱私泄露
(從中也得到一些特徵:對於ID 電話號碼的數據外傳是普遍的,但是卻基本都沒有通知用戶;一些APP會把一些相關數據寫入logcat,這麼一來會導致潛在的泄露發生)
耗時分析等


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章