一種漏洞利用代碼的檢測方法
【專利摘要】本發(fā)明公開了一種漏洞利用代碼的檢測方法,應(yīng)用于一電子設(shè)備中,所述方法包括:運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B;判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼,實現(xiàn)了快速、簡單、高效、準(zhǔn)確并且易于實施,占用CPU資源較小的完成shellcode漏洞利用代碼檢測的技術(shù)效果。
【專利說明】—種漏洞利用代碼的檢測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種漏洞利用代碼的檢測方法。
【背景技術(shù)】
[0002]隨著科技的進(jìn)步和發(fā)展,電子設(shè)備已經(jīng)成為人們工作和生活不可缺失的一部分,如電腦手機等,人們使用它們進(jìn)行辦公、娛樂、學(xué)習(xí)、購物等,相應(yīng)的人們的各種個人信息和財產(chǎn)安全都與電子設(shè)備中的信息息息相關(guān),所以電子設(shè)備的信息安全日益受到人們的重視。
[0003]目前,在現(xiàn)有技術(shù)中,電子設(shè)備如計算機受到shellcode的攻擊較為普遍,shellcode是具有特定功能的攻擊計算機系統(tǒng)漏洞的一段代碼,根據(jù)不同的攻擊需求,shellcode的功能有所不同。常見的主要功能有通過TCP協(xié)議連接到控制服務(wù)器,接收控制控制命令;下載木馬程序并運行。Shellcode可以通過網(wǎng)絡(luò)發(fā)送到指定服務(wù)器;也可以包含在FOF'word, jpeg等文件中發(fā)送到攻擊目標(biāo)的計算機中。一旦shellcode得以執(zhí)行,目標(biāo)系統(tǒng)就可能被種上木馬程序,從而被黑客控制。IExplorer, Flash Player等流行軟件漏洞曾一度被黑客利用,大量傳播病毒等惡意軟件。
[0004]目前,在現(xiàn)有技術(shù)中,有幾種檢測shellcode漏洞利用代碼的方法,一、靜態(tài)檢測方法:如文獻(xiàn)1-Shellcode靜態(tài)檢測技術(shù)研究,文獻(xiàn)I摘自計算機應(yīng)用與軟件第27卷第2期,文獻(xiàn)2:基于自定位指令特征的Shellcode檢測技術(shù)研究,文獻(xiàn)2摘自計算機工程第34卷第13期,其中文獻(xiàn)1、2都是基于shellcode靜態(tài)特征的檢測技術(shù),是對shellcode的字節(jié)序列和反匯編的指令進(jìn)行檢測。它存在著三個主要缺點:
1、經(jīng)過代碼混淆技術(shù)編碼和加密后的shellcode很容易逃過靜態(tài)檢測。
[0005]2、基于特征的靜態(tài)檢測技術(shù)難以避免誤報,可能將正常程序誤報為shellcode。
[0006]3、基于特征的靜態(tài)檢測技術(shù)難以有效實施,難以從大量數(shù)據(jù)中定位可能潛在shellcode進(jìn)行靜態(tài)掃描和反匯編。
[0007]二、動態(tài)檢測方法,如基于動態(tài)模擬的多態(tài)Shellcode檢測系統(tǒng),動態(tài)檢測方法使用動態(tài)模擬技術(shù)能有效處理混淆和加密后的shellcode,但是CPU模擬執(zhí)行需要大量的預(yù)算資源,難以實際應(yīng)用。
[0008]本申請發(fā)明人在實現(xiàn)本申請實施例中發(fā)明技術(shù)方案的過程中,發(fā)現(xiàn)上述技術(shù)至少存在如下技術(shù)問題:
在現(xiàn)有技術(shù)中,由于現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)采用靜態(tài)檢測的方法或者采用動態(tài)模擬的方法進(jìn)行檢測,而經(jīng)過處理后的shellcode很容易逃過靜態(tài)檢測,靜態(tài)檢測冶容易出現(xiàn)誤報,可能將正常程序誤報為shellcode,并且靜態(tài)檢測技術(shù)難以有效實施,難以從大量數(shù)據(jù)中定位可能潛在shellcode進(jìn)行靜態(tài)掃描和反匯編;動態(tài)檢測由于CPU模擬執(zhí)行需要大量的預(yù)算資源,難以實際應(yīng)用,所以現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)存在檢測復(fù)雜、不準(zhǔn)確、效率較低、不易于實施、需要占用較大CPU資源的技術(shù)問題。
【發(fā)明內(nèi)容】
[0009]本發(fā)明提供了一種漏洞利用代碼的檢測方法,解決了現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)存在檢測復(fù)雜、不準(zhǔn)確、效率較低、不易于實施、需要占用較大CPU資源的技術(shù)問題,實現(xiàn)了快速、簡單、高效、準(zhǔn)確并且易于實施,占用CPU資源較小的完成shellcode漏洞利用代碼檢測的技術(shù)效果。
[0010]為解決上述技術(shù)問題,本申請實施例提供了一種漏洞利用代碼的檢測方法,應(yīng)用于一電子設(shè)備中,所述方法包括:
運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B,其中,所述程序A為所述電子設(shè)備中一應(yīng)用程序;
判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼。
[0011]進(jìn)一步的,所述程序A調(diào)用所述關(guān)鍵API函數(shù)的頻率小于所述漏洞利用代碼調(diào)用所述關(guān)鍵API函數(shù)的頻率。
[0012]進(jìn)一步的,所述關(guān)鍵API函數(shù)具體是但不限于:CreateProcessA函數(shù),或CreateProcessff 函數(shù)、或 UrlDownloadToFile 函數(shù)中的一種。
[0013]進(jìn)一步的,所述檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B具體為:在所述電子設(shè)備的內(nèi)存空間中創(chuàng)建一個監(jiān)控模塊,所述監(jiān)控模塊對所述程序A進(jìn)行監(jiān)測,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B。
[0014]進(jìn)一步的,所述監(jiān)控模塊對所述程序A進(jìn)行監(jiān)測具體為:在所述監(jiān)控模塊中通過API掛鉤技術(shù),獲取所述關(guān)鍵API函數(shù)的所述調(diào)用地址B。
[0015]進(jìn)一步的,所述漏洞利用代碼具體為shellcode漏洞利用代碼。
[0016]進(jìn)一步的,若所述程序A中有漏洞利用代碼,則阻斷所述漏洞利用代碼的運行,報告檢測結(jié)果,記錄檢測日志。
[0017]進(jìn)一步的,所述判斷所述調(diào)用地址B是否在所述程序A的程序段中具體包括:
首先利用OpenProcess打開所述程序A進(jìn)程;
然后利用EnumProcessModules枚舉所述程序A進(jìn)程中所有的程序模塊;
最后利用GetModuleInformation順序獲取每個程序模塊的地址范圍;
其中,若所述調(diào)用地址B屬于所述程序模塊的地址范圍,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不屬于所述程序模塊的地址范圍,則所述程序A中沒有漏洞利用代碼。
[0018]本申請實施例中提供的一個或多個技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點: 由于采用了首先運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的
調(diào)用地址B ;然后判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼的技術(shù)手段,即監(jiān)測關(guān)鍵API函數(shù)的調(diào)用地址,通過調(diào)用地址所在內(nèi)存區(qū)段的屬性來判斷是否有shellcode在運行,所以,有效解決了現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)存在檢測復(fù)雜、不準(zhǔn)確、效率較低、不易于實施、需要占用較大CPU資源的技術(shù)問題,進(jìn)而實現(xiàn)了快速、簡單、高效、準(zhǔn)確并且易于實施,占用CPU資源較小的完成shellcode漏洞利用代碼檢測的技術(shù)效果。
【專利附圖】
【附圖說明】
[0019]圖1是本申請實施例中漏洞代碼的檢測方法的流程圖;
圖2是本申請實施例中檢測方法在IE瀏覽器中的檢測示意圖;
圖3是本申請實施例中應(yīng)用本方法的檢測系統(tǒng)的模塊之間的通信示意圖;
圖4是本申請實施例中應(yīng)用本方法的檢測系統(tǒng)檢測漏洞代碼的流程圖;
圖5是本申請實施例中掛鉤技術(shù)前后函數(shù)調(diào)用關(guān)系示意圖。
【具體實施方式】
[0020]本發(fā)明提供了一種漏洞利用代碼的檢測方法,解決了現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)存在檢測復(fù)雜、不準(zhǔn)確、效率較低、不易于實施、需要占用較大CPU資源的技術(shù)問題,實現(xiàn)了快速、簡單、高效、準(zhǔn)確并且易于實施,占用CPU資源較小的完成shellcode漏洞利用代碼檢測的技術(shù)效果。
[0021]本申請實施中的技術(shù)方案為解決上述技術(shù)問題。總體思路如下:
采用了首先運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B ;然后判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼的技術(shù)手段,即監(jiān)測關(guān)鍵API函數(shù)的調(diào)用地址,通過調(diào)用地址所在內(nèi)存區(qū)段的屬性來判斷是否有shellcode在運行,所以,有效解決了現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)存在檢測復(fù)雜、不準(zhǔn)確、效率較低、不易于實施、需要占用較大CPU資源的技術(shù)問題,進(jìn)而實現(xiàn)了快速、簡單、高效、準(zhǔn)確并且易于實施,占用CPU資源較小的完成shellcode漏洞利用代碼檢測的技術(shù)效果。
[0022]為了更好的理解上述技術(shù)方案,下面將結(jié)合說明書附圖以及具體的實施方式對上述技術(shù)方案進(jìn)行詳細(xì)的說明。
[0023]實施例一:
在實施例一中,提供了一種漏洞利用代碼的檢測方法,應(yīng)用在一電子設(shè)備中,其中,所述電子設(shè)備可以是計算機,可以是智能手機,也可以是游戲機,在本申請實施例中,在此就不再一一舉例了。請參考圖1-圖5,本申請實施例中的檢測方法具體包括:
S10,運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B ;S20,判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼。
[0024]其中,在本申請實施例中,所述判斷所述調(diào)用地址B是否在所述程序A的程序段中具體包括:
利用OpenProcess打開所述程序A進(jìn)程;
利用EnumProcessModules枚舉所述程序A進(jìn)程中所有的程序模塊;
利用GetModuleInformation順序獲取每個程序模塊的地址范圍;
其中,若所述調(diào)用地址B屬于所述程序模塊的地址范圍,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不屬于所述程序模塊的地址范圍,則所述程序A中沒有漏洞利用代碼。
[0025]其中,在本申請實施例中,所述程序A為所述電子設(shè)備中一應(yīng)用程序,如瀏覽器、播放器、游戲等。
[0026]在實際應(yīng)用中,利用函數(shù)OpenProcess、函數(shù)EnumProcessModules以及函數(shù)GetModuleInformation來完成步驟判斷所述調(diào)用地址B是否在所述程序A的程序段中。OpenProcess函數(shù)為用來打開一個已存在的進(jìn)程對象,并返回進(jìn)程的句柄;EnumProcesses函數(shù)主要功能得到一系列過程采用EnumProcesses功能。為每個過程、主要功能調(diào)用PrintModules功能,通過工藝標(biāo)識符。PrintModules反過來呼叫OpenProcess功能得到過程處理。如果OpenProcess失敗,只有過程輸出顯示標(biāo)識符。OpenProcess閑置,或者因為他們的準(zhǔn)入限制CSRSS過程防止用戶級代碼從打開它們。其次,PrintModules稱EnumProcessModules功能模塊處理獲得的功能。最后,PrintModules稱GetModuleFileNameEx功能,對每一個模塊進(jìn)行一次,取得模塊的名字;函數(shù)GetModuleInformation用于獲取模塊信息并儲存在M0DULEINF0結(jié)構(gòu)。
[0027]其中,在本申請實施例中,所述程序A調(diào)用所述關(guān)鍵API函數(shù)的頻率小于所述漏洞利用代碼調(diào)用所述關(guān)鍵API函數(shù)的頻率。
[0028]在實際應(yīng)用中,程序A調(diào)用所述關(guān)鍵API函數(shù)的頻率小于所述漏洞代碼調(diào)用所述關(guān)鍵系統(tǒng)API函數(shù)的頻率,采用這種關(guān)鍵API函數(shù)是為了不影響程序執(zhí)行效率,不占用過多的系統(tǒng)資源,關(guān)鍵API函數(shù)集合的選取非常重要。比如所有的shellcode都會調(diào)用GetProcessAddress,而應(yīng)用程序?qū)λ恼{(diào)用頻度也很高,所以本方法并不選取這類API函數(shù)作為關(guān)鍵API函數(shù)。
[0029]其中,在本申請實施例中,,所述關(guān)鍵API函數(shù)具體是但不限于=CreateProcessA函數(shù),或 CreateProcessW 函數(shù)、或 UrlDownloadToFile 函數(shù)中的一種。
[0030]在實際應(yīng)用中,選取shellcode調(diào)用的典型API函數(shù),如CreateProcessA、CreateProcessff,、UrlDownloadToFile 等。這些 API 函數(shù)為關(guān)鍵 API 函數(shù)。選取 shellcode經(jīng)常調(diào)用而正常程序調(diào)用頻度不高的API作為關(guān)鍵API,以降低對系統(tǒng)性能影響。
[0031]其中,在本申請實施例中,所述檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B具體為:在所述電子設(shè)備的內(nèi)存空間中創(chuàng)建一個監(jiān)控模塊,所述監(jiān)控模塊對所述程序A進(jìn)行監(jiān)測,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B。
[0032]其中,在本申請實施例中,所述監(jiān)控模塊對所述程序A進(jìn)行監(jiān)測具體為:在所述監(jiān)控模塊中通過API掛鉤技術(shù),獲取所述關(guān)鍵API函數(shù)的所述調(diào)用地址B。
[0033]在實際應(yīng)用中,請參考圖3,創(chuàng)建一個DLL動態(tài)鏈接庫模塊,命名該模塊為monitor, dllo將monitor, dll注入到被保護(hù)的進(jìn)程中。在monitor, dll中通過API掛鉤技術(shù)(hook技術(shù)),截獲關(guān)鍵API函數(shù)調(diào)用,當(dāng)程序執(zhí)行到關(guān)鍵API時,通過?;厮菡业紸PI的調(diào)用地址。程序在調(diào)用API時,會將調(diào)用地址的下一條指令地址(設(shè)該地址為X)壓入棧中,所以可以在棧中找到地址X。X-5就是API函數(shù)調(diào)用地址,設(shè)該地址為Y。然后枚舉內(nèi)存空間中的所有程序地址段,如果地址Y不屬于任何程序段,那么判定shellcode正在運行,最后阻斷shellcode運行,報告檢測結(jié)果,記錄檢測日志。
[0034]在實際應(yīng)用中,本申請實施例使用的是內(nèi)聯(lián)掛鉤(inline hook)技術(shù)。Inlinehook是指將系統(tǒng)dll中的API函數(shù)體的頭部指令(通常占5字節(jié))替換成一條無條件跳轉(zhuǎn)指令(jmp),將程序執(zhí)行流程跳轉(zhuǎn)到指定的hook函數(shù)地址。替換之前需要對被替換的指令進(jìn)行備份,并在備份的指令后添加一條無條件跳轉(zhuǎn)指令(jmp),使程序跳轉(zhuǎn)回原始API函數(shù)繼續(xù)正常執(zhí)行,不影響程序正常運行。在hook函數(shù)中根據(jù)策略可以調(diào)用原始API函數(shù)(執(zhí)行備份的指令),也可以只直接返回,截斷API的調(diào)用。
[0035]具體做法如下:
首先將目標(biāo)API函數(shù)(TargetFunction)頭部指令備份到內(nèi)存空間中,內(nèi)存空間中的部分內(nèi)存為蹦床函數(shù)(TrampolineFuction),并在TrampolineFunction末尾加無條件跳轉(zhuǎn)指令jmp targetfunction,這樣最終的程序流程可以返回到目標(biāo)函數(shù)中,不影響程序正常運行。
[0036]然后將目標(biāo)API函數(shù)的頭部指令替換成跳轉(zhuǎn)指令jmp hookfunction。這樣hookfunction將得到執(zhí)行權(quán)。Hookfunction是自定義函數(shù)。
[0037]在自定義hookfunction中執(zhí)行功能代碼,其中在本申請實施例中,在hookfucntion中回溯獲取到API調(diào)用地址。
[0038]Hookfunction 執(zhí)行結(jié)束后,將跳轉(zhuǎn)執(zhí)行到 TrampolineFuction。
[0039]TrampolineFunction 執(zhí)行結(jié)束后,將跳轉(zhuǎn)執(zhí)行到 TargetFunction。
[0040]TargetFunction執(zhí)行結(jié)束后,將返回到調(diào)用函數(shù)。
[0041]如圖5所示hook前后函數(shù)調(diào)用變化,可以清楚的看到,hook的目的就是在函數(shù)調(diào)用目標(biāo)函數(shù)前,執(zhí)行掛鉤函數(shù),在掛鉤函數(shù)中完成對API調(diào)用的監(jiān)控,獲取API調(diào)用地址。
[0042]通過API hook技術(shù),使得hook函數(shù)在目標(biāo)API函數(shù)調(diào)用之前獲得了執(zhí)行權(quán)。在hook函數(shù)中通過?;厮莸姆椒ㄕ业紸PI調(diào)用者的調(diào)用地址。調(diào)用地址是指相應(yīng)API調(diào)用CALL指令所處地址。API函數(shù)調(diào)用時,首先是參數(shù)壓入棧中。然后CALL指令被調(diào)用,其下一條指令的地址(設(shè)為X)將被壓入棧中。ESP是CPU的棧指針,它始終指向棧的頂部,我們可以通過ESP指針回溯,在地址ESP+4處找到X的值。由于CALL指令占用5個字節(jié)空間,所以X-5就是CALL指令所在的調(diào)用地址。
[0043]其中,在本申請實施例中,所述漏洞利用代碼具體為shellcode漏洞利用代碼。
[0044]其中,在本申請實施例中,若所述程序A中有漏洞利用代碼,則阻斷所述漏洞利用代碼的運行,報告檢測結(jié)果,記錄檢測日志。
[0045]在實際應(yīng)用中,請參考圖2,如圖2所示的IE瀏覽器內(nèi)存空間分布示意圖,程序的各個模塊比如user32.dll, ieframe.dll等被系統(tǒng)加載到內(nèi)存中,它們都有各自的內(nèi)存地址段。當(dāng)IE正常啟動運行另一程序時,系統(tǒng)API函數(shù)CreateProcessW會被調(diào)用,調(diào)用地址A屬于ieframe.dll程序段。當(dāng)有shellcode在IE中運行調(diào)用CreateProcessW運行木馬程序時,調(diào)用地址B則屬于shellcode所在的堆棧內(nèi)存中。根據(jù)地址A與地址B的不同來判斷是否有Shellcode運行。
[0046]例如對于IE漏洞CVE-2012-1875,當(dāng)IE程序訪問惡意網(wǎng)頁時,shellcode通過網(wǎng)絡(luò)進(jìn)入IE進(jìn)程空間。惡意構(gòu)造的網(wǎng)頁使IE程序內(nèi)存溢出,并執(zhí)行shellcode代碼。接著shellcode下載運行后門程序以便攻擊者實現(xiàn)對目標(biāo)的永久控制,下載時就會調(diào)用相應(yīng)的關(guān)鍵API比如UrlDownloadToFile等。此時應(yīng)用本方法的檢測系統(tǒng)追蹤關(guān)鍵API函數(shù)的調(diào)用源地址,如果調(diào)用源地址異常則報告檢測到shellcode。[0047]在實際應(yīng)用中,首先shellcode進(jìn)入程序進(jìn)程空間;然后程序內(nèi)存溢出shellcode獲得執(zhí)行權(quán);然后shellcode調(diào)用關(guān)鍵API函數(shù);然后應(yīng)用本申請方法的檢測系統(tǒng)分析關(guān)鍵API函數(shù)的調(diào)用源地址;然后報告溢出API函數(shù)調(diào)用源地址;最后檢測系統(tǒng)根據(jù)策略報告 shellcode。
[0048]在實際應(yīng)用中,請參考圖4,圖4為應(yīng)用本方法的檢測系統(tǒng)檢測shellcode漏洞代碼的流程,具體為:開始檢測,首先啟動主控程序;然后將將monitor, dll注入到被保護(hù)程序中;然后判斷是否注入成功,若不成功,則結(jié)束檢測;若成功則將monitor, dll中hook (掛鉤)關(guān)鍵API函數(shù);然后獲得monitor, dll中記錄API函數(shù)調(diào)用地址以及地址屬性;然后將監(jiān)控信息傳遞至主控程序,然后主控程序報告檢測結(jié)果,阻斷shellcode繼續(xù)運行;然后判斷被保護(hù)程序是否退出,若是則結(jié)束檢測;若否則繼續(xù)獲得monitor, dll中記錄API函數(shù)調(diào)用地址以及地址屬性。
[0049]上述本申請實施例中的技術(shù)方案,至少具有如下的技術(shù)效果或優(yōu)點:
由于采用了首先運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B ;然后判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼的技術(shù)手段,即監(jiān)測關(guān)鍵API函數(shù)的調(diào)用地址,通過調(diào)用地址所在內(nèi)存區(qū)段的屬性來判斷是否有shellcode在運行,所以,有效解決了現(xiàn)有的shellcode漏洞利用代碼檢測技術(shù)存在檢測復(fù)雜、不準(zhǔn)確、效率較低、不易于實施、需要占用較大CPU資源的技術(shù)問題,進(jìn)而實現(xiàn)了快速、簡單、高效、準(zhǔn)確并且易于實施,占用CPU資源較小的完成shellcode漏洞利用代碼檢測的技術(shù)效果。
[0050]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
[0051]顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【權(quán)利要求】
1.一種漏洞利用代碼的檢測方法,應(yīng)用于一電子設(shè)備中,其特征在于,所述方法包括: 運行程序A,檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B,其中,所述程序A為所述電子設(shè)備中一應(yīng)用程序; 判斷所述調(diào)用地址B是否在所述程序A的程序段中,若所述調(diào)用地址B在所述程序A的程序段中,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不在所述程序A的程序段中,則所述程序A中有漏洞利用代碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述程序A調(diào)用所述關(guān)鍵API函數(shù)的頻率小于所述漏洞利用代碼調(diào)用所述關(guān)鍵API函數(shù)的頻率。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述關(guān)鍵API函數(shù)具體是但不限于:CreateProcessA 函數(shù),或 CreateProcessW 函數(shù)、或 UrlDownloadToFile 函數(shù)中的一種。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述檢測關(guān)鍵API函數(shù)的調(diào)用地址,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B具體為:在所述電子設(shè)備的內(nèi)存空間中創(chuàng)建一個監(jiān)控模塊,所述監(jiān)控模塊對所述程序A進(jìn)行監(jiān)測,獲得所述關(guān)鍵API函數(shù)的調(diào)用地址B。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述監(jiān)控模塊對所述程序A進(jìn)行監(jiān)測具體為:在所述監(jiān)控模塊中通過API掛鉤技術(shù),獲取所述關(guān)鍵API函數(shù)的所述調(diào)用地址B。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述漏洞利用代碼具體為shellcode漏洞利用代碼。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,若所述程序A中有漏洞利用代碼,則阻斷所述漏洞利用代碼的運行,報告檢測結(jié)果,記錄檢測日志。
8.根據(jù)權(quán)利要求1-7中任意一項所述的方法,其特征在于,所述判斷所述調(diào)用地址B是否在所述程序A的程序段中具體包括: 利用OpenProcess打開所述程序A進(jìn)程; 利用EnumProcessModules枚舉所述程序A進(jìn)程中所有的程序模塊; 利用GetModuleInformation順序獲取每個程序模塊的地址范圍; 其中,若所述調(diào)用地址B屬于所述程序模塊的地址范圍,則所述程序A中沒有漏洞利用代碼;若所述調(diào)用地址B不屬于所述程序模塊的地址范圍,則所述程序A中沒有漏洞利用代碼。
【文檔編號】G06F21/56GK103714292SQ201410016789
【公開日】2014年4月9日 申請日期:2014年1月15日 優(yōu)先權(quán)日:2014年1月15日
【發(fā)明者】李曉寧, 程濤 申請人:四川師范大學(xué)