專利名稱:一種惡意代碼發(fā)現(xiàn)和預(yù)防方法
技術(shù)領(lǐng)域:
本發(fā)明涉及本計算機反病毒技術(shù)領(lǐng)域,尤其涉及一種在動態(tài)環(huán)境中檢測和預(yù)防惡意代碼的方法。
背景技術(shù):
在互聯(lián)網(wǎng)高度開放的今天,惡意代碼已經(jīng)從原來的娛樂目的發(fā)展為經(jīng)濟,政治目的,已經(jīng)從原來的簡單經(jīng)營模式發(fā)展為一條完整的地下產(chǎn)業(yè)鏈。這條完整的產(chǎn)業(yè)鏈包括惡意代碼制造者,惡意代碼銷售者,惡意代碼使用者,惡意代碼免殺支持者,惡意代碼獲取信息處理者(信息出售,將利益轉(zhuǎn)變?yōu)楹戏ㄐ岳?。由于最頂端的惡意代碼編寫者數(shù)量較少限制了新技術(shù)病毒增加的速度緩慢,但大量的免殺支持者使惡意代碼的變種快速的增加。 所以,遏制惡意代碼發(fā)展的方法就是打斷這條產(chǎn)業(yè)鏈,作為技術(shù)角度出發(fā),只能針對惡意代碼最初的源碼編譯版本和惡意代碼變種進行處理。
下面是當(dāng)前惡意代碼的檢測和預(yù)防方法 惡意代碼檢測方法包括靜態(tài)檢測和動態(tài)監(jiān)測。
靜態(tài)檢測特征碼檢測(文件特征,內(nèi)存特征,網(wǎng)絡(luò)特征)是反病毒工程師通過分析惡意代碼從中提出的一段二進制代碼或者通過自動化提取的一段二進制代碼。由于這段特征能夠被大量的惡意代碼免殺者接觸到,而每個免殺者采用的修改方法有可能不相同,這樣就產(chǎn)生大量的變種。啟發(fā)式檢測,根據(jù)惡意代碼文件自身的特征進行經(jīng)驗型的判斷。
動態(tài)檢測虛擬機檢測,殺毒軟件通過模擬指令使惡意代碼運行在一個虛擬環(huán)境中,判斷惡意代碼的前多少條指令中是否存在惡意行為。
惡意代碼預(yù)防方法通過虛擬機檢測的結(jié)果來判斷是否讓程序真正運行;主動防御是基于程序行為自主分析判斷的實時防護技術(shù),不以病毒的特征碼作為判斷病毒的依據(jù),而是從最原始的病毒定義出發(fā),直接將程序的行為作為判斷病毒的依據(jù)。發(fā)明內(nèi)容
本發(fā)明的目的在于針對Windows平臺的惡意代碼,提出一種能夠在動態(tài)系統(tǒng)環(huán)境中檢測和預(yù)防的方法。
本發(fā)明克服了惡意代碼靜態(tài)檢測中啟發(fā)式檢測的不準(zhǔn)確性問題;增加了惡意代碼靜態(tài)檢測中惡意代碼免殺者定位修改特征碼的難度,使其免殺普通特征碼的樣本難以躲過本發(fā)明提出的檢測方法;克服了動態(tài)監(jiān)測中虛擬機檢測執(zhí)行指令數(shù)的限制;本發(fā)明克服了惡意代碼預(yù)防方法中主動防御占用過多系統(tǒng)資源的問題。
為解決上述問題,本發(fā)明實現(xiàn)方法主要包括以下步驟 步驟一獲取當(dāng)前系統(tǒng)環(huán)境中所有object的信息。
object (內(nèi)核對象)是代表系統(tǒng)資源的數(shù)據(jù)結(jié)構(gòu),比如一個文件,線程,或者圖像。 一個程序不能直接訪問object數(shù)據(jù),而是必須獲得一個object handle用來檢測和修改系統(tǒng)資源。每個handle在一張內(nèi)部表中有一個記錄,每個記錄包含資源的地址和類型。
步驟二 過濾要檢測的object類型,主要過濾mutex、event和kmaphore類型的 objectmutex,event和kmaphore三種類型的object主要用來線程同步和單一實例,由于惡意代碼大多數(shù)都必須單實例運行,所以必須采用上面三種中的一種object來實現(xiàn)。這也是本發(fā)明的基礎(chǔ)。
步驟三對步驟二中過濾出的object名字進行特征匹配,基于object唯一性的特性作為判斷條件,如果匹配則認(rèn)為已經(jīng)感染惡意代碼,轉(zhuǎn)到步驟四,否則轉(zhuǎn)到步驟八。
特征指的是獲取的惡意代碼創(chuàng)建的內(nèi)核對象的名稱。
步驟四阻塞等待,創(chuàng)建與惡意代碼創(chuàng)建的object名稱相同的object (即步驟三中匹配到的object),這樣可以在惡意代碼進程結(jié)束后立即被創(chuàng)建一個object來阻止惡意代碼再次運行。
步驟五獲取object匹配的進程PID,根據(jù)PID獲取進程名,如果獲取成功則跳轉(zhuǎn)到步驟六,否則跳轉(zhuǎn)到步驟七。
步驟六判斷進程名是否為白名單進程,如果是則重啟進程。跳轉(zhuǎn)到步驟八 白名單進程指系統(tǒng)進程或者第三方進程。
步驟七終止感染惡意代碼的進程,阻止惡意代碼的再次運行。
步驟八上述步驟完成后,無論是否已經(jīng)發(fā)現(xiàn)惡意代碼都可以從特征庫中選擇創(chuàng)建要預(yù)防的惡意代碼內(nèi)核對象(步驟三中匹配的object除外),阻止惡意代碼的運行,這樣可以預(yù)防當(dāng)前流行的惡意代碼或者需要預(yù)防的惡意代碼,這個步驟的主要作用在于預(yù)防, 區(qū)別于步驟三的查殺。而創(chuàng)建一個內(nèi)核對象相對主動防御來說對系統(tǒng)資源的消耗非常小。
本發(fā)明的有益效果是本發(fā)明最大的優(yōu)點和創(chuàng)新點是對惡意代碼的發(fā)現(xiàn)和預(yù)防不依賴惡意代碼本身特征, 而是根據(jù)惡意代碼對系統(tǒng)環(huán)境的影響來發(fā)現(xiàn)和預(yù)防惡意代碼。本發(fā)明占用很少的系統(tǒng)資源對系統(tǒng)動態(tài)環(huán)境進行分析,判斷是否感染惡意代碼,如果感染則結(jié)束惡意程序,使主機受到保護?;蛘咄ㄟ^創(chuàng)建內(nèi)核對象的方法免疫惡意代碼,防止惡意代碼感染系統(tǒng),使用戶得到保護。
為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一種惡意代碼發(fā)現(xiàn)和預(yù)防方法流程圖; 圖2為本發(fā)明一種惡意代碼發(fā)現(xiàn)和預(yù)防方法實施例流程圖;圖3為本發(fā)明一種惡意代碼發(fā)現(xiàn)和預(yù)防方法實施例的匹配處理例程圖。
具體實施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明中技術(shù)方案作進一步詳細(xì)的說明。
本發(fā)明提出了一種基于系統(tǒng)動態(tài)環(huán)境的惡意代碼發(fā)現(xiàn)和預(yù)防方法,即通過系統(tǒng)中所有的mutex、event和kmaphore三種Object,通過名稱特征發(fā)現(xiàn)惡意代碼和創(chuàng)建特定名稱的Object來預(yù)防惡意代碼。
如圖1所示,本發(fā)明惡意代碼發(fā)現(xiàn)和預(yù)防方法包括步驟 SlOl 獲取當(dāng)前系統(tǒng)環(huán)境中所有object的信息。
object (內(nèi)核對象)是代表系統(tǒng)資源的數(shù)據(jù)結(jié)構(gòu),比如一個文件,線程,或者圖像。 一個程序不能直接訪問object數(shù)據(jù),而是必須獲得一個object handle用來檢測和修改系統(tǒng)資源。每個handle在一張內(nèi)部表中有一個記錄,每個記錄包含資源的地址和類型。
S102 過濾要檢測的object類型,主要過濾mutex、event和kmaphore類型的 objectmutex,event和kmaphore三種類型的object主要用來線程同步和單一實例,由于惡意代碼大多數(shù)都必須單實例運行,所以必須采用上面三種中的一種object來實現(xiàn)。這也是本發(fā)明的基礎(chǔ)。
S103 對S102中過濾出的object名字進行特征匹配,基于object唯一性的特性作為判斷條件,如果匹配則認(rèn)為已經(jīng)感染惡意代碼,轉(zhuǎn)到S104,否則轉(zhuǎn)到S108。
特征指的是獲取的惡意代碼創(chuàng)建的內(nèi)核對象的名稱。
S104 阻塞等待,創(chuàng)建與惡意代碼創(chuàng)建的object名稱相同的object (即S103中匹配到的object),這樣可以在惡意代碼進程結(jié)束后立即被創(chuàng)建一個object來阻止惡意代碼再次運行。
S105 獲取object匹配的進程PID,根據(jù)PID獲取進程名,如果獲取成功則跳轉(zhuǎn)到 S106,否則跳轉(zhuǎn)到S107。
S106 判斷進程名是否為白名單進程,如果是則重啟進程。跳轉(zhuǎn)到S108 白名單進程指系統(tǒng)進程或者第三方進程。
S107 終止感染惡意代碼的進程,阻止惡意代碼的再次運行。
S108 上述步驟完成后,無論是否已經(jīng)發(fā)現(xiàn)惡意代碼都可以從特征庫中選擇創(chuàng)建要預(yù)防的惡意代碼內(nèi)核對象(S103中匹配的object除外),阻止惡意代碼的運行,這樣可以預(yù)防當(dāng)前流行的惡意代碼或者需要預(yù)防的惡意代碼,這個步驟的主要作用在于預(yù)防,區(qū)別于S103的查殺。而創(chuàng)建一個內(nèi)核對象相對主動防御來說對系統(tǒng)資源的消耗非常小。
圖2為基于系統(tǒng)動態(tài)環(huán)境的惡意代碼發(fā)現(xiàn)和預(yù)防方法的實施例流程圖。如圖2所示,主要包括的步驟有獲取系統(tǒng)句柄信息步驟,獲取系統(tǒng)內(nèi)核對象信息步驟,Object過濾步驟,匹配處理步驟,創(chuàng)建Object步驟。具體包括S201 獲取系統(tǒng)句柄信息步驟通過調(diào)用 ZwQuerySystemInformation 函數(shù),指定第一個參數(shù) SYSTEM_INF0RMATI0N_ CLASS為SystemHandlehformation獲取當(dāng)前系統(tǒng)中所有的句柄信息。如果獲取成功,則進入S202,否則進入S205。
S202 獲取系統(tǒng)內(nèi)核對象信息步驟通過調(diào)用ZwQueryObject函數(shù),分別制定第二個參數(shù)0BJECT_INF0RMATI0N_CLASS為 ObjectTypeInformation 和 ObjectNamehformation 來獲取 Object 的類型信息和名稱信息。如果獲取成功則進入S203,否則進入S205。
S2031 至 S2033 =Object 過濾步驟對S202中獲得的所有Object進行類型判斷,取出類型為muteX、event或者kmaphore 的Object。如圖2中的對象類型是否包含mutex,對象類型是否包含event和對象類型是否包含kmaphore。如果包含其中的任何一種則分別進入S2041至S2043,否則進入S205。
S2041至S2043 匹配處理步驟對S2031至S2033中過濾出來的Object進行匹配,主要過程如圖3匹配處理例程圖, 匹配處理例程具體包括以下步驟S4301 獲取對象名稱步驟,從S202中獲取的Object信息中取出S203中對應(yīng)的Object 的名稱。獲取成功,進入S4302,否則進入S205。
S4302 匹配特征步驟。將S4301中取出的名稱與特征庫中名稱進行對比。如果匹配成功則進入S4303,否則進入S205。
S4303 調(diào)用函數(shù) WaitForSingleOb ject,將第一個參數(shù) hHandle 執(zhí)行 S4302 中匹配的Object所對應(yīng)的句柄進行阻塞等待。當(dāng)函數(shù)返回,立即執(zhí)行相應(yīng)的Create系列函數(shù)創(chuàng)建與S4302中相同的Object。
S4304 根據(jù)S4302中獲得的Object,對比S201中獲取的句柄信息獲取Object相應(yīng)的PID (進程編號)。如果成功則進入S4305,否則進入S205。
S4305 通過調(diào)用 ZwQuerySystemInformation 函數(shù),指定第一個參數(shù) SYSTEM_ INF0RMATI0N_CLASS 為 SystemProcessesAndThreadshformation 獲取系統(tǒng)中進程的信息。包括PID到進程名的映射。如果成功則進入S4306,否則進入S4308。
S43096 將S4305中獲取的進程名與白名單中的進程名進行匹配。如果匹配則進入S4307,否則進入S4308。
S4307 重啟進程步驟。首先終止S4304獲取到的進程,根據(jù)S4305中的進程名創(chuàng)建新的正常進程。
S4308 終止進程步驟,終止進程。
S205 根據(jù)特征庫創(chuàng)建Object。
特征庫由Object的類型和Object的名稱組成的結(jié)構(gòu)的集合,這些Object來自對惡意代碼的分析。
雖然通過實施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。
權(quán)利要求
1.一種惡意代碼發(fā)現(xiàn)和預(yù)防方法,其特征在于,包括步驟獲取當(dāng)前系統(tǒng)環(huán)境中所有內(nèi)核對象(Object)的信息;所述內(nèi)核對象是代表系統(tǒng)資源的數(shù)據(jù)結(jié)構(gòu);過濾所述內(nèi)核對象的類型,獲取指定類型的內(nèi)核對象作為待檢測內(nèi)核對象; 將待檢測內(nèi)核對象的名稱與特征庫中預(yù)先獲取的惡意代碼創(chuàng)建的內(nèi)核對象的名稱進行特征匹配,如果匹配成功則判斷待檢測內(nèi)核對象為感染惡意代碼的內(nèi)核對象; 分別創(chuàng)建用于阻塞等待,與所述感染惡意代碼的內(nèi)核對象名稱相同的內(nèi)核對象; 獲取所述感染惡意代碼的內(nèi)核對象的進程PID,根據(jù)所述進程PID獲取進程名; 如果能夠成功獲取進程名,并且成功獲取的進程為白名單進程,則重新啟動所述成功獲取的進程;所述白名單進程是指系統(tǒng)進程或第三方軟件的進程; 否則,終止所述感染惡意代碼的內(nèi)核對象的進程。
2.如權(quán)利要求1所述的惡意代碼發(fā)現(xiàn)和預(yù)防方法,其特征在于,所述內(nèi)核對象包括文件、線程、圖像。
3.如權(quán)利要求1所述的惡意代碼發(fā)現(xiàn)和預(yù)防方法,其特征在于,所述指定類型的內(nèi)核對象包括mutex、event禾口 Semaphore類型的內(nèi)核對象。
4.如權(quán)利要求1所述的惡意代碼發(fā)現(xiàn)和預(yù)防方法,其特征在于,還包括步驟將待檢測內(nèi)核對象的名稱與特征庫中預(yù)先獲取的惡意代碼創(chuàng)建的內(nèi)核對象的名稱進行特征匹配,如果匹配不成功,則從特征庫中選擇預(yù)先獲取的惡意代碼創(chuàng)建的內(nèi)核對象,分別創(chuàng)建與所選擇的內(nèi)核對象名稱相同的內(nèi)核對象。
全文摘要
本發(fā)明公開了一種惡意代碼發(fā)現(xiàn)和預(yù)防方法,該方法主要包括獲取系統(tǒng)句柄信息步驟,獲取系統(tǒng)內(nèi)核對象信息步驟,內(nèi)核對象過濾步驟,匹配處理步驟,創(chuàng)建內(nèi)核對象步驟。本發(fā)明克服了惡意代碼靜態(tài)檢測中啟發(fā)式檢測的不準(zhǔn)確性問題;增加了惡意代碼靜態(tài)檢測中惡意代碼免殺者定位修改特征碼的難度,使其免殺普通特征碼的樣本難以躲過本發(fā)明提出的檢測方法;克服了動態(tài)監(jiān)測中虛擬機檢測執(zhí)行指令數(shù)的限制;本發(fā)明克服了惡意代碼預(yù)防方法中主動防御占用過多系統(tǒng)資源的問題。
文檔編號G06F21/00GK102542196SQ20111037529
公開日2012年7月4日 申請日期2011年11月23日 優(yōu)先權(quán)日2011年11月23日
發(fā)明者李偉, 李柏松, 肖新光 申請人:北京安天電子設(shè)備有限公司