◆孫夢陽
(上海交通大學 上海 200240)
TaintDroid數據流監控系統缺陷及優化策略研究
◆孫夢陽
(上海交通大學 上海 200240)
本文首先綜述安卓系統安全檢測技術發展現狀,在詳細分析了基于安卓惡意應用檢測的TaintDroid數據流監控系統缺陷的基礎上,給出了一種基于擴展TaintDroid的檢測范圍來實現用戶隱私保護的策略。
數據流;監控系統;優化策略
隨著移動智能設備的大量普及,人們使用智能手機的場合也越來越多,無論是登錄社交應用跟別人聊天,還是使用手機保存自己的重要信息,智能移動設備現在已經完全變成了每個人的隨身私密管家,對人們的生活起著至關重要的作用。正是由于智能終端設備的功能已經進步的如此強大,由此而來吸費、流量消耗、隱私泄漏、系統破壞、遠程控制等安全問題也越來越嚴重。目前流行的移動智能終端操作系統多為蘋果公司的iOS系統以及Google公司的Android系統,兩者占據了幾乎全部的移動智能終端市場。由于iOS平臺的封閉性和非定制性,使得用戶和應用的大量操作被限制。并且,未越獄的iOS只能夠從App Store中下載app應用,這確保了其中的app已經經過審核,相對安全。Android是Google公司推出的手機操作系統,由于Android具有開源、可編程軟件框架、網絡化設備的特點,Android更易受到智能手機病毒的攻擊。因此,基于安卓Android系統的移動智能終端,如何保護用戶的隱私數據,已逐漸成為業內關注的一個極其重要的課題。
目前基于Android安全問題的安全檢測系統已經初具規模,一部分研究者致力于研究Android的系統安全,他們通過分析系統內核層和框架層的安全來研究Android的安全性。另一部分人致力于研究應用安全,他們的主要研究集中在惡意應用的檢測和應用漏洞的挖掘上。
針對于惡意應用的檢測,研究人員主要致力于強化Android程序安裝時的權限審核,以及程序運行時的行為檢測。這兩種方案都可以在某種程度上防止應用程序惡意的獲取系統的隱私數據和機密資源。目前該領域的研究現狀以及成果如下:
為了限制惡意應用程序的行為,Samlley等人提出了運用強制訪問控制策略保護Android中的系統資源的方法。為了保護Android智能手機安全,在深入分析Android系統安全機制的基礎上,乜聚虎等人提出了一個基于強制訪問控制的安全加固技術[23]。Shebaro等人提出了基于上下文環境的訪問控制模型,讓應用程序只在特定的環境下使用敏感數據[18]。楊歡等人設計了基于權限頻繁模式的挖掘算法,用來挖掘應用程序權限之間的關聯性[2]。通過挖掘權限之間的關聯性,找出程序申請權限的特點,利用機器學習的方法將應用程序分類,找出惡意程序。為實現Android平臺下惡意軟件的高效檢測,李挺等人提出了一種基于Dalvik指令的Android惡意代碼特征形式化描述和分析方法,能夠在無需反編譯應用程序的基礎上,快速檢測樣本的惡意特征[25]。上述這些方法,都是基于對應用程序或者系統本身的訪問動作的限制和檢測來達到確保隱私數據安全的目的。
除此之外,還有一類方法是通過對系統中的數據流或者指令流的分析和追蹤入手來分析系統安全的。例如,FlowDroid通過靜態分析法構造控制或數據流圖,來分析數據流的走向,并給出隱私數據是否被泄露的結論。經過修改,傳統的靜態程序檢測技術可以應用到Android應用程序的檢測上,并能夠準確地檢測出程序中存在的隱私泄露的問題[6]。為提高Android移動平臺的安全性,白鴿等人提出一種基于Dalvik指令的靜態檢測方法,通過分析應用程序的虛擬機代碼,找出敏感信息的數據流,包括跟蹤敏感信息、函數的調用,從而判斷出該應用程序是否有惡意行為[30]。
然而,靜態的數據流或者指令流的分析方法存在其局限性,它無法實時的確保檢測和分析當前系統的隱私數據走向,只能對某個現階段的系統進行分析來評估其安全性,無法動態的檢測系統的安全。因此,很多人通過對數據流或者指令流的動態監測的方式來實現對隱私數據的保護。由Yan L K等人提出的Droid Scope就是一個基于Android模擬器QEMU的動態分析平臺[15]。
此外,針對于數據流的動態監測,Enck等人提出了從應用程序執行過程的數據流跟蹤出發的隱私數據污點跟蹤系統TaintDroid。正是由于Android平臺隱私數據保護的嚴峻形勢,這種基于修改Android虛擬機Dalvik的數據流監控系統TaintDroid應運而生。
TaintDroid對安卓系統的隱私數據設置污點,來跟蹤隱私數據在系統中和網絡中的傳播。若隱私數據衍生了新的數據,則新的數據也要被污點標記。這樣一來,通過對網絡API的檢測算法,可以檢測、記錄和丟棄存在隱私泄露的連接。
從本質上來講,TaintDroid是在Dalvik的基礎上進行修改,主要在Dalvik代碼中添加了TaintDroid相關的部分,因此可以說TaintDroid就是一個Dalvik改版的Android虛擬機,因此,針對于所有在Java代碼層面的行為,這個新的虛擬機都可以進行監控。
這種基于信息流的動態分析方法易用性很高,它不需要用戶的過多參與,誤報率高而漏報率低。可是其效率沒有靜態分析來的高效,因為虛擬機在執行污點傳播時需要占用較大內存,且指令也更加復雜。因此,TaintDroid系統本身也含有一些優化的思想。例如在應用程序中采用變量級別的追蹤,在應用程序之間采用消息級別的跟蹤,對于系統原生庫的調用采用方法級別的跟蹤,而對于一些永久性信息的追蹤則采用文件級別追蹤。這樣可以確保檢測率和高效性的平衡。如圖1所示:

圖1 TaintDroid系統的分級追蹤示意圖
TaintDroid系統的本身并沒有非常完善,其仍然存有缺陷,主要缺陷包括幾下幾部分:
(1)能夠檢測的隱私泄露源還不夠全面,能夠檢測到的控件類型有局限性,例如藍牙和鍵盤輸入都無法檢測;
(2)字符串跟蹤粒度不夠細,可能會導致污點的過渡擴散,產生誤報[3];
(3)不能提供程序執行過程中的隱私數據的路徑和擴散信息,依賴于網絡API檢測;
(4)測試時需要人工參與,不利于自動化;
(5)對于程序調用第三方現成的庫的情況,無法追蹤。
針對以上問題,業界研究人員陸續給出了一定程度上的補充和優化。
楊廣亮等人借鑒了其動態污點跟蹤技術,實現了Taint Chaser自動化檢測系統,該系統能夠實現更加細粒度和自動化的跟蹤。戴威等人將Android的權限機制的訪問控制和動態隱私數據的追蹤相結合,利用隱私數據著色跟蹤的方式[4]。此系統能實現對應用程序間傳播的包含不同隱私權限標簽的消息的隔離控制[5]。
另一方面,TaintDroid系統針對Android應用程序中大量使用的WebView交互,沒有能夠提供安全性的追蹤功能。針對這一問題,王偉平等人提出了一種基于TaintDroid擴展的WebView隱私泄露檢測方法WTD。通過測試WebView應用程序,與TaintDroid對比,能夠更有效地檢測出由于WebView應用導致的隱私泄露問題[16]。
上述研究人員分別從不同角度對用TaintDroid進行了優化,從一定程度了彌補了其存在的一些缺陷。目前,TaintDroid的檢測范圍包括位置LOCATION、通訊錄CONTACTS、麥克風MIC、手機號PHONE NUMBER、GPS位置LOCATION GPS、網絡位置LOCATION NET、上一次位置LOCATION LAST、攝像頭CAMERA、加速器ACCELEROMETER、短信SMS、機器標識IMEI、移動用戶標識IMSI、SIM卡標識ICCID、設備SN號DEVICE SN、賬戶ACCOUNT以及歷史HISTORY。為了能夠更好的對隱私數據進行全面跟蹤和檢測,本文將以檢測鍵盤Keyboard輸入留存在EditText控件中的信息為例,提出對TaintDroid進行優化及補充的設想,主要思路及做法如下:
要實現能夠將用戶輸入的數據添加上TaintDroid污點標記,有兩種實現途徑。其中之一是監控用戶Keyboard的輸入數據,并在輸入結束的那一刻,將輸入的每一個字符合起來所構成的字符串數據添加Taint標記。但是這種方法非常繁瑣,且需要知道Android系統的Keyboard點擊監聽事件的相關邏輯過程和實現方法。除此之外,另一種方法就是監控EditText控件的變化。在Android源碼的框架目錄frameworks下有采用Java實現的核心功能代碼,其中包含text的部分,尋找到Editable接口,通過在代碼中加入Taint接口的調用,可以實現對基于EditText變換過來的String數據全部加上污點。這樣優化后可以實現如下功能:當用戶輸入用戶名或者密碼或打開一個具有同步功能的記事簿或者筆記本時,用戶輸入的信息就會被認為是私密的,但當其被傳遞到網絡的時候就會被TaintDroid掃描和記錄,并呈現給用戶,呈現的方式與其它類型的污點數據監控的方式相同,都是采用Android的Notification功能來提示用戶。
需要注意的是,Editable是一個接口,它需要提供它的實現類,但是無法給Editable的實現類的對象添加污點標記,因為它不是一個Java基本類型。只有Java基本類型,比如int,string等才可以被添加污點標記,因此對于這類數據,只能將其封裝內部的基本類型的數據添加上污點。本文最終的選擇是將其封裝類內部真正表示字符串信息的那一部分數據添加污點。
其具體結構如下圖2所示:

圖2 EditText控件實現用戶輸入信息的流程
針對于Editable的修改,本文采用的是TaintDroid基于變量級別的追蹤。修改后,TaintDroid針對于EditText的具體實現流程為:
(1)某個EditText的控件,對應于某個具體的Editable接口實現類的對象。
(2)控件輸入數據的變化,會導致該對象內容的變化。
(3)當用戶應用程序準備調用該控件輸入的字符串信息時,它會調用這個控件對應的對象的某個生成字符串的方法(實驗當中作為舉例,使用的是toString()方法)。
(4)本文將TaintDroid添加污點的步驟加入到該方法下之后,所有生成的字符串則自動會擁有特定的污點標記,是一種基于Java層的方法級別的污點追蹤。
本文所述的TaintDroid數據流監控系統進行優化的策略,主要基于擴展TaintDroid的檢測范圍,旨在實現全面布控地毯式檢測,避免疏漏。實驗證明,文中所述優化策略在一定程度上保護了用戶隱私數據,解決了安卓系統相關安全問題。本文研究的結果可用于任何使用EditText的應用程序的任何場合,兼容于Android4.1的系統。