《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于動(dòng)態(tài)指令基因的病毒防護(hù)方法研究
基于動(dòng)態(tài)指令基因的病毒防護(hù)方法研究
來(lái)源:電子技術(shù)應(yīng)用2012年第10期
白 杰
光束(北京)國(guó)際工程技術(shù)研究院有限公司,北京100083
摘要: 提出基于動(dòng)態(tài)指令基因的病毒防護(hù)模型。讀取被檢測(cè)程序運(yùn)行過(guò)程中在處理器以及存儲(chǔ)器中的數(shù)據(jù)流,通過(guò)滑動(dòng)窗口實(shí)時(shí)動(dòng)態(tài)掃描該數(shù)據(jù)流,計(jì)算出程序指令基因(有效指令結(jié)構(gòu)的指紋數(shù)據(jù)),將程序指令基因與預(yù)置的破壞性指令數(shù)據(jù)庫(kù)進(jìn)行散列運(yùn)算,從而識(shí)別是否為病毒程序。此模型解決了目前世界上無(wú)法達(dá)到與程序同步執(zhí)行過(guò)程中的實(shí)時(shí)動(dòng)態(tài)檢測(cè)的問(wèn)題,在防御計(jì)算機(jī)病毒實(shí)驗(yàn)過(guò)程中取得了較好的應(yīng)用效果。
中圖分類號(hào): TP309;TP393.08
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)10-0143-04
Research of gene virus protection method based on the dynamic instruction
Bai Jie
Light Beams (Beijing) International Engineering Technology Research Institute Co., Ltd.; China, Beijing 100083, China
Abstract: A program is identified a virus program by the method, which is reading the data stream of the detected program performed in processor and memory through a sliding window, and scanning the data stream real-time dynamically, and then calculating the program instruction gene(the fingerprint data of effective command structure), finally the program instructions gene hash operating with preset destructive instruction database. This model solves the present world′s problem which is the simultaneously real-time dynamic testing in the process of program implementing cannot be achieved. The effect of this model in the course of the anti-virus experiment is good.
Key words : virus detection; instruction gene; dynamic instruction; instruction execution characteristics of structural fingerprints; execution characteristics

    在互聯(lián)網(wǎng)高速發(fā)展的今天,網(wǎng)絡(luò)通信和網(wǎng)絡(luò)交易已經(jīng)成為日常生活不可分割的一部分。但病毒生成技術(shù)的提高,已經(jīng)嚴(yán)重影響到世界通信安全和國(guó)家的經(jīng)濟(jì)命脈。早期特征碼技術(shù)已經(jīng)無(wú)法單獨(dú)應(yīng)對(duì)現(xiàn)在的計(jì)算機(jī)病毒。為了解決此問(wèn)題,近些年國(guó)際上提出了依據(jù)程序行為識(shí)別病毒的技術(shù)。其原理就是監(jiān)控程序的行為,將程序行為與有害程序行為數(shù)據(jù)庫(kù)進(jìn)行比較,判斷被監(jiān)控程序是否為病毒。目前為了提高識(shí)別病毒的精度,減少誤報(bào)和漏報(bào)情況,各國(guó)研究人員從不同的角度,定義程序的行為數(shù)據(jù)和獲取行為數(shù)據(jù)的方法,設(shè)置了不同行為數(shù)據(jù)類型的有害行為數(shù)據(jù)庫(kù),但程序仍然存在很大的不穩(wěn)定性、誤識(shí)別率,且嚴(yán)重依賴系統(tǒng)并發(fā)資源。

 本文提出的利用程序被執(zhí)行過(guò)程中的有效指令基因判斷病毒的模型摒棄了目前占主流地位的“通過(guò)獲取程序靜態(tài)行為”的思路,通過(guò)運(yùn)算出程序被執(zhí)行過(guò)程中的動(dòng)態(tài)指令基因達(dá)到精確識(shí)別病毒的目的,該模型突破了目前只能依靠“程序靜態(tài)行為”分析病毒方法,以及目前無(wú)法在程序被執(zhí)行過(guò)程中達(dá)到同步且動(dòng)態(tài)實(shí)時(shí)監(jiān)控的目標(biāo),并取得了理想的效果,克服了互聯(lián)網(wǎng)防御病毒的技術(shù)障礙。
1 程序動(dòng)態(tài)指令基因防御病毒的系統(tǒng)模型
   通過(guò)滑動(dòng)窗口實(shí)時(shí)動(dòng)態(tài)掃描被檢測(cè)程序運(yùn)行過(guò)程中在處理器以及存儲(chǔ)器中的數(shù)據(jù)流,計(jì)算出程序指令基因(有效指令結(jié)構(gòu)的指紋數(shù)據(jù))。
1.1 獲取待檢測(cè)程序被執(zhí)行過(guò)程中的數(shù)據(jù)流
    獲取待檢測(cè)程序運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù)并將之輸出。使用函數(shù)createtoolhelp32snapshot()創(chuàng)建內(nèi)存快照;將返回句柄傳遞給函數(shù)process32first(),函數(shù)process32next()遍歷內(nèi)存中的進(jìn)程,遇到待檢測(cè)程序的進(jìn)程時(shí),保存其進(jìn)程id;用函數(shù)openprocess()打開(kāi)該進(jìn)程,獲得該進(jìn)程的句柄;用函數(shù)readprocessmemory()讀取該進(jìn)程句柄;獲得待檢測(cè)程序運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù)。圖1是程序的內(nèi)存數(shù)據(jù),標(biāo)示的代碼就是有效指令代碼(指令基因)。

1.2 有效指令基因分析
    利用滑動(dòng)窗口動(dòng)態(tài)掃描程序的有效指令基因數(shù)據(jù),如圖2、圖3所示。定義該3個(gè)應(yīng)用程序?yàn)椋篍XE1、EXE2、EXE3,指令基因碼分別是:EXE1=[a1,a2,a3,a4,a5,a6,a7…an,a(n+1)]; EXE2=[a1,a0,a02,a3,a02,a6,a7…an,a(n+1)];EXE3=[a1,a06,a2,a3,a08,a6,a7…an, a(n+1)];采用“分段式多指針位移算法”將待掃描數(shù)據(jù)進(jìn)行不間斷式取點(diǎn)分段,設(shè)定多項(xiàng)指針,通過(guò)指針段內(nèi)位移,對(duì)數(shù)據(jù)進(jìn)行掃描,在實(shí)現(xiàn)過(guò)程中采用線程結(jié)構(gòu)。

    比較3個(gè)程序的功能和執(zhí)行結(jié)果,得出:K=EXE1=EXE2=EXE3。分別考察EXE1、EXE2和EXE3,得出(a1)、(a2,a3)、(a6,a7)、an,a(n+1)是有效的基因序列,其余的是相對(duì)于執(zhí)行結(jié)果無(wú)效代碼,也就是對(duì)于特定的K,其指令元數(shù)據(jù)序列片段“(a1)、(a2,a3)、(a6,a7)、an,a(n+1)” 是穩(wěn)定的。
    被截獲的待檢測(cè)程序能夠完成特定功能或結(jié)果的指令元數(shù)據(jù)序列為源序列。所有源序列的集合:E={e1,e2,e3,&hellip;,en,e(n+1)} ,其中e1,e2,e3,&hellip;等為具體的源序列,n為正整數(shù)。在系統(tǒng)S中,產(chǎn)生的源序列v1,v2,&hellip;,vi,就是待檢測(cè)程序在系統(tǒng)S中的蹤跡,其中vi&isin;E,i為正整數(shù),并且i&le;n,每個(gè)源序列有時(shí)間性和執(zhí)行性為C(vi),指令執(zhí)行按時(shí)間排序,即對(duì)所有的i&ge;1,C(vi)<C(vi+1);假設(shè)執(zhí)行性為O(vi),表示指令的執(zhí)行性,用pid表示進(jìn)程,則O(vi)&isin;pid。對(duì)任意一個(gè)進(jìn)程pi,其指令序列v1,i1,v2,i2,&hellip;,vi,ii,vi+1,ii+1。其中,i1,&hellip;&hellip;,ii+1分別對(duì)應(yīng)指令結(jié)果v1,v2,&hellip;,vi+1的執(zhí)行結(jié)果,進(jìn)程pi對(duì)應(yīng)的指令序列為進(jìn)程蹤跡??梢?jiàn),pi的進(jìn)程蹤跡是待檢測(cè)程序在系統(tǒng)S中蹤跡的子串。假設(shè)被檢測(cè)程序在正常運(yùn)行時(shí)產(chǎn)生的源序列為:V=v1,v2,&hellip;,vm(m&ge;k),則V可以看作由被檢測(cè)程序在系統(tǒng)S中的每一個(gè)進(jìn)程的執(zhí)行過(guò)程合并而成。按執(zhí)行的時(shí)間性將每一個(gè)進(jìn)程的子執(zhí)行過(guò)程合并排列,形成被檢測(cè)程序在正常運(yùn)行時(shí)產(chǎn)生的審計(jì)源序列V。假設(shè)被檢測(cè)程序運(yùn)行時(shí)有兩個(gè)進(jìn)程,則V有兩個(gè)子串記為V1⊙V2。設(shè)P為程序指令元,其中存儲(chǔ)的典型指令元序列或片斷以源序列V為基礎(chǔ),可以采用滑動(dòng)窗口技術(shù)獲得。假設(shè)k為滑動(dòng)窗口大小,則: P={(si,si+1,&hellip;,sj)|si,&hellip;,sj&isin;E,i&ge;1,j&le;m,j-i+1=k,si=vi,si+1=vi+1,&hellip;,sj=vj},其中m為源序列V的長(zhǎng)度,可見(jiàn),程序指令元P中存儲(chǔ)的是源序列V的子集[1]。
    設(shè)EXE1的有效指令全集是F(1),EXE2的有效指令全集是F(2),EXE3的有效指令全集是F(3),其中,F(xiàn)(1)&isin;F,F(xiàn)(2)&isin;F,F(xiàn)(3)&isin;F,F(xiàn)為包括F(1)、F(2)和F(3)的有效指令集。則,F(xiàn)(1)、F(2)、F(3)就是被檢測(cè)的程序的數(shù)據(jù)源,它們分別為不同的源序列V,是被檢測(cè)的對(duì)象。也即,通過(guò)預(yù)先定義的程序指令元:VF={y1,y2,y3&hellip;yn,y(n+1)},將VF中的元素分別與數(shù)據(jù)源F(1)、F(2)、F(3)進(jìn)行差異運(yùn)算,即可實(shí)現(xiàn)被檢測(cè)程序EXE1、EXE2、EXE3的執(zhí)行檢測(cè)。
    采用滑動(dòng)窗口、函數(shù)計(jì)算方式順序獲取待檢測(cè)程序中能夠完成特定功能或結(jié)果的指令元數(shù)據(jù)。假設(shè)k為滑動(dòng)窗口的大小,被監(jiān)控程序在運(yùn)行時(shí)產(chǎn)生的源序列V:v1,v2,&hellip;,vm(m&ge;k),用滑動(dòng)窗口在源序列V上滑動(dòng),則滑動(dòng)窗口內(nèi)的k個(gè)事件序列(vi,vi+1,&hellip;,vi+k-1)即為待檢測(cè)指令元數(shù)據(jù)序列。在不同的實(shí)例中,滑動(dòng)窗口的大小k,或者所述指令元數(shù)據(jù)序列的長(zhǎng)度是不同的,比較典型的k為7~12,本文的k取值為10,如圖3所示。

1.3 形成病毒指令基因數(shù)據(jù)庫(kù)
     v1、v2、v3、v4為具有相同或相似破壞方式的同一族已知病毒程序。
    病毒程序v1的內(nèi)存數(shù)據(jù)00,01,h1,44,b1,a1,33,c1,bw,0i,22,8i,11,2s,yy。
    病毒程序v2的內(nèi)存數(shù)據(jù)00,cc,ae,44,b1,q3,33,c1,kh,al,22,8i,11,s3,yy。
    病毒程序v3的內(nèi)存數(shù)據(jù)00,2c,3e,44,b1,w3,33,c1,nh,a0,22,8i,11,l3,yy。
    病毒程序v4的內(nèi)存數(shù)據(jù)00,24,3o,44,b1,wl,33,c1,0h,ui,22,8i,11,4n,yy。
    將這些已知病毒程序的內(nèi)存數(shù)據(jù)相互間具有相同或相似的部分提取出來(lái),其中,該類病毒程序運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù)相互間具有相同的部分:00\44,b1\33,c1\22,8i\,該相同部分的有序排列表示為:#00#44,b1#33,c1#22,8i#。該類病毒運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù)相互間具有相似的部分是:病毒程序v1的內(nèi)存數(shù)據(jù)末尾部分(11,2s,yy)相似于病毒v2的內(nèi)存數(shù)據(jù)末尾部分(11,s3,yy)相似于病毒v3的內(nèi)存數(shù)據(jù)末尾部分(11,l3,yy)相似于病毒程序v4的內(nèi)存數(shù)據(jù)末尾部分(11,4n,yy),該相似部分可用#11,**,yy#表示。符號(hào)&ldquo;#&rdquo;代表相同內(nèi)存數(shù)據(jù)以外的內(nèi)存數(shù)據(jù),符號(hào)&ldquo;*&rdquo;代表相似內(nèi)存數(shù)據(jù)中的不同部分。將#00#44,b1#33,c1#22,8i#存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù);將#11,**,yy#存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)。病毒的運(yùn)行特征數(shù)據(jù)是將已知病毒程序運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù)相互間具有相同或相似的部分提取出來(lái),且按序排列進(jìn)行存儲(chǔ)形成病毒指令基因數(shù)據(jù)庫(kù)。
2 具體應(yīng)用描述
    無(wú)論是待檢測(cè)程序還是病毒程序,其運(yùn)行特征數(shù)據(jù)不僅僅只限于運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù),例如某個(gè)程序被CPU執(zhí)行過(guò)程中的獨(dú)有的運(yùn)行特征數(shù)據(jù)。CIH類型的病毒利用中斷操作,從系統(tǒng)的用戶層強(qiáng)行到系統(tǒng)的內(nèi)核層,破壞計(jì)算機(jī)硬件。
    因?yàn)榇祟惒《臼菑南到y(tǒng)的用戶層轉(zhuǎn)到系統(tǒng)的內(nèi)核層,因此在CPU內(nèi)的高速緩存中存在從系統(tǒng)的用戶層到系統(tǒng)的內(nèi)核層區(qū)別于運(yùn)行其他程序的跡象,即:正常的程序被執(zhí)行時(shí),高速緩存順序從內(nèi)存調(diào)取數(shù)據(jù),一般情況下應(yīng)用程序工作在系統(tǒng)的用戶層,此類病毒程序利用處理器的中斷操作從系統(tǒng)的用戶層強(qiáng)行轉(zhuǎn)到系統(tǒng)的內(nèi)核層,因此在高速緩存中存在一些從系統(tǒng)的用戶層向系統(tǒng)的內(nèi)核層跳轉(zhuǎn)的數(shù)據(jù)。但這些數(shù)據(jù)并非都是病毒程序,因?yàn)閭€(gè)別的正常程序也用到此方式,獲取跳轉(zhuǎn)到的內(nèi)存相應(yīng)的數(shù)據(jù),并提取此類型病毒對(duì)于這部分?jǐn)?shù)據(jù)所共有的部分。
    (1)匯編指令:out 70h,al; in al,71h;xor ax,926h; ###jmp 2000:003;add al,bl&rarr;機(jī)器碼:9i 7u 16 14 5h a7 3t ### 77 e1 77 6c 00 d8(假設(shè)&ldquo;###&rdquo;左邊部分是利用中斷操作從系統(tǒng)的用戶層強(qiáng)行轉(zhuǎn)到系統(tǒng)的內(nèi)核層,&ldquo;###&rdquo;右邊部分是對(duì)BIOS芯片的破壞操作)。假定待檢測(cè)程序A的運(yùn)行特征如下:[匯編指令:mov ax,1016h]&rarr;機(jī)器碼:b8 31 2e;&hellip;;[匯編指令:out 70h,al]&rarr;機(jī)器碼:9i 7u(與病毒相同的指令基因);[匯編指令:in al,71h]&rarr;機(jī)器碼:16 14(與病毒相同的指令基因);[匯編指令:xor ax,926h]&rarr;機(jī)器碼:5h a7 3t(與病毒相同的指令基因);&hellip;;[匯編指令:mov ah,0]&rarr;機(jī)器碼:b4 00;&hellip;;[匯編指令:jmp 2000:003]&rarr;機(jī)器碼:77 e1 77 6c(與病毒相同的指令基因);[匯編指令:add al,bl]&rarr;機(jī)器碼:00 d8(與病毒相同的指令基因)。
    (2)待檢測(cè)程序A的運(yùn)行特征:機(jī)器碼b8 31 2e 0e 21 4d 8h 63 5h 9i 7u 16 14 5h a7 3t 00 7c 2d b8 20 4e 05 16 14 04 9c b4 00 77 e1 77 6c 00 d8,其中,機(jī)器碼9i 7u 16 14 5h a7 3t是利用中斷操作從系統(tǒng)的用戶層強(qiáng)行轉(zhuǎn)到系統(tǒng)的內(nèi)核層;機(jī)器碼77 e1 77 6c 00 d8是對(duì)芯片的破壞操作。
    (3)待檢測(cè)程序B的運(yùn)行特征:機(jī)器碼9i 02 11 6h 8i u8 e3 9i 7u 16 14 5h a7 3t b8 31 2e 0e 21 4d 8h 63 7c 2d b8 20 9c b4;雖然待檢測(cè)程序B的機(jī)器碼中也存在9i 7u 16 14 5h a7 3t,也同樣利用中斷操作從系統(tǒng)的用戶層強(qiáng)行轉(zhuǎn)到系統(tǒng)的內(nèi)核層,但是檢測(cè)程序B的機(jī)器碼中不存在對(duì)芯片進(jìn)行破壞的數(shù)據(jù)。
3 病毒的檢測(cè)
    將(指令元1+指令元2+指令元3)&rarr;(結(jié)果1+結(jié)果2+結(jié)果3)=最終結(jié)果,存儲(chǔ)到所述的原則庫(kù)中,同時(shí)在原則庫(kù)中標(biāo)示出病毒程序的最終結(jié)果,表1所示為指令元、有效代碼序列(運(yùn)行特征代碼)、運(yùn)行結(jié)果、危險(xiǎn)系數(shù)的關(guān)系。

    將獲得的待檢測(cè)程序的指令元數(shù)據(jù)與建立的原則庫(kù)中的對(duì)應(yīng)關(guān)系表達(dá)式相應(yīng)部分進(jìn)行比較,對(duì)比較成功的次數(shù)進(jìn)行計(jì)數(shù),當(dāng)比較成功的次數(shù)等于或者超過(guò)設(shè)定的閥值時(shí),判定所述待檢測(cè)程序?yàn)椴《境绦颉?br/>     獲得的待檢測(cè)程序指令元數(shù)據(jù)是:指令元1+指令元2+...指令元X;
    原則庫(kù)中某項(xiàng)數(shù)據(jù)是:指令元11+指令元22+...指令元nn;
    假定,指令元1=指令元11,指令元2=指令元22,則Y的值應(yīng)該等于2。
    第二個(gè)意義的閾值是:待檢測(cè)程序的指令元數(shù)據(jù)或指令元數(shù)據(jù)的集合與所述的最終結(jié)果有關(guān)聯(lián)關(guān)系或者待檢測(cè)程序的指令元數(shù)據(jù)或指令元數(shù)據(jù)的集合能夠?qū)е滤龅淖罱K結(jié)果,此為第二個(gè)意義的閾值。如獲得的待檢測(cè)程序i.exe指令元數(shù)據(jù)是:指令元i1+指令元i2+指令元i3;獲得的待檢測(cè)程序g.exe指令元數(shù)據(jù)是:指令元g1+指令元g2+指令元g3+指令元g4+指令元g5;原則庫(kù)中某項(xiàng)數(shù)據(jù)是:(指令元1+指令元2+指令元3)&rarr;(結(jié)果1+結(jié)果2+結(jié)果3)=最終結(jié)果;其中,指令元(g1+指令元g2+指令元g3+指令元g4+指令元g5)=(指令元1+指令元2+指令元3)&rarr;(結(jié)果1+結(jié)果2+結(jié)果3)=最終結(jié)果;(指令元i1+指令元i2+指令元i3)&ne;(指令元1+指令元2+指令元3)。因此,待檢測(cè)程序i.exe判定為不是病毒程序,待檢測(cè)程序g.exe判定為病毒程序。
    分別獲取待檢測(cè)程序l.exe與m.exe的運(yùn)行特征數(shù)據(jù):l.exe的運(yùn)行特征數(shù)據(jù)是:a0,qo,9i,80,5h,3h,jg,pq,ci,c1,8k,00,0k,ab,c3,ck;m.exe的運(yùn)行特征數(shù)據(jù)是:1a,2b,c3,4d,f5,6h,7k,j8,9k,10,11,22,33,44,55,6i;原則庫(kù)中某項(xiàng)數(shù)據(jù)是:(#qo,9i,80,**,3h,jg#)&rarr;病毒運(yùn)行后對(duì)系統(tǒng)造成的惡性結(jié)果;待檢測(cè)程序l.exe判定為病毒程序,m.exe判定為不是病毒程序。
4 實(shí)驗(yàn)過(guò)程與結(jié)果

 


    由于采用的是基于指令基因的方式,在實(shí)驗(yàn)中不需真實(shí)且可運(yùn)行的病毒體,可直接指定待檢測(cè)出的指令基因數(shù)據(jù)集即可。Windows系統(tǒng)中可完成目標(biāo)功能的指令基因元為n,形成有效組合為m,對(duì)5個(gè)進(jìn)程進(jìn)行檢測(cè),每個(gè)進(jìn)程包含的指令元為N,有效組合為M,N>n,M>m。根據(jù)表2,平均準(zhǔn)確率為91.7%,平均誤報(bào)率為0.19%,漏報(bào)率為0。檢測(cè)分類表如表2所示。


    本技術(shù)解決了目前世界上非特征碼技術(shù)錯(cuò)誤率高的技術(shù)難題。且能夠直接檢測(cè)程序運(yùn)行過(guò)程中的內(nèi)存數(shù)據(jù),不需要對(duì)加殼病毒等進(jìn)行解密、脫殼操作,極大地減少了對(duì)于系統(tǒng)資源的消耗。在實(shí)踐應(yīng)用中取得了較好的結(jié)果。
參考文獻(xiàn)
[1] 張衡,卞洪流,吳禮發(fā),等.基于LSM 的程序行為控制研究[J].軟件學(xué)報(bào),2005,16(06):1151-1158.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。