999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

TaintDroid數(shù)據(jù)流動(dòng)態(tài)監(jiān)控關(guān)鍵技術(shù)研究

2017-01-06 12:00:12孫夢(mèng)陽(yáng)
中國(guó)新通信 2016年21期
關(guān)鍵詞:系統(tǒng)

孫夢(mèng)陽(yáng)

【摘要】 Android 系統(tǒng)憑借其開(kāi)源、易用等特點(diǎn)備受應(yīng)用開(kāi)發(fā)商青睞,但隨之而來(lái)的用戶隱私泄露問(wèn)題確越發(fā)嚴(yán)重,如何保護(hù)用戶的個(gè)人隱私數(shù)據(jù)已成為行業(yè)研究熱點(diǎn)。本文首先介紹了Android平臺(tái)邏輯和Dalvik實(shí)現(xiàn)原理,分析了TaintDroid 的功能結(jié)構(gòu),重點(diǎn)研究了TaintDroid數(shù)據(jù)流動(dòng)態(tài)監(jiān)控關(guān)鍵技術(shù),最終給出了 TaintDroid 存在的缺陷,為今后TaintDroid系統(tǒng)的拓展和研究指出了方向。

【關(guān)鍵字】 Android 系統(tǒng) TaintDroid 數(shù)據(jù)流動(dòng)態(tài)監(jiān)控

引言

近年來(lái),隨著智能移動(dòng)終端的普及,移動(dòng)應(yīng)用市場(chǎng)得到眾多商家青睞,其中,Android 系統(tǒng)憑借其開(kāi)源、易用、自由性等特點(diǎn)占據(jù)較大市場(chǎng)份額,針對(duì)Android平臺(tái)開(kāi)發(fā)設(shè)計(jì)的應(yīng)用也以指數(shù)級(jí)增長(zhǎng)。正是由于Android系統(tǒng)的開(kāi)放性等特點(diǎn),不法開(kāi)發(fā)者有了可乘之機(jī),使得用戶的許多隱私數(shù)據(jù)外泄,給用戶造成精神和經(jīng)濟(jì)方面的巨大損失。針對(duì)這些問(wèn)題,許多研究者開(kāi)始致力于安卓用戶隱私數(shù)據(jù)的保護(hù)研究,2010 年 Enck 等人在 Android2.1 系統(tǒng)上,經(jīng)過(guò)對(duì)系統(tǒng)出口源代碼進(jìn)行修改,實(shí)現(xiàn)了系統(tǒng)數(shù)據(jù)流動(dòng)態(tài)檢測(cè)系統(tǒng)---TaintDroid,而后一系列基于TaintDroid 的系統(tǒng)和隱私檢測(cè)工具也相繼問(wèn)世,由于該項(xiàng)技術(shù)近幾年剛剛起步,對(duì)其進(jìn)行深入研究與拓展意義深遠(yuǎn)。

一、Android平臺(tái)邏輯結(jié)構(gòu)及Dalvik實(shí)現(xiàn)原理

1.1 Android平臺(tái)邏輯結(jié)構(gòu)

Android是一個(gè)基于Linux內(nèi)核的移動(dòng)操作系統(tǒng),代碼是開(kāi)源的,系統(tǒng)分為四層,分別是Linux內(nèi)核層,系統(tǒng)運(yùn)行庫(kù)和Java運(yùn)行時(shí)環(huán)境Dalvik Virtual Machine層,應(yīng)用程序框架層和應(yīng)用程序?qū)印?/p>

其實(shí)現(xiàn)邏輯是:通過(guò)linux內(nèi)核層的內(nèi)核代碼實(shí)現(xiàn)最基本的OS操作,而在第二層中,有些已經(jīng)被編譯打包好的系統(tǒng)運(yùn)行庫(kù),可以直接被上層框架調(diào)用運(yùn)行,這部分不是Java代碼而是可以直接調(diào)用的接口;除此之外,這一層還有對(duì)于Android至關(guān)重要的虛擬機(jī)——Dalvik運(yùn)行時(shí)環(huán)境,用于Java代碼的執(zhí)行,其作用相當(dāng)于PC系統(tǒng)中的JVM。而第三層的應(yīng)用程序框架層則基本都是由Java代碼編寫(xiě)完成的,其中包括一些Android的組件和控件的實(shí)現(xiàn)過(guò)程和操作,這一部分的代碼就需要借助下層的Android Runtime來(lái)完成,并且有些需求還依賴于封裝好的系統(tǒng)運(yùn)行庫(kù)。最頂層的應(yīng)用程序?qū)颖闶俏覀兙帉?xiě)Android程序所在層,它調(diào)用框架層提供的框架,使用框架層的方法來(lái)實(shí)現(xiàn)用戶APP想要實(shí)現(xiàn)的功能。

除此之外,某些對(duì)于Android系統(tǒng)的分層方法還包括一層HAL——Android系統(tǒng)的硬件抽象層,它運(yùn)行在用戶空間中,它向下屏蔽硬件驅(qū)動(dòng)模塊的實(shí)現(xiàn)細(xì)節(jié),向上提供硬件服務(wù)訪問(wèn)。通過(guò)硬件抽象層,Android系統(tǒng)分兩層來(lái)支持硬件設(shè)備。

1.2 Dalvik實(shí)現(xiàn)原理

Dalvik是一個(gè)面向Linux作為嵌入式操作系統(tǒng)設(shè)計(jì)的虛擬機(jī),可以看做是Android為了執(zhí)行Java代碼而搭建的,和普通Java虛擬機(jī)不同,Dalvik主要是完成對(duì)象生命周期管理、堆棧管理、線程管理、安全和異常管理以及垃圾回收等等重要功能。除此之外,Dalvik不僅僅可以執(zhí)行Java代碼,也可以執(zhí)行Native代碼,即C和C++的代碼。正是針對(duì)于這一特性,Android的Dalvik選擇使用C++編寫(xiě)Java接口的實(shí)現(xiàn)方法,這樣做的好處是讓系統(tǒng)的運(yùn)行更加高效和穩(wěn)定。TaintDroid基于Android Dalvik的修改大部分就是基于Native代碼的修改,由此可以在編譯時(shí)便封裝進(jìn)環(huán)境里去。

Dalvik結(jié)構(gòu)如下圖所示:Android系統(tǒng)中包含一個(gè)虛擬機(jī)VM,它的作用是一句一句執(zhí)行Java翻譯成的dex文件。同時(shí),在Dalvik中還包含有一系列的C、C++代碼,這些代碼自身就可以執(zhí)行一系列的操作,并且他們會(huì)在系統(tǒng)編譯啟動(dòng)是便編譯完成,作為機(jī)器指令存放于系統(tǒng)中,在VM執(zhí)行Java任務(wù)的過(guò)程中,可以對(duì)這些機(jī)器指令進(jìn)行調(diào)用,這些調(diào)用是可見(jiàn)的,也有很多是VM自身對(duì)這些機(jī)器指令的引用。

Dalvik在底層實(shí)現(xiàn)了對(duì)上層對(duì)象的定義,在源文件中可以看到Dalvik對(duì)于上層Object在底層是如何定義的。同時(shí),Dalvik還備有上層函數(shù)處理底層對(duì)象數(shù)據(jù)域的接口,并在文件中做了聲明。由此,上層的函數(shù)也可以通過(guò)虛擬機(jī)訪問(wèn)真實(shí)的數(shù)據(jù),這樣的結(jié)構(gòu)使得我們通過(guò)修改VM虛擬機(jī)來(lái)添加一些對(duì)Java開(kāi)發(fā)者不可見(jiàn)的附加操作變得可能。

二、 TaintDroid數(shù)據(jù)流動(dòng)態(tài)監(jiān)控技術(shù)原理剖析

TaintDroid不是Android平臺(tái)的一個(gè)應(yīng)用程序,跟常規(guī)的App應(yīng)用不同,它是通過(guò)改寫(xiě) Android 的接口代碼來(lái)實(shí)現(xiàn)的,因此對(duì)Android系統(tǒng)版本有絕對(duì)的依賴性。到目前為止TaintDroid 分別在Android2.1、Android2. 3、Android4. 1 和 Android4. 3 版本上進(jìn)行了移植。TaintDroid是首次在Android使用污點(diǎn)追蹤技術(shù),它是在相關(guān)的API調(diào)用處把隱私數(shù)據(jù)標(biāo)記為污染數(shù)據(jù)來(lái)實(shí)現(xiàn)對(duì)隱私數(shù)據(jù)的動(dòng)態(tài)監(jiān)測(cè)。

TaintDroid系統(tǒng)想要實(shí)現(xiàn)動(dòng)態(tài)監(jiān)測(cè)功能需要解決幾個(gè)系統(tǒng)的挑戰(zhàn):

(1)污點(diǎn)的存儲(chǔ)

(2)解釋代碼污點(diǎn)傳播

(3)原生代碼污點(diǎn)傳播

(4)IPC污點(diǎn)傳播

(5)二級(jí)存儲(chǔ)污染

2.1 TaintDroid關(guān)鍵技術(shù)

TaintDroid主要由如下幾部分構(gòu)成:

(1)給數(shù)據(jù)的定義類(lèi)內(nèi)添加污點(diǎn)字段

在Dalvik對(duì)于虛擬機(jī)的Object定義的地方加一個(gè)成員變量taint,每一個(gè)Object都包含一個(gè)taint變量。由于是在Dalvik源代碼里做的修改,因此上層Java語(yǔ)言不可見(jiàn)。

(2)添加訪問(wèn)污點(diǎn)字段數(shù)據(jù)域的函數(shù)接口

在函數(shù)和對(duì)象數(shù)據(jù)域之間的接口聲明的文件中,聲明Taint接口(函數(shù)和數(shù)據(jù)域),這一步的作用是可以讓其它與之關(guān)聯(lián)的C++代碼可以使用這些接口來(lái)操作這些Taint標(biāo)記。

(3)實(shí)現(xiàn)接口功能

使用底層的C++語(yǔ)言來(lái)實(shí)現(xiàn)Java呈現(xiàn)出來(lái)的接口,接口和實(shí)現(xiàn)之間的關(guān)聯(lián)則通過(guò)接口

聲明來(lái)實(shí)現(xiàn)。具體代碼如下例:

}

總的來(lái)說(shuō),TaintDroid的功能主要由上述兩部分構(gòu)成:Java環(huán)境可見(jiàn)的主動(dòng)接口調(diào)用,和Java環(huán)境不可見(jiàn)的底層標(biāo)記及被動(dòng)傳遞。

具體各個(gè)修改細(xì)節(jié)見(jiàn)圖片所示

TaintDroid修改細(xì)節(jié)

首先,我們將所有的TaintDroid系統(tǒng)分為兩部分,分別代表修改虛擬機(jī)定義的部分和針對(duì)污點(diǎn)操作的部分。在虛擬機(jī)定義的部分,修改每個(gè)Java對(duì)象對(duì)應(yīng)于C++代碼的現(xiàn)實(shí)對(duì)象的聲明,添加一個(gè)Tag用來(lái)標(biāo)記Taint污點(diǎn)記錄。顯然這個(gè)記錄是Java不可見(jiàn)的,通過(guò)重寫(xiě)相關(guān)運(yùn)算,可以實(shí)現(xiàn)在Java開(kāi)發(fā)者不知情的情況下將Taint Tag傳遞下去。這一部分定義了Taint污點(diǎn)并允許其被動(dòng)繼承,通過(guò)重寫(xiě)相關(guān)函數(shù)來(lái)實(shí)現(xiàn)。在針對(duì)污點(diǎn)操作的部分,主要針對(duì)那些系統(tǒng)中的各個(gè)隱私組件Frameworks,例如GPS和MIC,這些組件本身就是污

點(diǎn)數(shù)據(jù)的源頭,并且也是基于Java代碼級(jí)別的功能,因此需要一個(gè)Java層可見(jiàn)的接口來(lái)處理這些不可見(jiàn)的Taint Tag。所以TaintDroid系統(tǒng)中還包含Taint.java這一部分。而它的實(shí)現(xiàn)很顯然不可以使用Java,因?yàn)樗鼘?duì)TaintTag不可見(jiàn),要用C++來(lái)實(shí)現(xiàn),這一部分實(shí)現(xiàn)的代碼就是上文所說(shuō)的Native代碼部分。

虛擬機(jī)對(duì)于Dex字節(jié)碼的運(yùn)行有如下兩個(gè)階段:1.解析Dex字節(jié)碼并了解其含義; 2.根據(jù)其含義進(jìn)行相關(guān)的C/ C++操作。TaintDroid并不關(guān)注于如何解釋Dex字節(jié)碼,因?yàn)镈ex字節(jié)碼有其特殊規(guī)范,而解釋這些字節(jié)碼需要了解其規(guī)范,這不在TaintDroid的考慮范圍之內(nèi)。TaintDroid只關(guān)注與C/C++如何實(shí)現(xiàn)字節(jié)碼所描述的含義的。換句話說(shuō),虛擬機(jī)對(duì)于dex字節(jié)碼有翻譯和執(zhí)行兩個(gè)部分,而TaintDroid則主要關(guān)注于執(zhí)行這一部分。

TaintDroid所能檢測(cè)到的數(shù)據(jù)類(lèi)型的范圍正如緒論所言,而這些隱私數(shù)據(jù)類(lèi)型也在其實(shí)現(xiàn)中被體現(xiàn)了出來(lái),具體代號(hào)如下:

TAINT CLEAR

TAINT LOCATION

TAINT CONTACTS

……

TaintDroid使用整型來(lái)定義這些隱私數(shù)據(jù)類(lèi)型,譬如TAINT LOCATION代表的就是0x00000001,而TAINT CONTACTS就代表的是0x00000002,TAINT MIC就是0x00000004。可見(jiàn),每一個(gè)數(shù)據(jù)都是2的次方數(shù)。

這樣表示有一個(gè)顯著的好處,就是可以以最快捷高效的方式實(shí)現(xiàn)污點(diǎn)數(shù)據(jù)的污點(diǎn)傳遞邏輯。譬如一個(gè)數(shù)據(jù)C是由一個(gè)數(shù)據(jù)A和另一個(gè)數(shù)據(jù)B生成的,則C的污點(diǎn)邏輯為:

C.taint = A.taint | B.taint;

若A的污點(diǎn)標(biāo)記是1,B的污點(diǎn)標(biāo)記是2,則C的污點(diǎn)標(biāo)記就是1 | 2 = 3。而我們一看到3,就知道它是由1和2兩個(gè)2的次方數(shù)構(gòu)成的。不可能有別的組合情況。也就是說(shuō),我們知道了C包含LOCATION污點(diǎn)和CONTACTS污點(diǎn)。

2.2 TaintDroid的數(shù)據(jù)類(lèi)型

提到TaintDroid的數(shù)據(jù)類(lèi)型,其實(shí)有兩個(gè)含義,一個(gè)是TaintDroid可以添加污點(diǎn)的Java基本數(shù)據(jù)類(lèi)型范圍,這其中就包括Int、String、Array、Char等類(lèi)型。針對(duì)于這些Java基本類(lèi)型,TaintDroid給每一個(gè)類(lèi)型提供了添加污點(diǎn)的接口調(diào)用。同時(shí)在能夠真正看到taint標(biāo)記的C++層面實(shí)現(xiàn)這些聲明過(guò)的接口。

另一個(gè)有關(guān)“數(shù)據(jù)類(lèi)型”的含義指的是TaintDroid隱私數(shù)據(jù)的隱私類(lèi)型,也就是說(shuō)數(shù)據(jù)到底是GPS數(shù)據(jù)、還是IEMI數(shù)據(jù)等。

三、TaintDroid缺陷分析

TaintDroid雖然能夠很好的實(shí)現(xiàn)隱私數(shù)據(jù)流的檢測(cè),但是其自身還是存在一定不足。

(1)能夠檢測(cè)的控件組件類(lèi)型有局限性

TaintDroid可以檢測(cè)GPS位置等諸多隱私數(shù)據(jù),但系統(tǒng)中還有許多隱私數(shù)據(jù)沒(méi)有被TaintDroid檢測(cè)到,譬如我們?cè)谠S多的場(chǎng)合會(huì)遇到讓用戶輸入用戶名和密碼的行為,這些行為最終都會(huì)被歸結(jié)到基于EditText控件的使用,而TaintDroid確缺省了對(duì)該控件信息的監(jiān)控,也就是說(shuō),TaintDroid能夠監(jiān)測(cè)到的隱私數(shù)據(jù)源有局限性。

(2)隱私數(shù)據(jù)源路經(jīng)不明確

TaintDroid只能了解到途徑網(wǎng)絡(luò)API的各個(gè)數(shù)據(jù)包中是否有添加了污點(diǎn)的隱私數(shù)據(jù),但并不能了解這些隱私數(shù)據(jù)所途徑的過(guò)程,它們?nèi)绾伪患用埽鼈內(nèi)绾伪粋鬟f,它們?nèi)绾伪焕^承等等。

這主要是因?yàn)門(mén)aintDroid在隱私傳播的過(guò)程中使用了被動(dòng)的污點(diǎn)繼承算法,只有虛擬機(jī)才能清楚的知道數(shù)據(jù)的污點(diǎn)是來(lái)自于哪些數(shù)據(jù)的繼承,可是利用Java語(yǔ)言寫(xiě)的檢測(cè)程序則無(wú)法通過(guò)數(shù)據(jù)本身獲得任何這方面的信息。

(3)關(guān)于加密的問(wèn)題

加密問(wèn)題是TaintDroid的固有缺陷,它主要涉及兩方面:

? 當(dāng)變量只在邏輯上有關(guān),而在代碼和內(nèi)存上無(wú)關(guān)的時(shí)候,TaintDroid顯然無(wú)法追蹤到數(shù)據(jù)的傳遞,因?yàn)檎嬲哪莻€(gè)數(shù)據(jù)根本沒(méi)有被賦值給任何內(nèi)存。這是無(wú)法改良和完善的,因此TaintDroid并不適用于解決加密數(shù)據(jù)的監(jiān)控問(wèn)題。

? 當(dāng)一個(gè)數(shù)組中有某幾個(gè)數(shù)組項(xiàng)是隱私數(shù)據(jù),但是整個(gè)數(shù)組并沒(méi)有隱私標(biāo)記的時(shí)候,這個(gè)數(shù)組在繼續(xù)傳遞自己的數(shù)據(jù)的同時(shí)的確可以避開(kāi)污點(diǎn)傳遞算法的調(diào)用。換而言之,TaintDroid無(wú)法跟蹤如下污點(diǎn):在一個(gè)數(shù)組類(lèi)型的數(shù)據(jù)中,某一位或幾位的字符是有污點(diǎn)的,其它沒(méi)有污點(diǎn),那么,整個(gè)數(shù)組是沒(méi)有污點(diǎn)的。

四、結(jié)語(yǔ)

本文在介紹Android系統(tǒng)邏輯及Dalvik結(jié)構(gòu)基礎(chǔ)上,重點(diǎn)對(duì)TaintDroid數(shù)據(jù)流動(dòng)態(tài)監(jiān)測(cè)關(guān)鍵技術(shù)進(jìn)行了剖析,結(jié)果表明, TaintDroid工作原理是基于動(dòng)態(tài)污點(diǎn)跟蹤技術(shù),其在一定程度上實(shí)現(xiàn)了對(duì)用戶隱私數(shù)據(jù)的保護(hù),但該系統(tǒng)還存在諸多缺陷,比如監(jiān)控范圍有局限性、隱私數(shù)據(jù)源路經(jīng)不清晰、加密數(shù)據(jù)的監(jiān)控等,這些都是未來(lái)研究與拓展的方向。

猜你喜歡
系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
基于PowerPC+FPGA顯示系統(tǒng)
基于UG的發(fā)射箱自動(dòng)化虛擬裝配系統(tǒng)開(kāi)發(fā)
半沸制皂系統(tǒng)(下)
FAO系統(tǒng)特有功能分析及互聯(lián)互通探討
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統(tǒng) 德行天下
PLC在多段調(diào)速系統(tǒng)中的應(yīng)用
主站蜘蛛池模板: 97精品久久久大香线焦| 日韩精品无码免费一区二区三区| h网址在线观看| 婷婷久久综合九色综合88| 欧美中文字幕无线码视频| 国产中文一区二区苍井空| 国产精品主播| 最新日本中文字幕| 伊人AV天堂| 欧美色伊人| 亚洲中文字幕23页在线| 亚洲综合极品香蕉久久网| 亚洲无线观看| 欧美精品在线观看视频| 国产福利拍拍拍| 欧美激情视频在线观看一区| 亚洲日韩精品伊甸| 精品伊人久久久久7777人| 国产精品成人免费视频99| 亚洲国产91人成在线| 免费无码AV片在线观看中文| 国产午夜一级毛片| 好紧好深好大乳无码中文字幕| 国产成人三级| 国产AV毛片| 亚洲αv毛片| 国产欧美亚洲精品第3页在线| 伊人成人在线| 一本大道视频精品人妻| 久久亚洲日本不卡一区二区| 日本久久网站| 亚洲色图综合在线| 呦女亚洲一区精品| 久久免费视频6| 色哟哟国产精品一区二区| 成人在线观看不卡| 国产香蕉在线| 免费在线看黄网址| 久热中文字幕在线| 国产一区成人| 干中文字幕| 亚洲欧美日韩视频一区| 欧美福利在线播放| 免费精品一区二区h| 久久99精品久久久久久不卡| 一区二区自拍| 国产色婷婷视频在线观看| 日韩成人午夜| 国产欧美视频在线| 国产青青草视频| 日韩免费毛片| 日韩在线欧美在线| 精品久久777| 国产亚洲精品自在久久不卡| 欧美日韩另类国产| 日本成人精品视频| 国产91蝌蚪窝| 欧美精品导航| 激情视频综合网| 国产乱人伦偷精品视频AAA| 国产综合日韩另类一区二区| 国产中文一区二区苍井空| 亚洲女同一区二区| 亚洲欧美国产高清va在线播放| 国产成+人+综合+亚洲欧美| 国产免费精彩视频| a亚洲视频| 中文字幕久久波多野结衣| 青草免费在线观看| 2021最新国产精品网站| 日韩资源站| 久久伊人久久亚洲综合| 亚洲人成网站在线观看播放不卡| 午夜毛片免费观看视频 | av在线无码浏览| 亚洲日韩国产精品综合在线观看| 77777亚洲午夜久久多人| 国产在线八区| 久久黄色一级片| 国产成人综合久久精品下载| 国产在线自乱拍播放| 国产精品播放|