沈承東 宋波敏
1海軍計算技術(shù)研究所 北京 100841
2華中科技大學(xué)計算機(jī)學(xué)院 湖北 430074
本文通過分析一些常見的檢測方法,并通過分析其原理,來判斷各種方法的優(yōu)勢和劣勢。因為各種新型惡意代碼的出現(xiàn),在識別能力和處理量上,對于檢測程序都有了新的要求。伴隨著這些變化,一些更加智能化的檢測手段相繼出現(xiàn)。這些手段改進(jìn)的一個主要目標(biāo),就在于將靜態(tài)的比對方法,通過知識庫中各個點間的相互聯(lián)系,甚至自動的獲取知識分析,來達(dá)到檢測的目的。這些方法的出現(xiàn),一方面是應(yīng)對新型惡意代碼的需要出現(xiàn)的,另一方面也是在各種資源成本與檢測效益間的平衡中發(fā)展起來的。
這是一種最常見的檢測方法,它用惡意代碼中特有的特征代碼檢測,這些字節(jié)序列是不太可能出現(xiàn)在正常文件中,通過查詢比對即可以檢測出一批惡意代碼。比如依據(jù)如下原則:抽取的代碼比較特殊,所以不大可能與普通正常程序代碼吻合。抽取的代碼要有適當(dāng)長度,一方面保證特征代碼的惟一性,另一方面又不要保證有太大的空間。
例如KMP算法的時間復(fù)雜度為 O( m+n ), 如果待檢測的特征代碼個數(shù)為k,而特征代碼平均長度為M,待檢測代碼長度為N,則可以設(shè)系統(tǒng)資源消耗為Pay。
其最終的時間復(fù)雜度為 O( K·(M+N) ),
Pay=k(m+n)·α(α是一個穩(wěn)定的系數(shù),它與具體系統(tǒng)有關(guān))。
可以看到,Pay(系統(tǒng)資源消耗)其隨著特征代碼量k的增加呈線性變化,其隨著k的增長線性增長。這種檢測方法它有一個弱點就是:現(xiàn)今隨著惡意代碼量呈指數(shù)級增長之勢,如果要保證安全性,那么配套就需要龐大的特征庫,這樣就造成檢測代碼的工作量,伴隨著特征庫的增大隨之放大。與此同時一些新型代碼采用了加殼,變形,多態(tài)等各種新技術(shù)來躲避查殺,這樣就更加加重了特征碼檢測的難度,因此單純依靠特征碼比對,已不足以應(yīng)對新型代碼。并且在惡意代碼檢測方面,很重要的一點就是,做到早發(fā)現(xiàn),早處置,就可以減少損失,但這種檢測方法屬于事后補(bǔ)救方式。同時整個檢測系統(tǒng)的可靠性,強(qiáng)烈依賴于特征庫的完整性,如果特征庫并沒有隨時更新,其面對新代碼也就無能為力。所以,這種方法伴隨著時代發(fā)展,已經(jīng)不再很適合應(yīng)對各種新情況了。
啟發(fā)式掃描技術(shù)檢測程序,實際上就是以特定方式實現(xiàn)對代碼行為的檢測,通過對代碼行為的觀測來推測代碼動機(jī)。從工作原理上可以分為靜態(tài)啟發(fā)以及動態(tài)啟發(fā)兩種。 啟發(fā)式實現(xiàn)檢測程序可以實現(xiàn)能夠分析自動文件代碼的邏輯結(jié)構(gòu),并判斷是否含有惡意程序特征,或者通過在一個虛擬的模擬執(zhí)行環(huán)境中,通過模擬性質(zhì)的執(zhí)行代碼來判斷輸入其中的代碼其是否有惡意屬性,并最終決定處理動作。一般前者被稱為靜態(tài)代碼分析,而后者則被稱為動態(tài)啟發(fā)式。
其原理在于,惡意代碼與普通程序在啟動時,它們的行為存在明顯差異。利用這個區(qū)別,檢測程序就可以通過掃描程序的特征指令,并與一般的常規(guī)指令比較,觀察命中的條數(shù)綜合起來就可以判別代碼是否為惡意代碼,這種方法也可以作為特征碼識別的一種補(bǔ)充。與特征碼識別最大的不同就在于,這種方式判斷的依據(jù)在于代碼的行為特征,而非其他。
比如惡意代碼最初的指令卻極有可能是一些危險指令例如寫盤操作或者解碼指令,或者搜索某敏感路徑下的可執(zhí)行程序等等,依據(jù)出現(xiàn)這些可疑行徑的情況進(jìn)行分析,同專門的指令庫進(jìn)行比較,則可以判定此代碼的惡意屬性。依靠專家經(jīng)驗,可以建立一個惡意指令知識庫,那么如同特征碼庫一樣就可以通過定期更新的辦法維持對一些新型代碼的查殺能力。
靜態(tài)啟發(fā)式檢測,主要可以通過反匯編方式,實現(xiàn)在不執(zhí)行代碼的情況下,通過核對病毒頭指令,來達(dá)到檢測的目的。因為主要查殺的目標(biāo)在于代碼的最開始一段,這樣可以省去很多系統(tǒng)資源。
這種方法的資源消耗同特征碼識別相比類似,但是他的特征庫可以做的更小一些。對比特征庫動輒上萬的記錄,惡意指令庫要小上很多,作為一種補(bǔ)充措施它相比起來更加高效一些。但是由于完備性不夠,實用效果并不如動態(tài)啟發(fā)好,只適宜于用作補(bǔ)充措施。
動態(tài)啟發(fā)式的原理在于,最初可以假設(shè)并不知道某個程序是否帶有惡意代碼屬性,如此就可以先虛擬出一個執(zhí)行環(huán)境,讓代碼在其中并模擬執(zhí)行。如果是惡意代碼,代碼在模擬執(zhí)行的時候,就會如期產(chǎn)生一些危險動作。這樣一來就可以通過探針發(fā)現(xiàn)。它的關(guān)鍵思想是,模擬實驗方法以及糾正思想。如圖1所示。
圖1 動態(tài)啟發(fā)式檢測示意圖
這種方法的一個關(guān)鍵思路,就是虛擬機(jī)制??梢允悄M執(zhí)行動態(tài)監(jiān)測,或者設(shè)置報警誘發(fā)裝置。它通過虛擬機(jī)技術(shù)來仿真內(nèi)存和CPU以及文件系統(tǒng)和網(wǎng)絡(luò)連接進(jìn)而模擬代碼的執(zhí)行過程。又或者采用蜜罐技術(shù)設(shè)置陷阱門,進(jìn)而誘發(fā)惡意行為而產(chǎn)生警報。這種方法由于代碼執(zhí)行區(qū)間在虛擬機(jī)中,所以不會在真實環(huán)境中威脅用戶數(shù)據(jù)。
由于動態(tài)啟發(fā)式判斷技術(shù)具有許多其他檢測方法不可替代的優(yōu)勢,故而仍然是現(xiàn)階段檢測未知病毒比較有效可靠的方法并得到了廣泛的應(yīng)用。
這種方法檢測的原理在于,人們依靠對病毒行為規(guī)律分析和深入歸納總結(jié),并結(jié)合安全專家判定惡意代碼的經(jīng)驗歷史,可以提煉出惡意代碼識別規(guī)則知識庫通用規(guī)則,并依此模擬人類專家發(fā)現(xiàn)新病毒的機(jī)制,通過對各種程序執(zhí)行的動作進(jìn)行監(jiān)視,并嘗試自動分析程序動作之間的邏輯關(guān)系,依靠知識庫的知識進(jìn)行動作識別,以達(dá)到主動防御的目的。在具體的行為檢查方面,以檢測工具具體利用的方法不同,可以大致分為基于專家系統(tǒng)的檢測和基于神經(jīng)網(wǎng)絡(luò)的檢測兩種。整個解決辦法的模型如圖2所示。
圖2 主動防御檢測模型
專家系統(tǒng)是一個智能計算機(jī)系統(tǒng),它的知識庫依靠某個領(lǐng)域?qū)<宜降闹R與經(jīng)驗,即能夠利用人類專家的行業(yè)知識和解決方法。亦即專家系統(tǒng)是一個具有大量的行業(yè)知識經(jīng)驗的計算機(jī)系統(tǒng),專家系統(tǒng)與傳統(tǒng)的計算機(jī)程序系統(tǒng)有著完全不同的體系結(jié)構(gòu),通常它由知識庫、推理機(jī)、知識獲取機(jī)制、解釋機(jī)制和人機(jī)接口等幾個基本獨立部分所組成。專家系統(tǒng)依靠知識庫和推理機(jī),在用戶輸入后推理分析得出結(jié)論,并產(chǎn)生知識。而推理機(jī)用來將用戶輸入的信息與知識庫中各個規(guī)則進(jìn)行匹配比較。這種方法應(yīng)用到在惡意代碼檢測領(lǐng)域,病毒代碼即為輸入,由專家系統(tǒng)推理產(chǎn)生代碼的行為判定,如圖3所示。
圖3 專家系統(tǒng)檢測模型
專家系統(tǒng)的重點在于知識庫的維護(hù)方式和知識獲取機(jī)制。將知識庫里面的單條記錄確定為一個約束,再將模式定義為多個約束的集合,采用if-then產(chǎn)生式規(guī)則來描述知識規(guī)則,同時配合閥值控制最終的反應(yīng)行為。
這種檢測方式運(yùn)用神經(jīng)網(wǎng)絡(luò)的自我學(xué)習(xí)能力,結(jié)合專家系統(tǒng)的推理機(jī)制,使得整個檢測系統(tǒng)更加智能化,從而具有了更強(qiáng)的自適應(yīng)能力。神經(jīng)網(wǎng)絡(luò)是一種依靠模擬動物神經(jīng)網(wǎng)絡(luò)行為特征,來進(jìn)行復(fù)雜信息處理的數(shù)學(xué)算法模型。
其本質(zhì)在于模擬動物神經(jīng)網(wǎng)絡(luò)的運(yùn)行機(jī)制。依靠系統(tǒng)的復(fù)雜程度,通過調(diào)整內(nèi)部大量節(jié)點之間相互關(guān)聯(lián)影響的關(guān)系,以提供的一批初始值來計算推理并輸出數(shù)據(jù),通過分析掌握兩者之間的內(nèi)在關(guān)聯(lián),最終實現(xiàn)用新的用戶輸入數(shù)據(jù)來推算并輸出用戶結(jié)果,最終導(dǎo)致系統(tǒng)的識別能力不斷提高。依靠神經(jīng)網(wǎng)絡(luò)的這種自我學(xué)習(xí)能力,將其擴(kuò)展在惡意代碼檢測發(fā)現(xiàn)上面,即可以動態(tài)的適應(yīng)各種新情況,由于現(xiàn)在的常規(guī)檢測算法推理能力不高,依靠神經(jīng)網(wǎng)絡(luò)高度智能化的推理能力以及知識庫,就可以將對惡意代碼的識別能力提高不少。處理邏輯如圖4所示。
圖4 神經(jīng)網(wǎng)絡(luò)檢測模型
但是現(xiàn)階段,基于神經(jīng)網(wǎng)絡(luò)的代碼檢測面臨的問題導(dǎo)致似乎得不償失,一方面在于神經(jīng)系統(tǒng)本身極其復(fù)雜,耗費了大量數(shù)據(jù)和計算。而且另一方面檢測過程中其固有的算法,難以產(chǎn)生全局性的結(jié)果,需要嚴(yán)格控制虛警率即誤報率,與此同時神經(jīng)網(wǎng)絡(luò)本身的特點又容易產(chǎn)生另一個問題就是,在初始化時傳入的參數(shù)偏差,很容易導(dǎo)致訓(xùn)練過度,并由此產(chǎn)生不會識別新樣本集的現(xiàn)象。但在長遠(yuǎn)看來,神經(jīng)網(wǎng)絡(luò)的這種自我學(xué)習(xí)能力和自我適應(yīng)能力用于惡意代碼檢測非常合適,只要神經(jīng)網(wǎng)絡(luò)本身的問題得到解決,這種檢測方法具有很強(qiáng)的實用價值。
惡意代碼因為有一定的傳播機(jī)制和發(fā)作機(jī)理,通過人工知識總結(jié)或者機(jī)器自我推理,就可以提取惡意代碼的語義特征。特征碼匹配和靜態(tài)啟發(fā)式對應(yīng)這種方式,可以認(rèn)為是一些孤立的單點集合,并沒有良好的組成連通圖。隨著技術(shù)的更新發(fā)展,動態(tài)啟發(fā)式和專家系統(tǒng),就可以比較好的實現(xiàn)這種知識間的聯(lián)通和交流,但是數(shù)據(jù)的自我更新能力相比基于神經(jīng)系統(tǒng)的檢測方法缺乏動態(tài)適應(yīng)能力。
[1] 周瑞麗.基于專家系統(tǒng)的惡意代碼檢測.中國科學(xué)技術(shù)大學(xué)[學(xué)位論文].2009.
[2] 崔鵬.基于形式化語義的啟發(fā)式病毒檢測引擎研究.遼東學(xué)院學(xué)報(自然科學(xué)版).2008.
[3] 王海峰,段友祥.基于行為分析的病毒檢測引擎的改良研究.計算機(jī)應(yīng)用.2004.
[4] 周瑞麗,潘劍鋒等.應(yīng)用專家系統(tǒng)開發(fā)Windows惡意代碼檢測系統(tǒng)的研究.信息安全與通信保密.2009.
[5] SINGH P K;LAKHOTIN A Static verification of worm and virus behavior in binary executables using model checking 2003.