沈承東 宋波敏
1海軍計算技術研究所 北京 100841
2華中科技大學計算機學院 湖北 430074
本文通過分析一些常見的檢測方法,并通過分析其原理,來判斷各種方法的優勢和劣勢。因為各種新型惡意代碼的出現,在識別能力和處理量上,對于檢測程序都有了新的要求。伴隨著這些變化,一些更加智能化的檢測手段相繼出現。這些手段改進的一個主要目標,就在于將靜態的比對方法,通過知識庫中各個點間的相互聯系,甚至自動的獲取知識分析,來達到檢測的目的。這些方法的出現,一方面是應對新型惡意代碼的需要出現的,另一方面也是在各種資源成本與檢測效益間的平衡中發展起來的。
這是一種最常見的檢測方法,它用惡意代碼中特有的特征代碼檢測,這些字節序列是不太可能出現在正常文件中,通過查詢比對即可以檢測出一批惡意代碼。比如依據如下原則:抽取的代碼比較特殊,所以不大可能與普通正常程序代碼吻合。抽取的代碼要有適當長度,一方面保證特征代碼的惟一性,另一方面又不要保證有太大的空間。
例如KMP算法的時間復雜度為 O( m+n ), 如果待檢測的特征代碼個數為k,而特征代碼平均長度為M,待檢測代碼長度為N,則可以設系統資源消耗為Pay。


其最終的時間復雜度為 O( K·(M+N) ),
Pay=k(m+n)·α(α是一個穩定的系數,它與具體系統有關)。
可以看到,Pay(系統資源消耗)其隨著特征代碼量k的增加呈線性變化,其隨著k的增長線性增長。這種檢測方法它有一個弱點就是:現今隨著惡意代碼量呈指數級增長之勢,如果要保證安全性,那么配套就需要龐大的特征庫,這樣就造成檢測代碼的工作量,伴隨著特征庫的增大隨之放大。與此同時一些新型代碼采用了加殼,變形,多態等各種新技術來躲避查殺,這樣就更加加重了特征碼檢測的難度,因此單純依靠特征碼比對,已不足以應對新型代碼。并且在惡意代碼檢測方面,很重要的一點就是,做到早發現,早處置,就可以減少損失,但這種檢測方法屬于事后補救方式。同時整個檢測系統的可靠性,強烈依賴于特征庫的完整性,如果特征庫并沒有隨時更新,其面對新代碼也就無能為力。所以,這種方法伴隨著時代發展,已經不再很適合應對各種新情況了。
啟發式掃描技術檢測程序,實際上就是以特定方式實現對代碼行為的檢測,通過對代碼行為的觀測來推測代碼動機。從工作原理上可以分為靜態啟發以及動態啟發兩種。 啟發式實現檢測程序可以實現能夠分析自動文件代碼的邏輯結構,并判斷是否含有惡意程序特征,或者通過在一個虛擬的模擬執行環境中,通過模擬性質的執行代碼來判斷輸入其中的代碼其是否有惡意屬性,并最終決定處理動作。一般前者被稱為靜態代碼分析,而后者則被稱為動態啟發式。
其原理在于,惡意代碼與普通程序在啟動時,它們的行為存在明顯差異。利用這個區別,檢測程序就可以通過掃描程序的特征指令,并與一般的常規指令比較,觀察命中的條數綜合起來就可以判別代碼是否為惡意代碼,這種方法也可以作為特征碼識別的一種補充。與特征碼識別最大的不同就在于,這種方式判斷的依據在于代碼的行為特征,而非其他。
比如惡意代碼最初的指令卻極有可能是一些危險指令例如寫盤操作或者解碼指令,或者搜索某敏感路徑下的可執行程序等等,依據出現這些可疑行徑的情況進行分析,同專門的指令庫進行比較,則可以判定此代碼的惡意屬性。依靠專家經驗,可以建立一個惡意指令知識庫,那么如同特征碼庫一樣就可以通過定期更新的辦法維持對一些新型代碼的查殺能力。
靜態啟發式檢測,主要可以通過反匯編方式,實現在不執行代碼的情況下,通過核對病毒頭指令,來達到檢測的目的。因為主要查殺的目標在于代碼的最開始一段,這樣可以省去很多系統資源。
這種方法的資源消耗同特征碼識別相比類似,但是他的特征庫可以做的更小一些。對比特征庫動輒上萬的記錄,惡意指令庫要小上很多,作為一種補充措施它相比起來更加高效一些。但是由于完備性不夠,實用效果并不如動態啟發好,只適宜于用作補充措施。
動態啟發式的原理在于,最初可以假設并不知道某個程序是否帶有惡意代碼屬性,如此就可以先虛擬出一個執行環境,讓代碼在其中并模擬執行。如果是惡意代碼,代碼在模擬執行的時候,就會如期產生一些危險動作。這樣一來就可以通過探針發現。它的關鍵思想是,模擬實驗方法以及糾正思想。如圖1所示。

圖1 動態啟發式檢測示意圖
這種方法的一個關鍵思路,就是虛擬機制。可以是模擬執行動態監測,或者設置報警誘發裝置。它通過虛擬機技術來仿真內存和CPU以及文件系統和網絡連接進而模擬代碼的執行過程。又或者采用蜜罐技術設置陷阱門,進而誘發惡意行為而產生警報。這種方法由于代碼執行區間在虛擬機中,所以不會在真實環境中威脅用戶數據。
由于動態啟發式判斷技術具有許多其他檢測方法不可替代的優勢,故而仍然是現階段檢測未知病毒比較有效可靠的方法并得到了廣泛的應用。
這種方法檢測的原理在于,人們依靠對病毒行為規律分析和深入歸納總結,并結合安全專家判定惡意代碼的經驗歷史,可以提煉出惡意代碼識別規則知識庫通用規則,并依此模擬人類專家發現新病毒的機制,通過對各種程序執行的動作進行監視,并嘗試自動分析程序動作之間的邏輯關系,依靠知識庫的知識進行動作識別,以達到主動防御的目的。在具體的行為檢查方面,以檢測工具具體利用的方法不同,可以大致分為基于專家系統的檢測和基于神經網絡的檢測兩種。整個解決辦法的模型如圖2所示。

圖2 主動防御檢測模型
專家系統是一個智能計算機系統,它的知識庫依靠某個領域專家水平的知識與經驗,即能夠利用人類專家的行業知識和解決方法。亦即專家系統是一個具有大量的行業知識經驗的計算機系統,專家系統與傳統的計算機程序系統有著完全不同的體系結構,通常它由知識庫、推理機、知識獲取機制、解釋機制和人機接口等幾個基本獨立部分所組成。專家系統依靠知識庫和推理機,在用戶輸入后推理分析得出結論,并產生知識。而推理機用來將用戶輸入的信息與知識庫中各個規則進行匹配比較。這種方法應用到在惡意代碼檢測領域,病毒代碼即為輸入,由專家系統推理產生代碼的行為判定,如圖3所示。

圖3 專家系統檢測模型
專家系統的重點在于知識庫的維護方式和知識獲取機制。將知識庫里面的單條記錄確定為一個約束,再將模式定義為多個約束的集合,采用if-then產生式規則來描述知識規則,同時配合閥值控制最終的反應行為。
這種檢測方式運用神經網絡的自我學習能力,結合專家系統的推理機制,使得整個檢測系統更加智能化,從而具有了更強的自適應能力。神經網絡是一種依靠模擬動物神經網絡行為特征,來進行復雜信息處理的數學算法模型。
其本質在于模擬動物神經網絡的運行機制。依靠系統的復雜程度,通過調整內部大量節點之間相互關聯影響的關系,以提供的一批初始值來計算推理并輸出數據,通過分析掌握兩者之間的內在關聯,最終實現用新的用戶輸入數據來推算并輸出用戶結果,最終導致系統的識別能力不斷提高。依靠神經網絡的這種自我學習能力,將其擴展在惡意代碼檢測發現上面,即可以動態的適應各種新情況,由于現在的常規檢測算法推理能力不高,依靠神經網絡高度智能化的推理能力以及知識庫,就可以將對惡意代碼的識別能力提高不少。處理邏輯如圖4所示。

圖4 神經網絡檢測模型
但是現階段,基于神經網絡的代碼檢測面臨的問題導致似乎得不償失,一方面在于神經系統本身極其復雜,耗費了大量數據和計算。而且另一方面檢測過程中其固有的算法,難以產生全局性的結果,需要嚴格控制虛警率即誤報率,與此同時神經網絡本身的特點又容易產生另一個問題就是,在初始化時傳入的參數偏差,很容易導致訓練過度,并由此產生不會識別新樣本集的現象。但在長遠看來,神經網絡的這種自我學習能力和自我適應能力用于惡意代碼檢測非常合適,只要神經網絡本身的問題得到解決,這種檢測方法具有很強的實用價值。
惡意代碼因為有一定的傳播機制和發作機理,通過人工知識總結或者機器自我推理,就可以提取惡意代碼的語義特征。特征碼匹配和靜態啟發式對應這種方式,可以認為是一些孤立的單點集合,并沒有良好的組成連通圖。隨著技術的更新發展,動態啟發式和專家系統,就可以比較好的實現這種知識間的聯通和交流,但是數據的自我更新能力相比基于神經系統的檢測方法缺乏動態適應能力。
[1] 周瑞麗.基于專家系統的惡意代碼檢測.中國科學技術大學[學位論文].2009.
[2] 崔鵬.基于形式化語義的啟發式病毒檢測引擎研究.遼東學院學報(自然科學版).2008.
[3] 王海峰,段友祥.基于行為分析的病毒檢測引擎的改良研究.計算機應用.2004.
[4] 周瑞麗,潘劍鋒等.應用專家系統開發Windows惡意代碼檢測系統的研究.信息安全與通信保密.2009.
[5] SINGH P K;LAKHOTIN A Static verification of worm and virus behavior in binary executables using model checking 2003.