任玉柱 張有為 艾成煒



摘 要:污點分析技術是保護隱私數據安全和實現漏洞檢測的重要技術手段,也是信息安全研究的熱點領域。對近年來污點分析技術的研究現狀和發展情況進行綜述,介紹了污點分析的理論基礎以及靜態污點分析和動態污點分析的基本概念、關鍵技術和研究進展,并從技術實現方式的角度出發,闡述了基于硬件、軟件、虛擬環境和代碼等四種污點分析技術的實現方式、核心思想以及優缺點;然后,從污點數據流向的角度出發,概述了污點分析技術在相關領域的兩種典型應用,即隱私數據泄露檢測和漏洞探測;最后,簡要分析了污點分析的缺點和不足,并展望該技術的研究前景和發展趨勢。
關鍵詞:信息流分析;靜態污點分析;動態污點分析;隱私數據;漏洞挖掘
中圖分類號:?TP309
文獻標志碼: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 引言
隨著“互聯網+”概念的流行和物聯網技術的發展,世界已進入以信息數據為主要經濟發展驅動力的全球化“3.0”時代,信息技術對人類社會的意義愈發重要,隨之而來的是人類在信息安全領域面臨著諸多難題。僵尸網絡、蠕蟲病毒、木馬病毒及分布式拒絕服務攻擊等計算機病毒和網絡攻擊行為屢屢發生。2017年,以智能手機為代表的手持移動設備已經超越計算機成為數量最多的上網終端,全球社交媒體和移動端活躍用戶數量都已達到30億左右,預計到2020年全球聯網設備總數可能會超過500億臺[1],信息安全已經成為熱點研究領域,特別是有關信息完整性和保密性的研究更受到越來越多的重視。完整性指信息在存儲、傳輸和處理過程中不被修改、破壞和丟失的特性。保密性指信息不會被泄露給非授權用戶的特性。隨著物聯網的發展和智能終端的普及,在社交網絡和移動支付等活動中都會涉及到大量的用戶隱私數據。作為維護數據完整性和保密性的有效手段之一,信息流分析技術得到了廣泛的運用。
信息流分析技術[2]的核心思想是:首先給數據添加一個標簽,此標簽隨數據在系統中傳播,并根據標簽來獲得數據在系統或應用程序中傳播的相關信息;然后制定信息流策略并建立相應的信息流模型,通過分析數據傳播的相關信息以確定是否存在違反信息流策略的信息安全隱患,即若被分析對象的信息傳播過程符合制定的信息流策略,則認為被分析對象是安全的,否則就是不安全的。根據信息流策略描述方法的不同,信息流模型可以分為基于格、基于安全類型、基于安全進程代數(Security Process Algebra, SPA)和基于自動機等四種主要形式。由于本文主要介紹污點分析技術,所以只對主流的信息流模型進行整理對比,如表1所示。
本文給出了污點分析定義和模型,介紹了靜態污點分析和動態污點分析的基本原理、運用和優缺點;從技術實現方式的角度,分別闡述基于硬件、軟件、虛擬環境和代碼實現污點分析的核心原理、技術方法以及優缺點;從數據流向的角度,概述污點分析技術在隱私數據泄漏檢測和漏洞探測這兩個主要領域的應用情況;分析污點分析技術的不足,并探討未來的發展趨勢。
基于格的信息流模型 要求數據只能從高安全級別向低安全級別流動,保證數據安全 1.模型要求數據只能單向流動,影響了模型應用范圍;
2.不能對系統中存在的隱蔽通道進行準確描述
基于安全類型的信息流模型 可根據需要定制安全類型和規則 1.安全類型與應用的編程語言相關,可移植性較差;
2.基于安全類型的模型存在精確性差的問題
基于SPA的信息流模型 以代數形式描述系統行為,能夠較好地解決系統概率行為引起的信息泄露和安全降密等問題 1.存在安全性驗證困難問題;
2.在全系統實現模型比較困難,一般只用于局部性驗證
基于自動機的信息流模型 用自動機模型來形式化描述系統安全狀態轉移規則,應用廣泛,移植性好 實現難度隨分析對象規模增大而增大
1 理論基礎
污點分析技術是信息流分析技術的一種實踐方法[3],在信息泄露檢測、漏洞探測、逆向工程等方面有廣泛的應用,并被移植到各種不同的環境和平臺當中。污點分析技術將系統或應用程序中的數據標記為污點或非污點,當污點數據根據信息流傳播策略可影響到非污點數據時,則將該非污點數據的標記修改為污點。當污點標簽最終隨數據傳播到指定的存儲區域或者信息泄露點時,則認定該系統違反了信息流策略。
1.1 污點分析模型
污點分析技術模型包括污點源、污點匯聚點和無害化處理等部分。其中,污點源表示將污點數據引入到系統中;污點匯聚點表示系統將污點數據輸出到敏感數據區或者外界,造成敏感數據區被非法改寫或者隱私數據泄露;無害化處理表示通過數據加密或重新賦值等操作使數據傳播不再對系統的完整性和保密性產生危害。以下面的代碼為例說明污點分析的一般過程。
程序前
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函數表示將輸入數值乘5后返回結果,reset函數表示將輸入數值重置為0,代碼中各變量之間的關系如圖1所示。
將代碼中第2)和第10)行的輸入標記為污點源后,var1和var2均被標記為污點變量。根據數據依賴關系,var4和var7也會被標記為污點變量。由于污點數據var7位于污點匯聚點,即可認為rectangle函數違反了信息安全的完整性或保密性。
污點數據主要通過數據間的依賴關系在系統或應用程序中進行傳播,這種依賴關系又分為數據依賴和控制依賴兩種。數據依賴主要包括程序中各變量間的直接賦值、數學計算等操作,如上述代碼中var1含有的污點信息通過算術運算操作傳遞給var4。控制依賴主要包括程序中各變量間的條件判斷與指令跳轉等情況,即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)行的輸入標記為污點源后,var1被標記為污點變量,第4)、6)、8)行是包含var1的條件分支指令。若此時的污點傳播策略為只要分支指令中包含污點數據就進行污點傳播,那么var2、var3和var4均被標記為污點變量,并最終傳播到第10)行的污點匯聚點,會出現污點標記數量過多的問題。但實際上,該程序根據var1數值不同,每次運行最多只有一條分支會被污染。若僅按照數據依賴關系進行污點傳播,則各分支均不會被標記為污點,會造成污點標記數量過少。兩種情況都會導致污點分析效率和準確性降低的問題。
污點分析一般存在兩個問題,即過污染和欠污染。其中,過污染是指在污染分析過程中將與污點源沒有數據和控制依賴關系的數據變量標記為污點變量,即產生誤報;欠污染則是在污染分析過程中將與污點源存在數據或控制依賴關系的程序變量標記為非污點變量,即產生漏報。對控制依賴關系的分析不足和不當可能會造成過污染和欠污染問題。動態污點分析工具Dytan[4]引入了控制流污染的概念,提升了污點分析的全面性。
無害化處理是指系統中的某些模塊、函數或者數據處理操作,使得污點數據經過處理后不再攜帶有敏感數據或者不會對系統造成危害。如第一段代碼中的reset函數可看作是一個無害化處理操作(任何數值與0的乘積均為0),所以var5不會被標記為污點變量。
在檢測系統或應用程序是否存在隱私數據泄露時,應用程序調用了某個加密函數對隱私數據進行加密,這樣即便此數據通過API向外發送,攻擊者也難以通過解密來獲得隱私數據,則可認為該加密函數完成了一個無害化處理操作。在探測系統或應用是否存在漏洞時,輸入驗證模塊也可以被識別成無害化處理操作,比如某些Web網站會采用對輸入的用戶名和密碼進行轉義以防止SQL注入,此時,可以將該轉義操作認為是一個無害化處理操作。污點數據經過無害化處理后,污點標記可被移除。正確地識別和利用無害化處理可以降低系統中污點標記的數量,提高污點分析的效率,并避免由于污點擴散導致的過污染問題。
根據分析過程中是否需要運行目標程序,污點分析技術被分為靜態污點分析和動態污點分析兩種。
1.2 靜態污點分析
靜態污點分析主要通過詞法和語法分析等方法離線分析變量間數據和控制依賴關系,以檢測污點數據能否從污點源傳播到污點匯聚點,在此過程中既不運行目標程序,也無需修改代碼。靜態污點分析的對象是程序代碼或中間表示(Intermediate Representation, IR)。
在分析數據依賴關系時,首先需要恢復函數調用關系圖,然后根據具體的程序特性進行函數內或函數間的污點傳播分析。常見的數據依賴關系包括賦值、函數調用和別名,其中研究難點在于對別名的分析,為了降低靜態污點分析技術的資源開銷,研究者們設計了多種方法來進行別名分析。如Livshits等[5]采取按需的上下文敏感的別名分析方法,配合程序查詢語言污點檢查策略,來檢測Java應用程序漏洞。ANDROMEDA[6]工具利用對象敏感別名分析方法解決分析對象的訪問路徑問題。
在分析控制依賴關系時,需要恢復控制流圖。恢復控制流圖通常采用遞歸算法:首先尋找并分析基本塊Ba,識別其后續基本塊Bb和Bc并添加到控制流圖中;然后重復對Bb和Bc進行相同的遞歸分析,直到沒有新的后續基本塊被識別且所有基本塊均被添加到控制流圖中。恢復控制流圖的研究難點在于間接跳轉,即當二進制文件將控制流傳輸到由寄存器或存儲器位置中的值表示的目標時,發生間接跳轉。與直接跳轉的目標被編碼到指令本身以正常解析不同,間接跳轉的目標受多個因素的影響而變化。
常用的靜態污點分析工具BinCAT通過抽象解釋,實現了控制流圖恢復和污點分析,并能集成到反匯編工具IDA中使用。靜態二進制分析平臺Jakstab[7]在線性掃描和遞歸掃描的基礎上,借助數據流分析進行多次迭代并恢復控制流圖,能獲得更準確的結果。
靜態污點分析的優點是考慮了程序所有可能的執行路徑,但由于不運行目標程序,無法得到程序運行時的額外信息,所以存在分析結果不夠準確的問題。由于程序源代碼和IR能夠提供清晰的污點傳播規則,因此在源代碼和IR的基礎上進行靜態污點分析易于實現。
1.3 動態污點分析
動態污點分析是在目標程序運行過程中,通過實時跟蹤監控并記錄程序變量、寄存器和內存等的值,確定污點數據能否從污點源傳播到污點匯聚點。動態污點分析能夠比較準確地獲得程序執行過程中各變量和存儲單元的狀態,有效提高污點分析的精確度。
動態污點分析首先采用插樁的方法,在不破壞目標程序原有邏輯的基礎上插入一些采集信息的代碼,從而獲得程序運行的相關信息,目前常用的插樁平臺有Pin和Valgrind。接著,在原數據基礎上增加一個污點標記來表示寄存器及內存的污染情況,通常被稱為影子內存。Valgrind實現了可保存四種污點信息狀態的污點信息存儲。 Zhao等則提出了一種與其類似但更全面的影子內存框架Umbra。 然后,還要根據程序所運行環境的指令類型和指令操作數設計相應的污點傳播規則傳播污點標記。最后,通過分析程序運行相關信息獲得目標程序的數據流和控制流信息。
動態污點分析工具TaintCheck基于插樁平臺Valgrind,由TaintSeed、TaintTracker、TaintAssert和ExploitAnalyzer等四個模塊組成。TaintCheck以二進制文件為分析對象,借助Valgrind在程序執行中動態地將執行指令翻譯成Ucode形式的中間表示,并將污點信息存儲在Taint Structure數據結構,最后通過TaintAssert檢查是否存在危險數據操作。
動態污點分析的優點是通過在程序中插樁以獲得程序執行中的具體信息,分析精度高,但頻繁的插樁操作和影子內存的設計會占用系統資源,污點分析執行效率比靜態分析低。此外,動態污點分析一般只能分析程序執行過程中所覆蓋到的路徑,可能會產生漏報。
本節介紹了污點分析定義與模型,并分別介紹了靜態污點分析和動態污點分析的定義和優缺點。 在實際應用中,為了克服動態污點分析與靜態污點分析的缺點,也有研究者將二者相結合,其方法通常是:先執行靜態污點分析獲得初步信息,提高路徑覆蓋率,節約分析時間和系統開銷;然后再執行動態污點分析獲得安全漏洞或者危險數據操作的具體信息,提高分析的準確度。除了提高路徑覆蓋率,靜態污點分析還可以篩選出供后續動態污點分析的路徑,減小動態污點分析的范圍,提高分析執行效率。例如,用于檢測Android應用隱私數據泄露的Appaudit[8]首先利用輕量級靜態分析技術篩選出可疑函數,再通過動態執行技術檢測這些函數是否存在隱私數據泄露問題。黃強等[9]提出了一種檢測軟件脆弱性的方案,先利用靜態分析技術排除不可達執行,搜索程序中導致軟件潛在脆弱性的所有路徑;然后使用污點檢查策略識別脆弱性類型;最后,在潛在的問題點插樁數據驗證和處理函數,隨程序源代碼一同編譯生成可執行文件,增強程序運行時的監控能力。
2 污點分析實現方式
自污點分析技術被提出后,研究者們進行了深入的研究,并實現了許多框架和工具。根據其實現方式的不同,這些工具大致可分為基于硬件、基于軟件、基于虛擬環境和基于代碼等四個層次。
2.1 基于硬件的污點分析
基于硬件的污點分析的核心思想是對寄存器、緩存和內存等硬件結構進行重新設計,增加相應的污點信息標志位以實現污點信息的存儲、傳播和檢測等功能。
例如,動態污點分析工具Raksha[10]在硬件方面進行了諸多改動:
1)將包括寄存器、緩存和主存在內的所有存儲單元都做了標記位擴展,以實現污點的標記,這也是所有基于硬件的污點分析工具的共同特點。
2)將指令集架構也進行了擴展,在實現常規功能的同時支持污點標記的傳播與檢查操作,為了在硬件層面支持這一功能,Raksha還設計了兩類專用寄存器:用于維護標記傳播策略的標記傳播寄存器和用于策略實施與檢查的標記檢測寄存器。
3)為進行異常處理,系統還設計了引用監控寄存器、客戶操作寄存器和異常處理寄存器,其中,異常處理寄存器主要用于保存污點標記傳播過程中所發生的各類異常信息。
4)為解決了不同型號處理器的兼容問題,系統專門設計了一個協處理器進行動態污點分析,而主處理器進行正常數據處理工作。
基于硬件的污點分析可以通過定制硬件的方式降低系統開銷,提高污點分析執行效率,但由于運行在硬件層,不支持上層語義的邏輯安全策略,且需要對硬件結構進行重新設計,移植性較差。
2.2 基于軟件的污點分析
基于軟件的污點分析根據分析對象的不同還可細分為基于操作系統和基于應用程序的污點分析,其核心思想是將操作系統(如進程與線程、內存、文件等)或應用程序(如數據庫中的文件等)中的相關資源進行標記,并在此基礎上進行污點分析。基于軟件的污點分析無需改變底層硬件,主要通過修改程序代碼的方式實現污點信息的存儲與傳播,例如TaintEraser[11]、TaintDroid[12]等。
Asbestos[13]系統實現了基于操作系統的污點分析,主要基于最小特權原則和能夠在系統進程通信方面提供了污點分析工具。Asbestos系統的實現基于以下原則:
1)最小特征原則,即向每一個用戶或進程賦予其完成某種業務所需的最少特權;
2)強制訪問控制原則,即將系統中的信息區分密級進行管理,以確保用戶只能訪問被明確允許訪問的信息。
基于Asbestos系統的Web服務器工作流程架構如圖2所示,這是一個實現多個用戶動態登錄的網站,其中ok-demux模塊分析傳入的連接請求并將其發送到相關的工作進程,idd模塊用于檢查用戶密碼,ok-dbproxy模塊提供數據庫接口。在網站運行時,系統給每個用戶提供專用權限,不同用戶之間通過標簽和事件進程進行隔離。Asbestos系統通過對標簽的動態調整實現污點分析的功能,但未考慮對系統關鍵資源的控制,且對進程間的系統資源共享和進程標記隱蔽通道等問題也沒有提出解決方案。
基于軟件的污點分析支持更高層級的語義邏輯安全策略,但使用插樁或代碼重寫會導致系統資源的巨大開銷。
2.3 基于虛擬環境的污點分析
基于虛擬環境的污點分析的核心思想是在虛擬環境中增加污點分析模塊,使污點分析模塊和被分析的目標程序運行在不同環境中。其中,分析模塊運行于虛擬機監控層,目標程序處于目標機操作系統層,分析模塊不影響目標程序的運行,記錄的污點信息更準確,如圖3所示。
在基于虛擬環境執行污點分析的研究方面,研究者們實現了很多工具。如Phosoher[14]就是基于Java虛擬機環境的污點分析系統。Argos通過x86模擬器在程序執行過程中跟蹤網絡數據,獲取程序運行信息,使用位圖映射標識內存及寄存器污點狀態,保存當前環境為快照并提取特征碼,能有效檢測出針對服務器的攻擊行為。動態分析平臺TEMU在QEMU虛擬機的基礎上進行了擴展,能夠以較細的粒度分析內核與多進程間的交互情況。
基于虛擬環境的污點分析不需要修改程序的代碼,由于虛擬機監控層的權限比目標機操作系統層更高,因此分析模塊能夠記錄系統調用甚至內核執行的指令信息,可以發現系統底層漏洞,基于Android平臺的污點分析工具一般采用基于虛擬環境的方式實現。但基于虛擬環境的污點分析需要搭設應用程序所需的工作環境,特別是在分析工控系統和物聯網設備等與硬件環境聯系緊密的固件程序時,虛擬環境的搭設工作十分復雜,且僅依靠基于虛擬環境的污點分析并不能保證操作系統的安全性,不能取代基于操作系統的污點分析的功能和作用。最后,基于虛擬環境的污點分析一般需要虛擬機解釋執行的過程中執行污點分析,對系統運行效率影響較大。
2.4 基于代碼的污點分析
基于代碼的污點分析根據分析對象的不同也可以被細分為對程序源碼進行污點分析和對二進制代碼進行污點分析兩種。基于代碼的污點分析工具基本都采用了程序切片技術,使其對程序的理解和分析更為精確。程序切片是指能夠影響程序某行的某個變量值的部分語句和判定表達式的集合。自1979年被提出后,程序切片技術已經發展出靜態切片與動態切片、前向切片與后向切片以及一些變種技術等多種方法。Tripp等[15]實現了TAJ工具,通過混合切片的方式對Java Web應用進行污點分析。
對程序源碼進行污點分析是實現一個帶有安全標簽的類型系統,在編譯過程中讀取程序源碼的安全標簽,以檢查是否存在違反信息流策略的情況。在第1章中已有所介紹,靜態污點分析常采用這種方式。對程序源碼進行污點分析能夠在程序編譯時發現程序中違反信息流策略的情況,對系統資源的開銷較小,分析執行效率高,缺點是需要獲得源代碼,在商業環境下應用難度較高。
對二進制代碼進行污點分析是在二進制代碼中插入污點跟蹤代碼,以獲取程序執行時的污點傳播情況。動態污點分析常采用這種方式。對二進制代碼進行污點分析可以在指令級別進行污點跟蹤檢測,精確度高,但頻繁的插樁會占用系統資源,降低系統運行效率。此外,計算機的指令類型和規模使得二進制代碼的精確建模極為困難,且二進制代碼缺乏高層語義支持,一般需要依靠插樁平臺或二進制反匯編工具以降低工作量。
此外,還有一些針對中間表示進行污點分析的研究,如梁彬等[16]實現了一種針對JavaScript優化編譯執行模式的動態污點分析方法,在中間代碼層面進行插樁操作,能夠有效地在優化編譯執行模式下進行污點跟蹤。
綜合本章內容,從實現基礎、分析對象、可移植性、系統效率和靜態/動態等五個方面對四種污點分析實現方式進行對比如表2所示。
對工程應用而言,研究者也會在一個工具中綜合使用兩種以上的實現方式,以便在不同層面進行污點分析,提高污點分析的準確性。如FlexiTaint、PIFT[17]等工具就綜合了基于硬件和基于軟件兩種污點分析思想,既盡可能少地改動硬件結構,又支持更高層級的語義邏輯安全策略。
3 相關應用
污點分析技術自提出后就在隱私數據泄露檢測、逆向分析、漏洞探測等方面得到廣泛應用,本章重點介紹隱私數據泄露檢測和漏洞探測。
3.1 隱私數據泄露檢測
污點分析技術用于隱私數據泄露檢測的核心思想是:首先將系統或應用程序中的隱私數據標記為污點源,將對外輸出數據的API標記為污點匯聚點,然后在程序運行過程中根據污點傳播規則跟蹤被標記為污點的隱私數據的傳播路徑,當系統調用API向外發送數據時檢測其中是否包含污點標記,從而判定是否發生隱私數據泄露。比如污點分析工具AndroidLeaks[18]通過自動化分析Android框架代碼來獲取API與權限的對應關系并確定污點源列表,從而大規模檢測應用程序中存在的隱私數據泄露行為。
當前,移動設備用戶數量已經超過了傳統互聯網用戶,其中Android平臺設備占據了主要份額,因此近年來,針對Android平臺隱私數據泄露檢測技術的研究已經成為熱點,本文重點介紹污點分析技術在Android平臺上的應用。Android平臺架構分為四層,自下而上分別為Linux內核層、系統運行層、應用程序框架層和應用程序層。由于Android平臺采用基于組件的編程模型,根據污點傳播涉及的范圍不同,可分為組件內、組件間以及組件與庫函數之間三類污點傳播方式,如圖4所示。
靜態污點分析和動態污點分析對這三類傳播的處理方式也有所不同。采用靜態污點分析技術進行隱私數據泄露檢測時,首先需要構建完整的分析模型,以確保可以覆蓋所有的可執行路徑。靜態分析框架Dalysis[19]和自動化檢測工具CHEX采用增量方法構建系統調用圖,對目標App進行全局數據流分析。另一種常用污點分析工具FlowDroid[20]則針對 Android系統的異步工作機制對分析模型進行了大量優化。其次,靜態污點分析通過分析Intent參數信息來完成組件間的污點傳播分析。Octeau等[21]提出了一個組件間通信機制尋址方案,將組件間污點傳播轉化為IDE問題,再進行求解。最后,靜態污點分析還需要考慮組件與庫函數之間的污點傳播問題,由于庫函數數量龐大且本地庫多為C/C+ +語言編寫,因此針對這一問題沒有統一的解決方案。如FlowDroid采用保守策略,即若調用庫函數的參數中含有污點數據,則將其函數返回值標記為污點。
采用動態污點分析技術進行隱私數據泄露時最常用的工具是TaintDroid,通過分析Dalvik虛擬機DEX指令類型并根據制定的污點傳播規則來跟蹤組件內的污點傳播情況,并且TaintDroid重新設計了用于存儲數據的包對象結構,使之能夠存儲與污點相關的信息,這樣污點信息就可以在組件間進行傳播。最后,TaintDroid也采用了類似于保守策略的方法來處理組件與庫函數之間的污點傳播。與TaintDroid相似的是,劉陽等[22]通過對框架層源碼進行插樁實現添加和提取污點標記,并在此基礎上實現了檢測隱私數據泄露的方法。
表3中列舉了幾種基于Android平臺的常用污點分析工具的優缺點及分析性能的對比分析。從表中可以看到:FlowDroid可以對組件內和組件間的污點傳播進行分析,但在組件與庫函數之間默認采用了保守策略,因此誤報率較高;DroidMark在其基礎上引入了深度學習技術,大幅降低了誤報率和漏報率,但實際性能與深度學習模型訓練效果有關;TaintDroid[23]只對數據流進行污點分析,漏報率相對較高,但其系統開銷增加不大,且能實現多個粒度級別的污點分析,實用性較強。
3.2 漏洞探測
除了隱私數據泄露檢測外,污點分析技術還被應用于檢測緩沖區溢出、SQL注入、XSS攻擊、格式字符串攻擊等方面。這類攻擊行為的共同特點是用戶的輸入利用了系統中的某個漏洞,可以不經合法授權就改寫系統數據敏感區的值,從而達到攻擊的目的。污點分析技術被用于漏洞探測的核心思想是:將外部輸入數據標記為污點源,將敏感數據區標記為污點匯聚點,然后在程序運行過程中根據污點傳播規則跟蹤污點數據的傳播路徑,檢查敏感數據區是否被污點數據污染,從而判定系統或應用程序是否存在漏洞。
在污點分析提出以來,該領域一直都是研究者們重點關注的對象。達小文等[24]通過分析大量緩沖區溢出實例,歸納了六種緩沖區溢出的漏洞定位模型,并結合補丁比對和污點傳播分析生成污點傳播路徑圖,最后將補丁源碼的污點傳播路徑圖與定位模型相匹配以精確定位漏洞所在位置;InterTracer[25]利用靜態污點分析方法來檢測Android應用中的Intent注入漏洞;DexterJS[26]平臺可在字符粒度級別檢測Web應用中基于DOM的XSS漏洞。
本節主要從污點數據流向的角度介紹了污點分析技術在隱私數據泄露檢測和漏洞探測領域的應用。除了上述兩種典型應用,污點分析技術在其他領域也得到廣泛的應用,例如污點分析工具Renove[27]能夠實現病毒關鍵代碼的自動化提取,可用于病毒的智能脫殼;Eudaemon[28]結合了動態污點分析技術和蜜罐與終端入侵檢測技術檢測0day漏洞。
4 研究趨勢
污點分析技術雖然取得了豐碩的研究成果,但也有很多問題并沒有得到完全解決。一是現有工具僅基于某一層次進行污點分析。比如基于應用程序的污點分析雖然可以檢測程序運行中存在的隱私數據泄露問題,但隱私數據在數據庫或系統進程中同樣存在泄露隱患。二是動態污點分析精度與效率之間的矛盾不可調和。動態污點分析是在原系統基礎上擴展了污點跟蹤機制,需要占用系統資源,導致系統效率下降,分析精度要求越高,需要獲得的污點分析數據就要越詳細,系統效率下降就越嚴重。所有的動態污點分析工具都需要根據應用環境的要求在精度與效率之間進行平衡。
因此,污點分析技術未來研究的出發點就是如何提高污點分析技術的性能。總的來說,主要包括以下兩個方面。
4.1 優化污點分析技術方法
繼續優化污點分析技術的算法,通過設計更科學的污點識別方法、歸納更準確的污點傳播策略以及引入新算法等方法來提高污點分析技術的準確性和分析效率。
4.1.1 提高污點數據識別的精度
污點源的識別不當很容易造成污點標簽在程序中的錯誤擴散,繼而影響污點分析技術的準確性和分析效率。為了解決這一問題,有研究者引入機器學習的概念來識別污點源和污點匯聚點,如Tripp等[29]使用Bayesian模型對污點源進行分類,從中排除正常的數據發送請求,降低了對污點分析造成的影響;而DroidMark則采用了深度學習技術,將對Android設備中惡意軟件的檢測精度提升至96.87%。
4.1.2 制定更科學的污點傳播策略
污點傳播策略的選擇與污點分析的精度和效率關系密切,比如有的工具(如IPSSA)在處理污點傳播時采用了保守策略,將所有與污染數據有關的操作均認定為符合污染傳播規則,擴大了污點屬性的標記范圍,降低了模型的精確度;有的細粒度污點分析工具在執行粗粒度分析時,占用了過多的系統資源,導致分析效率不高。
因此在工程實現時研究者們往往結合分析需要制定科學的污點傳播方法。例如在函數級污點的傳播過程中采用函數摘要思想,使污點在函數外層快速傳播,避免了函數內部指令插樁等系統開銷較大的操作,既保證了分析準確性又提高了系統效率。馬金鑫等[30]還提出了基于執行蹤跡離線索引的方法,在污點分析過程中,篩選出與污點數據相關的操作的同時忽略與污點數據無關的指令,從而縮短污點分析時間。
4.1.3 引入新算法提高污點分析性能
一方面是將污點分析問題轉換為其他問題,如:靜態污點分析框架Parfait,在程序預處理階段將污點分析問題轉換為圖可達性問題,實現了針對C代碼的靜態污點分析;MalScope將污點分析問題轉換為加權下推自動機的廣義下推后繼問題,利用污點數據在程序中的可達性,減少后續分析中需要精確執行的路徑數,可有效解決靜態污點分析方法在進行路徑敏感分析時面臨的路徑爆炸問題;DROIDPF[31]應用軟件模型檢查技術驗證Android應用,并采用了一種Android特有的還原技術來緩解狀態空間爆炸。另一方面是采用并行處理技術進行污點分析,提高污點分析執行速度,如:動態污點分析框架DTAM[32]可并行執行多個線程單元的污點分析,再將分析結果進行聚合,提高了對可并行執行的多線程程序進行動態污點分析的效率;PAGDTA[33]采用虛擬化技術將各測試用例并行執行動態污點分析,大幅度提高了路徑覆蓋率和執行效率。
4.2 結合其他研究方法
為提高污點分析技術的精度和效率,還有研究者將不同的技術方法結合使用,以綜合各方法的優點,其中關于靜態污點分析和動態污點分析結合的研究工作在第1章已經進行過介紹,本節主要介紹以下兩種方法。
4.2.1 與符號執行結合使用
符號執行(Symbolic Execution, SE)的核心思想是使用符號值替代具體數據作為程序輸入,并在程序執行過程中以符號值進行計算,用包含符號的表達式表示程序變量的值和最終的輸出結果。將污點分析與符號執行結合使用的分析工具有Angr[34]和DsVD[35]等。符號執行的精度比污點分析技術高,可以在程序運行過程中精確記錄路徑上所有的約束條件,有助于提高路徑可達性判定的準確性;但缺點是用于二進制程序分析時識別變量較為困難,會產生空間爆炸問題,需要強大的計算能力支持。為了解決這一問題,研究者們提出了混合符號執行技術,這種技術結合了符號執行和具體執行,當符號執行無法判定或計算取值時,用具體值來代替部分符號值,以使符號執行能夠繼續進行。
此外,陳力波等[36]提出了基于類型的動態污點分析技術,其核心思想是將類型信息和符號值作為污點信息,在程序執行時同時進行動態污點分析和符號執行,程序運行結束后獲得污點傳播信息和程序執行路徑條件,最后通過求解得到輸入變量滿足的約束條件。這種技術結合了動態污點分析和符號執行的優點,對程序有較為全面的理解。朱正欣等[37]基于動態插樁平臺Pin以及libdft提出了動態符號化污點分析方法,其核心思想是將污點信息及污點檢查策略符號化,并分析污點數據在傳播過程中是否違反污點檢查策略,進而判斷程序在動態執行過程中是否存在非法數據操作。還有BitBlaze[38]將動態分析與靜態分析、混合符號執行與具體執行、系統仿真與二進制重寫等多種分析方法相結合,對二進制代碼進行分析。
4.2.2 與模糊測試結合使用
模糊測試的核心思想是生成大量測試用例來測試程序魯棒性,以保證較高的代碼覆蓋率,但缺點是對程序漏洞作用機理缺乏基本的理解。為了解決這個問題,研究者們提出了定向模糊測試[39]方法,將模糊測試和污點分析相結合,在異常測試樣本集的基礎上進行污點分析,深入了解漏洞作用機理,并在此基礎上實現了SmartDroid[40]、Brahmastra[41]等工具。此外,Ganesh等[42]實現了自動化白盒模糊測試工具BuzzFuzz,其核心思想是使用動態污點分析技術追蹤輸入數據中影響程序關鍵數據區的范圍,能夠發現隱藏在程序中深層錯誤,適合復雜結構的輸入文件測試。Wang等[43]實現了自動化模糊測試系統TaintScope,將動態污點分析和符號執行相結合,提升了對具有校驗機制的程序進行模糊測試的效率。
除了污點分析技術性能以外,如何擴大污點分析技術的應用范圍也是研究的熱點領域。特別是隨著近年來工控系統安全受到重視,污點分析技術也被引入工控安全的研究領域,例如LUCON[44]在工業物聯網環境下采用動態污點分析,檢測是否存在信息泄露隱患。
5 結語
本文比較系統地介紹了污點分析的理論基礎、實現方法和典型應用,并分析了其中的優點和不足,但對具體的工具設計和功能實現并沒有作深入闡述,還需要參閱相關文獻以詳加了解。污點分析技術已經被廣泛應用于信息安全的各個領域,但其研究趨勢仍是提高分析精度和效率以及擴大應用領域兩個方面。本文對目前提高分析精度和效率的主要做法進行了介紹,在擴大應用領域方面,還有研究者正將污點分析技術應用于云計算、物聯網、工業控制領域的安全研究中,這也是污點分析技術研究的下一個熱點領域。
參考文獻
[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].軟件學報,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]?王蕾,李豐,李煉,等.污點分析技術的原理和實踐應用[J].軟件學報,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]?黃強,曾慶凱.基于信息流策略的污點傳播分析及動態驗證[J].軟件學報,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優化編譯執行模式下的動態污點分析技術[J].清華大學學報:自然科學版,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]?劉陽,俞研.基于動態污點分析的Android隱私泄露檢測方法[J].計算機應用與軟件,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]?達小文,毛俐旻,吳明杰,等.一種基于補丁比對和靜態污點分析的漏洞定位技術研究[J]. 信息網絡安全,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]?王允超,魏強,武澤慧.基于靜態污點分析的Android應用Intent注入漏洞檢測方法[J].計算機科學,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]?馬金鑫,李舟軍,張濤,等.基于執行蹤跡離線索引的污點分析方法研究[J].軟件學報,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.