国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

污點分析技術(shù)研究綜述

2019-10-23 12:23任玉柱張有為艾成煒
計算機應(yīng)用 2019年8期

任玉柱 張有為 艾成煒

摘 要:污點分析技術(shù)是保護隱私數(shù)據(jù)安全和實現(xiàn)漏洞檢測的重要技術(shù)手段,也是信息安全研究的熱點領(lǐng)域。對近年來污點分析技術(shù)的研究現(xiàn)狀和發(fā)展情況進(jìn)行綜述,介紹了污點分析的理論基礎(chǔ)以及靜態(tài)污點分析和動態(tài)污點分析的基本概念、關(guān)鍵技術(shù)和研究進(jìn)展,并從技術(shù)實現(xiàn)方式的角度出發(fā),闡述了基于硬件、軟件、虛擬環(huán)境和代碼等四種污點分析技術(shù)的實現(xiàn)方式、核心思想以及優(yōu)缺點;然后,從污點數(shù)據(jù)流向的角度出發(fā),概述了污點分析技術(shù)在相關(guān)領(lǐng)域的兩種典型應(yīng)用,即隱私數(shù)據(jù)泄露檢測和漏洞探測;最后,簡要分析了污點分析的缺點和不足,并展望該技術(shù)的研究前景和發(fā)展趨勢。

關(guān)鍵詞:信息流分析;靜態(tài)污點分析;動態(tài)污點分析;隱私數(shù)據(jù);漏洞挖掘

中圖分類號:?TP309

文獻(xiàn)標(biāo)志碼:A

Survey on taint analysis technology

REN Yuzhu1,2*, ZHANG Youwei3, AI Chengwei1,2

1.School of Cyber Security, Information Engineering University, Zhengzhou Henan 450001, China?;

2.State Key Laboratory of Mathematical Engineering and Advanced Computing, Zhengzhou Henan 450001, China?;

3. Advanced Technology Research Institute of Zhengzhou Xinda, Zhengzhou Henan 450001, China

Abstract:?Taint analysis technology is an important method to protect private data security and realize vulnerability detection, and it is also a hot area of information security research. The research status and development of taint analysis technology in recent years were summarized. The theoretical basis of taint analysis, the basic concepts, key technologies and research progress of static taint analysis and dynamic taint analysis were introduced. From the perspective of the implementation, the implementation methods, core ideas, advantages and disadvantages of four taint analysis technologies based on hardware, software, virtual environment and code were expounded; from the perspective of the flow of taint data, two typical applications in related fields, privacy data leakage detection and vulnerability detection, were outlined. Finally, the shortcomings of taint analysis were briefly analyzed, and the research prospects and development trends of the technology were predicted.

Key words:?information flow analysis; static taint analysis; dynamic taint analysis; privacy data; vulnerability discovery

0 引言

隨著“互聯(lián)網(wǎng)+”概念的流行和物聯(lián)網(wǎng)技術(shù)的發(fā)展,世界已進(jìn)入以信息數(shù)據(jù)為主要經(jīng)濟發(fā)展驅(qū)動力的全球化“3.0”時代,信息技術(shù)對人類社會的意義愈發(fā)重要,隨之而來的是人類在信息安全領(lǐng)域面臨著諸多難題。僵尸網(wǎng)絡(luò)、蠕蟲病毒、木馬病毒及分布式拒絕服務(wù)攻擊等計算機病毒和網(wǎng)絡(luò)攻擊行為屢屢發(fā)生。2017年,以智能手機為代表的手持移動設(shè)備已經(jīng)超越計算機成為數(shù)量最多的上網(wǎng)終端,全球社交媒體和移動端活躍用戶數(shù)量都已達(dá)到30億左右,預(yù)計到2020年全球聯(lián)網(wǎng)設(shè)備總數(shù)可能會超過500億臺[1],信息安全已經(jīng)成為熱點研究領(lǐng)域,特別是有關(guān)信息完整性和保密性的研究更受到越來越多的重視。完整性指信息在存儲、傳輸和處理過程中不被修改、破壞和丟失的特性。保密性指信息不會被泄露給非授權(quán)用戶的特性。隨著物聯(lián)網(wǎng)的發(fā)展和智能終端的普及,在社交網(wǎng)絡(luò)和移動支付等活動中都會涉及到大量的用戶隱私數(shù)據(jù)。作為維護數(shù)據(jù)完整性和保密性的有效手段之一,信息流分析技術(shù)得到了廣泛的運用。

信息流分析技術(shù)[2]的核心思想是:首先給數(shù)據(jù)添加一個標(biāo)簽,此標(biāo)簽隨數(shù)據(jù)在系統(tǒng)中傳播,并根據(jù)標(biāo)簽來獲得數(shù)據(jù)在系統(tǒng)或應(yīng)用程序中傳播的相關(guān)信息;然后制定信息流策略并建立相應(yīng)的信息流模型,通過分析數(shù)據(jù)傳播的相關(guān)信息以確定是否存在違反信息流策略的信息安全隱患,即若被分析對象的信息傳播過程符合制定的信息流策略,則認(rèn)為被分析對象是安全的,否則就是不安全的。根據(jù)信息流策略描述方法的不同,信息流模型可以分為基于格、基于安全類型、基于安全進(jìn)程代數(shù)(Security Process Algebra, SPA)和基于自動機等四種主要形式。由于本文主要介紹污點分析技術(shù),所以只對主流的信息流模型進(jìn)行整理對比,如表1所示。

本文給出了污點分析定義和模型,介紹了靜態(tài)污點分析和動態(tài)污點分析的基本原理、運用和優(yōu)缺點;從技術(shù)實現(xiàn)方式的角度,分別闡述基于硬件、軟件、虛擬環(huán)境和代碼實現(xiàn)污點分析的核心原理、技術(shù)方法以及優(yōu)缺點;從數(shù)據(jù)流向的角度,概述污點分析技術(shù)在隱私數(shù)據(jù)泄漏檢測和漏洞探測這兩個主要領(lǐng)域的應(yīng)用情況;分析污點分析技術(shù)的不足,并探討未來的發(fā)展趨勢。

基于格的信息流模型 要求數(shù)據(jù)只能從高安全級別向低安全級別流動,保證數(shù)據(jù)安全 1.模型要求數(shù)據(jù)只能單向流動,影響了模型應(yīng)用范圍;

2.不能對系統(tǒng)中存在的隱蔽通道進(jìn)行準(zhǔn)確描述

基于安全類型的信息流模型 可根據(jù)需要定制安全類型和規(guī)則 1.安全類型與應(yīng)用的編程語言相關(guān),可移植性較差;

2.基于安全類型的模型存在精確性差的問題

基于SPA的信息流模型 以代數(shù)形式描述系統(tǒng)行為,能夠較好地解決系統(tǒng)概率行為引起的信息泄露和安全降密等問題 1.存在安全性驗證困難問題;

2.在全系統(tǒng)實現(xiàn)模型比較困難,一般只用于局部性驗證

基于自動機的信息流模型 用自動機模型來形式化描述系統(tǒng)安全狀態(tài)轉(zhuǎn)移規(guī)則,應(yīng)用廣泛,移植性好 實現(xiàn)難度隨分析對象規(guī)模增大而增大

1 理論基礎(chǔ)

污點分析技術(shù)是信息流分析技術(shù)的一種實踐方法[3],在信息泄露檢測、漏洞探測、逆向工程等方面有廣泛的應(yīng)用,并被移植到各種不同的環(huán)境和平臺當(dāng)中。污點分析技術(shù)將系統(tǒng)或應(yīng)用程序中的數(shù)據(jù)標(biāo)記為污點或非污點,當(dāng)污點數(shù)據(jù)根據(jù)信息流傳播策略可影響到非污點數(shù)據(jù)時,則將該非污點數(shù)據(jù)的標(biāo)記修改為污點。當(dāng)污點標(biāo)簽最終隨數(shù)據(jù)傳播到指定的存儲區(qū)域或者信息泄露點時,則認(rèn)定該系統(tǒng)違反了信息流策略。

1.1 污點分析模型

污點分析技術(shù)模型包括污點源、污點匯聚點和無害化處理等部分。其中,污點源表示將污點數(shù)據(jù)引入到系統(tǒng)中;污點匯聚點表示系統(tǒng)將污點數(shù)據(jù)輸出到敏感數(shù)據(jù)區(qū)或者外界,造成敏感數(shù)據(jù)區(qū)被非法改寫或者隱私數(shù)據(jù)泄露;無害化處理表示通過數(shù)據(jù)加密或重新賦值等操作使數(shù)據(jù)傳播不再對系統(tǒng)的完整性和保密性產(chǎn)生危害。以下面的代碼為例說明污點分析的一般過程。

程序前

1)

de f rectangle ():

2)

var1=input(‘Enter the first number:)

3)

var3=5

4)

var4=var1 * var3

5)

var7=int(var4)

6)

return var7

7)

de f reset ():

8)

var2=input(‘Enter the second number:)

9)

var5=var2 * 0

10)

return var5

11)

print (rectangle_area())

12)

print (reset_switch())

程序后

其中,rectangle函數(shù)表示將輸入數(shù)值乘5后返回結(jié)果,reset函數(shù)表示將輸入數(shù)值重置為0,代碼中各變量之間的關(guān)系如圖1所示。

將代碼中第2)和第10)行的輸入標(biāo)記為污點源后,var1和var2均被標(biāo)記為污點變量。根據(jù)數(shù)據(jù)依賴關(guān)系,var4和var7也會被標(biāo)記為污點變量。由于污點數(shù)據(jù)var7位于污點匯聚點,即可認(rèn)為rectangle函數(shù)違反了信息安全的完整性或保密性。

污點數(shù)據(jù)主要通過數(shù)據(jù)間的依賴關(guān)系在系統(tǒng)或應(yīng)用程序中進(jìn)行傳播,這種依賴關(guān)系又分為數(shù)據(jù)依賴和控制依賴兩種。數(shù)據(jù)依賴主要包括程序中各變量間的直接賦值、數(shù)學(xué)計算等操作,如上述代碼中var1含有的污點信息通過算術(shù)運算操作傳遞給var4??刂埔蕾囍饕ǔ绦蛑懈髯兞块g的條件判斷與指令跳轉(zhuǎn)等情況,即var1含有的污點信息通過包含var1的條件指令間接傳遞給其他變量,如下面代碼所示。

程序前

1)

de f implicit_flow():

2)

var1=input(‘Enter your input:)

3)

(var2, var3, var4)=(0,0,0)

4)

if? (var1= =10):

5)

var2=1

6)

e lif (var1 > 10):

7)

var3=2

8)

el if (var1 < 10):

9)

var4=3

10)

return print_answer(var2, var3, var4)

11)

de f print_answer(var2, var3, var4):

12)

print (‘var2=, var2)

13)

print (‘var3=, var3)

14)

print (‘var4=, var4)

15)

implicit_flow()

程序后

將代碼中第2)行的輸入標(biāo)記為污點源后,var1被標(biāo)記為污點變量,第4)、6)、8)行是包含var1的條件分支指令。若此時的污點傳播策略為只要分支指令中包含污點數(shù)據(jù)就進(jìn)行污點傳播,那么var2、var3和var4均被標(biāo)記為污點變量,并最終傳播到第10)行的污點匯聚點,會出現(xiàn)污點標(biāo)記數(shù)量過多的問題。但實際上,該程序根據(jù)var1數(shù)值不同,每次運行最多只有一條分支會被污染。若僅按照數(shù)據(jù)依賴關(guān)系進(jìn)行污點傳播,則各分支均不會被標(biāo)記為污點,會造成污點標(biāo)記數(shù)量過少。兩種情況都會導(dǎo)致污點分析效率和準(zhǔn)確性降低的問題。

污點分析一般存在兩個問題,即過污染和欠污染。其中,過污染是指在污染分析過程中將與污點源沒有數(shù)據(jù)和控制依賴關(guān)系的數(shù)據(jù)變量標(biāo)記為污點變量,即產(chǎn)生誤報;欠污染則是在污染分析過程中將與污點源存在數(shù)據(jù)或控制依賴關(guān)系的程序變量標(biāo)記為非污點變量,即產(chǎn)生漏報。對控制依賴關(guān)系的分析不足和不當(dāng)可能會造成過污染和欠污染問題。動態(tài)污點分析工具Dytan[4]引入了控制流污染的概念,提升了污點分析的全面性。

無害化處理是指系統(tǒng)中的某些模塊、函數(shù)或者數(shù)據(jù)處理操作,使得污點數(shù)據(jù)經(jīng)過處理后不再攜帶有敏感數(shù)據(jù)或者不會對系統(tǒng)造成危害。如第一段代碼中的reset函數(shù)可看作是一個無害化處理操作(任何數(shù)值與0的乘積均為0),所以var5不會被標(biāo)記為污點變量。

在檢測系統(tǒng)或應(yīng)用程序是否存在隱私數(shù)據(jù)泄露時,應(yīng)用程序調(diào)用了某個加密函數(shù)對隱私數(shù)據(jù)進(jìn)行加密,這樣即便此數(shù)據(jù)通過API向外發(fā)送,攻擊者也難以通過解密來獲得隱私數(shù)據(jù),則可認(rèn)為該加密函數(shù)完成了一個無害化處理操作。在探測系統(tǒng)或應(yīng)用是否存在漏洞時,輸入驗證模塊也可以被識別成無害化處理操作,比如某些Web網(wǎng)站會采用對輸入的用戶名和密碼進(jìn)行轉(zhuǎn)義以防止SQL注入,此時,可以將該轉(zhuǎn)義操作認(rèn)為是一個無害化處理操作。污點數(shù)據(jù)經(jīng)過無害化處理后,污點標(biāo)記可被移除。正確地識別和利用無害化處理可以降低系統(tǒng)中污點標(biāo)記的數(shù)量,提高污點分析的效率,并避免由于污點擴散導(dǎo)致的過污染問題。

根據(jù)分析過程中是否需要運行目標(biāo)程序,污點分析技術(shù)被分為靜態(tài)污點分析和動態(tài)污點分析兩種。

1.2 靜態(tài)污點分析

靜態(tài)污點分析主要通過詞法和語法分析等方法離線分析變量間數(shù)據(jù)和控制依賴關(guān)系,以檢測污點數(shù)據(jù)能否從污點源傳播到污點匯聚點,在此過程中既不運行目標(biāo)程序,也無需修改代碼。靜態(tài)污點分析的對象是程序代碼或中間表示(Intermediate Representation, IR)。

在分析數(shù)據(jù)依賴關(guān)系時,首先需要恢復(fù)函數(shù)調(diào)用關(guān)系圖,然后根據(jù)具體的程序特性進(jìn)行函數(shù)內(nèi)或函數(shù)間的污點傳播分析。常見的數(shù)據(jù)依賴關(guān)系包括賦值、函數(shù)調(diào)用和別名,其中研究難點在于對別名的分析,為了降低靜態(tài)污點分析技術(shù)的資源開銷,研究者們設(shè)計了多種方法來進(jìn)行別名分析。如Livshits等[5]采取按需的上下文敏感的別名分析方法,配合程序查詢語言污點檢查策略,來檢測Java應(yīng)用程序漏洞。ANDROMEDA[6]工具利用對象敏感別名分析方法解決分析對象的訪問路徑問題。

在分析控制依賴關(guān)系時,需要恢復(fù)控制流圖?;謴?fù)控制流圖通常采用遞歸算法:首先尋找并分析基本塊Ba,識別其后續(xù)基本塊Bb和Bc并添加到控制流圖中;然后重復(fù)對Bb和Bc進(jìn)行相同的遞歸分析,直到?jīng)]有新的后續(xù)基本塊被識別且所有基本塊均被添加到控制流圖中?;謴?fù)控制流圖的研究難點在于間接跳轉(zhuǎn),即當(dāng)二進(jìn)制文件將控制流傳輸?shù)接杉拇嫫骰虼鎯ζ魑恢弥械闹当硎镜哪繕?biāo)時,發(fā)生間接跳轉(zhuǎn)。與直接跳轉(zhuǎn)的目標(biāo)被編碼到指令本身以正常解析不同,間接跳轉(zhuǎn)的目標(biāo)受多個因素的影響而變化。

常用的靜態(tài)污點分析工具BinCAT通過抽象解釋,實現(xiàn)了控制流圖恢復(fù)和污點分析,并能集成到反匯編工具IDA中使用。靜態(tài)二進(jìn)制分析平臺Jakstab[7]在線性掃描和遞歸掃描的基礎(chǔ)上,借助數(shù)據(jù)流分析進(jìn)行多次迭代并恢復(fù)控制流圖,能獲得更準(zhǔn)確的結(jié)果。

靜態(tài)污點分析的優(yōu)點是考慮了程序所有可能的執(zhí)行路徑,但由于不運行目標(biāo)程序,無法得到程序運行時的額外信息,所以存在分析結(jié)果不夠準(zhǔn)確的問題。由于程序源代碼和IR能夠提供清晰的污點傳播規(guī)則,因此在源代碼和IR的基礎(chǔ)上進(jìn)行靜態(tài)污點分析易于實現(xiàn)。

1.3 動態(tài)污點分析

動態(tài)污點分析是在目標(biāo)程序運行過程中,通過實時跟蹤監(jiān)控并記錄程序變量、寄存器和內(nèi)存等的值,確定污點數(shù)據(jù)能否從污點源傳播到污點匯聚點。動態(tài)污點分析能夠比較準(zhǔn)確地獲得程序執(zhí)行過程中各變量和存儲單元的狀態(tài),有效提高污點分析的精確度。

動態(tài)污點分析首先采用插樁的方法,在不破壞目標(biāo)程序原有邏輯的基礎(chǔ)上插入一些采集信息的代碼,從而獲得程序運行的相關(guān)信息,目前常用的插樁平臺有Pin和Valgrind。接著,在原數(shù)據(jù)基礎(chǔ)上增加一個污點標(biāo)記來表示寄存器及內(nèi)存的污染情況,通常被稱為影子內(nèi)存。Valgrind實現(xiàn)了可保存四種污點信息狀態(tài)的污點信息存儲。 Zhao等則提出了一種與其類似但更全面的影子內(nèi)存框架Umbra。 然后,還要根據(jù)程序所運行環(huán)境的指令類型和指令操作數(shù)設(shè)計相應(yīng)的污點傳播規(guī)則傳播污點標(biāo)記。最后,通過分析程序運行相關(guān)信息獲得目標(biāo)程序的數(shù)據(jù)流和控制流信息。

動態(tài)污點分析工具TaintCheck基于插樁平臺Valgrind,由TaintSeed、TaintTracker、TaintAssert和ExploitAnalyzer等四個模塊組成。TaintCheck以二進(jìn)制文件為分析對象,借助Valgrind在程序執(zhí)行中動態(tài)地將執(zhí)行指令翻譯成Ucode形式的中間表示,并將污點信息存儲在Taint Structure數(shù)據(jù)結(jié)構(gòu),最后通過TaintAssert檢查是否存在危險數(shù)據(jù)操作。

動態(tài)污點分析的優(yōu)點是通過在程序中插樁以獲得程序執(zhí)行中的具體信息,分析精度高,但頻繁的插樁操作和影子內(nèi)存的設(shè)計會占用系統(tǒng)資源,污點分析執(zhí)行效率比靜態(tài)分析低。此外,動態(tài)污點分析一般只能分析程序執(zhí)行過程中所覆蓋到的路徑,可能會產(chǎn)生漏報。

本節(jié)介紹了污點分析定義與模型,并分別介紹了靜態(tài)污點分析和動態(tài)污點分析的定義和優(yōu)缺點。 在實際應(yīng)用中,為了克服動態(tài)污點分析與靜態(tài)污點分析的缺點,也有研究者將二者相結(jié)合,其方法通常是:先執(zhí)行靜態(tài)污點分析獲得初步信息,提高路徑覆蓋率,節(jié)約分析時間和系統(tǒng)開銷;然后再執(zhí)行動態(tài)污點分析獲得安全漏洞或者危險數(shù)據(jù)操作的具體信息,提高分析的準(zhǔn)確度。除了提高路徑覆蓋率,靜態(tài)污點分析還可以篩選出供后續(xù)動態(tài)污點分析的路徑,減小動態(tài)污點分析的范圍,提高分析執(zhí)行效率。例如,用于檢測Android應(yīng)用隱私數(shù)據(jù)泄露的Appaudit[8]首先利用輕量級靜態(tài)分析技術(shù)篩選出可疑函數(shù),再通過動態(tài)執(zhí)行技術(shù)檢測這些函數(shù)是否存在隱私數(shù)據(jù)泄露問題。黃強等[9]提出了一種檢測軟件脆弱性的方案,先利用靜態(tài)分析技術(shù)排除不可達(dá)執(zhí)行,搜索程序中導(dǎo)致軟件潛在脆弱性的所有路徑;然后使用污點檢查策略識別脆弱性類型;最后,在潛在的問題點插樁數(shù)據(jù)驗證和處理函數(shù),隨程序源代碼一同編譯生成可執(zhí)行文件,增強程序運行時的監(jiān)控能力。

2 污點分析實現(xiàn)方式

自污點分析技術(shù)被提出后,研究者們進(jìn)行了深入的研究,并實現(xiàn)了許多框架和工具。根據(jù)其實現(xiàn)方式的不同,這些工具大致可分為基于硬件、基于軟件、基于虛擬環(huán)境和基于代碼等四個層次。

2.1 基于硬件的污點分析

基于硬件的污點分析的核心思想是對寄存器、緩存和內(nèi)存等硬件結(jié)構(gòu)進(jìn)行重新設(shè)計,增加相應(yīng)的污點信息標(biāo)志位以實現(xiàn)污點信息的存儲、傳播和檢測等功能。

例如,動態(tài)污點分析工具Raksha[10]在硬件方面進(jìn)行了諸多改動:

1)將包括寄存器、緩存和主存在內(nèi)的所有存儲單元都做了標(biāo)記位擴展,以實現(xiàn)污點的標(biāo)記,這也是所有基于硬件的污點分析工具的共同特點。

2)將指令集架構(gòu)也進(jìn)行了擴展,在實現(xiàn)常規(guī)功能的同時支持污點標(biāo)記的傳播與檢查操作,為了在硬件層面支持這一功能,Raksha還設(shè)計了兩類專用寄存器:用于維護標(biāo)記傳播策略的標(biāo)記傳播寄存器和用于策略實施與檢查的標(biāo)記檢測寄存器。

3)為進(jìn)行異常處理,系統(tǒng)還設(shè)計了引用監(jiān)控寄存器、客戶操作寄存器和異常處理寄存器,其中,異常處理寄存器主要用于保存污點標(biāo)記傳播過程中所發(fā)生的各類異常信息。

4)為解決了不同型號處理器的兼容問題,系統(tǒng)專門設(shè)計了一個協(xié)處理器進(jìn)行動態(tài)污點分析,而主處理器進(jìn)行正常數(shù)據(jù)處理工作。

基于硬件的污點分析可以通過定制硬件的方式降低系統(tǒng)開銷,提高污點分析執(zhí)行效率,但由于運行在硬件層,不支持上層語義的邏輯安全策略,且需要對硬件結(jié)構(gòu)進(jìn)行重新設(shè)計,移植性較差。

2.2 基于軟件的污點分析

基于軟件的污點分析根據(jù)分析對象的不同還可細(xì)分為基于操作系統(tǒng)和基于應(yīng)用程序的污點分析,其核心思想是將操作系統(tǒng)(如進(jìn)程與線程、內(nèi)存、文件等)或應(yīng)用程序(如數(shù)據(jù)庫中的文件等)中的相關(guān)資源進(jìn)行標(biāo)記,并在此基礎(chǔ)上進(jìn)行污點分析?;谲浖奈埸c分析無需改變底層硬件,主要通過修改程序代碼的方式實現(xiàn)污點信息的存儲與傳播,例如TaintEraser[11]、TaintDroid[12]等。

Asbestos[13]系統(tǒng)實現(xiàn)了基于操作系統(tǒng)的污點分析,主要基于最小特權(quán)原則和能夠在系統(tǒng)進(jìn)程通信方面提供了污點分析工具。Asbestos系統(tǒng)的實現(xiàn)基于以下原則:

1)最小特征原則,即向每一個用戶或進(jìn)程賦予其完成某種業(yè)務(wù)所需的最少特權(quán);

2)強制訪問控制原則,即將系統(tǒng)中的信息區(qū)分密級進(jìn)行管理,以確保用戶只能訪問被明確允許訪問的信息。

基于Asbestos系統(tǒng)的Web服務(wù)器工作流程架構(gòu)如圖2所示,這是一個實現(xiàn)多個用戶動態(tài)登錄的網(wǎng)站,其中ok-demux模塊分析傳入的連接請求并將其發(fā)送到相關(guān)的工作進(jìn)程,idd模塊用于檢查用戶密碼,ok-dbproxy模塊提供數(shù)據(jù)庫接口。在網(wǎng)站運行時,系統(tǒng)給每個用戶提供專用權(quán)限,不同用戶之間通過標(biāo)簽和事件進(jìn)程進(jìn)行隔離。Asbestos系統(tǒng)通過對標(biāo)簽的動態(tài)調(diào)整實現(xiàn)污點分析的功能,但未考慮對系統(tǒng)關(guān)鍵資源的控制,且對進(jìn)程間的系統(tǒng)資源共享和進(jìn)程標(biāo)記隱蔽通道等問題也沒有提出解決方案。

基于軟件的污點分析支持更高層級的語義邏輯安全策略,但使用插樁或代碼重寫會導(dǎo)致系統(tǒng)資源的巨大開銷。

2.3 基于虛擬環(huán)境的污點分析

基于虛擬環(huán)境的污點分析的核心思想是在虛擬環(huán)境中增加污點分析模塊,使污點分析模塊和被分析的目標(biāo)程序運行在不同環(huán)境中。其中,分析模塊運行于虛擬機監(jiān)控層,目標(biāo)程序處于目標(biāo)機操作系統(tǒng)層,分析模塊不影響目標(biāo)程序的運行,記錄的污點信息更準(zhǔn)確,如圖3所示。

在基于虛擬環(huán)境執(zhí)行污點分析的研究方面,研究者們實現(xiàn)了很多工具。如Phosoher[14]就是基于Java虛擬機環(huán)境的污點分析系統(tǒng)。Argos通過x86模擬器在程序執(zhí)行過程中跟蹤網(wǎng)絡(luò)數(shù)據(jù),獲取程序運行信息,使用位圖映射標(biāo)識內(nèi)存及寄存器污點狀態(tài),保存當(dāng)前環(huán)境為快照并提取特征碼,能有效檢測出針對服務(wù)器的攻擊行為。動態(tài)分析平臺TEMU在QEMU虛擬機的基礎(chǔ)上進(jìn)行了擴展,能夠以較細(xì)的粒度分析內(nèi)核與多進(jìn)程間的交互情況。

基于虛擬環(huán)境的污點分析不需要修改程序的代碼,由于虛擬機監(jiān)控層的權(quán)限比目標(biāo)機操作系統(tǒng)層更高,因此分析模塊能夠記錄系統(tǒng)調(diào)用甚至內(nèi)核執(zhí)行的指令信息,可以發(fā)現(xiàn)系統(tǒng)底層漏洞,基于Android平臺的污點分析工具一般采用基于虛擬環(huán)境的方式實現(xiàn)。但基于虛擬環(huán)境的污點分析需要搭設(shè)應(yīng)用程序所需的工作環(huán)境,特別是在分析工控系統(tǒng)和物聯(lián)網(wǎng)設(shè)備等與硬件環(huán)境聯(lián)系緊密的固件程序時,虛擬環(huán)境的搭設(shè)工作十分復(fù)雜,且僅依靠基于虛擬環(huán)境的污點分析并不能保證操作系統(tǒng)的安全性,不能取代基于操作系統(tǒng)的污點分析的功能和作用。最后,基于虛擬環(huán)境的污點分析一般需要虛擬機解釋執(zhí)行的過程中執(zhí)行污點分析,對系統(tǒng)運行效率影響較大。

2.4 基于代碼的污點分析

基于代碼的污點分析根據(jù)分析對象的不同也可以被細(xì)分為對程序源碼進(jìn)行污點分析和對二進(jìn)制代碼進(jìn)行污點分析兩種?;诖a的污點分析工具基本都采用了程序切片技術(shù),使其對程序的理解和分析更為精確。程序切片是指能夠影響程序某行的某個變量值的部分語句和判定表達(dá)式的集合。自1979年被提出后,程序切片技術(shù)已經(jīng)發(fā)展出靜態(tài)切片與動態(tài)切片、前向切片與后向切片以及一些變種技術(shù)等多種方法。Tripp等[15]實現(xiàn)了TAJ工具,通過混合切片的方式對Java Web應(yīng)用進(jìn)行污點分析。

對程序源碼進(jìn)行污點分析是實現(xiàn)一個帶有安全標(biāo)簽的類型系統(tǒng),在編譯過程中讀取程序源碼的安全標(biāo)簽,以檢查是否存在違反信息流策略的情況。在第1章中已有所介紹,靜態(tài)污點分析常采用這種方式。對程序源碼進(jìn)行污點分析能夠在程序編譯時發(fā)現(xiàn)程序中違反信息流策略的情況,對系統(tǒng)資源的開銷較小,分析執(zhí)行效率高,缺點是需要獲得源代碼,在商業(yè)環(huán)境下應(yīng)用難度較高。

對二進(jìn)制代碼進(jìn)行污點分析是在二進(jìn)制代碼中插入污點跟蹤代碼,以獲取程序執(zhí)行時的污點傳播情況。動態(tài)污點分析常采用這種方式。對二進(jìn)制代碼進(jìn)行污點分析可以在指令級別進(jìn)行污點跟蹤檢測,精確度高,但頻繁的插樁會占用系統(tǒng)資源,降低系統(tǒng)運行效率。此外,計算機的指令類型和規(guī)模使得二進(jìn)制代碼的精確建模極為困難,且二進(jìn)制代碼缺乏高層語義支持,一般需要依靠插樁平臺或二進(jìn)制反匯編工具以降低工作量。

此外,還有一些針對中間表示進(jìn)行污點分析的研究,如梁彬等[16]實現(xiàn)了一種針對JavaScript優(yōu)化編譯執(zhí)行模式的動態(tài)污點分析方法,在中間代碼層面進(jìn)行插樁操作,能夠有效地在優(yōu)化編譯執(zhí)行模式下進(jìn)行污點跟蹤。

綜合本章內(nèi)容,從實現(xiàn)基礎(chǔ)、分析對象、可移植性、系統(tǒng)效率和靜態(tài)/動態(tài)等五個方面對四種污點分析實現(xiàn)方式進(jìn)行對比如表2所示。

對工程應(yīng)用而言,研究者也會在一個工具中綜合使用兩種以上的實現(xiàn)方式,以便在不同層面進(jìn)行污點分析,提高污點分析的準(zhǔn)確性。如FlexiTaint、PIFT[17]等工具就綜合了基于硬件和基于軟件兩種污點分析思想,既盡可能少地改動硬件結(jié)構(gòu),又支持更高層級的語義邏輯安全策略。

3 相關(guān)應(yīng)用

污點分析技術(shù)自提出后就在隱私數(shù)據(jù)泄露檢測、逆向分析、漏洞探測等方面得到廣泛應(yīng)用,本章重點介紹隱私數(shù)據(jù)泄露檢測和漏洞探測。

3.1 隱私數(shù)據(jù)泄露檢測

污點分析技術(shù)用于隱私數(shù)據(jù)泄露檢測的核心思想是:首先將系統(tǒng)或應(yīng)用程序中的隱私數(shù)據(jù)標(biāo)記為污點源,將對外輸出數(shù)據(jù)的API標(biāo)記為污點匯聚點,然后在程序運行過程中根據(jù)污點傳播規(guī)則跟蹤被標(biāo)記為污點的隱私數(shù)據(jù)的傳播路徑,當(dāng)系統(tǒng)調(diào)用API向外發(fā)送數(shù)據(jù)時檢測其中是否包含污點標(biāo)記,從而判定是否發(fā)生隱私數(shù)據(jù)泄露。比如污點分析工具AndroidLeaks[18]通過自動化分析Android框架代碼來獲取API與權(quán)限的對應(yīng)關(guān)系并確定污點源列表,從而大規(guī)模檢測應(yīng)用程序中存在的隱私數(shù)據(jù)泄露行為。

當(dāng)前,移動設(shè)備用戶數(shù)量已經(jīng)超過了傳統(tǒng)互聯(lián)網(wǎng)用戶,其中Android平臺設(shè)備占據(jù)了主要份額,因此近年來,針對Android平臺隱私數(shù)據(jù)泄露檢測技術(shù)的研究已經(jīng)成為熱點,本文重點介紹污點分析技術(shù)在Android平臺上的應(yīng)用。Android平臺架構(gòu)分為四層,自下而上分別為Linux內(nèi)核層、系統(tǒng)運行層、應(yīng)用程序框架層和應(yīng)用程序?qū)印S捎贏ndroid平臺采用基于組件的編程模型,根據(jù)污點傳播涉及的范圍不同,可分為組件內(nèi)、組件間以及組件與庫函數(shù)之間三類污點傳播方式,如圖4所示。

靜態(tài)污點分析和動態(tài)污點分析對這三類傳播的處理方式也有所不同。采用靜態(tài)污點分析技術(shù)進(jìn)行隱私數(shù)據(jù)泄露檢測時,首先需要構(gòu)建完整的分析模型,以確??梢愿采w所有的可執(zhí)行路徑。靜態(tài)分析框架Dalysis[19]和自動化檢測工具CHEX采用增量方法構(gòu)建系統(tǒng)調(diào)用圖,對目標(biāo)App進(jìn)行全局?jǐn)?shù)據(jù)流分析。另一種常用污點分析工具FlowDroid[20]則針對 Android系統(tǒng)的異步工作機制對分析模型進(jìn)行了大量優(yōu)化。其次,靜態(tài)污點分析通過分析Intent參數(shù)信息來完成組件間的污點傳播分析。Octeau等[21]提出了一個組件間通信機制尋址方案,將組件間污點傳播轉(zhuǎn)化為IDE問題,再進(jìn)行求解。最后,靜態(tài)污點分析還需要考慮組件與庫函數(shù)之間的污點傳播問題,由于庫函數(shù)數(shù)量龐大且本地庫多為C/C+ +語言編寫,因此針對這一問題沒有統(tǒng)一的解決方案。如FlowDroid采用保守策略,即若調(diào)用庫函數(shù)的參數(shù)中含有污點數(shù)據(jù),則將其函數(shù)返回值標(biāo)記為污點。

采用動態(tài)污點分析技術(shù)進(jìn)行隱私數(shù)據(jù)泄露時最常用的工具是TaintDroid,通過分析Dalvik虛擬機DEX指令類型并根據(jù)制定的污點傳播規(guī)則來跟蹤組件內(nèi)的污點傳播情況,并且TaintDroid重新設(shè)計了用于存儲數(shù)據(jù)的包對象結(jié)構(gòu),使之能夠存儲與污點相關(guān)的信息,這樣污點信息就可以在組件間進(jìn)行傳播。最后,TaintDroid也采用了類似于保守策略的方法來處理組件與庫函數(shù)之間的污點傳播。與TaintDroid相似的是,劉陽等[22]通過對框架層源碼進(jìn)行插樁實現(xiàn)添加和提取污點標(biāo)記,并在此基礎(chǔ)上實現(xiàn)了檢測隱私數(shù)據(jù)泄露的方法。

表3中列舉了幾種基于Android平臺的常用污點分析工具的優(yōu)缺點及分析性能的對比分析。從表中可以看到:FlowDroid可以對組件內(nèi)和組件間的污點傳播進(jìn)行分析,但在組件與庫函數(shù)之間默認(rèn)采用了保守策略,因此誤報率較高;DroidMark在其基礎(chǔ)上引入了深度學(xué)習(xí)技術(shù),大幅降低了誤報率和漏報率,但實際性能與深度學(xué)習(xí)模型訓(xùn)練效果有關(guān);TaintDroid[23]只對數(shù)據(jù)流進(jìn)行污點分析,漏報率相對較高,但其系統(tǒng)開銷增加不大,且能實現(xiàn)多個粒度級別的污點分析,實用性較強。

3.2 漏洞探測

除了隱私數(shù)據(jù)泄露檢測外,污點分析技術(shù)還被應(yīng)用于檢測緩沖區(qū)溢出、SQL注入、XSS攻擊、格式字符串攻擊等方面。這類攻擊行為的共同特點是用戶的輸入利用了系統(tǒng)中的某個漏洞,可以不經(jīng)合法授權(quán)就改寫系統(tǒng)數(shù)據(jù)敏感區(qū)的值,從而達(dá)到攻擊的目的。污點分析技術(shù)被用于漏洞探測的核心思想是:將外部輸入數(shù)據(jù)標(biāo)記為污點源,將敏感數(shù)據(jù)區(qū)標(biāo)記為污點匯聚點,然后在程序運行過程中根據(jù)污點傳播規(guī)則跟蹤污點數(shù)據(jù)的傳播路徑,檢查敏感數(shù)據(jù)區(qū)是否被污點數(shù)據(jù)污染,從而判定系統(tǒng)或應(yīng)用程序是否存在漏洞。

在污點分析提出以來,該領(lǐng)域一直都是研究者們重點關(guān)注的對象。達(dá)小文等[24]通過分析大量緩沖區(qū)溢出實例,歸納了六種緩沖區(qū)溢出的漏洞定位模型,并結(jié)合補丁比對和污點傳播分析生成污點傳播路徑圖,最后將補丁源碼的污點傳播路徑圖與定位模型相匹配以精確定位漏洞所在位置;InterTracer[25]利用靜態(tài)污點分析方法來檢測Android應(yīng)用中的Intent注入漏洞;DexterJS[26]平臺可在字符粒度級別檢測Web應(yīng)用中基于DOM的XSS漏洞。

本節(jié)主要從污點數(shù)據(jù)流向的角度介紹了污點分析技術(shù)在隱私數(shù)據(jù)泄露檢測和漏洞探測領(lǐng)域的應(yīng)用。除了上述兩種典型應(yīng)用,污點分析技術(shù)在其他領(lǐng)域也得到廣泛的應(yīng)用,例如污點分析工具Renove[27]能夠?qū)崿F(xiàn)病毒關(guān)鍵代碼的自動化提取,可用于病毒的智能脫殼;Eudaemon[28]結(jié)合了動態(tài)污點分析技術(shù)和蜜罐與終端入侵檢測技術(shù)檢測0day漏洞。

4 研究趨勢

污點分析技術(shù)雖然取得了豐碩的研究成果,但也有很多問題并沒有得到完全解決。一是現(xiàn)有工具僅基于某一層次進(jìn)行污點分析。比如基于應(yīng)用程序的污點分析雖然可以檢測程序運行中存在的隱私數(shù)據(jù)泄露問題,但隱私數(shù)據(jù)在數(shù)據(jù)庫或系統(tǒng)進(jìn)程中同樣存在泄露隱患。二是動態(tài)污點分析精度與效率之間的矛盾不可調(diào)和。動態(tài)污點分析是在原系統(tǒng)基礎(chǔ)上擴展了污點跟蹤機制,需要占用系統(tǒng)資源,導(dǎo)致系統(tǒng)效率下降,分析精度要求越高,需要獲得的污點分析數(shù)據(jù)就要越詳細(xì),系統(tǒng)效率下降就越嚴(yán)重。所有的動態(tài)污點分析工具都需要根據(jù)應(yīng)用環(huán)境的要求在精度與效率之間進(jìn)行平衡。

因此,污點分析技術(shù)未來研究的出發(fā)點就是如何提高污點分析技術(shù)的性能??偟膩碚f,主要包括以下兩個方面。

4.1 優(yōu)化污點分析技術(shù)方法

繼續(xù)優(yōu)化污點分析技術(shù)的算法,通過設(shè)計更科學(xué)的污點識別方法、歸納更準(zhǔn)確的污點傳播策略以及引入新算法等方法來提高污點分析技術(shù)的準(zhǔn)確性和分析效率。

4.1.1 提高污點數(shù)據(jù)識別的精度

污點源的識別不當(dāng)很容易造成污點標(biāo)簽在程序中的錯誤擴散,繼而影響污點分析技術(shù)的準(zhǔn)確性和分析效率。為了解決這一問題,有研究者引入機器學(xué)習(xí)的概念來識別污點源和污點匯聚點,如Tripp等[29]使用Bayesian模型對污點源進(jìn)行分類,從中排除正常的數(shù)據(jù)發(fā)送請求,降低了對污點分析造成的影響;而DroidMark則采用了深度學(xué)習(xí)技術(shù),將對Android設(shè)備中惡意軟件的檢測精度提升至96.87%。

4.1.2 制定更科學(xué)的污點傳播策略

污點傳播策略的選擇與污點分析的精度和效率關(guān)系密切,比如有的工具(如IPSSA)在處理污點傳播時采用了保守策略,將所有與污染數(shù)據(jù)有關(guān)的操作均認(rèn)定為符合污染傳播規(guī)則,擴大了污點屬性的標(biāo)記范圍,降低了模型的精確度;有的細(xì)粒度污點分析工具在執(zhí)行粗粒度分析時,占用了過多的系統(tǒng)資源,導(dǎo)致分析效率不高。

因此在工程實現(xiàn)時研究者們往往結(jié)合分析需要制定科學(xué)的污點傳播方法。例如在函數(shù)級污點的傳播過程中采用函數(shù)摘要思想,使污點在函數(shù)外層快速傳播,避免了函數(shù)內(nèi)部指令插樁等系統(tǒng)開銷較大的操作,既保證了分析準(zhǔn)確性又提高了系統(tǒng)效率。馬金鑫等[30]還提出了基于執(zhí)行蹤跡離線索引的方法,在污點分析過程中,篩選出與污點數(shù)據(jù)相關(guān)的操作的同時忽略與污點數(shù)據(jù)無關(guān)的指令,從而縮短污點分析時間。

4.1.3 引入新算法提高污點分析性能

一方面是將污點分析問題轉(zhuǎn)換為其他問題,如:靜態(tài)污點分析框架Parfait,在程序預(yù)處理階段將污點分析問題轉(zhuǎn)換為圖可達(dá)性問題,實現(xiàn)了針對C代碼的靜態(tài)污點分析;MalScope將污點分析問題轉(zhuǎn)換為加權(quán)下推自動機的廣義下推后繼問題,利用污點數(shù)據(jù)在程序中的可達(dá)性,減少后續(xù)分析中需要精確執(zhí)行的路徑數(shù),可有效解決靜態(tài)污點分析方法在進(jìn)行路徑敏感分析時面臨的路徑爆炸問題;DROIDPF[31]應(yīng)用軟件模型檢查技術(shù)驗證Android應(yīng)用,并采用了一種Android特有的還原技術(shù)來緩解狀態(tài)空間爆炸。另一方面是采用并行處理技術(shù)進(jìn)行污點分析,提高污點分析執(zhí)行速度,如:動態(tài)污點分析框架DTAM[32]可并行執(zhí)行多個線程單元的污點分析,再將分析結(jié)果進(jìn)行聚合,提高了對可并行執(zhí)行的多線程程序進(jìn)行動態(tài)污點分析的效率;PAGDTA[33]采用虛擬化技術(shù)將各測試用例并行執(zhí)行動態(tài)污點分析,大幅度提高了路徑覆蓋率和執(zhí)行效率。

4.2 結(jié)合其他研究方法

為提高污點分析技術(shù)的精度和效率,還有研究者將不同的技術(shù)方法結(jié)合使用,以綜合各方法的優(yōu)點,其中關(guān)于靜態(tài)污點分析和動態(tài)污點分析結(jié)合的研究工作在第1章已經(jīng)進(jìn)行過介紹,本節(jié)主要介紹以下兩種方法。

4.2.1 與符號執(zhí)行結(jié)合使用

符號執(zhí)行(Symbolic Execution, SE)的核心思想是使用符號值替代具體數(shù)據(jù)作為程序輸入,并在程序執(zhí)行過程中以符號值進(jìn)行計算,用包含符號的表達(dá)式表示程序變量的值和最終的輸出結(jié)果。將污點分析與符號執(zhí)行結(jié)合使用的分析工具有Angr[34]和DsVD[35]等。符號執(zhí)行的精度比污點分析技術(shù)高,可以在程序運行過程中精確記錄路徑上所有的約束條件,有助于提高路徑可達(dá)性判定的準(zhǔn)確性;但缺點是用于二進(jìn)制程序分析時識別變量較為困難,會產(chǎn)生空間爆炸問題,需要強大的計算能力支持。為了解決這一問題,研究者們提出了混合符號執(zhí)行技術(shù),這種技術(shù)結(jié)合了符號執(zhí)行和具體執(zhí)行,當(dāng)符號執(zhí)行無法判定或計算取值時,用具體值來代替部分符號值,以使符號執(zhí)行能夠繼續(xù)進(jìn)行。

此外,陳力波等[36]提出了基于類型的動態(tài)污點分析技術(shù),其核心思想是將類型信息和符號值作為污點信息,在程序執(zhí)行時同時進(jìn)行動態(tài)污點分析和符號執(zhí)行,程序運行結(jié)束后獲得污點傳播信息和程序執(zhí)行路徑條件,最后通過求解得到輸入變量滿足的約束條件。這種技術(shù)結(jié)合了動態(tài)污點分析和符號執(zhí)行的優(yōu)點,對程序有較為全面的理解。朱正欣等[37]基于動態(tài)插樁平臺Pin以及l(fā)ibdft提出了動態(tài)符號化污點分析方法,其核心思想是將污點信息及污點檢查策略符號化,并分析污點數(shù)據(jù)在傳播過程中是否違反污點檢查策略,進(jìn)而判斷程序在動態(tài)執(zhí)行過程中是否存在非法數(shù)據(jù)操作。還有BitBlaze[38]將動態(tài)分析與靜態(tài)分析、混合符號執(zhí)行與具體執(zhí)行、系統(tǒng)仿真與二進(jìn)制重寫等多種分析方法相結(jié)合,對二進(jìn)制代碼進(jìn)行分析。

4.2.2 與模糊測試結(jié)合使用

模糊測試的核心思想是生成大量測試用例來測試程序魯棒性,以保證較高的代碼覆蓋率,但缺點是對程序漏洞作用機理缺乏基本的理解。為了解決這個問題,研究者們提出了定向模糊測試[39]方法,將模糊測試和污點分析相結(jié)合,在異常測試樣本集的基礎(chǔ)上進(jìn)行污點分析,深入了解漏洞作用機理,并在此基礎(chǔ)上實現(xiàn)了SmartDroid[40]、Brahmastra[41]等工具。此外,Ganesh等[42]實現(xiàn)了自動化白盒模糊測試工具BuzzFuzz,其核心思想是使用動態(tài)污點分析技術(shù)追蹤輸入數(shù)據(jù)中影響程序關(guān)鍵數(shù)據(jù)區(qū)的范圍,能夠發(fā)現(xiàn)隱藏在程序中深層錯誤,適合復(fù)雜結(jié)構(gòu)的輸入文件測試。Wang等[43]實現(xiàn)了自動化模糊測試系統(tǒng)TaintScope,將動態(tài)污點分析和符號執(zhí)行相結(jié)合,提升了對具有校驗機制的程序進(jìn)行模糊測試的效率。

除了污點分析技術(shù)性能以外,如何擴大污點分析技術(shù)的應(yīng)用范圍也是研究的熱點領(lǐng)域。特別是隨著近年來工控系統(tǒng)安全受到重視,污點分析技術(shù)也被引入工控安全的研究領(lǐng)域,例如LUCON[44]在工業(yè)物聯(lián)網(wǎng)環(huán)境下采用動態(tài)污點分析,檢測是否存在信息泄露隱患。

5 結(jié)語

本文比較系統(tǒng)地介紹了污點分析的理論基礎(chǔ)、實現(xiàn)方法和典型應(yīng)用,并分析了其中的優(yōu)點和不足,但對具體的工具設(shè)計和功能實現(xiàn)并沒有作深入闡述,還需要參閱相關(guān)文獻(xiàn)以詳加了解。污點分析技術(shù)已經(jīng)被廣泛應(yīng)用于信息安全的各個領(lǐng)域,但其研究趨勢仍是提高分析精度和效率以及擴大應(yīng)用領(lǐng)域兩個方面。本文對目前提高分析精度和效率的主要做法進(jìn)行了介紹,在擴大應(yīng)用領(lǐng)域方面,還有研究者正將污點分析技術(shù)應(yīng)用于云計算、物聯(lián)網(wǎng)、工業(yè)控制領(lǐng)域的安全研究中,這也是污點分析技術(shù)研究的下一個熱點領(lǐng)域。

參考文獻(xiàn)

[1]?EVANS D. The Internet of things: how the next evolution of the Internet is changing everything [EB/OL]. [2018-12-03]. https://www.cisco.com/c/dam/en_us/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf.

https://www.researchgate.net/publication/306122904_The_Internet_of_Things_How_the_Next_Evolution_of_the_Internet_is_Changing_Everything

[2]?吳澤智,陳性元,楊智,等.信息流控制研究進(jìn)展[J].軟件學(xué)報,2017,28(1):135-159. (WU Z Z, CHEN X Y, YANG Z, et al. Survey on information flow control[J]. Journal of Software, 2017, 28(1): 135-159.)

[3]?王蕾,李豐,李煉,等.污點分析技術(shù)的原理和實踐應(yīng)用[J].軟件學(xué)報,2017,28(4):860-882. (WANG L, LI F, LI L, et al. Principle and practice of taint analysis[J]. Journal of Software, 2017, 28(4): 860-882.)

[4]?CLAUSE J, LI W, ORSO A. Dytan: a generic dynamic taint analysis framework [C]// Proceedings of the 2007 International Symposium on Software Testing and Analysis. New York: ACM, 2007:196-206.

[5]?LIVSHITS V B, LAM M S. Finding security vulnerabilities in Java applications with static analysis [C]// Proceedings of the 14th Conference on USENIX Security Symposium. Berkeley, CA: USENIX Association, 2005, 14: 271-286.

[6]?TRIPP O, PISTOIA M, COUSOT P, et al. ANDROMEDA: accurate and scalable security analysis of Web applications [C]// Proceedings of the 2013 International Conference on Fundamental Approaches to Software Engineering, LNCS 7793. Berlin: Springer, 2013:210-225.

[7]?KINDER J, VEITH H. Jakstab: a static analysis platform for binaries [C]// Proceedings of the 2008 International Conference on Computer Aided Verification, LNCS 5123. Berlin: Springer, 2008: 423-427.

[8]?XIA M, GONG L, LYU Y, et al. Effective real-time Android application auditing [C]// Proceedings of the 2015 IEEE Symposium on Security and Privacy. Washington, DC: IEEE Computer Society, 2015:899-914.

[9]?黃強,曾慶凱.基于信息流策略的污點傳播分析及動態(tài)驗證[J].軟件學(xué)報,2011,22(9):2036-2048. (HUANG Q, ZENG Q K. Taint propagation analysis and dynamic verification with information flow policy [J]. Journal of Software, 2011, 22(9): 2036-2048.)

[10]DALTON M, KANNAN H, KOZYRAKIS C. Raksha: a flexible information flow architecture for software security [C]// Proceedings of the 34th International Symposium on Computer Architecture. New York: ACM, 2007:482-493.

[11]ZHU D (Y), JUNG J, SONG D, et al. TaintEraser: protecting sensitive data leaks using application-level taint tracking [J]. ACM SIDOPS Operating Systems Review, 2011, 45(1): 142-154.

[12]?ENCK W, GILBERT P, CHUN B-G, et al. TaintDroid: an information flow tracking system for real-time privacy monitoring on smartphones [J]. Communications of the ACM, 2014, 57(3): 99-106.

[13]?EFSTATHOPOULOS P, KROHN E, VANDEBOGART S, et al. Labels and event processes in the Asbestos operating system [J]. ACM SIGOPS Operating Systems Review, 2005, 39(5):17-30.

[14]?BELL J, KAISER G. Phosphor: illuminating dynamic data flow in commodity JVMs [J]. ACM SIGPLAN Notices, 2014, 49(10): 83-101.

[15]?TRIPP O, PISTOIA M, FINK S J, et al. TAJ: effective taint analysis of Web applications [J]. ACM SIGPLAN Notices, 2009, 44(6): 87-97.

[16]?梁彬,龔偉剛,游偉,等. JavaScript優(yōu)化編譯執(zhí)行模式下的動態(tài)污點分析技術(shù)[J].清華大學(xué)學(xué)報:自然科學(xué)版,2017(9):932-938. (LIANG B, HONG W G, YOU W, et al. DTA technique for JavaScript optimizing compilation mode [J]. Journal of Tsinghua University (Science and Technology), 2017, 57(9):932-938.)

[17]?YOON M, SALAJEGHEH N, CHEN Y, et al. PIFT: predictive Information-flow tracking [J]. ACM SIGARCH Computer Architecture News, 2016, 44(2): 713-725.

[18]?GIBLER C, CRUSSELL J, ERICKSON J, et al. AndroidLeaks: automatically detecting potential privacy leaks in Android applications on a large scale [C]// Proceedings of the 2012 International Conference on Trust & Trustworthy Computing, LNCS 7344. Berlin: Springer, 2012: 291-307.

[19]?LU L, LI Z C, WU Z Y, et al. CHEX: statically vetting Android apps for component hijacking vulnerabilities [C]// Proceedings of the 2012 ACM Conference on Computer & Communications Security. New York: ACM, 2012:229-240.

[20]?ARZT S, RASTHOFER S, FRITZ C, et al. FlowDroid: precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps [J]. ACM SIGPLAN Notices, 2014, 49(6): 259-269.

[21]?OCTEAU D, MCDANIEL P, JHA S, et al. Effective inter-component communication mapping in Android with Epicc: an essential step towards holistic security analysis [C]// Proceedings of the 22nd USENIX Conference on Security. Berkeley, CA: USENIX Association, 2013:543-558.

[22]?劉陽,俞研.基于動態(tài)污點分析的Android隱私泄露檢測方法[J].計算機應(yīng)用與軟件,2017(9):142-146. (LIU Y, YU Y. Detection of Android privacy leak based on dynamic taint analysis [J]. Computer Applications and Software, 2017, 34(9): 142-146.)

[23]?RATHI D, JINDAL R. DroidMark: a tool for android malware detection using taint analysis and Bayesian network [J]. International Journal on Recent and Innovation Trends in Computing and Communication. 2018, 6(5):71-76.

[24]?達(dá)小文,毛俐旻,吳明杰,等.一種基于補丁比對和靜態(tài)污點分析的漏洞定位技術(shù)研究[J]. 信息網(wǎng)絡(luò)安全,2017(9):5-9. (DA X W, MAO L M, WU M J, et al. Research on a vulnerability locaction technology based on patch matching and static taint analysis [J]. Netinfo Security, 2017(9): 5-9.)

[25]?王允超,魏強,武澤慧.基于靜態(tài)污點分析的Android應(yīng)用Intent注入漏洞檢測方法[J].計算機科學(xué),2016,43(9):192-196. (WANG Y C, WEI Q, WU Z H. Approach of Android applications Intent injection vulnerability detection based on static taint analysis [J]. Computer Science, 2016, 43(9): 192-196.)

[26]??PARAMESHWARAN I, BUDIANTO E, SHINDE S, et al. ?DexterJS: robust testing platform for DOM-based XSS vulnerabilities [C]// Proceedings of the 10th Joint Meeting on Foundations of Software Engineering. New York: ACM, 2015: 946-949.

[27]?KANG M G, POOSANKAM P, YIN H. Renovo: a hidden code extractor for packed executables [C]// Proceedings of the 2007 ACM Workshop on Recuring Malcode. New York: ACM. 2007:46-53.

[28]?PORTOKALIDIS G, BOS H. Eudaemon: involuntary and on-demand emulation against zero-day exploits [C]// Proceedings of the 3rd ACM SIGOPS/EuroSys European Conference on Computer Systems. New York: ACM, 2008:287-299.

[29]?TRIPP O, RUBIN J. A Bayesian approach to privacy enforcement in smartphones [C]// Proceedings of the 23rd USENIX Conference on Security Symposium. Berkeley, CA: USENIX Association, 2014: 175-190.

[30]?馬金鑫,李舟軍,張濤,等.基于執(zhí)行蹤跡離線索引的污點分析方法研究[J].軟件學(xué)報,2017,28(9):2388-2401. (MA J X, LI Z J, ZHAO T, et al. Taint analysis method based on offline indices of instruction trace [J]. Journal of Software, 2017, 28(9): 2388-2401.)

[31]?BAI G, YE Q, WU Y, et al. Towards model checking Android applications [J]. IEEE Transactions on Software Engineering, 2018, 44(6): 595-612.