常艷
遼寧警官高等專科學校 遼寧 116023
惡意代碼是一種可以中斷或破壞計算機及網絡正常工作的程序或代碼。隨著計算機技術的發展,惡意代碼的實現技術也在不斷更新和升級,其技術主要集中在實現其隱蔽性,這樣才能避開反惡意代碼軟件的檢測,實現預定的破環目的。多態型惡意代碼是目前隱蔽性很強的一種惡意代碼,它是通過不斷改變自身代碼來實現隱蔽性,實現多態的方法各不相同,這樣大大增加了惡意代碼檢測的難度。
惡意代碼技術在不斷發展,惡意代碼的隱蔽性不斷增強,研發快速、有效的檢測平臺已是當務之急,這對于減少惡意代碼對網絡的破壞,或將破壞造成的損失減到最低有著很大的現實意義,可這并不是一件簡單的事情。由于不同惡意代碼具有不同的隱蔽特征,所以應該采用不同的檢測技術才有效。隨著惡意代碼隱蔽技術的升級,其檢測技術也在不斷改變。
特征碼是惟一確定某種惡意代碼的一段字符序列,通常稱為惡意代碼的“指紋”,是區分惡意代碼的標志。反惡意代碼軟件通過特征碼鑒別惡意代碼;惡意代碼本身也通過特征碼鑒別文件是否已經被感染,否則就會重復感染文件并使文件長度無限變大,這樣很容易被發覺。特征碼檢測技術實現起來相對簡單,對大多惡意代碼比較有效,但特征碼提取需要人工完成,費時費力,而且對于未知的特征庫中沒有的惡意代碼無能為力。由于多態型惡意代碼是通過不斷改變代碼實現隱蔽,所以使用特征碼檢測技術將失效。
校驗檢測法對系統里的可執行文件計算后得出的比較值,這些值通常保存在數據庫里,當進行校驗搜索時,將重新計算校驗,并把結果和數據庫里的原始值做比較,當校驗異常,檢測工具會發出警報。多態型惡意代碼通常采用變形、加密等手段使每一次感染的代碼形式不一樣,可以通過校驗的方法監控。但是文件發生改變并不意味一定感染了惡意代碼,因此可能出現誤報或漏報現象,并且該方法不能識別惡意代碼種類,不能報出惡意代碼名稱,對一些隱蔽性強的惡意代碼無法檢測。
利用惡意代碼特有的行為特征來監測惡意代碼。通過對惡意代碼多年的觀察、研究,有一些行為是惡意代碼的共同行為,并且具有正常進程所不具備的特征。當程序運行時,監視其行為,如果發現惡意代碼特征性行為,立即報警。該檢測法對多態型惡意代碼檢測比較有效,在檢測過程中,無論代碼體怎么改變,只要其行為符合某種惡意代碼行為特征,將報警。缺點是誤報率比較高、不能識別惡意代碼名稱及類型、實現監測有一定難度。
虛擬機檢測主要針對多態型惡意代碼,通過程序來模擬CPU的執行,像真正的CPU一樣取指、譯碼、執行,可以模擬指令在真正CPU上執行的結果。通過給出一組機器碼序列,虛擬機會自動從中取出第一條指令操作碼部分,判斷操作碼類型和尋址方式以確定指令長度,然后在相應函數中執行該指令,并根據執行后結果確定下一條指令的位置,如此反復執行直到某個特定情況結束工作。當惡意軟件使用加密/加殼這類變形技術時,若不解密,普通的特征碼掃描無法檢測。而使用虛擬機檢測技術可實現自動解密,虛擬機從文件入口點處一條一條的取指令執行,直至解密段指令執行完成,此時文件解密完畢,可以進行特征檢測。虛擬機檢測技術的主要優點是可以有效檢測通常的加密變形的惡意代碼,其缺點是仍然需要配合特征掃描,因此無法檢測未知的惡意代碼,并且有的變形代碼可以使用一些特殊的指令來繞過虛擬機檢測。
惡意代碼傳播到目標后,自身代碼和結構在空間上、時間上產生不同的變化,惡意代碼的這種技術被稱為多態。從上世紀 90年代第一個多態惡意代碼出現從到現在,多態技術在不斷的發展,根據其代碼的演化分類,可以將多態型惡意代碼分為四類:
(1)加密階段
這是惡意代碼變形的初級階段,其目的在于隱藏代碼體,它以一個不變的解密器開始,其后的惡意代碼體利用加密進行保護。必須要指出的一點是,并不是所有的加密惡意代碼都具有變形特性的,只有那些每次使用不同加密密鑰的加密惡意代碼才具有變形特征。缺點是加密器代碼仍然是不變的,可以作為特征碼檢測。
(2)單變形階段
這個階段是在加密階段基礎上發展而來的,其最大改進點在于對解密器進行保護,這也正是針對特征碼技術的一種設計方法,它的目的在于使得作為特征的解密器也隱藏起來,讓反惡意代碼軟件無從下手,并且在這個階段變形機已經出現,其缺點是只能生成有限種解密器變體。
(3)準變形階段
這個階段最大變化在于真正的變形機的出現,因為它可以生成足夠多的變體,而且不同變體之間也沒有可以利用的特征碼,這就足以使得利用傳統的特征碼技術對這種惡意代碼進行檢測理論上的可能性不存在了,其加密從過去單層加密發展到了多層加密,同時采用隨機解密算法。但是,該類算法在正常程序當中使用很少,經常被認為是可疑代碼,然后結合虛擬機技術對代碼進行模擬運行,以確定其是否為惡意代碼程序。
(4)全變形階段
這個階段的變形機能夠對惡意代碼體進行變形,不在保持惡意代碼的結構,變體之間無論結構還是代碼都是完全不同的,克服了前三個階段惡意代碼程序都是靜態的缺點,因為在前三個階段的變體中,如果解密器被破譯,解密后得到的病毒體代碼都是一樣的。
從其分類可以會看出,惡意代碼技術在不斷的發展,并且多態的發展將大大的增強了惡意代碼檢測的難度。
根據多態技術分類可以總體將前三個階段定義為它變階段,可以將第四個階段定義為自變階段。它變階段主要依靠變形機對惡意代碼整體為對象進行結構變換;自變階段是對惡意代碼的內部指令進行變換,但保證執行結果不發生改變,其主要通過代碼交換、壓縮、擴展、替換、花指令等方法實現,并且多種方法可以同時使用,已達同一功能的惡意代碼其代碼體各不相同,從而躲避特征碼技術的檢測。
垃圾指令就是在程序中加入不影響程序執行效果的一個字節或多個字節。其原則是:
(1)不能改變有用的寄存器和標志的狀態;
(2)不能改變程序中的數據;
(3)不能改變內存的內容。
總之,不可以干擾程序的正常執行。
如:
Add eax , 3
Sub eax , 3
多態變形很重要的一個工作就是變換指令的位置,僅這個特性就可以使特征碼檢測失效,例如:
VStatr:
I2 call start ;[1]
Statr:
I2 pop ebx ;[2]
I3 sub ebx , offser start ;[3]
I3 mov ecx , Vend-EncryptStart ;[4]
I3 lea edi , [offsrt EncryptStart+ebx] ;[5]
DeryptLoop:
I3 xor [edi] , byte prt ooh ;[6]
DeryptKey =byte prt $-1 ;[7]
I3 inc edi ;[8]
I2 loop DeryptLoop ;[9]
EncryptStart:
Call GetKBase
Call GetAPIz
Call InfectThread
Ret2Host:
Push HosrEntry[ebx]
Ret
通過指令交換的方法,可知上面[1]-[9]可排列的指令具有如下規則:
指令[1]-[3]順序不能改變;
指令[4]可以在VStart ,DecryptLoop之間的任何地方;
指令[5]必須在指令[3]之后,指令[6]之前;
指令[6]-[9]順序不能改變;
根據以上原則,可能改變采用指令序列是:
(1)123456789
(2)412356789
(3)142356789
(4)124356789
(5)123546789
替換指令就是把指令變換為相同功能的指令,例如:

以上指令可以實現相同的功能,在程序實現過程中可以隨意的選擇,使程序代碼各不相同。
壓縮指令就是把已知的復雜指令集轉換為單條指令,例如:
(1) Mov [edi] , eax

(2) Push edx

擴展指令其原理和壓縮指令相反,時間單條指令展開為復雜的指令集,如:


通過比較可以看出,源代碼只是簡單的兩條指令,源代碼只是經過指令擴展和填充了垃圾指令之后,變得復雜難懂,所以利用簡單的特征碼檢測技術已經很難檢測到。
通過對變形技術的分析會發現,檢測多態惡意代碼使用常規的特征碼檢測方法將失效,只能使用行為檢測和虛擬機檢測法,但是由于軟硬件資源的限制,快速有效的檢測到多態惡意代碼將是一個有待繼續研究的難題。
[1] 祝恩,殷建平,蔡志平,趙建民.計算機病毒自動變形機理的分析.計算機工程與科學.2002.
[2] 米佳,侯麗波,黃波.公共信息網絡安全管理教程.大連理工出版社.2008.
[3] 張勐,楊大全,辛義忠,趙德平.計算機病毒變形技術研究.沈陽工業大學學報.2004.
[4] 孫淑華,馬恒太,張楠,卿斯漢,王曉翠.后門植入、隱藏與檢測技術研究.計算機應用研究.2004.