劉豫,聶眉寧,蘇璞睿,馮登國(guó)
(中國(guó)科學(xué)院 軟件研究所 信息安全國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100190)
隨著信息化的快速發(fā)展,入侵者的攻擊目標(biāo)和攻擊方式都大大增加,攻擊的更新速度更快,危害性更強(qiáng)。在各種防范系統(tǒng)中應(yīng)用攻擊特征過(guò)濾輸入數(shù)據(jù),是保護(hù)脆弱服務(wù)和主機(jī)免遭入侵的有效方法。然而傳統(tǒng)的手動(dòng)攻擊特征生成依賴(lài)于人工經(jīng)驗(yàn),不僅耗時(shí)費(fèi)力,生成特征的質(zhì)量也難以保證。因此,快速高效的攻擊特征生成系統(tǒng)成為當(dāng)前的研究熱點(diǎn)。
相關(guān)領(lǐng)域典型研究成果中,Nanda等人提出的Trag[1]系統(tǒng)利用動(dòng)態(tài)污點(diǎn)分析捕獲攻擊過(guò)程中實(shí)際執(zhí)行的指令集合,對(duì)條件表達(dá)式的變量進(jìn)行后向切片[2]識(shí)別出所有攻擊相關(guān)處理語(yǔ)句及約束條件初始化語(yǔ)句,自動(dòng)生成圖靈機(jī)式的攻擊特征。但 Trag依賴(lài)程序源碼,并且生成特征規(guī)模較大,甚至和應(yīng)用程序本身大小相當(dāng),導(dǎo)致執(zhí)行效率較低。Brumley等人[3]提出了一種使生成的特征可識(shí)別針對(duì)同一漏洞的更多可能攻擊的方法。他們利用Pin[4]記錄攻擊執(zhí)行流程,使用程序砍片(chopping)技術(shù)[5]提取輸入點(diǎn)到漏洞之間所有可能的執(zhí)行路徑,整合得到攻擊特征。但文獻(xiàn)[3]中的程序砍片需要反匯編可執(zhí)行代碼,容易受到軟件保護(hù)手段的干擾,并且得到特征的大小按攻擊路徑上的分支語(yǔ)句數(shù)量指數(shù)增長(zhǎng),甚至超過(guò)程序本身大小若干個(gè)數(shù)量級(jí)。他們?cè)诤罄m(xù)工作中提出借助最弱前提條件解決這一問(wèn)題[6],但生成的特征大小仍然超過(guò)了程序本身。此外,Costa等人在 Vigilante[7]中提出了一種自動(dòng)過(guò)濾器生成算法,借助動(dòng)態(tài)污點(diǎn)傳播尋找含有輸入數(shù)據(jù)的條件表達(dá)式,將這些表達(dá)式匯總形成過(guò)濾規(guī)則。由于沒(méi)有準(zhǔn)確識(shí)別真正引起漏洞攻擊的數(shù)據(jù),Vigilante的過(guò)濾規(guī)則引入了與漏洞攻擊無(wú)關(guān)的條件約束,導(dǎo)致規(guī)則過(guò)于嚴(yán)格,引發(fā)了漏報(bào)率較高的問(wèn)題。
針對(duì)現(xiàn)有攻擊特征生成方法的不足,本文提出了一種基于可回溯動(dòng)態(tài)污點(diǎn)分析的攻擊特征生成方法,利用動(dòng)態(tài)污點(diǎn)分析技術(shù)對(duì)脆弱程序的漏洞利用過(guò)程進(jìn)行完整的指令級(jí)記錄,構(gòu)建回溯分析算法提取出與攻擊行為直接相關(guān)的代碼執(zhí)行序列,以此為基礎(chǔ)構(gòu)造特征執(zhí)行上下文環(huán)境并對(duì)分支條件做出判斷,從而生成圖靈機(jī)式的攻擊特征。對(duì)比同類(lèi)研究成果,本方法無(wú)需獲得程序源代碼,可以準(zhǔn)確識(shí)別出與漏洞利用直接相關(guān)的執(zhí)行指令,既解決了文獻(xiàn)[1]對(duì)條件語(yǔ)句中的所有變量進(jìn)行后向切片所引起的特征過(guò)于龐大的問(wèn)題,又排除了文獻(xiàn)[7]中的攻擊無(wú)關(guān)條件約束所造成的漏報(bào)率偏高,而與文獻(xiàn)[3]相比,本方法更好地平衡了特征的覆蓋范圍和執(zhí)行效率,生成特征簡(jiǎn)潔準(zhǔn)確,生成過(guò)程快速高效。
本文的主要貢獻(xiàn)如下。
1) 提出了一套可回溯的動(dòng)態(tài)污點(diǎn)分析框架,可準(zhǔn)確提取影響攻擊路徑的約束條件和操作攻擊輸入的指令序列,提升了對(duì)動(dòng)態(tài)執(zhí)行過(guò)程信息的管理能力,為自動(dòng)化生成簡(jiǎn)潔高效的攻擊特征提供了有力基礎(chǔ)。
2) 提出了一種基于可回溯動(dòng)態(tài)污點(diǎn)分析的攻擊特征生成方法,本方法不依賴(lài)源代碼,通過(guò)分析與漏洞利用相關(guān)的進(jìn)程動(dòng)態(tài)執(zhí)行過(guò)程,可針對(duì)未知漏洞的攻擊行為快速自動(dòng)地生成圖靈機(jī)式的攻擊特征。
3) 建立了一個(gè)攻擊特征生成的原型系統(tǒng),通過(guò)對(duì)攻擊樣本的測(cè)試,驗(yàn)證了本文提出的方法可以不依賴(lài)源代碼快速生成簡(jiǎn)潔高效的圖靈機(jī)式攻擊特征。
本文后續(xù)部分按如下方式進(jìn)行組織:第2節(jié)介紹目前相關(guān)領(lǐng)域的研究工作;第3節(jié)提出了基于可回溯動(dòng)態(tài)污點(diǎn)傳播的攻擊特征生成方法的基本思想和系統(tǒng)構(gòu)成;第4節(jié)討論了可回溯的動(dòng)態(tài)污點(diǎn)分析框架的構(gòu)造方法和回溯分析算法的設(shè)計(jì)細(xì)節(jié);第5節(jié)說(shuō)明圖靈機(jī)式攻擊特征生成的具體過(guò)程;第 6節(jié)是原型系統(tǒng)的建立和實(shí)驗(yàn)評(píng)估結(jié)果;第7節(jié)是結(jié)束語(yǔ)。
攻擊特征的表現(xiàn)形式主要有正則表達(dá)式、條件約束和圖靈機(jī)式3種[3]。正則表達(dá)式的形式簡(jiǎn)潔、匹配算法效率高,但對(duì)特征的描述能力最弱,準(zhǔn)確性也最低。條件約束形式具有較強(qiáng)的描述能力,但不能等效描述循環(huán)結(jié)構(gòu),從而影響攻擊特征的準(zhǔn)確性。圖靈機(jī)式攻擊特征是判斷輸入是否為攻擊的一個(gè)程序,可以對(duì)特征細(xì)節(jié)進(jìn)行精確描述,因而具有較高的準(zhǔn)確性。
攻擊特征生成方法可分為黑盒法和白盒法 2類(lèi)。黑盒法[8~11]直接分析攻擊樣本的共性并對(duì)比與正常輸入的區(qū)別,歸納聚類(lèi)形成攻擊特征。黑盒法面臨的局限包括:攻擊者容易偽造攻擊輸入進(jìn)行混淆干擾,使得生成攻擊特征的準(zhǔn)確性降低;另外,需要耗費(fèi)時(shí)間收集足量的攻擊樣本。白盒法[1,3,6,7]綜合利用攻擊輸入、漏洞利用路徑和漏洞自身特點(diǎn)等信息生成攻擊特征,能更好地描述同類(lèi)攻擊的本質(zhì),準(zhǔn)確性更高,因此成為當(dāng)前攻擊特征生成研究的主要方向。但現(xiàn)有白盒方法常存在依賴(lài)程序源代碼、生成的特征規(guī)模龐大、執(zhí)行效率較低等問(wèn)題。
在基于漏洞利用的攻擊特征生成的研究中,多種動(dòng)態(tài)污點(diǎn)分析系統(tǒng)[12~14]常被用于記錄和提取漏洞利用流程信息,并檢測(cè)針對(duì)未知漏洞的攻擊。文獻(xiàn)[1]中使用GIFT架構(gòu)[14]在編譯環(huán)節(jié)向目標(biāo)代碼添加動(dòng)態(tài)污點(diǎn)傳播的功能代碼,因此依賴(lài)于源代碼。本方法采用的動(dòng)態(tài)污點(diǎn)分析系統(tǒng)是基于硬件模擬器 Qemu[15]實(shí)現(xiàn)的,具有分析粒度精細(xì)、無(wú)需源代碼等優(yōu)點(diǎn)。與傳統(tǒng)的關(guān)注數(shù)據(jù)依賴(lài)的污點(diǎn)傳播不同,本文為了提取與污點(diǎn)相關(guān)的比較和跳轉(zhuǎn)指令,污點(diǎn)操作指令對(duì)標(biāo)志寄存器的影響也被納入考慮。另外,還建成了一個(gè)可回溯的動(dòng)態(tài)污點(diǎn)分析架構(gòu),提升了對(duì)污點(diǎn)傳播過(guò)程信息的管理利用能力,可準(zhǔn)確提取影響攻擊路徑的約束條件和操作攻擊輸入的指令序列,作為攻擊特征生成的基礎(chǔ)。
圖靈機(jī)式的攻擊特征(TMS, turing machine signature)是對(duì)輸入數(shù)據(jù)做出判斷的可執(zhí)行程序,它和脆弱程序、漏洞、攻擊樣本3方面密切相關(guān)。
定義 1(圖靈機(jī)式攻擊特征)。對(duì)具有漏洞 V的脆弱程序P,通過(guò)分析針對(duì)V的攻擊樣本A,可以得到一個(gè)圖靈機(jī)式的攻擊特征記作TMS。它是脆弱程序P的輸入空間I到判斷空間的一個(gè)映射,即TMS:I->{ATTACK,BENIGN}。對(duì)P的任意輸入i∈I,,如果i符合攻擊樣本 A 的攻擊特征,則有TMS(i)=ATTACK;否則,TMS(i)=BENIGN。
本文的目標(biāo)是在無(wú)法獲取源代碼的情況下,檢測(cè)針對(duì)脆弱程序未知漏洞的成功攻擊行為,生成圖靈機(jī)式攻擊特征。成功攻擊由2個(gè)方面因素決定:①脆弱程序存在可利用的漏洞;②攻擊輸入可以到達(dá)漏洞并觸發(fā)漏洞。同類(lèi)攻擊輸入將經(jīng)由相同的路徑到達(dá)程序漏洞。可見(jiàn),攻擊特征蘊(yùn)含與漏洞攻擊直接相關(guān)的輸入數(shù)據(jù)的操作序列中,攻擊路徑、漏洞特征以及對(duì)攻擊數(shù)據(jù)的條件約束是生成特征的關(guān)鍵信息。從中提取出攻擊數(shù)據(jù)在攻擊路徑上的操作變化以及各步驟的約束條件,就可以驗(yàn)證輸入數(shù)據(jù)是否為攻擊。
按此思路本文提出了一種攻擊特征生成方法,通過(guò)將脆弱程序的所有輸入數(shù)據(jù)標(biāo)記為污點(diǎn),利用可回溯的動(dòng)態(tài)污點(diǎn)分析架構(gòu)對(duì)污點(diǎn)數(shù)據(jù)相關(guān)操作行為構(gòu)造指令級(jí)的污點(diǎn)傳播流圖(TPG),并監(jiān)控污點(diǎn)數(shù)據(jù)的異常使用檢測(cè)未知的漏洞攻擊行為。當(dāng)攻擊發(fā)生時(shí),借助TPG的回溯分析算法,提取出與漏洞利用直接相關(guān)的污點(diǎn)數(shù)據(jù)操作序列和各個(gè)約束條件,恢復(fù)執(zhí)行上下文并對(duì)條件分支語(yǔ)句添加判定,從而生成圖靈機(jī)式的攻擊特征。本方法的系統(tǒng)框架如圖1所示,主要由可回溯動(dòng)態(tài)污點(diǎn)分析、攻擊檢測(cè)和攻擊特征生成3大模塊構(gòu)成,相關(guān)技術(shù)要點(diǎn)和實(shí)現(xiàn)方法將在下面2節(jié)中詳細(xì)討論。
準(zhǔn)確提取脆弱進(jìn)程與漏洞攻擊相關(guān)的操作序列以及約束條件,是生成圖靈機(jī)式攻擊特征的關(guān)鍵。動(dòng)態(tài)污點(diǎn)分析常用于進(jìn)程行為分析,并可以檢測(cè)攻擊行為,因此在白盒法的特征生成中得到廣泛應(yīng)用。與文獻(xiàn)[1,7]不同,針對(duì)特征生成需求,提出了一套可回溯的動(dòng)態(tài)污點(diǎn)分析框架,為自動(dòng)化生成簡(jiǎn)潔高效的攻擊特征提供了有力基礎(chǔ)。
定義2(污點(diǎn)傳播流圖)。污點(diǎn)傳播流圖動(dòng)態(tài)記錄進(jìn)程指令級(jí)的污點(diǎn)數(shù)據(jù)操作行為。由一系列的節(jié)點(diǎn)和邊組成,可記為T(mén)PG
表1 TPG的節(jié)點(diǎn)和邊的定義
生成TPG的第一步是將污點(diǎn)數(shù)據(jù)引入系統(tǒng),為此定義了污點(diǎn)源事件(TSE, taint source event)。
圖1 系統(tǒng)框架
定義3(污點(diǎn)源事件)。污點(diǎn)源事件指將污點(diǎn)分析關(guān)注的外部數(shù)據(jù)引入進(jìn)程空間的進(jìn)程行為,記作TSE
在特征生成系統(tǒng)中,污點(diǎn)源事件即脆弱進(jìn)程接收輸入數(shù)據(jù),因此分析系統(tǒng)將相應(yīng)的輸入緩沖區(qū)標(biāo)記為污點(diǎn)。為了實(shí)時(shí)反映污點(diǎn)數(shù)據(jù)在系統(tǒng)中的分布狀況,特別定義了污點(diǎn)狀態(tài)記錄(TSR, taint state record)結(jié)構(gòu)。
定義 4(污點(diǎn)狀態(tài)記錄)。TSR是進(jìn)程執(zhí)行過(guò)程中相關(guān)操作數(shù)據(jù)的污點(diǎn)狀態(tài)實(shí)時(shí)記錄,TSR=TSR_Reg∪TSR_Mem,TSR_Reg和TSR_Mem分別對(duì)應(yīng)寄存器和內(nèi)存數(shù)據(jù)的污點(diǎn)狀態(tài)的集合,以字節(jié)為記錄單位。TSR中每條污點(diǎn)狀態(tài)記錄記作tsr
為了構(gòu)造TPG,借助TSR建立了2個(gè)映射關(guān)系 isTaint和 whichInsNode,如表 2所示。借助它們,定義了 TPG中需要記錄的污點(diǎn)相關(guān)指令操作TI。
定義5(污點(diǎn)相關(guān)指令操作)。對(duì)目標(biāo)進(jìn)程執(zhí)行的指令 Ins
最后,定義有效約束條件記錄(ECR, effective condition record),用于提取影響攻擊路徑的約束條件。
定義 6(有效約束條件記錄)。ECR是影響當(dāng)前運(yùn)行指令的條件約束的集合,ECR的記錄表示為二元組ecr
本文對(duì)每個(gè)屬于TI的條件跳轉(zhuǎn)指令生成一條ecr記錄。利用ECR本文定義映射關(guān)系whichJCNode,如表2所示。為確保ECR實(shí)時(shí)更新,如果執(zhí)行到eip不屬于ecr的Effect_Range指令I(lǐng)ns時(shí),則從ECR中刪除ecr記錄,除非Ins屬于Effect_Range內(nèi)的指令調(diào)用的子程序。
上述方法確保特征生成不受與攻擊無(wú)關(guān)的條件約束的干擾,但存在一種局限。如圖2所示,本文可以正確識(shí)別圖2(a)和圖2(b)類(lèi)條件約束的影響范圍;但對(duì)圖 2(c)類(lèi)的條件約束,則不能識(shí)別出(Addr2,Addr3)同樣受 JC的影響。這由動(dòng)態(tài)分析本身的制約引起:如果JMP Addr3指令不被執(zhí)行,本文就無(wú)法得到代碼結(jié)構(gòu)的全貌。這一局限可以結(jié)合靜態(tài)分析進(jìn)行彌補(bǔ)。
構(gòu)造 TPG的基本思路是,對(duì)每一個(gè)污點(diǎn)相關(guān)操作,生成一個(gè)節(jié)點(diǎn)對(duì)其進(jìn)行記錄,并將其連接到處理同源的污點(diǎn)數(shù)據(jù)的上一次污點(diǎn)相關(guān)操作所對(duì)應(yīng)的節(jié)點(diǎn),或者影響該操作的約束條件對(duì)應(yīng)的節(jié)點(diǎn),如此往復(fù),從而生成TPG。具體方法如下。
1) 對(duì)污點(diǎn)源事件TSEa
① 生成一個(gè)污點(diǎn)源節(jié)點(diǎn)Sna記錄相關(guān)信息,Sna是TPG的初始節(jié)點(diǎn)。
② 然后,生成個(gè)數(shù)為L(zhǎng)ength的污點(diǎn)狀態(tài)記錄tsr
2) 對(duì)于TI操作Insa
① 首先,生成 TPG節(jié)點(diǎn) Ina記錄指令操作的相關(guān)信息。
表2 TSR和ECR相關(guān)的映射關(guān)系
圖2 不同類(lèi)型的條件跳轉(zhuǎn)指令
② 若Insa為普通指令,根據(jù)Type分析Operand中影響 Insa執(zhí)行結(jié)果的操作數(shù)的集合Operandsrc,遍歷 opi∈Operandsrc,如果 isTaint(opi)=1,在 TSR中查詢(xún)whichInsNode(opi)=Ini,得到opi對(duì)應(yīng)的TPG節(jié)點(diǎn)Ini,生成邊Ie
③ 如果標(biāo)志寄存器FlagReg受污點(diǎn)數(shù)據(jù)opi運(yùn)算的影響而改變,將tsr_FlagReg記為污點(diǎn),并修改tsr_FlagReg→In=whichInsNode(opi)。
④ 若Insa為條件跳轉(zhuǎn)指令,則查詢(xún)TSR得到whichInsNode(FlagReg)=Ink,并生成邊Ie
⑤ 根據(jù)Insa的EIP,對(duì)每個(gè)Inj∈whichJCNode(EIP),生成邊Ie
⑥ 根據(jù)Type分析Operand中受Insa執(zhí)行影響的操作數(shù)的集合Operanddst。遍歷opj∈Operanddst,如果Insa執(zhí)行后isTaint(opj)=1,更新opj對(duì)應(yīng)的污點(diǎn)狀態(tài)記錄tsrj→In= Ina。
通過(guò)如上步驟,按指令的污點(diǎn)數(shù)據(jù)來(lái)源和所受條件約束影響完成了TPG的構(gòu)建。
由于TPG中記錄了節(jié)點(diǎn)間的上下級(jí)關(guān)系,因此從任意節(jié)點(diǎn)出發(fā)可以有向遍歷 TPG,得到的 TPG子圖對(duì)應(yīng)相關(guān)污點(diǎn)數(shù)據(jù)的操作序列以及影響操作的約束條件。要獲取從節(jié)點(diǎn)Na開(kāi)始的回溯分析結(jié)果,則對(duì)Na在TPG圖中的每個(gè)上級(jí)節(jié)點(diǎn)進(jìn)行遞歸的回溯分析。當(dāng)節(jié)點(diǎn)的所有上級(jí)節(jié)點(diǎn)的回溯分析完成或者該節(jié)點(diǎn)已經(jīng)沒(méi)有上級(jí)節(jié)點(diǎn)時(shí),將它加入回溯分析記錄鏈表。最后,當(dāng)節(jié)點(diǎn)Na的回溯分析返回時(shí),回溯分析記錄鏈表中就得到了從污點(diǎn)源開(kāi)始到Na的所有相關(guān)的脆弱進(jìn)程執(zhí)行指令的完整記錄?;厮莘治龅乃惴枋鋈鐖D3所示。
圖3 TPG回溯分析算法
根據(jù)污點(diǎn)分析策略,當(dāng)脆弱程序執(zhí)行可能引發(fā)漏洞利用的指令,如JMP、CALL、RET時(shí),動(dòng)態(tài)污點(diǎn)分析監(jiān)控污點(diǎn)數(shù)據(jù)的異常使用,從而檢測(cè)到針對(duì)未知漏洞的攻擊。污點(diǎn)分析策略設(shè)置了2條常用的異常使用判斷規(guī)則:污點(diǎn)數(shù)據(jù)用作跳轉(zhuǎn)地址和污點(diǎn)數(shù)據(jù)作為執(zhí)行代碼。文獻(xiàn)[16]的研究表明,利用這2條規(guī)則,可以覆蓋大多數(shù)漏洞攻擊行為,并且誤報(bào)率很低。當(dāng)檢測(cè)到對(duì)漏洞的攻擊時(shí),則使用回溯分析算法,從TPG中回溯提取與漏洞攻擊直接相關(guān)的污點(diǎn)數(shù)據(jù)操作序列以及影響攻擊路徑的約束條件。
動(dòng)態(tài)污點(diǎn)分析檢測(cè)到對(duì)未知漏洞的攻擊,并回溯 TPG獲得與攻擊直接相關(guān)的污點(diǎn)數(shù)據(jù)操作指令序列,記作 TOT,這是圖靈機(jī)式的攻擊特征 TMS生成的基礎(chǔ)。但TOT并不等同于TMS:一方面TOT是脆弱進(jìn)程動(dòng)態(tài)執(zhí)行的操作序列,指令操作數(shù)的寄存器和內(nèi)存地址都處在脆弱進(jìn)程的執(zhí)行上下文中,不能直接移植到TMS的執(zhí)行環(huán)境;另一方面,TOT中缺少對(duì)條件分支語(yǔ)句的處理,沒(méi)有判斷輸入數(shù)據(jù)分組是否為攻擊。為此,需要在TOT的基礎(chǔ)上對(duì)上述2方面進(jìn)行修改和完善,才能生成圖靈機(jī)式的攻擊特征TMS。
由于提取TOT時(shí)的進(jìn)程執(zhí)行上下文與TMS的運(yùn)行環(huán)境有較大差異,因此需要根據(jù)指令操作數(shù)的類(lèi)型和污點(diǎn)狀態(tài)進(jìn)行處理,使其能在 TMS的運(yùn)行環(huán)境中順利執(zhí)行。為此,TMS需要提供一個(gè)緩沖區(qū)SRC_BUFFER存放輸入數(shù)據(jù)分組,并將TOT中讀取污點(diǎn)源數(shù)據(jù)的指令尋址映射到SRC_BUFFER的內(nèi)存區(qū)間。另外,TMS還需要提供一個(gè)數(shù)據(jù)段TMS_DATA,存儲(chǔ)污點(diǎn)數(shù)據(jù)相關(guān)操作的變量,避免TOT中的尋址地址和TMS發(fā)生沖突。然后,按如下的規(guī)則處理TOT中的污點(diǎn)數(shù)據(jù)相關(guān)操作指令。
1) 對(duì)于操作數(shù)本身是污點(diǎn)數(shù)據(jù),并且是寄存器類(lèi)型的,無(wú)需進(jìn)行特別處理,因?yàn)槲埸c(diǎn)數(shù)據(jù)的值將隨著TMS對(duì)輸入數(shù)據(jù)的處理自動(dòng)獲得。
2) 對(duì)于本身不是污點(diǎn)數(shù)據(jù)而且不會(huì)被污點(diǎn)數(shù)據(jù)污染的操作數(shù),則需要將它的實(shí)際值作為立即數(shù)替換它在TOT中的類(lèi)型。無(wú)論該操作數(shù)是一個(gè)寄存器還是內(nèi)存尋址地址,動(dòng)態(tài)污點(diǎn)分析系統(tǒng)都能夠獲取攻擊發(fā)生時(shí)它的實(shí)際值,并記錄在TPG的對(duì)應(yīng)節(jié)點(diǎn)中。
3) 對(duì)于本身不是污點(diǎn)數(shù)據(jù),但通過(guò)指令執(zhí)行被污點(diǎn)操作數(shù)污染的操作數(shù),如果類(lèi)型是寄存器,無(wú)需進(jìn)行處理;如果是內(nèi)存尋址地址,用ADDR1表示,則將ADDR1替換為T(mén)MS_DATA的一個(gè)空閑地址ADDR2,并將后面指令中出現(xiàn)的ADDR1都使用ADDR2進(jìn)行替換。如果該操作數(shù)原有的值會(huì)影響操作結(jié)果,還需要提取出它的實(shí)際值代入污染指令的計(jì)算。
使用處理規(guī)則2)是因?yàn)門(mén)OT中只含有污點(diǎn)數(shù)據(jù)相關(guān)的操作,沒(méi)有非污點(diǎn)數(shù)據(jù)的變量初始化過(guò)程。如果在 TMS中直接使用非污點(diǎn)數(shù)據(jù)在攻擊發(fā)生時(shí)的內(nèi)存地址和寄存器,將會(huì)引起系統(tǒng)崩潰或者讀入錯(cuò)誤的值,本文解決方法是將攻擊發(fā)生時(shí)的實(shí)際值代入它們?cè)赥MS的相關(guān)操作。使用處理規(guī)則3)是因?yàn)?TOT中不含經(jīng)過(guò)污點(diǎn)傳播成為污點(diǎn)數(shù)據(jù)的變量的初始化過(guò)程,直接使用攻擊發(fā)生時(shí)的內(nèi)存地址也可能和 TMS的內(nèi)存空間發(fā)生沖突。但與非污點(diǎn)數(shù)據(jù)不同,污點(diǎn)數(shù)據(jù)變量最終將獲得來(lái)源于輸入數(shù)據(jù)分組的賦值,因此只需要在 TMS提供的TMS_DATA中為其分配一個(gè)合理的存儲(chǔ)空間即可。
TOT的指令序列經(jīng)過(guò)上述的修正,已經(jīng)滿足在TMS的環(huán)境中執(zhí)行的需求,但還缺少對(duì)輸入數(shù)據(jù)是否為攻擊的判斷輸出。因此,需要處理TOT中的條件分支語(yǔ)句,添加判斷輸出語(yǔ)句。在動(dòng)態(tài)污點(diǎn)分析系統(tǒng)處理屬于TI的條件分支跳轉(zhuǎn)指令JC時(shí),記錄JC運(yùn)行時(shí)的條件滿足情況,據(jù)此對(duì)TOT中對(duì)應(yīng)的條件分支語(yǔ)句進(jìn)行處理,使得與當(dāng)時(shí)條件滿足情況一致時(shí),沿著攻擊路徑執(zhí)行,否則攻擊特征返回BENIGN。在TOT的最后一個(gè)條件分支跳轉(zhuǎn)指令,滿足當(dāng)時(shí)條件的分支,可以直接返回 ATTACK判斷,因?yàn)橹笠呀?jīng)沒(méi)有條件分支語(yǔ)句,輸入數(shù)據(jù)必然能夠到達(dá)漏洞并滿足漏洞利用條件,形成有效攻擊。通過(guò)對(duì)TOT進(jìn)行上述的修改和完善,最終重新編譯為可執(zhí)行程序,生成了圖靈機(jī)式攻擊特征。
本文基于 WooKon惡意代碼分析平臺(tái)[17]開(kāi)發(fā)實(shí)現(xiàn)了生成圖靈機(jī)式攻擊特征的原型系統(tǒng)。將實(shí)驗(yàn)樣本部署在WooKon平臺(tái)上運(yùn)行的Windows XP系統(tǒng)中,利用第三方的反匯編引擎Udis86[18]對(duì)樣本執(zhí)行的每條指令進(jìn)行解析,實(shí)現(xiàn)了對(duì)指令類(lèi)型和操作數(shù)的識(shí)別,并可以獲取操作數(shù)的寄存器或內(nèi)存地址以及它們的值,從而按照預(yù)設(shè)的污點(diǎn)分析策略進(jìn)行指令級(jí)的動(dòng)態(tài)污點(diǎn)分析。原型系統(tǒng)運(yùn)行在一臺(tái)DELL Optiplex 360主機(jī)上,基本軟硬件運(yùn)行環(huán)境如下。內(nèi)存:DDR2 667MHz 2GB;硬盤(pán):SATA 250GB;主板:Intel G31;主機(jī)操作系統(tǒng):Fedora Core 10 x86_64;虛擬操作系統(tǒng):Windows XP SP2。
本文使用 2個(gè)脆弱程序 IrfanView_3.99和easyftp-server-1.7.0.11-cn及其攻擊樣本進(jìn)行了實(shí)驗(yàn)。IrfanView_3.99是一個(gè)圖像查看和格式轉(zhuǎn)換程序,它的插件Formats.dll中存在一個(gè)本地溢出攻擊漏洞,使得讀入特別構(gòu)造的.iff文件時(shí),引起進(jìn)程崩潰。easyFtp-server是一個(gè)支持Web訪問(wèn)的FTP服務(wù)器,在處理超長(zhǎng)參數(shù)時(shí)存在溢出漏洞,攻擊者可利用其漏洞遠(yuǎn)程執(zhí)行任意指令。本文利用原型系統(tǒng)分析了上述2種脆弱程序的漏洞利用過(guò)程,成功生成了攻擊樣本所對(duì)應(yīng)的圖靈機(jī)式的攻擊特征。表 3記錄了特征生成過(guò)程和最終生成特征的基本信息。
表3 攻擊特征生成實(shí)驗(yàn)結(jié)果
從實(shí)驗(yàn)結(jié)果可以看出本文得到攻擊特征都非常簡(jiǎn)潔,不到脆弱程序自身大小的 4%,相對(duì)于文獻(xiàn)[1,3]的結(jié)果具有明顯優(yōu)勢(shì)。原因在于恢復(fù)特征的執(zhí)行上下文環(huán)節(jié),文獻(xiàn)[1,3]中使用了切片方法,而本文直接使用攻擊發(fā)生時(shí)的實(shí)際值替代非污點(diǎn)數(shù)據(jù),從而省略了它們的初始化過(guò)程,并避免了其擴(kuò)散影響。事實(shí)上,非污點(diǎn)數(shù)據(jù)表示進(jìn)程執(zhí)行環(huán)境中的其他資源對(duì)輸入的影響;使用攻擊發(fā)生時(shí)的實(shí)際值,等效于模擬了特征生成時(shí)的脆弱進(jìn)程以及部署環(huán)境。如果部署環(huán)境具有一般性,那么圖靈機(jī)式攻擊特征的判斷就應(yīng)該被接受,因?yàn)閬G棄一個(gè)可能攻擊典型應(yīng)用部署的數(shù)據(jù)分組是符合邏輯的。
為了驗(yàn)證生成特征的有效性,本文利用 Fuzz測(cè)試開(kāi)發(fā)組件SPIKE[19],針對(duì)2種脆弱程序生成了多個(gè)灰盒測(cè)試樣本,然后使用攻擊特征對(duì)這些樣本進(jìn)行判斷,并將所有被判斷為攻擊數(shù)據(jù)的測(cè)試樣本輸入脆弱程序進(jìn)行實(shí)際驗(yàn)證。對(duì)于被攻擊特征判斷為正常的測(cè)試樣本,由于數(shù)量太大,本文從中分別隨機(jī)抽取了1 000個(gè)樣本輸入脆弱程序進(jìn)行驗(yàn)證。得到的實(shí)驗(yàn)結(jié)果如表4所示??梢?jiàn)生成特征的判斷結(jié)果和脆弱程序?qū)嶋H驗(yàn)證的結(jié)果非常接近,說(shuō)明本文生成的特征具有較好的準(zhǔn)確性。進(jìn)一步分析IrfanView和 EasyFTP的攻擊特征準(zhǔn)確性具有差異的原因。結(jié)合表3,可知在IrfanView漏洞攻擊過(guò)程中獲得了大量的用于特征生成的有效節(jié)點(diǎn),而EasyFTP的攻擊樣本提供的有效節(jié)點(diǎn)數(shù)量較少,導(dǎo)致生成特征的刻畫(huà)能力較弱,準(zhǔn)確性受到影響。如果攻擊數(shù)據(jù)在漏洞發(fā)生前參與運(yùn)算較少,本文方法會(huì)受到一些制約。但在攻擊數(shù)據(jù)頻繁參與運(yùn)算并且相互關(guān)聯(lián)制約形成重要的約束條件的情況下,本文方法可以做出非常準(zhǔn)確的判斷,而這正是手工分析最為困難的場(chǎng)景。
表4 攻擊特征有效性驗(yàn)證
最后,在對(duì)Fuzz生成樣本的測(cè)試過(guò)程中,本文在表5中特別記錄了圖靈機(jī)式攻擊特征的運(yùn)行性能??梢?jiàn),生成的攻擊特征只占用很少的系統(tǒng)資源,并且做出判斷的速度很快。相比于普通硬盤(pán)平均尋道時(shí)間8ms和寬帶網(wǎng)絡(luò)100ms左右的正常延遲,攻擊特征檢查輸入數(shù)據(jù)分組對(duì)應(yīng)用程序的性能影響非常微小。
表5 攻擊特征運(yùn)行性能
以上的實(shí)驗(yàn)驗(yàn)證了本文想出的特征生成方法既具有較高的準(zhǔn)確性,同時(shí)也有很好的執(zhí)行效率。在一個(gè)應(yīng)用程序有多個(gè)漏洞或者同一漏洞具有不同的利用方式時(shí),本系統(tǒng)將針對(duì)不同的攻擊利用生成多個(gè)圖靈機(jī)式的特征,從而需要對(duì)一個(gè)數(shù)據(jù)分組進(jìn)行多次的檢驗(yàn),可能引起額外的開(kāi)銷(xiāo)。如何合并不同的攻擊特征以減少重復(fù)計(jì)算,將是筆者下一步工作需要解決的問(wèn)題。
本文提出一種基于可回溯動(dòng)態(tài)污點(diǎn)分析的攻擊特征生成方法,借助動(dòng)態(tài)污點(diǎn)分析構(gòu)建脆弱程序漏洞利用過(guò)程的TPG,提取出與攻擊行為直接相關(guān)的代碼執(zhí)行序列,以此為基礎(chǔ)恢復(fù)特征執(zhí)行上下文環(huán)境并對(duì)條件分支做出判斷,從而生成圖靈機(jī)式的攻擊特征。通過(guò)對(duì)原型系統(tǒng)的評(píng)估測(cè)試,驗(yàn)證了本方法具有不依賴(lài)源代碼,生成特征簡(jiǎn)潔高效,生成過(guò)程自動(dòng)化程度高的優(yōu)點(diǎn)。下一步,將研究如何擴(kuò)展現(xiàn)有方法以實(shí)現(xiàn)多進(jìn)程應(yīng)用系統(tǒng)的攻擊特征生成,并探索合并不同的攻擊特征的方法,提高多特征情況下對(duì)輸入數(shù)據(jù)做出判斷的效率。
[1] NANDA S, CHIUEH T.Execution trace-driven automated attack signature generation[A].24th Annual Computer Security Applications Conference[C].USA, 2008.Anaheim(CA), 2008.195-204.
[2] KOREL B, LASKI J.Dynamic Program Slicing[M].Inf, Process Lett,1988, 29(3):155-163.
[3] BRUMLEY D, NEWSOME J, SONG.Towards automatic generation of vulnerability-based signatures[A].Proceedings of the 2006 IEEE Symposium on Security and Privacy[C].Oakland, Virginia, USA,2006.15-16.
[4] LUK C, COHN R, MUTH R.Pin: building customized program analysis tools with dynamic instrumentation[A].Proc of 2005 Programming Language Design and Implementation (PLDI) Conference[C].Chicago, USA, 2005.190-200.
[5] JACKSON D, ROLLINS E.Chopping: a generalization of slicing[A].Proc of the Second ACM SIGSOFT Symposium on the Foundations of Software Engineering[C].New Orleans, USA, 1994.
[6] BRUMLEY D, WANG H, JHA S. Creating vulnerability signatures using weakest preconditions[A].IEEE Computer Security Foundations Symposium[C].Venice, Italy, 2007.311-325.
[7] COSTA M, CROWCROFT J, CASTRO M.Vigilante: end-to-end containment of internet worms[J]. SIGOPS Oper Syst Rev, 2005,39(5):133-147.
[8] LIANG Z, SEKAR R.Automatic generation of buffer over fl ow signatures: an approach based on program behavior models[A].21st Annual Computer Security Applications Conference[C].Tucson, Arizona,USA, 2005.10-224.
[9] LIANG Z, SEKAR R.Fast and automated generation of attack signatures: a basis for building self-protecting servers[A].Proceedings of the 12th ACM Conference on Computer and Communications Security, Alexandria(VA)[C].USA, 2005.
[10] NEWSOME J, KARP B, SONG D.Polygraph: automatically generating signatures for polymorphic worms[A].IEEE Symposium on Security and Privacy[C].Oakland, Virginia, USA, 2005.226-241.
[11] SINGH S, ESTAN C, VARGHESE G.Automated worm fi ngerprinting[A].Symposium on Opearting Systems Design & Implementation[C].San Francisco, USA, 2004.45-60.
[12] VASUDEYAN A, YERRABALLI R.Cobra: fine-grained malware analysis using stealth localized-executions[A], Proceedings of the 2006 IEEE Symposium on Security and Privacy[C].Oakland, Virginia,USA, 2006.264-279.
[13] CLAUSE J, LI W, ORSO A.Dytan: a generic dynamic taint analysis framework[A].Proceedings of the 2007 International Symposium on Software Testing and Analysis, London, UK, 2007.196-206.
[14] LAM L, CHIUEH T.A general dynamic information flow tracking framework for security applications[A].22nd Annual Computer Security Applications Conference[C].Miami, USA, 2006.463-472.
[15] QEMU[EB/OL].http://www.nongnu.org/qemu/.
[16] NEWSOME J, SONG D.Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[A].12th Network and Distributed System Security Symposium.San Diego, California, February 2005.
[17] WooKon惡意代碼分析平臺(tái)[EB/OL].http://www.isec.ac.cn/group_detail.jsp? gid=2&id=62.WooKon mulicicus code analysis platform[EB/OL].http://www.isec.ac.cn/ group _detail.jsp? gid=2&id=62.
[18] Udis86[EB/OL].http://udis86.sourceforge.net/.
[19] SPIKE Fuzz測(cè)試開(kāi)發(fā)組件[EB/OL].http://www.immunitysec.com/downloads/SPIKE2.9.tgz.SPIKE Fuzz testing kit[EB/OL].http://www.immunitysec.com/downloads/SPIKE2.9.tgz.