国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播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)鍵詞:污點(diǎn)數(shù)據(jù)類型數(shù)據(jù)流

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

【摘要】 Android 系統(tǒng)憑借其開源、易用等特點(diǎn)備受應(yīng)用開發(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)憑借其開源、易用、自由性等特點(diǎn)占據(jù)較大市場(chǎng)份額,針對(duì)Android平臺(tái)開發(fā)設(shè)計(jì)的應(yīng)用也以指數(shù)級(jí)增長(zhǎng)。正是由于Android系統(tǒng)的開放性等特點(diǎn),不法開發(fā)者有了可乘之機(jī),使得用戶的許多隱私數(shù)據(jù)外泄,給用戶造成精神和經(jīng)濟(jì)方面的巨大損失。針對(duì)這些問(wèn)題,許多研究者開始致力于安卓用戶隱私數(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),代碼是開源的,系統(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代碼編寫完成的,其中包括一些Android的組件和控件的實(shí)現(xiàn)過(guò)程和操作,這一部分的代碼就需要借助下層的Android Runtime來(lái)完成,并且有些需求還依賴于封裝好的系統(tǒng)運(yùn)行庫(kù)。最頂層的應(yīng)用程序?qū)颖闶俏覀兙帉慉ndroid程序所在層,它調(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++編寫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)用是可見的,也有很多是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開發(fā)者不可見的附加操作變得可能。

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

TaintDroid不是Android平臺(tái)的一個(gè)應(yīng)用程序,跟常規(guī)的App應(yīng)用不同,它是通過(guò)改寫 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ù)的定義類內(nèi)添加污點(diǎn)字段

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

(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)境可見的主動(dòng)接口調(diào)用,和Java環(huán)境不可見的底層標(biāo)記及被動(dòng)傳遞。

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

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不可見的,通過(guò)重寫相關(guān)運(yùn)算,可以實(shí)現(xiàn)在Java開發(fā)者不知情的情況下將Taint Tag傳遞下去。這一部分定義了Taint污點(diǎn)并允許其被動(dòng)繼承,通過(guò)重寫相關(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層可見的接口來(lái)處理這些不可見的Taint Tag。所以TaintDroid系統(tǒng)中還包含Taint.java這一部分。而它的實(shí)現(xiàn)很顯然不可以使用Java,因?yàn)樗鼘?duì)TaintTag不可見,要用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ù)類型的范圍正如緒論所言,而這些隱私數(shù)據(jù)類型也在其實(shí)現(xiàn)中被體現(xiàn)了出來(lái),具體代號(hào)如下:

TAINT CLEAR

TAINT LOCATION

TAINT CONTACTS

……

TaintDroid使用整型來(lái)定義這些隱私數(shù)據(jù)類型,譬如TAINT LOCATION代表的就是0x00000001,而TAINT CONTACTS就代表的是0x00000002,TAINT MIC就是0x00000004??梢姡恳粋€(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ù)類型

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

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

三、TaintDroid缺陷分析

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

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

TaintDroid可以檢測(cè)GPS位置等諸多隱私數(shù)據(jù),但系統(tǒng)中還有許多隱私數(shù)據(jù)沒有被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)門aintDroid在隱私傳播的過(guò)程中使用了被動(dòng)的污點(diǎn)繼承算法,只有虛擬機(jī)才能清楚的知道數(shù)據(jù)的污點(diǎn)是來(lái)自于哪些數(shù)據(jù)的繼承,可是利用Java語(yǔ)言寫的檢測(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ù)根本沒有被賦值給任何內(nèi)存。這是無(wú)法改良和完善的,因此TaintDroid并不適用于解決加密數(shù)據(jù)的監(jiān)控問(wèn)題。

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

猜你喜歡
污點(diǎn)數(shù)據(jù)類型數(shù)據(jù)流
基于代碼重寫的動(dòng)態(tài)污點(diǎn)分析
詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
汽車維修數(shù)據(jù)流基礎(chǔ)(下)
一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
使用Lightroom污點(diǎn)去除工具清理照片中的瑕疵
基于數(shù)據(jù)流聚類的多目標(biāo)跟蹤算法
我國(guó)“污點(diǎn)證人”刑事責(zé)任豁免制度的構(gòu)建
北醫(yī)三院 數(shù)據(jù)流疏通就診量
純 白
意林(2006年2期)2006-05-14 14:47:46
苍梧县| 伊春市| 通榆县| 新巴尔虎右旗| 陈巴尔虎旗| 三明市| 汤原县| 吴桥县| 麟游县| 永胜县| 翁源县| 阿拉善右旗| 揭西县| 海口市| 武清区| 盐城市| 阳朔县| 乐业县| 体育| 朔州市| 田东县| 大理市| 镇安县| 仁寿县| 广汉市| 景德镇市| 石首市| 无锡市| 溧水县| 皋兰县| 济南市| 浪卡子县| 象州县| 南宫市| 长武县| 手机| 东丰县| 新田县| 台江县| 康平县| 阜平县|