薛慧敏
(山西財貿(mào)職業(yè)技術(shù)學(xué)院 山西太原 030031)
網(wǎng)絡(luò)病毒是與計算機相伴而生的產(chǎn)物,它是一種惡意的代碼程序,主要是對計算機系統(tǒng)進(jìn)行破壞,竊取重要的數(shù)據(jù)信息。因此,對網(wǎng)絡(luò)病毒進(jìn)行有效地防范顯得尤為必要。常規(guī)的殺毒軟件雖然在病毒防范中具有一定的效果,但對于未知的病毒和新型病毒卻很難防范。可以利用數(shù)據(jù)挖掘技術(shù)構(gòu)建起一個病毒檢測系統(tǒng),從而達(dá)到全面防范網(wǎng)絡(luò)病毒的目的。
所謂數(shù)據(jù)挖掘,就是從海量的數(shù)據(jù)當(dāng)中,找出未知的、有利用價值的數(shù)據(jù)的過程。數(shù)據(jù)挖掘技術(shù)也被稱之為數(shù)據(jù)庫中的知識發(fā)現(xiàn),即KDD,它是一個人機交互過程,由多個步驟組合而成,數(shù)據(jù)挖掘是其中一個步驟,如圖1所示。
圖1 知識發(fā)現(xiàn)過程示意圖
由圖1可知,數(shù)據(jù)庫是知識發(fā)現(xiàn)的基礎(chǔ),通過數(shù)據(jù)選擇、數(shù)據(jù)預(yù)處理、數(shù)據(jù)挖掘和模式評估等步驟,最終完成對知識的發(fā)現(xiàn)。數(shù)據(jù)挖掘雖然是知識發(fā)現(xiàn)中的一個步驟,但從實際情況來看,它是不可或缺的關(guān)鍵步驟,因此對數(shù)據(jù)挖掘技術(shù)進(jìn)行深入研究具有重要的現(xiàn)實意義。業(yè)內(nèi)一些專家學(xué)者認(rèn)為,數(shù)據(jù)挖掘技術(shù)與KDD之間存在著諸多重疊之處,常規(guī)數(shù)據(jù)挖掘系統(tǒng)的結(jié)構(gòu)如圖2所示。
圖2 數(shù)據(jù)挖掘系統(tǒng)結(jié)構(gòu)示意圖
2.1.1殺毒軟件 網(wǎng)絡(luò)病毒現(xiàn)已成為計算機系統(tǒng)的頭號威脅,由此使得病毒檢測技術(shù)成為計算機安全領(lǐng)域研究的主要課題之一?;诤灻臋z測技術(shù)是目前應(yīng)用較為廣泛的病毒檢測方法,具有病毒查殺功能的殺毒軟件,一般都能夠?qū)Ψ欠ㄈ肭诌M(jìn)行攔截,并對惡意攻擊進(jìn)行防御。但從實際來看,這些功能僅僅是對修改注冊表行為的檢測,殺毒軟件的檢測流程如圖3所示。
圖3 殺毒軟件的檢測流程
通常情況下,只要殺毒軟件檢測到某個行為準(zhǔn)備修改注冊表時,便會自動提醒用戶,并給出解決措施,如允許、禁止等,然后按照用戶的選擇執(zhí)行。
2.1.2行為分析 在計算機網(wǎng)絡(luò)木馬病毒檢測體系中,進(jìn)程監(jiān)視具有不可替代的作用,主要涉及如下技術(shù):
(1)比較判定。將新掛起的進(jìn)程與病毒庫當(dāng)中現(xiàn)有的進(jìn)程進(jìn)行比較,若是相同或是相似,則會判定進(jìn)程為病毒。
(2)行為跟蹤。對新的進(jìn)程進(jìn)行跟蹤,并開啟行為追蹤,利用函數(shù)調(diào)用列表監(jiān)視進(jìn)程。
大量實踐證明,只通過進(jìn)程監(jiān)視的方法,很難達(dá)到徹底防范網(wǎng)絡(luò)木馬程序及病毒的效果,尤其是各種各樣的新型病毒層出不窮,且很多病毒的隱蔽性越來越強,能夠隱蔽進(jìn)程,進(jìn)程監(jiān)視無法察覺。不僅如此,進(jìn)程監(jiān)視在啟動運行時,會占用大量的系統(tǒng)資源,漫無目的的監(jiān)視則會導(dǎo)致系統(tǒng)誤報。為解決這一問題,可以對進(jìn)程監(jiān)視加以改進(jìn),借助API函數(shù)調(diào)用,結(jié)合數(shù)據(jù)挖掘技術(shù),開發(fā)新的網(wǎng)絡(luò)病毒檢測系統(tǒng),以此來提高病毒的檢測效率,增強計算機系統(tǒng)的安全性。計算機網(wǎng)絡(luò)中的木馬病毒為了更好地隱藏自己,一般都會做成比較小的程序,從而使得它們只能完成一些簡單的任務(wù),并利用API函數(shù)來實現(xiàn)某些功能。病毒變種的特征碼通常都會被修改,如果以靜態(tài)檢測的方法,很難檢測出變種后的病毒。但無論病毒是否變種,其調(diào)用API函數(shù)的過程都基本相同,所以只要可以將病毒調(diào)用的API函數(shù)提取出來,便可對未知的變種病毒進(jìn)行檢測。API函數(shù)的攔截過程如圖4所示。
圖4 API函數(shù)攔截情況
正常情況下,API函數(shù)在執(zhí)行的過程中,需要對系統(tǒng)空間內(nèi)的函數(shù)進(jìn)行調(diào)用。如果權(quán)限不夠,則會在監(jiān)視后進(jìn)入到核心態(tài),此時SSDI會被MDL鎖定并進(jìn)行修改,而API函數(shù)的調(diào)用基本上都是發(fā)生在某個進(jìn)程的線程上。因此,對API函數(shù)的攔截,就是要記錄線程的ID。
計算機網(wǎng)絡(luò)病毒通常都是以惡意代碼的形式進(jìn)行攻擊,因惡意代碼的數(shù)目較多,并且每個惡意代碼會調(diào)用大量的API函數(shù),對于病毒檢測系統(tǒng)來說,從大量的API函數(shù)當(dāng)中快速挖掘出對惡意代碼檢測有幫助的信息是整個系統(tǒng)的核心。惡意代碼有兩個非常典型的特征,一個是對計算機網(wǎng)絡(luò)的破壞性,另一個是本身的隱蔽性。因此,可以針對惡意代碼的這個特性,選取特這函數(shù),據(jù)此構(gòu)建向量空間,然后采用數(shù)據(jù)挖掘的方法做出最終判斷,達(dá)到檢測木馬病毒的目的?;跀?shù)據(jù)挖掘的計算機網(wǎng)絡(luò)木馬病毒檢測流程如圖5所示。
圖5 基于數(shù)據(jù)挖掘的計算機網(wǎng)絡(luò)木馬病毒檢測流程
圖5中的檢測流程主要由以下幾個部分組成:①預(yù)處理模塊,該模塊主要負(fù)責(zé)樣本的批量載入;②VMware模塊,該模塊能夠?qū)颖具M(jìn)行監(jiān)控,每個樣本執(zhí)行完畢后,VMware會恢復(fù)至初始狀態(tài);③跟蹤模塊,該模塊可以對指定的API函數(shù)進(jìn)行監(jiān)視,當(dāng)檢測到被定義的API后,檢測系統(tǒng)便會中斷;④數(shù)據(jù)挖掘模塊,這是檢測系統(tǒng)的決策核心。
2.3.1 API函數(shù)監(jiān)視的基本原理 程序調(diào)用的API函數(shù)可以通過如下方法獲得,即Windows Debus API或是API Hook技術(shù)。跟蹤模塊的核心是監(jiān)視程序調(diào)用的API函數(shù),然而,API Hook技術(shù)只能已知API原型的前提下才能實現(xiàn)。由于未公開的函數(shù)比較多,從而限制了API Hook技術(shù)的應(yīng)用。因此,只能采用Windows Debus API,獲取調(diào)用的API序列。Debus API可以簡單地理解為調(diào)試API,它可以加載一個程序,可也以將自身捆綁到正處于運行的程序上,由此為調(diào)試的進(jìn)行提供了便利,在調(diào)試時,能夠獲得映像基址、進(jìn)程ID以及引入地址等。若是某個事件與調(diào)試相關(guān),便會觸發(fā)調(diào)試器,監(jiān)控進(jìn)程隨之被激活,事件發(fā)生之后,調(diào)試器會快速響應(yīng),并對事件進(jìn)行處理,調(diào)試器與被調(diào)試進(jìn)程的交互由子模塊負(fù)責(zé),協(xié)助調(diào)試器實現(xiàn)訪問、進(jìn)程控制等功能。Windows SDK發(fā)布了大量的子模塊,其中大部來源于KERNEL22.dll。
2.3.2監(jiān)視步驟向檢測 系統(tǒng)內(nèi)輸入樣本,并啟動監(jiān)視程序,所有樣本的進(jìn)程線程被全部掛起;對被調(diào)試程序調(diào)用的庫文件Export table進(jìn)行分析,借此來獲取導(dǎo)出函數(shù),并對其它函數(shù)的入口地址進(jìn)行獲?。辉贠xCC處設(shè)置斷點,作為函數(shù)的入口地址,如果該位置處出現(xiàn)中斷及調(diào)試事件,則系統(tǒng)會對進(jìn)程進(jìn)行自動中斷,獲取調(diào)試進(jìn)程信息;對調(diào)試進(jìn)程進(jìn)行循環(huán)執(zhí)行,直至最終結(jié)束。
2.3.3函數(shù)調(diào)用攔截 在Windows系統(tǒng)當(dāng)中,可以采用如下方法來實現(xiàn)對進(jìn)程啟動操作的截獲,即修改SSDT,或是用shadow SSDT攔截函數(shù)。由于函數(shù)最終會被相應(yīng)的程序所調(diào)用。故此,可以判斷該程序是否為病毒進(jìn)程。SSDT與Windows中API導(dǎo)向的作用類似,它能夠幫助系統(tǒng)搜索到的指定的API地址。
2.3.4監(jiān)視函數(shù)的系統(tǒng)服務(wù) 在計算機系統(tǒng)當(dāng)中,對進(jìn)程的創(chuàng)建進(jìn)行監(jiān)視時,可以借助SSDT Hook技術(shù)來完成。幾乎所有的RING3進(jìn)程在創(chuàng)建時,都要對系統(tǒng)服務(wù)NtCreateProcessEX()進(jìn)行調(diào)用。而出于多線程安全性方面的考慮,可以通過MDL鎖住SSDT,在此基礎(chǔ)上完成修改。下面重點對NtCreateProcessEX()參數(shù)進(jìn)行詳細(xì)說明。OUTPHANDLE Process Handle是一個比較重要的參數(shù),該參數(shù)作為主要的作用是當(dāng)需要創(chuàng)建與RING3有關(guān)的進(jìn)程時,如果成功創(chuàng)建,則會返回HANDLE,由此能夠準(zhǔn)備捕捉到進(jìn)程的創(chuàng)建路徑。但必須指出的一點是,驅(qū)動程序本身并不具備獨立的進(jìn)程,其必須依附在調(diào)用程序的進(jìn)程當(dāng)中。因此,可以借助Section Handle來獲取File Object。
2.4.1挖掘工具 WEKA是一款具有開源架構(gòu)的系統(tǒng)應(yīng)用軟件,該軟件平臺是數(shù)據(jù)挖掘與機器學(xué)習(xí)最為常用的分析工具之一,以Java作為運行環(huán)境,能夠在大部分操作系統(tǒng)下工作,包含數(shù)據(jù)挖掘中常用的項目,如數(shù)據(jù)預(yù)處理、聚類分析、分類預(yù)測等等。
2.4.2交叉驗證 在進(jìn)行交叉驗證的過程中,采用k-fold,即將數(shù)據(jù)集以隨機的方式分為k個子集,選擇其中一個作為測試集,剩余的作為訓(xùn)練集,通過重復(fù)執(zhí)行,將平均結(jié)果作為測試結(jié)果。本次研究中,子集數(shù)確定為5,據(jù)此對全部數(shù)據(jù)進(jìn)行測試。
2.4.3向量空間 利用追蹤模塊,對API函數(shù)進(jìn)行捕獲,以此作為特征,建立網(wǎng)絡(luò)木馬病毒樣本的向量空間。當(dāng)木馬病毒當(dāng)中包含該API函數(shù)時,它的特征值為1,不包含時,其特征值為0,由此便可對網(wǎng)絡(luò)病毒進(jìn)行快速、準(zhǔn)確地檢測。
綜上所述,為確保計算機系統(tǒng)的安全、穩(wěn)定運行,必須對網(wǎng)絡(luò)病毒進(jìn)行有效防范。文章提出的基于數(shù)據(jù)挖掘的網(wǎng)絡(luò)病毒檢測系統(tǒng)能夠,在病毒檢測方面具有良好的應(yīng)用效果,能夠快速、準(zhǔn)確地完成病毒檢測。由此可見,該系統(tǒng)具有一定的推廣使用價值。未來一段時期,應(yīng)當(dāng)加大對數(shù)據(jù)挖掘技術(shù)的研究力度,在對現(xiàn)有技術(shù)進(jìn)行改進(jìn)和完善的基礎(chǔ)上,開發(fā)一些新的技術(shù),從而使能夠其更好地為計算機網(wǎng)絡(luò)病毒防范服務(wù)。