陳立根,劉勝利,肖 達,彭 飛
(數(shù)學工程與先進計算國家重點實驗室,鄭州 450001)
隨著互聯(lián)網(wǎng)時代的到來和通信技術(shù)的發(fā)展,利用開放的網(wǎng)絡(luò)環(huán)境進行通信已經(jīng)成為時代發(fā)展的趨勢。路由器是互聯(lián)網(wǎng)絡(luò)中的核心交換設(shè)備,是網(wǎng)絡(luò)互聯(lián)的基礎(chǔ)。
目前,Cisco 公司的路由器產(chǎn)品應(yīng)用范圍非常廣泛,居于市場首位。Cisco 互聯(lián)網(wǎng)操作系統(tǒng)(Internet Operating System,IOS)是Cisco 公司開發(fā)的,專門用于其路由交換設(shè)備的互聯(lián)網(wǎng)操作系統(tǒng)。主要考慮到速度的因素,IOS 被設(shè)計成比較簡潔、駐留在存儲器且受限于硬件平臺的一種系統(tǒng),而且并沒有其他許多操作系統(tǒng)具有的安全保護機制[1],如進程間的存儲保護。Cisco 公司沒有對外公開IOS 內(nèi)部的相關(guān)細節(jié),IOS 一般基于PowerPC 或者MIPS 架構(gòu),和常見的Intel 架構(gòu)存在較大的差異,且不支持第三方軟件的運行,但這并不代表IOS 是完全安全的。2003 年,來自Phonoelit 黑客組織的FX 在文獻[2-3]中對Cisco IOS的一些安全問題做了比較完整的分析,并給出了IOS緩沖區(qū)溢出漏洞的利用方法。2005 年BlackHat USA大會上,Michael Lynn 闡述了Cisco IOS 的體系結(jié)構(gòu),論證了在Cisco IOS 上執(zhí)行任意代碼的可行性,成功執(zhí)行了shellcode[4]。這些攻擊方法主要是利用IOS相關(guān)協(xié)議的漏洞,完成對路由器的遠程控制,對網(wǎng)絡(luò)安全造成了嚴重的影響。因此,研究Cisco IOS 下的漏洞挖掘方法,全面發(fā)現(xiàn)與及時修補IOS 的漏洞,具有重要意義。
在相關(guān)領(lǐng)域的典型研究成果中,微軟和斯坦福大學的研究人員,分別獨立提出了混合符號執(zhí)行的方法,并實現(xiàn)了一系列有代表性的工具,如KLEE[5],EXE[6],DART[7]等?;旌戏枅?zhí)行的核心思想是將輸入數(shù)據(jù)用符號變量表示,模擬程序執(zhí)行,收集程序路徑約束條件,最后通過約束求解來生成驅(qū)動程序執(zhí)行其他路徑的測試用例,來提高測試用例的代碼覆蓋率。但是這些工具過度依賴于程序源代碼,運行平臺苛刻。之后出現(xiàn)了如SAGE[8],SmartFuzz[9],BitScope[10]等直接面向二進制程序進行符號執(zhí)行的工具。SmartFuzz 和BitScope 使用在線的符號執(zhí)行,但是由于符號執(zhí)行需要占用大量計算資源,在線符號執(zhí)行會導致目標程序性能嚴重下降,而Cisco IOS主要負責處理網(wǎng)絡(luò)數(shù)據(jù)報文,對時延非常敏感。SAGE 系統(tǒng)采用離線的符號執(zhí)行,使用iDNA 系統(tǒng)記錄程序軌跡,再對軌跡重放過程中進行符號計算,與在線符號執(zhí)行相比,對目標程序的性能影響比較小。但是由于Cisco IOS 不開源,且對于系統(tǒng)內(nèi)部的進程管理等結(jié)構(gòu)也不對外公開,因此在記錄系統(tǒng)執(zhí)行軌跡時,無法做到區(qū)分進程的指令記錄,加上IOS 系統(tǒng)本身比較復雜,記錄的指令數(shù)量將非常龐大,給后期處理帶來嚴峻挑戰(zhàn),因此對IOS 而言該方法顯得并不實用。文獻[11]針對Windows 下的大型軟件提出了基于污點分析的智能模糊測試技術(shù),實現(xiàn)了相應(yīng)的工具。
與本文中啟發(fā)式模糊測試最接近的工作是文獻[12]設(shè)計的TaintScope 系統(tǒng)。TaintScope 系統(tǒng)的核心思想是跟蹤監(jiān)控目標程序處理正常樣本,獲取影響安全敏感操作的輸入數(shù)據(jù),繼而進行針對這些數(shù)據(jù)生成畸形樣本進行測試。但是,TaintScope 與本文研究的關(guān)鍵區(qū)別在于,它面向x86 下的應(yīng)用程序,基于Pin 插裝技術(shù)實現(xiàn),不支持Cisco IOS 系統(tǒng),而且其并沒有對安全敏感操作進行具體刻畫,僅僅針對內(nèi)存分配和字符串處理等安全敏感函數(shù),也沒有給出具體的判定規(guī)則,而本文除安全敏感函數(shù)外,還加入了對內(nèi)存讀寫訪問、函數(shù)跳轉(zhuǎn)等安全敏感操作的處理,并給出了安全敏感操作的判定規(guī)則。
相比主流操作系統(tǒng)(如Windows,Linux),針對Cisco IOS 的安全性研究還不成熟,這方面公開的研究成果還比較少。在2011 年BlackHat 歐洲大會上,Muniz 等人論證了對Cisco IOS 進行Fuzz 測試的可行性[13]。2012 年,蘇曉燕等人提出了基于模糊測試技術(shù)的Cisco IOS 漏洞挖掘方法[14],實現(xiàn)了IOS 的漏洞挖掘工具CFuzzer。但CFuzzer 在生成測試用例時,并沒有利用程序內(nèi)部狀態(tài)信息,生成策略過于盲目,嚴重制約了模糊測試的效率和能力。
本文針對現(xiàn)有Cisco IOS 下漏洞挖掘方法的不足,并結(jié)合IOS 的特點,提出了基于細粒度動態(tài)污點分析的啟發(fā)式模糊測試方法。本文的主要工作是通過研究細粒度動態(tài)污點分析技術(shù),給出了污點傳播規(guī)則。通過分析大量已公開漏洞的成因,結(jié)合IOS系統(tǒng)自身的特點,歸納總結(jié)產(chǎn)生漏洞的本質(zhì),給出了基于污點分析的安全敏感操作判定規(guī)則,提出了啟發(fā)式測試用例生成方法,通過啟發(fā)式信息,指導測試用例的生成,提高模糊測試效率,并開發(fā)了一套Cisco IOS 漏洞挖掘原型系統(tǒng)CTaintMiner。
作為一項熱門的程序分析技術(shù),動態(tài)污點分析(Dynamic Taint Analysis,DTA)已經(jīng)廣泛應(yīng)用于信息安全的很多領(lǐng)域,例如惡意代碼分析、軟件漏洞挖掘、協(xié)議格式逆向分析等。動態(tài)污點分析的基本思想就是通過標定特定數(shù)據(jù)片段(例如網(wǎng)絡(luò)報文、文件等)為不可信的數(shù)據(jù)(下文稱之為污點),然后跟蹤程序?qū)@些污點數(shù)據(jù)的處理過程,從而收集目標程序?qū)@些數(shù)據(jù)的具體使用信息。
動態(tài)污點分析主要包括2 個方面:污點數(shù)據(jù)的標定和污點數(shù)據(jù)的傳播。污點數(shù)據(jù)的標定一般通過對系統(tǒng)的特定API 函數(shù)(如recv,fread 等)進行劫持來實現(xiàn)。污點數(shù)據(jù)的傳播則需要定義一套污點的傳播規(guī)則,而且通常需要維護一塊影子內(nèi)存(shadow memory)來存儲污點的狀態(tài)信息[9]。
根據(jù)污點傳播的精細程度,污點分析又分為粗粒度污點分析和細粒度污點分析。粗粒度污點分析對于每一個數(shù)據(jù)其污點狀態(tài)只有“0”或“1”,“0”表示干凈,數(shù)據(jù)未被污染;“1”表示數(shù)據(jù)被污染。而細粒度污點分析指為每個污點數(shù)據(jù)單元分配唯一的標簽,需要標識其依賴于哪些污點數(shù)據(jù),從而能夠跟蹤每個污點字節(jié)的傳播過程。
為了便于表述,進行以下定義:
定義1污點數(shù)據(jù)源是指對目標進程進行污點分析所關(guān)注的外部輸入數(shù)據(jù)的集合,用集合D0={d0,d1,…,dn}表示,其中,di表示按單元劃分的第i個污點數(shù)據(jù)單元;n為集合D0的基數(shù),表示污點數(shù)據(jù)源按單元劃分總共有n個污點數(shù)據(jù)單元。
定義2T映射,為集合V到集合S的映射,記為T:V→S,其中,集合V為寄存器、內(nèi)存數(shù)據(jù)以及常量等所有數(shù)據(jù)的集合;集合S為污點屬性集,S等于集合D0的冪集,對于?v∈V,其污點屬性為T(v)。特殊的,對于?v∈D0,T(v)={v},因為污點數(shù)據(jù)源D0只是所有數(shù)據(jù)集合V的子集,而污點數(shù)據(jù)源當中的元素只依賴于其本身;當v為常量時,T(v)=?,因為常量不依賴于任何數(shù)據(jù)。
定義3目標進程執(zhí)行的指令I(lǐng)ns<Type,Operand>,其中,Type表示Ins的指令類型;Operand是Ins的源操作數(shù)與目的操作數(shù)的集合。如果?op∈Operand且T(op)≠?,則稱Ins為污點操作相關(guān)指令。
定義4指令的污點屬性為指令中目的操作數(shù)的污點屬性。
當污點數(shù)據(jù)從一個位置傳遞到另一個位置時,則認為發(fā)生了污點傳播。而污點傳播規(guī)則定義了寄存器和內(nèi)存數(shù)據(jù)的污點屬性通過污點操作相關(guān)指令進行傳播的方式。細粒度的污點分析,需要在傳播過程中,傳遞污點數(shù)據(jù)對污點數(shù)據(jù)源的依賴關(guān)系。
對于涉及到內(nèi)存訪問的指令,進行污點傳播時,存在內(nèi)存地址被污染與內(nèi)存內(nèi)容被污染2 種情況,而其他指令污點傳播情況相對簡單。因此,為了表述方便,本文將讀訪問內(nèi)存的指令記為RMIns,寫訪問內(nèi)存的指令記為WMIns,并將RMIns指令與WMIns統(tǒng)稱為內(nèi)存訪問指令,記為MEMIns;其他類型指令稱為非內(nèi)存訪問指令,記為UMEMIns。
污點傳播規(guī)則:
其中,R1 適用于RMIns指令,ra表示讀訪問的內(nèi)存地址;rv表示讀訪問的內(nèi)存地址ra處存儲的值;R2 適用于WMIns指令,wa表示寫訪問的內(nèi)存地址;wv表示將寫入內(nèi)存地址wa處的值;R3 適用于UMEMIns指令,Operandsrc為指令I(lǐng)ns中源操作數(shù)的集合;n為集合Operandsrc中元素的個數(shù);op為集合Operandsrc中的元素;T(RMIns)表示對于讀訪問內(nèi)存指令的污點屬性,等于讀訪問的內(nèi)存地址ra的污點屬性與讀訪問內(nèi)存內(nèi)容rv的污點屬性的并;T(WMIns)表示對于寫訪問內(nèi)存指令的污點屬性,等于寫訪問的內(nèi)存地址wa的污點屬性與寫訪問內(nèi)存內(nèi)容wv的污點屬性的并。T(UMEMIns)表示對于非內(nèi)存訪問指令的污點屬性,等于所有源操作數(shù)的污點屬性的并。
Cisco IOS 采用PowerPC 或MIPS 架構(gòu),根據(jù)上述污點傳播規(guī)則,表1 以PowerPc 指令集為例,給出了一個細粒度污點分析的示例。
表1 細粒度污點分析示例
第1 條是RMIns指令,指令的功能是從有效地址為(r3 +0)的內(nèi)存處讀取32 位的數(shù),并加載到寄存器r4。M(r3)表示r3 指向的內(nèi)存,根據(jù)定義2,M(r3)的污點屬性為{0,1,2,3},根據(jù)污點傳播規(guī)則R1,寄存器r4 的內(nèi)容直接依賴于M(r3),所以其污點屬性為{0,1,2,3}。
第2 條是RMIns指令,指令的功能從有效地址為(r3+4)的內(nèi)存處讀取32 位的數(shù),并加載到寄存器r5。類似于第1 條指令,r5 的污點屬性為{4,5,6,7}。
第3 條是WMIns指令,指令的功能是將r4 的32 位內(nèi)容存儲到有效地址為(r1 +8)的內(nèi)存中。M(r1 +8)的內(nèi)容直接依賴于r4,因此被r4 污染,根據(jù)污點傳播規(guī)則R2,其污點屬性為{0,1,2,3}。
第4 條是RMIns指令,指令的功能是從有效地址為(r4 +0xc)的內(nèi)存處讀取32 位的數(shù),并加載到寄存器r7。讀訪問內(nèi)存的地址直接依賴于寄存器r4的值,從而r7 的內(nèi)容間接依賴于r4,根據(jù)污點傳播規(guī)則R1,r7 的污點屬性為{0,1,2,3}。
第5 條是UMEMIns指令,指令的功能是將寄存器r5 與r7 內(nèi)容之和賦給寄存器r8。寄存器r8 的內(nèi)容直接依賴于寄存器r5 與r7 的內(nèi)容,根據(jù)污點傳播規(guī)則R3,r8 的污點屬性為r5 的污點屬性與r7 的污點屬性的并。
測試用例生成是模糊測試技術(shù)的關(guān)鍵。對于傳統(tǒng)模糊測試而言,主要采用黑盒測試的方式,在生成測試用例時,并沒有結(jié)合目標程序的內(nèi)部狀態(tài)信息。對Cisco IOS 而言,外部輸入主要是網(wǎng)絡(luò)協(xié)議數(shù)據(jù)報文,因此本文僅針對網(wǎng)絡(luò)協(xié)議進行漏洞挖掘。本文基于動態(tài)污點分析技術(shù),跟蹤Cisco IOS 對協(xié)議數(shù)據(jù)報文的處理過程并反饋運行時信息,指導測試用例的生成,實現(xiàn)啟發(fā)式測試用例生成技術(shù),從而提高模糊測試的效率。
對于一個正常的協(xié)議數(shù)據(jù)報文而言,包括協(xié)議安全相關(guān)字段和協(xié)議安全無關(guān)字段。協(xié)議安全相關(guān)字段是指在目標程序處理過程中,可能影響到程序內(nèi)部的安全敏感操作的協(xié)議字段。協(xié)議安全無關(guān)字段是指在目標程序處理過程中,對內(nèi)部的安全敏感操作不會構(gòu)成影響的協(xié)議字段。對于安全敏感操作,一般指一些不安全函數(shù)(如strcpy,printf 等)和內(nèi)存分配函數(shù)(如malloc、realloc 等)調(diào)用。
啟發(fā)式測試用例生成技術(shù)的核心思想就是首先識別協(xié)議數(shù)據(jù)報文中的協(xié)議安全相關(guān)字段,然后針對這些字段進行變異,生成測試用例對目標程序指定協(xié)議進行測試。一般而言,協(xié)議安全相關(guān)字段的數(shù)目遠少于協(xié)議安全無關(guān)字段的數(shù)目。因此,相對于傳統(tǒng)的模糊測試技術(shù),啟發(fā)式模糊測試最大的特點就是避免了對大量安全無關(guān)字段的測試,生成的測試用例具有很強的針對性,能夠直接影響程序內(nèi)部的安全敏感操作,引起程序異常的可能性更大,測試的效率更高。
例如,在一個協(xié)議數(shù)據(jù)報文中,往往數(shù)據(jù)報文的頭部相關(guān)字段可能影響程序的內(nèi)部安全敏感操作,如長度字段可能會影響目標程序中的內(nèi)存分配、內(nèi)存拷貝等操作。而其中的數(shù)據(jù)部分一般不會產(chǎn)生影響。
在圖1 中,左半部分是一個正常某協(xié)議數(shù)據(jù)報文,右半部分是Cisco IOS 處理該數(shù)據(jù)報文的執(zhí)行軌跡。圖中的寄存器r9 依賴于數(shù)據(jù)報文中的長度字段“00 5c”,然后污染屬性通過指令序列傳遞給了內(nèi)存分配函數(shù)malloc 的入口參數(shù)r3 和內(nèi)存拷貝函數(shù)memcpy 的參數(shù)r5,其中,r3 表示內(nèi)存分配的大?。籸5表示內(nèi)存拷貝的長度。因此,數(shù)據(jù)報文的長度字段影響了內(nèi)存分配函數(shù)和內(nèi)存拷貝函數(shù)的調(diào)用,啟發(fā)式測試用例生成就是針對這些協(xié)議安全相關(guān)字段進行變異,生成畸形的測試用例。
圖1 啟發(fā)式模糊測試示例
由啟發(fā)式測試用例生成的原理可知,安全敏感操作的界定決定了協(xié)議安全相關(guān)字段的獲取。因此,根據(jù)目標程序的特點,對安全敏感操作進行具體地判定非常重要。
通過對大量已公開漏洞的研究發(fā)現(xiàn),大多數(shù)漏洞都是因為程序沒有對外部輸入(下文稱為污點)進行嚴格的審查,造成程序內(nèi)部的函數(shù)調(diào)用地址、內(nèi)存訪問地址、安全敏感函數(shù)的參數(shù)等受到污點數(shù)據(jù)的影響。本文將以下5 類操作稱為安全敏感操作(假設(shè)r3 為污點數(shù)據(jù)):
(1) 內(nèi)存讀訪問地址被污染:如lwzr4,0xc(r3),通過變異讀訪問地址依賴的字段,可能造成讀訪問的內(nèi)存不存在,引發(fā)讀訪問異常。如果讀取的內(nèi)存內(nèi)容,接下來作為函數(shù)調(diào)用的地址,可能引發(fā)代碼執(zhí)行或者異常,如以下指令序列:
L1 將(r3 +0xc)指向的32 位內(nèi)容,加載到寄存器r4,之后L2 將r4 的值賦給寄存器ctr,L3 直接跳轉(zhuǎn)到ctr 指向的地址處執(zhí)行。
(2) 內(nèi)存寫訪問地址被污染:如stwr4,0xc(r3),通過變異寫訪問地址依賴的字段,可能造成寫訪問的內(nèi)存不存在或者改寫破壞內(nèi)存,引發(fā)寫異?;蜿P(guān)鍵數(shù)據(jù)破壞。
(3) 跳轉(zhuǎn)、調(diào)用目的地址被污染:如mtctrr3;bctrl。第1 條指令將寄存器r3 的值傳遞給ctr 寄存器;第2 條指令意思是跳轉(zhuǎn)到ctr 寄存器所指向的地址處執(zhí)行,并設(shè)置lr 寄存器為下一條指令的地址,執(zhí)行完后,返回到lr 指向的地址處執(zhí)行。通過變異所依賴的字段,可能導致程序執(zhí)行任意代碼。
(4) 跳轉(zhuǎn)、調(diào)用目的地址處內(nèi)容被污染:類似于(3),通過變異目的地址處內(nèi)容所依賴的字段,可能導致程序執(zhí)行任意代碼。
(5) 安全敏感函數(shù)的參數(shù)被污染:安全敏感函數(shù)主要包括不安全函數(shù)(如strcpy,sprintf)、內(nèi)存分配函數(shù)(如malloc,realloc,calloc)以及內(nèi)存拷貝函數(shù)(如memcpy)等,具體函數(shù)需要根據(jù)目標程序的特點來選取。如malloc 函數(shù)的size 參數(shù)被污染,通過變異size 所依賴的字段,控制內(nèi)存分配的大小,可能造成size 整型異常,進而可能引發(fā)緩沖區(qū)溢出。
上述5 種安全敏感操作中,操作(1),操作(2)本質(zhì)上是內(nèi)存訪問的地址依賴于污點數(shù)據(jù),操作(3),操作(4)是程序跳轉(zhuǎn)、調(diào)用目的地址或內(nèi)容依賴于污點數(shù)據(jù),操作(5)是安全敏感函數(shù)的參數(shù)依賴于污點數(shù)據(jù)。本文通過分析5 種情況的本質(zhì),提出了以下3 條基于細粒度動態(tài)污點分析的安全敏感操作判定規(guī)則:
R4:對于跳轉(zhuǎn)指令,如果其跳轉(zhuǎn)的目標地址或者目標地址處指令內(nèi)容被污染,即:
其中,ba表示跳轉(zhuǎn)指令的目標地址;bv為ba處的指令內(nèi)容。
則該操作為安全敏感操作,T(ba)∪T(bv)中的元素即為安全相關(guān)字段。
R5:對于內(nèi)存訪問指令,如果內(nèi)存訪問的地址被污染,即:
其中ma表示內(nèi)存訪問的有效地址,則該操作為安全敏感操作,T(ma)中的元素即為安全相關(guān)字段。
R6:對于函數(shù)調(diào)用,如果該函數(shù)為安全敏感函數(shù),且該函數(shù)的傳入?yún)?shù)被污染,即:
其中,ARGIN為函數(shù)傳入?yún)?shù)的集合,且ARGIN={ArgIN1,ArgIN2,…,ArgINn},則該操作為安全敏感操作,T(ARGIN)中的元素即為安全相關(guān)字段。
本文將滿足上述安全敏感操作判定規(guī)則的行為進行報警,記錄具體行為以及安全相關(guān)字段信息。在生成測試用例時,使用如邊界值等異常元素對安全相關(guān)字段進行變異,實現(xiàn)啟發(fā)式測試用例生成技術(shù)。
本文基于細粒度動態(tài)污點分析的啟發(fā)式模糊測試方法,設(shè)計并實現(xiàn)了Cisco IOS 下的漏洞挖掘原型系統(tǒng)CTaintMiner,下面對系統(tǒng)的設(shè)計與實現(xiàn),以及系統(tǒng)的實驗評估進行闡述。
CTaintMiner 是Cisco IOS 下的漏洞挖掘原型系統(tǒng),主要由目標端和測試端兩部分組成。其中目標端包括基礎(chǔ)平臺模塊、污點引入模塊、污點跟蹤模塊、信息反饋模塊和異常監(jiān)視模塊;測試端包括測試用例生成模塊、消息收發(fā)模塊和網(wǎng)絡(luò)同步模塊。CTaintMiner 系統(tǒng)整體結(jié)構(gòu)如圖2 所示。
圖2 CTaintMiner 系統(tǒng)整體結(jié)構(gòu)
其中,基礎(chǔ)平臺模塊,主要基于Cisco 模擬器Dynamips[15]實現(xiàn),主要負責路由器硬件模擬,并加載運行Cisco IOS;污點引入模塊,負責對外部輸入(這里指網(wǎng)絡(luò)數(shù)據(jù)報文)進行污點標定,確立污點數(shù)據(jù)源;污點跟蹤模塊,負責在程序運行過程中,跟蹤污點的傳播過程。信息反饋模塊,應(yīng)用安全敏感操作判定規(guī)則對Cisco IOS 系統(tǒng)運行和污點傳播結(jié)果進行分析監(jiān)測,對滿足判定規(guī)則的敏感操作進行報警,并將IOS 內(nèi)部運行時信息反饋給測試端的測試用例生成模塊,從而指導測試用例生成;異常監(jiān)視模塊,負責監(jiān)視IOS 的運行狀況,出現(xiàn)異常及時報警。測試用例生成模塊,結(jié)合協(xié)議腳本與異常元素庫,針對啟發(fā)式信息中反饋的協(xié)議安全相關(guān)字段進行變異,生成測試用例;消息收發(fā)模塊,負責測試過程中的消息發(fā)送與接收;網(wǎng)絡(luò)同步模塊,負責同步測試端與目標端的網(wǎng)絡(luò)通信。
實驗測試環(huán)境為在Intel Pentium 雙核E5700 3.0 GHz CPU,3 GB 內(nèi)存,主機操作系統(tǒng)為Windows XP sp3,在操作系統(tǒng)為ubuntu12.04 的虛擬機中運行CTaintMiner。
CTaintMiner 基于細粒度污點分析,通過跟蹤數(shù)據(jù)報文處理過程,識別協(xié)議安全相關(guān)字段,指導測試用例生成,以此來提高測試的效率。因此,對于協(xié)議安全相關(guān)字段的識別能力,直接影響CTaintMiner 系統(tǒng)的功能。本文選擇了路由器常用的2 種協(xié)議NHRP 和DHCP,對CTaintMiner 系統(tǒng)的協(xié)議安全相關(guān)字段識別能力進行了實驗測試。圖3 是CTaintMiner進行測試時,獲取的協(xié)議安全相關(guān)字段的記錄信息。協(xié)議安全相關(guān)字段識別實驗結(jié)果如表2所示。
圖3 協(xié)議安全相關(guān)字段的信息
表2 協(xié)議安全相關(guān)字段識別結(jié)果
在圖3 中,可以看到Cisco IOS 在處理某協(xié)議數(shù)據(jù)報文時,系統(tǒng)內(nèi)部內(nèi)存分配函數(shù)alloc 的長度參數(shù)為污點數(shù)據(jù),受到輸入數(shù)據(jù)報文的第52 Byte、第53 Byte(從0 開始編號)的影響,數(shù)據(jù)報文的標識是“1406”。在記錄信息中,還詳細記錄了污點傳播的情況,第6 行~第10 行,記錄了寄存器r22 污染內(nèi)存單元0x8218c170 的情況,大括號中的內(nèi)容為依賴的輸入數(shù)據(jù)字節(jié),中括號中的內(nèi)容為輸入數(shù)據(jù)報文的標識。
在表2 中,第1 列是協(xié)議類型,本文主要選取了NHRP 和DHCP 2 種協(xié)議作為示例。第2 列是同種協(xié)議的不同消息類型數(shù)據(jù)報文。第3 列給出的是輸入數(shù)據(jù)報文的大小,該大小沒有計入底層的協(xié)議(如IP 層等)。第4 列給出的是數(shù)據(jù)報文中影響Cisco IOS 內(nèi)部安全敏感操作的協(xié)議安全相關(guān)字段的字節(jié)數(shù),從表中可以看出協(xié)議安全相關(guān)字段占整個輸入數(shù)據(jù)報文的比例相當小,不到整個輸入的3.2%(第4 列中所有值之和除以第3 列中所有值之和)。因此,針對這些字段進行變異生成測試用例,能夠提高測試效率。
為了驗證協(xié)議安全相關(guān)字段識別的有效性,本文對FTP,TFTP、NHRP,DHCP 等多個協(xié)議進行了協(xié)議安全相關(guān)字段進行獲取,并根據(jù)協(xié)議規(guī)范,通過CTaintMiner 系統(tǒng)中的測試用例生成模塊,利用異常元素庫中的元素針對獲取的協(xié)議安全相關(guān)字段進行變異,生成畸形的測試用例進行測試。
目前,使用CTaintMiner 系統(tǒng)重現(xiàn)了1 個NHRP緩沖區(qū)溢出漏洞[16]、1 個DHCP 拒絕服務(wù)攻擊漏洞[17]、1 個TFTP 長文件名漏洞[18]以及2 個FTP 緩沖區(qū)溢出漏洞[19]。雖然是已公開漏洞,但Cisco 公司并沒有公開漏洞細節(jié)。因此,實驗結(jié)果說明了CTaint-Miner 原型系統(tǒng)具有很強的實用性,論證了基于細粒度污點分析的啟發(fā)式模糊測試方法的有效性。
本文立足安全性需求,結(jié)合Cisco IOS 自身的特點,提出一種基于細粒度污點分析的啟發(fā)式模糊測試漏洞挖掘方法,設(shè)計并實現(xiàn)了一個漏洞挖掘原型系統(tǒng)CTaintMiner,該系統(tǒng)能夠識別協(xié)議數(shù)據(jù)報文中的協(xié)議安全相關(guān)字段,繼而針對這些字段進行變異生成測試用例,進行漏洞挖掘。但系統(tǒng)仍存在不足,CTaintMiner 實現(xiàn)的是在線的細粒度污點分析,再植入了細粒度污點分析模塊后,性能上出現(xiàn)明顯下降,如在處理SSH 加密協(xié)議登錄過程中的D-H Key Exchange Init 類型數(shù)據(jù)報文時,時延比較明顯。因此,如何優(yōu)化系統(tǒng)結(jié)構(gòu)、提高系統(tǒng)性能將是下一步的工作的重點。
[1]Bollapragada V,Murphy C,White R.Inside Cisco IOS Software Architecture[Z].Cisco Company,2000.
[2]Felix Linder.Design and Software Vulnerability in Embedded System[EB/OL].(2013-10-21).https://www.blackhat.com/presentation/bh-usa-03/bh-fed-03-fx.pdf.
[3]Linder F.Cisco Vulnerabilities-yesterday,Today and Tomorrow [ EB/OL].(2013-10-21).http://www.blackhat.com/presentati-on-bh-usa/bh-us-03-fx.pdf.
[4]Lynn M.The Holy Grail:Cisco IOS Shellcode and Exploitation Techniques [ EB/OL].(2005-10-13).http://cryptome.org/ly-nn-cis-co.pdf.
[5]Cadar C,Dunbar D,Engler D R.KLEE:Unassisted and Automatic Generation of High-coverage Tests for Complex Systems Programs[C]//Proceedings of OSDI’08.[S.1.]:IEEE Press,2008:209-224.
[6]Cadar C,Ganesh V,Pawlowski P M,et al.EXE:Automatically Generating Inputs of Death[J].ACM Transactions on Information and System Security,2008,12(2):10-18.
[7]Godefroid P,Klarlund N,Sen K.DART:Directed Automated Random Testing[J].ACM Sigplan Notices,2005,40(6):213-223.
[8]Godefroid P,Levin M Y,Molnar D A.Automated Whitebox Fuzz Testing[C]//Proceedings of NDSS’08.[S.1.]:IEEE Press,2008:151-166.
[9]Molnar D,Li X C,Wagner D A.Dynamic Test Generation to Find Integer Bugs in x86 Binary Linux Programs[C]//Proceedings of the 18th Conference on USENIX Security Symposium.[S.1.]:USENIX Association Press,2009:67-82.
[10]Brumley D,Hartwig C,Kang M G,et al.Bitscope:Automatically Dissecting Malicious Binaries[R].School of Computer Science,Carnegie Mellon University,Technical Report:CMU-CS-07-133,2007.
[11]Bekrar S,Bekrar C,Groz R,et al.A Taint Based Approach for Smart Fuzzing[C]//Proceedings of the 5th IEEE International Conference on Software Testing,Verification and Validation.[S.1.]:IEEE Press,2012:818-825.
[12]王鐵磊.面向二進制程序的安全漏洞挖掘關(guān)鍵技術(shù)研究[D].北京:北京大學,2010.
[13]Mu?iz S,Ortega A.Fuzzing and Debugging Cisco IOS [EB/OL].(2011-10-10).https://media.blackhat.com/bh-eu-11/Sebastian_Muniz/BlackHat _EU _2011 _MunizOrtega_Cisco_iOS-WP.pdf.
[14]蘇曉艷,武東英,劉 龍,等.基于Fuzzing 的Cisco IOS 漏洞挖掘方法[J].計算機工程,2012,38(16):117-120.
[15]Anuzellil G.Dynamips/DynagenTutorial [ EB/OL ].(2011-10-12).http://materias.fi.uba.ar/7543/2010-02/ download/DynamipsTutorial.doc.
[16]Cisco IOS Next Hop Resolution Protocol Vulnerability[EB/OL].(2007-10-12).http://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20070808-nhrp.
[17]Cisco IOS Software DHCP Denial of Service Vulnerability[EB/OL].(2012-10-12).http://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20 120926-dhcp.
[18]TFTP Long Filename Vulnerability[EB/OL].(2012-10-12).http://tools.cisco.com/security/center/ content/CiscoSecurityAdvisory/cisco-sa-20020730-ioc-tftp-lfn.
[19]Multiple Vulnerabilities in the IOS FTP Server[EB/OL].(2007-10-12).http://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20070509-iosftp.