• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      任玉柱 張有為 艾成煒

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

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

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

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

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

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

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

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

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

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

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

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

      1 理論基礎(chǔ)

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

      1.1 污點(diǎn)分析模型

      污點(diǎn)分析技術(shù)模型包括污點(diǎn)源、污點(diǎn)匯聚點(diǎn)和無(wú)害化處理等部分。其中,污點(diǎn)源表示將污點(diǎn)數(shù)據(jù)引入到系統(tǒng)中;污點(diǎn)匯聚點(diǎn)表示系統(tǒng)將污點(diǎn)數(shù)據(jù)輸出到敏感數(shù)據(jù)區(qū)或者外界,造成敏感數(shù)據(jù)區(qū)被非法改寫或者隱私數(shù)據(jù)泄露;無(wú)害化處理表示通過數(shù)據(jù)加密或重新賦值等操作使數(shù)據(jù)傳播不再對(duì)系統(tǒng)的完整性和保密性產(chǎn)生危害。以下面的代碼為例說明污點(diǎ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)記為污點(diǎn)源后,var1和var2均被標(biāo)記為污點(diǎn)變量。根據(jù)數(shù)據(jù)依賴關(guān)系,var4和var7也會(huì)被標(biāo)記為污點(diǎn)變量。由于污點(diǎn)數(shù)據(jù)var7位于污點(diǎn)匯聚點(diǎn),即可認(rèn)為rectangle函數(shù)違反了信息安全的完整性或保密性。

      污點(diǎn)數(shù)據(jù)主要通過數(shù)據(jù)間的依賴關(guān)系在系統(tǒng)或應(yīng)用程序中進(jìn)行傳播,這種依賴關(guān)系又分為數(shù)據(jù)依賴和控制依賴兩種。數(shù)據(jù)依賴主要包括程序中各變量間的直接賦值、數(shù)學(xué)計(jì)算等操作,如上述代碼中var1含有的污點(diǎn)信息通過算術(shù)運(yùn)算操作傳遞給var4??刂埔蕾囍饕ǔ绦蛑懈髯兞块g的條件判斷與指令跳轉(zhuǎn)等情況,即var1含有的污點(diǎn)信息通過包含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)記為污點(diǎn)源后,var1被標(biāo)記為污點(diǎn)變量,第4)、6)、8)行是包含var1的條件分支指令。若此時(shí)的污點(diǎn)傳播策略為只要分支指令中包含污點(diǎn)數(shù)據(jù)就進(jìn)行污點(diǎn)傳播,那么var2、var3和var4均被標(biāo)記為污點(diǎn)變量,并最終傳播到第10)行的污點(diǎn)匯聚點(diǎn),會(huì)出現(xiàn)污點(diǎn)標(biāo)記數(shù)量過多的問題。但實(shí)際上,該程序根據(jù)var1數(shù)值不同,每次運(yùn)行最多只有一條分支會(huì)被污染。若僅按照數(shù)據(jù)依賴關(guān)系進(jìn)行污點(diǎn)傳播,則各分支均不會(huì)被標(biāo)記為污點(diǎn),會(huì)造成污點(diǎn)標(biāo)記數(shù)量過少。兩種情況都會(huì)導(dǎo)致污點(diǎn)分析效率和準(zhǔn)確性降低的問題。

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

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

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

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

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

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

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

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

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

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

      1.3 動(dòng)態(tài)污點(diǎn)分析

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

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

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

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

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

      2 污點(diǎn)分析實(shí)現(xiàn)方式

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

      2.1 基于硬件的污點(diǎn)分析

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

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

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

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

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

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

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

      2.2 基于軟件的污點(diǎn)分析

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

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

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

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

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

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

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

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

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

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

      2.4 基于代碼的污點(diǎn)分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      3.2 漏洞探測(cè)

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

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

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

      4 研究趨勢(shì)

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

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

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

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

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

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

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

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

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

      4.1.3 引入新算法提高污點(diǎn)分析性能

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

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

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

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

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

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

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

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

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

      5 結(jié)語(yǔ)

      本文比較系統(tǒng)地介紹了污點(diǎn)分析的理論基礎(chǔ)、實(shí)現(xiàn)方法和典型應(yīng)用,并分析了其中的優(yōu)點(diǎn)和不足,但對(duì)具體的工具設(shè)計(jì)和功能實(shí)現(xiàn)并沒有作深入闡述,還需要參閱相關(guān)文獻(xiàn)以詳加了解。污點(diǎn)分析技術(shù)已經(jīng)被廣泛應(yīng)用于信息安全的各個(gè)領(lǐng)域,但其研究趨勢(shì)仍是提高分析精度和效率以及擴(kuò)大應(yīng)用領(lǐng)域兩個(gè)方面。本文對(duì)目前提高分析精度和效率的主要做法進(jìn)行了介紹,在擴(kuò)大應(yīng)用領(lǐng)域方面,還有研究者正將污點(diǎn)分析技術(shù)應(yīng)用于云計(jì)算、物聯(lián)網(wǎng)、工業(yè)控制領(lǐng)域的安全研究中,這也是污點(diǎn)分析技術(shù)研究的下一個(gè)熱點(diǎn)領(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é)報(bào),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]?王蕾,李豐,李煉,等.污點(diǎn)分析技術(shù)的原理和實(shí)踐應(yīng)用[J].軟件學(xué)報(bào),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]?黃強(qiáng),曾慶凱.基于信息流策略的污點(diǎn)傳播分析及動(dòng)態(tài)驗(yàn)證[J].軟件學(xué)報(bào),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í)行模式下的動(dòng)態(tài)污點(diǎn)分析技術(shù)[J].清華大學(xué)學(xué)報(bào):自然科學(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]?劉陽(yáng),俞研.基于動(dòng)態(tài)污點(diǎn)分析的Android隱私泄露檢測(cè)方法[J].計(jì)算機(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á)小文,毛俐旻,吳明杰,等.一種基于補(bǔ)丁比對(duì)和靜態(tài)污點(diǎn)分析的漏洞定位技術(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]?王允超,魏強(qiáng),武澤慧.基于靜態(tài)污點(diǎn)分析的Android應(yīng)用Intent注入漏洞檢測(cè)方法[J].計(jì)算機(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í)行蹤跡離線索引的污點(diǎn)分析方法研究[J].軟件學(xué)報(bào),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.

      台江县| 孟津县| 安义县| 大新县| 孝义市| 平顺县| 吉安县| 耿马| 通榆县| 上高县| 法库县| 睢宁县| 岚皋县| 革吉县| 内江市| 施甸县| 天津市| 靖江市| 故城县| 宁武县| 通榆县| 明水县| 海城市| 南涧| 兴业县| 东平县| 奉节县| 循化| 冀州市| 宣恩县| 沙雅县| 吉水县| 油尖旺区| 游戏| 乾安县| 云阳县| 偏关县| 甘洛县| 长岛县| 台东市| 弥渡县|