漏洞檢測方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及應(yīng)用程序測試領(lǐng)域,具體而言,涉及一種漏洞檢測方法及裝置。
【背景技術(shù)】
[0002]目前業(yè)界所使用的自動(dòng)化漏洞挖掘系統(tǒng),按照挖掘思路的不同,大體上可以分為兩種類型:白盒漏洞挖掘和黑盒漏洞挖掘,其中,上述的白盒漏洞挖掘具體指從待測試產(chǎn)品的源代碼出發(fā),嘗試?yán)斫馄湔Z義和邏輯,然后根據(jù)準(zhǔn)備好的漏洞規(guī)則對這些語義和邏輯進(jìn)行掃描,以求找到漏洞;而黑盒漏洞挖掘則是把待測試產(chǎn)品當(dāng)成一個(gè)黑盒子,向黑盒子的外部接口填充大量測試用例,然后觀察黑盒子在處理這些測試用例時(shí)的表現(xiàn),確定漏洞。
[0003]現(xiàn)有技術(shù)中相比白盒挖掘,黑盒挖掘更簡單、更直接,在現(xiàn)有技術(shù)中進(jìn)行漏洞挖掘時(shí)使用更為廣泛。
[0004]具體地,在黑盒漏洞挖掘中,如果發(fā)現(xiàn)黑盒子的表現(xiàn)異常(如產(chǎn)品崩潰等),則將這個(gè)測試用例提出來做更細(xì)致的分析(甚至可以是人工分析),根據(jù)分析得到的異常原因找到漏洞。
[0005]采用現(xiàn)有技術(shù)中的黑盒漏洞挖掘只有在待測試產(chǎn)品發(fā)生頂層危險(xiǎn)行為(即可以直接監(jiān)測到的產(chǎn)品發(fā)生的異?,F(xiàn)象,如產(chǎn)品崩潰)的情況下,才會(huì)分析產(chǎn)生該異常行為的原因;并且導(dǎo)致產(chǎn)品發(fā)生異常的原因很多樣化,可能會(huì)有安全漏洞的原因,也可能沒有安全漏洞的原因。在產(chǎn)品發(fā)生異常之后,自動(dòng)或者手動(dòng)分析發(fā)生異常的原因時(shí),由于可能的原因很多,很難確定產(chǎn)品異常的是否是由漏洞導(dǎo)致的;并且在確定是由安全漏洞導(dǎo)致的異常的情況下,也無法準(zhǔn)確識(shí)別漏洞。
[0006]針對上述的黑盒漏洞挖掘方法對漏洞的檢測不準(zhǔn)確的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實(shí)施例提供了一種漏洞檢測方法及裝置,以至少解決現(xiàn)有技術(shù)中黑盒漏洞挖掘方法對漏洞的檢測不準(zhǔn)確的問題。
[0008]根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種漏洞檢測方法,該方法包括:漏洞檢測方法,其特征在于,包括:將待檢測應(yīng)用對已標(biāo)記為非法的非法數(shù)據(jù)源執(zhí)行存儲(chǔ)操作時(shí)使用的區(qū)域標(biāo)記為非法的非法操作區(qū)域;獲取在運(yùn)行待檢測應(yīng)用時(shí)所執(zhí)行的操作指令;判斷操作指令所操作的存儲(chǔ)區(qū)域中是否包括非法操作區(qū)域;若操作指令所操作的存儲(chǔ)區(qū)域中包括非法操作區(qū)域,則檢測出操作指令存在漏洞。
[0009]根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種漏洞檢測裝置,該裝置包括:標(biāo)記模塊,用于將待檢測應(yīng)用對已標(biāo)記為非法的非法數(shù)據(jù)源執(zhí)行存儲(chǔ)操作時(shí)使用的區(qū)域標(biāo)記為非法的非法操作區(qū)域;指令獲取模塊,用于獲取在運(yùn)行待檢測應(yīng)用時(shí)所執(zhí)行的操作指令;區(qū)域判斷模塊,用于判斷操作指令所操作的存儲(chǔ)區(qū)域中是否包括非法操作區(qū)域;漏洞檢測模塊,用于若操作指令所操作的存儲(chǔ)區(qū)域中包括非法操作區(qū)域,則檢測出操作指令存在漏洞。
[0010]在本發(fā)明實(shí)施例中,采用本發(fā)明實(shí)施例,通過操作指令所操作的存儲(chǔ)區(qū)域確定操作指令是否存在漏洞,對待檢測應(yīng)用執(zhí)行的操作具有很強(qiáng)的針對性,而不是現(xiàn)有技術(shù)中的在挖掘漏洞過程中監(jiān)測到產(chǎn)品崩潰才發(fā)現(xiàn)待檢測應(yīng)用存在漏洞。具體地,本發(fā)明實(shí)施例是從待檢測應(yīng)用執(zhí)行的操作出發(fā),通過跟蹤待檢測應(yīng)用運(yùn)行時(shí)的整個(gè)過程中的各個(gè)操作,通過判斷操作中是否存在漏洞來挖掘待檢測應(yīng)用中的漏洞,能夠給主動(dòng)分析漏洞,實(shí)時(shí)性強(qiáng),而不是現(xiàn)有技術(shù)中被動(dòng)地等待產(chǎn)品發(fā)生頂層危險(xiǎn)行為。解決了現(xiàn)有技術(shù)中黑盒漏洞挖掘方法對漏洞的檢測不準(zhǔn)確、漏洞挖掘滯后的問題,實(shí)現(xiàn)了實(shí)時(shí)準(zhǔn)確地檢測待檢測應(yīng)用的漏洞的效果。
【附圖說明】
[0011]此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
[0012]圖1是根據(jù)本發(fā)明實(shí)施例的一種漏洞檢測方法的流程圖;
[0013]圖2是根據(jù)本發(fā)明實(shí)施例的一種獲取操作指令的流程圖;
[0014]圖3是根據(jù)本發(fā)明實(shí)施例的一種可選的漏洞檢測方法的流程圖;
[0015]圖4是根據(jù)本發(fā)明實(shí)施例的另一種可選的漏洞檢測方法的流程圖;
[0016]圖5是根據(jù)本發(fā)明實(shí)施例的一種漏洞檢測裝置的結(jié)構(gòu)示意圖;以及
[0017]圖6是根據(jù)本發(fā)明實(shí)施例的一種終端的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0018]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
[0019]需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤4送?,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0020]實(shí)施例1
[0021 ] 根據(jù)本發(fā)明實(shí)施例,提供了一種漏洞檢測方法的實(shí)施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0022]根據(jù)本發(fā)明實(shí)施例,提供了一種漏洞檢測方法,如圖1所示,該檢測方法可以通過如下步驟實(shí)現(xiàn):
[0023]步驟S102:將待檢測應(yīng)用對已標(biāo)記為非法的非法數(shù)據(jù)源執(zhí)行存儲(chǔ)操作時(shí)使用的區(qū)域標(biāo)記為非法的非法操作區(qū)域。
[0024]步驟S104:獲取在運(yùn)行待檢測應(yīng)用時(shí)所執(zhí)行的操作指令。
[0025]步驟S106:判斷操作指令所操作的存儲(chǔ)區(qū)域中是否包括非法操作區(qū)域。
[0026]步驟S108:若操作指令所操作的存儲(chǔ)區(qū)域中包括非法操作區(qū)域,則檢測出操作指令存在漏洞。
[0027]在判斷操作指令所操作的存儲(chǔ)區(qū)域中是否包括已標(biāo)識(shí)為非法的非法操作區(qū)域之后,該方法還包括:若操作指令所操作的存儲(chǔ)區(qū)域中不包括非法操作區(qū)域,則檢測出操作指令不存在漏洞,則繼續(xù)判斷下一條操作指令,直至將運(yùn)行待檢測應(yīng)用時(shí)所執(zhí)行的所有操作指令均檢測完成,以完成對整個(gè)待檢測應(yīng)用的檢測。
[0028]采用本發(fā)明實(shí)施例,通過操作指令所操作的存儲(chǔ)區(qū)域確定操作指令是否存在漏洞,對待檢測應(yīng)用執(zhí)行的操作具有很強(qiáng)的針對性,而不是現(xiàn)有技術(shù)中的在挖掘漏洞過程中監(jiān)測到產(chǎn)品崩潰才發(fā)現(xiàn)待檢測應(yīng)用存在漏洞。具體地,本發(fā)明實(shí)施例是從待檢測應(yīng)用執(zhí)行的操作出發(fā),通過跟蹤待檢測應(yīng)用運(yùn)行時(shí)的整個(gè)過程中的各個(gè)操作,通過判斷操作中是否存在漏洞來挖掘待檢測應(yīng)用中的漏洞,能夠給主動(dòng)分析漏洞,實(shí)時(shí)性強(qiáng),而不是現(xiàn)有技術(shù)中被動(dòng)地等待產(chǎn)品發(fā)生頂層危險(xiǎn)行為。解決了現(xiàn)有技術(shù)中黑盒漏洞挖掘方法對漏洞的檢測不準(zhǔn)確、漏洞挖掘滯后的問題,實(shí)現(xiàn)了實(shí)時(shí)準(zhǔn)確地檢測待檢測應(yīng)用的漏洞的效果。
[0029]其中,本發(fā)明實(shí)施例中可以將所有的外部輸入數(shù)據(jù)(如網(wǎng)絡(luò)包,外部文件,用戶輸入的內(nèi)容)標(biāo)記為污染源(即非法數(shù)據(jù)源),因?yàn)橥獠枯斎霐?shù)據(jù)是不可信的,是可以被黑客控制的數(shù)據(jù)。然后將待檢測應(yīng)用對非法數(shù)據(jù)源執(zhí)行存儲(chǔ)操作時(shí)使用的區(qū)域(即待檢測應(yīng)用對非法數(shù)據(jù)源執(zhí)行操作時(shí)的全部路徑)均標(biāo)記為非法的非法操作區(qū)域。
[0030]具體地,上述實(shí)施例中S102獲取在運(yùn)行所述待檢測應(yīng)用時(shí)所執(zhí)行的操作指令可以通過如下步驟實(shí)現(xiàn):在所述待檢測應(yīng)用上執(zhí)行測試用例;獲取所述檢測應(yīng)用執(zhí)行所述測試用例時(shí)的運(yùn)行指令,其中,所述運(yùn)行指令為匯編指令;將所述運(yùn)行指令轉(zhuǎn)換為所述操作指令,其中,所述操作指令為使用中間語言描述的指令,所述中間語言為應(yīng)用于抽象機(jī)器的編程語目。
[0031]具體地,如圖2所示,本發(fā)明實(shí)施例可以通過如下步驟實(shí)現(xiàn):
[0032]步驟S202:在待檢測應(yīng)用上執(zhí)行測試用例。
[0033]其中,本發(fā)明實(shí)施例中的測試用例指:為某個(gè)安全漏洞挖掘目標(biāo)而編制(如預(yù)先設(shè)置好)的一組測試輸入、執(zhí)行條件以及預(yù)期結(jié)果,以便測試待測試產(chǎn)品的代碼路徑或核實(shí)是否滿足某個(gè)特定需求的字符串或數(shù)據(jù)包。
[0034]上述實(shí)施例中的測試用例可以為在開始進(jìn)行漏洞挖掘前,預(yù)先設(shè)置好的一些固定的基準(zhǔn)測試用例,該測試用例可以作為后續(xù)的運(yùn)行邏輯、指令獲取的來源。
[0035]步驟S204:獲取待檢測應(yīng)用執(zhí)行測試用例時(shí)的運(yùn)行指令。
[0036]具體地,可以獲取待檢測應(yīng)用執(zhí)行測試用例時(shí)的運(yùn)行邏輯,在獲取運(yùn)行邏輯之后獲取對應(yīng)的運(yùn)行指令。運(yùn)行邏輯也可以理解為約束集合,由待測試產(chǎn)品(即上述實(shí)施例中的待檢測應(yīng)用)中的所有約束所組成的一個(gè)集合,它代表著待檢測應(yīng)用的邏輯組織結(jié)構(gòu)。
[0037]步驟S206:將運(yùn)行指令翻譯簡化成中間指令。
[0038]其中,中間指令可以是使用中間語言描述的指令,在該實(shí)施例中的中間指令即為上述實(shí)施例中的操作指令。中間語言指一種應(yīng)用于抽象機(jī)器(abstract machine)的編程語言,它設(shè)計(jì)的目的,是用來幫助我們簡化對程序的分析,也即通過執(zhí)行該步驟可以簡化分析測試用例中的運(yùn)行邏輯。
[0039]具體地,通過定義中間語言的方法,將待測試產(chǎn)品(即上述實(shí)施例中的待檢測應(yīng)用)的運(yùn)行過程中的100多種傳統(tǒng)X86匯編指令通過指令翻譯,縮簡成僅包含10多種指令的中間指令,大大降低接下來對操作指令的分析的邏輯復(fù)雜度。
[0040]例如,三條傳統(tǒng)的x86匯報(bào)指令:
[0041]mov eax,O
[0042]mov ebx, I
[0043]add eax, ebx+8
[0044]經(jīng)過指令翻譯成中間語言后,簡化成如下中間指令:
[0045]vl = O
[0046]v2 = I
[0047]V 3 = v2+8
[0048]v4 = vl+v3
[0049]經(jīng)過簡化,對于漏洞分析而言,中間語言較x86匯編語言存在以下優(yōu)點(diǎn):采用虛擬寄存器(vl-vlOO),僅有10余條指令,拋棄長度、編碼等復(fù)雜cpu細(xì)節(jié);每條指令都是三元組表達(dá)式,每條指令所做的行為都是單一的;可以大大簡化分析待測產(chǎn)品運(yùn)行時(shí)操作指令(即上述是實(shí)施例中的中間指令)的難度。
[0050]下面以微信為例,詳細(xì)介紹本發(fā)明。
[0051]在微信上執(zhí)行測試用例,并獲取微信(即上述實(shí)施例中的待檢測應(yīng)用)執(zhí)行測試用例的執(zhí)行邏輯(即上述實(shí)施例中的運(yùn)行邏輯),在得到執(zhí)行邏輯之后,將與執(zhí)行邏輯對應(yīng)的運(yùn)行指令簡化為中間指令,然后判斷該中間指令操作的存儲(chǔ)區(qū)域中是否包括已經(jīng)標(biāo)記為非法操作區(qū)域的區(qū)域,如果該中間操作指令的存儲(chǔ)區(qū)域中包括已經(jīng)標(biāo)記為非法操作區(qū)域的區(qū)域,則檢測出該中間指令存在漏