本申請涉及信息安全,尤其涉及一種漏洞檢測方法和裝置。
背景技術(shù):
漏洞通常是指一個軟件設(shè)計時存在的缺陷或編碼時產(chǎn)生的錯誤,從而基于該缺陷或錯誤可能使該軟件遭受到攻擊。
現(xiàn)有的漏洞檢測方法通常采用靜態(tài)檢測(包括現(xiàn)有的正向漏洞檢測和逆向漏洞檢測)。即通過采集大量漏洞的樣本,判斷軟件中的待檢測文件中是否存在與大量樣本之一相同的特征函數(shù)和特征函數(shù)所帶的參數(shù),如果存在,則判斷所述待檢測文件中存在漏洞。例如,對于樣本之一f($a)所包含的特征函數(shù)為f()以及該特征函數(shù)所帶的參數(shù)為$a,如果待檢測文件中存在f($a),則判斷所述待檢測文件中存在漏洞。但是,現(xiàn)有的這種判斷方式存在局限性,只能有效地判斷特征函數(shù)和特征函數(shù)所帶的參數(shù)明顯與樣本相同的漏洞,不適合檢測復(fù)雜性相對較高的邏輯漏洞(即存在邏輯缺陷的漏洞)。
其中,常見的邏輯漏洞為在線支付邏輯漏洞,例如某支付應(yīng)用程序的關(guān)鍵步驟數(shù)據(jù)包中直接傳遞需要支付的金額,傳遞過程沒有簽名算法的認證,從而導致攻擊者可以隨意篡改所述金額,由于該類漏洞涉及的是應(yīng)用程序的整體分析,無法通過現(xiàn)有技術(shù)中簡單的特征函數(shù)及特征函數(shù)所帶的參數(shù)的匹配進行準確地判斷,有必要提供一種適合判斷該類漏洞的檢測方法和裝置。
技術(shù)實現(xiàn)要素:
本申請的目的之一是提升對軟件中的待檢測文件的漏洞尤其是邏輯漏洞進行檢測的準確性。
根據(jù)本申請的一個方面,提供了一種漏洞檢測方法,其中所述漏洞檢測方法包括:
將待檢測文件放入與該待檢測文件的實際執(zhí)行環(huán)境隔離的獨立空間中執(zhí)行;
收集所述待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列;
從所述函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,所述函數(shù)屬性指示特定漏洞在具有或排除特定函數(shù)、以及按特定順序具有特定函數(shù)方面的屬性;
如果存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中存在漏洞。
根據(jù)本申請的另一個方面,還提供了一種漏洞檢測裝置,包括:
文件放入單元,被配置為將待檢測文件放入與該待檢測文件的實際執(zhí)行環(huán)境隔離的獨立空間中執(zhí)行;
收集單元,被配置為收集所述待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列;
函數(shù)判斷單元,被配置為全部函數(shù)屬性從所述函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,所述函數(shù)屬性指示特定漏洞在具有或排除特定函數(shù)、以及按特定順序具有特定函數(shù)方面的屬性;
漏洞檢測單元,被配置為如果存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中存在漏洞。
與現(xiàn)有技術(shù)相比,本申請實施例具有以下優(yōu)點:本申請實施例通過判斷待檢測文件執(zhí)行過程中的函數(shù)序列是否存在于特定漏洞所包含的函數(shù)屬性相匹配的函數(shù)集合,從而有效地檢測出待檢測文件是否存在漏洞或/和存在何種漏洞,相對于現(xiàn)有的靜態(tài)檢測技術(shù),本申請可以從文件的整體執(zhí)行過程上判斷待檢測文件是否存在漏洞,從而提升對邏輯漏洞檢測的準確性。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
圖1為根據(jù)本申請一個實施例的漏洞檢測方法的流程圖;
圖2示出了根據(jù)本申請一個實施例的對圖1所示的步驟S102所包含的子步驟的流程圖;
圖3示出了根據(jù)本申請一個實施例的對圖1所示的步驟S102之后的步驟以及步驟S103所包含的子步驟的示意圖;
圖4示出了根據(jù)本申請一個實施例的對圖1所示的步驟S101之前的步驟進行描述的流程圖;
圖5為根據(jù)本申請一個優(yōu)選實施例的漏洞檢測裝置的示意性框圖;
圖6為根據(jù)本申請一個優(yōu)選實施例的漏洞檢測裝置所包括的其他單元的示意性框圖;
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實施方式
下面結(jié)合附圖對本申請作進一步詳細描述。
在更加詳細地討論示例性實施例之前應(yīng)當提到的是,一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時實施。此外,各項操作的順序可以被重新安排。當其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
在上下文中所稱“計算機設(shè)備”,也稱為“電腦”,是指可以通過運行特定程序或指令來執(zhí)行數(shù)值計算和/或邏輯計算等特定處理過程的智能電子設(shè)備,其可以包括處理器與存儲器,由處理器執(zhí)行在存儲器中預(yù)存的存續(xù)指令來執(zhí)行特定處理過程,或是由ASIC、FPGA、DSP等硬件執(zhí)行特定處理過程,或是由上述二者組合來實現(xiàn)。計算機設(shè)備包括但不限于服務(wù)器、個人電腦、筆記本電腦、平板電腦、智能手機等。
所述計算機設(shè)備包括用戶設(shè)備與網(wǎng)絡(luò)設(shè)備。其中,所述用戶設(shè)備包括但不限于電腦、智能手機、PDA等;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個網(wǎng)絡(luò)服務(wù)器、多個網(wǎng)絡(luò)服務(wù)器組成的服務(wù)器組或基于云計算(Cloud Computing)的由大量計算機或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其中,所述計算機設(shè)備可單獨運行來實現(xiàn)本申請,也可接入網(wǎng)絡(luò)并通過與網(wǎng)絡(luò)中的其他計算機設(shè)備的交互操作來實現(xiàn)本申請。其中,所述計算機設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等。
需要說明的是,所述用戶設(shè)備、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計算機設(shè)備或網(wǎng)絡(luò)如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并以引用方式包含于此。
后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實施。當用軟件、固件、中間件或微代碼來實施時,用以實施必要任務(wù)的程序代碼或代碼段可以被存儲在機器或計算機可讀介質(zhì)(比如存儲介質(zhì))中。(一個或多個)處理器可以實施必要的任務(wù)。
這里所公開的具體結(jié)構(gòu)和功能細節(jié)僅僅是代表性的,并且是用于描述本申請的示例性實施例的目的。但是本申請可以通過許多替換形式來具體實現(xiàn),并且不應(yīng)當被解釋成僅僅受限于這里所闡述的實施例。
應(yīng)當理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個單元,但是這些單元不應(yīng)當受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個單元與另一個單元進行區(qū)分。舉例來說,在不背離示例性實施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個或更多所列出的相關(guān)聯(lián)項目的任意和所有組合。
應(yīng)當理解的是,當一個單元被稱為“連接”或“耦合”到另一單元時,其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當一個單元被稱為“直接連接”或“直接耦合”到另一單元時,則不存在中間單元。應(yīng)當按照類似的方式來解釋被用于描述單元之間的關(guān)系的 其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術(shù)語僅僅是為了描述具體實施例而不意圖限制示例性實施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個”、“一項”還意圖包括復(fù)數(shù)。還應(yīng)當理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應(yīng)當提到的是,在一些替換實現(xiàn)方式中,所提到的功能/動作可以按照不同于附圖中標示的順序發(fā)生。舉例來說,取決于所涉及的功能/動作,相繼示出的兩幅圖實際上可以基本上同時執(zhí)行或者有時可以按照相反的順序來執(zhí)行。
根據(jù)本申請的一個方面的一個實施例,提供了一種漏洞檢測方法。
本實施例中,漏洞檢測主要針對軟件中的待檢測文件中的漏洞進行檢測。所述軟件在此是泛指,包括系統(tǒng)軟件、應(yīng)用軟件和介于這兩者之間的中間件等,或者說包括在計算機上運行的程序以及與該程序相關(guān)的文檔等等。
所述待檢測文件可以指所述軟件的全部或部分應(yīng)用程序、編碼等。
所述漏洞可以指軟件設(shè)計時所存在的缺陷或編碼時所產(chǎn)生的錯誤,從而基于該缺陷或錯誤可能使該軟件遭受到攻擊。以在線支付軟件的漏洞為例,該類軟件通常存在現(xiàn)有技術(shù)中常見的邏輯上的設(shè)計缺陷,基于該設(shè)計缺陷,攻擊者可以隨意篡改在線支付軟件中的支付金額。
所述漏洞檢測方法可以由服務(wù)器執(zhí)行。例如,通過在諸如電腦、手機等電子設(shè)備上輸入特定網(wǎng)址的方式,以建立與該特定網(wǎng)址對應(yīng)的單個服務(wù)器、多個服務(wù)器或云服務(wù)器的連接,進而通過在該特定網(wǎng)址對應(yīng)的網(wǎng)頁上上傳或輸入待檢測文件,由所述連接的服務(wù)器來檢測所述待檢測文件是否存在漏洞。
所述漏洞檢測方法也可以由電腦、手機等終端執(zhí)行。例如,通過在諸 如電腦、手機等電子設(shè)備上安裝用于檢測漏洞的應(yīng)用程序,通過該應(yīng)用程序來檢測所述待檢測文件是否存在漏洞。
其中所述漏洞可以指一個文件(或應(yīng)用軟件、系統(tǒng))設(shè)計時存在的缺陷或編碼時產(chǎn)生的錯誤,從而基于該缺陷或錯誤可能使該文件(或應(yīng)用軟件、系統(tǒng))遭受到攻擊。
請參考圖1,圖1為根據(jù)本申請一個實施例的漏洞檢測方法的流程圖。
如圖1所示,所述漏洞檢測方法1包括:
S101,將待檢測文件放入與該待檢測文件的實際執(zhí)行環(huán)境隔離的獨立空間中執(zhí)行。
待檢測文件可以指軟件的全部或其包括的部分應(yīng)用程序、編碼等。
實際執(zhí)行環(huán)境是指待檢測文件實際執(zhí)行時的硬件和軟件環(huán)境。硬件環(huán)境是指例如該待檢測文件執(zhí)行時占用的硬件空間,軟件環(huán)境是指例如該待檢測文件執(zhí)行時調(diào)用的函數(shù)、需要的參數(shù)等。如果待檢測文件在實際的硬件和軟件環(huán)境中執(zhí)行,如果此時待檢測文件存在漏洞,則可能因該漏洞使所述待檢測文件遭受攻擊,從而造成實際危害。因此,本申請實施例中,將待檢測文件放入與該待檢測文件的實際執(zhí)行環(huán)境隔離的獨立空間中運行,這個獨立空間不影響待檢測文件實際的執(zhí)行。即使在獨立空間中運行時產(chǎn)生問題,也不會對待檢測文件的實際執(zhí)行造成影響。獨立空間是指物理位置上獨立、與外界的函數(shù)調(diào)用和參數(shù)交換也獨立的空間。
在一種實現(xiàn)方式中,所述獨立空間可以是沙箱(Sand Box)。在另一種實現(xiàn)方式中,所述獨立空間可以是虛擬機。
需要說明的是,本申請實施例是將待檢測文件放入到獨立空間中模擬運行,不同于所述待檢測文件在實際執(zhí)行環(huán)境中對函數(shù)實際執(zhí)行的過程。
S102,收集所述待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列。
本實施例中所述函數(shù)序列可以指待檢測文件在執(zhí)行過程中所包括的各執(zhí)行路徑的函數(shù)的集合,以C語言編寫而成的某待檢測文件為例,其編寫的代碼例如為:
上述待檢測文件所包括的其中一條執(zhí)行路徑的函數(shù)的集合為:scanf("%d",&a)、if(a==123520)、printf("密碼正確")、getch();其中另一條執(zhí)行路徑的函數(shù)的集合為:scanf("%d",&a)、if(a==123520)、else、printf("錯了請重新輸入")、getch(),則上述兩條示例的執(zhí)行路徑的函數(shù)的集合即為待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列的示例。
當然,上文僅是以待檢測文件所包括的條件語句if-else進行執(zhí)行路徑的示例,并不在此限定,基于其他語句(如跳轉(zhuǎn)語句、循環(huán)語句等)而執(zhí)行其他路徑的情況以引用的方式包含于此。
可選地,請參考圖2,所述收集待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列的步驟S102包括:
步驟S201,確定所述待檢測文件在所述獨立空間中執(zhí)行時順序執(zhí)行到的待檢測文件中的函數(shù)。
對于待檢測文件而言,以應(yīng)用程序為例,雖然該應(yīng)用程序可能包括100個函數(shù),但是可能有10個函數(shù)在獨立空間中不會執(zhí)行,即這10個函數(shù)可能僅用于說明和解釋,其他90個函數(shù)才會在獨立空間中執(zhí)行,那么這90個在獨立空間中執(zhí)行的函數(shù)即為所述待檢測文件在獨立空間中執(zhí)行時執(zhí)行到的函數(shù)。
而所述順序執(zhí)行到的待檢測文件中的函數(shù)是指按照執(zhí)行的順序依次 確定的函數(shù),例如應(yīng)用程序中包括5個函數(shù),按照編碼的順序依次以A、B、C、D、E表示,該應(yīng)用程序在執(zhí)行時,依次執(zhí)行的函數(shù)的順序為A-D-B-C-E,則所述函數(shù)A、D、B、C、E為所確定的順序執(zhí)行到的待檢測文件中的函數(shù)。
步驟S202,將確定的函數(shù)按執(zhí)行順序串聯(lián)成函數(shù)序列。
以上文確定的函數(shù)A、D、B、C、E而言,將這些函數(shù)按照執(zhí)行的順序串聯(lián)成函數(shù)序列為:A-D-B-C-E。
繼續(xù)參考圖1,步驟S103,從所述函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,所述函數(shù)屬性指示特定漏洞在具有或排除特定函數(shù)、以及按特定順序具有特定函數(shù)方面的屬性。
其中,所述特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性可以包括以下中的至少一項:
特定漏洞必須包含的函數(shù);
特定漏洞必須排除的函數(shù);
特定漏洞可能包含、但如果包含必須在特定函數(shù)之前包含的函數(shù);
特定漏洞可能包含、但如果包含必須在特定函數(shù)之后包含的函數(shù)。
需要說明的是,上文只僅示出了函數(shù)屬性的部分示例,并不意在限定,其他函數(shù)屬性以引用的方式包含于此。
例如,對于特定漏洞X而言,其關(guān)聯(lián)的全部函數(shù)屬性包括:
-必須包含的起始函數(shù)A;
-必須包含的結(jié)束函數(shù)S;
-必須排除(或不能包含)的函數(shù)P1;
-必須包含的函數(shù)P2;
-必須包含的函數(shù)集合{P3、P4}中的至少之一的函數(shù)P3、P4。
其中所述函數(shù)屬性指示特定漏洞在具有或排除特定函數(shù),例如,對于上述特定漏洞X,其所關(guān)聯(lián)的全部函數(shù)屬性中,起始函數(shù)A、結(jié)束函數(shù)S以及函數(shù)P2、函數(shù)集合{P3、P4}中的至少之一的函數(shù)P3、P4為特定漏洞X具有的函數(shù),函數(shù)P1為特定漏洞X必須排除的函數(shù)。
所述函數(shù)屬性指示特定漏洞按特定順序具有特定函數(shù)方面的屬性,例如,對于漏洞Y,其可以包括函數(shù)H1、H2和M,但是H2必須在H1、M之前執(zhí)行才能實現(xiàn)漏洞Y的功能,也即所述特定順序可以指函數(shù)執(zhí)行的順序,包括之前、之后等。
所述從所述函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,以上述特定漏洞X,下文中四個示例性的待檢測文件的函數(shù)序列進行說明:
1)A->P2->P3->S
2)A->P1->P2->P3->S
3)A->P2->P4->S
4)A->S
對于上述函數(shù)序列1)而言,其包含了函數(shù)A、函數(shù)P2以及函數(shù)集合{P3、P4}中的之一P3、函數(shù)S,而對于特定漏洞X而言,如上文所述,其所關(guān)聯(lián)的全部函數(shù)屬性中,起始函數(shù)A、結(jié)束函數(shù)S以及函數(shù)P2、函數(shù)集合{P3、P4}中的至少之一的函數(shù)P3、P4為其必須具有的函數(shù),函數(shù)P1為其排除的函數(shù),通過比對上述函數(shù)序列1)和特定漏洞X關(guān)聯(lián)的全部函數(shù)屬性,則可以判斷得到該函數(shù)序列1)所包括的函數(shù)集合與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性相匹配,也即該函數(shù)序列1)存在與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合。
同理,上述函數(shù)序列3)由于包含了函數(shù)A、P1、P2、P3、S,這些函數(shù)所構(gòu)成的函數(shù)集合與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性也匹配,也即該函數(shù)序列3)也存在與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合。
而對于上述函數(shù)序列2)而言,其包含的函數(shù)中存在特定漏洞X必須排除的函數(shù)P1,因此,包括該函數(shù)在內(nèi)的函數(shù)集合與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性不匹配。
對于上述函數(shù)序列4)而言,由于其缺少特定漏洞X必須包含的函數(shù)P2、函數(shù)集合{P3、P4}中的至少之一的函數(shù)P3、P4,因此,該函數(shù)序列與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性不匹配,也即,不存在與特定漏洞X 所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合。
可選地,請參考圖3,所述方法在所述收集所述待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列的步驟S102之后還包括:
-步驟S301,在收集的函數(shù)序列中進一步確定與特定漏洞相關(guān)的函數(shù)序列。
可選地,所述從所述函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合的步驟S103進一步包括:
-步驟S302,從確定的與特定漏洞相關(guān)的函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合。
具體而言,步驟S301中所述與特定漏洞相關(guān)的函數(shù)序列可以指包括特定漏洞中必須包含的函數(shù)之一的函數(shù)序列,以上文示例的四個函數(shù)序列和特定漏洞X而言,這四個函數(shù)序列都包括了特定漏洞X必須包含的函數(shù)A、S中的至少之一,當然,所述相關(guān)也可以根據(jù)其他規(guī)則來判定。
可選地,對于上述步驟S301而言,其包括:
-從收集的函數(shù)序列中查找第一特定函數(shù),其中所述第一特定函數(shù)與特定漏洞所關(guān)聯(lián)的起始函數(shù)相同;
具體地,所述第一特定函數(shù)可以位于所述待檢測文件中的開始、中間或/和結(jié)尾等位置。例如,所述收集的函數(shù)序列依次包括A、B、C和S,則在函數(shù)序列的開始查找到與上述特定漏洞X的起始函數(shù)A相同的第一特定函數(shù)。
需要說明的是,所述第一特定函數(shù)中的“第一特定”在此只是為了將所述待檢測文件中的一個函數(shù)與另一個函數(shù)進行區(qū)分,下文中的“第二特定”類似描述同樣為了與其他函數(shù)進行區(qū)分。
-如果查找到所述第一特定函數(shù),在收集的函數(shù)序列中第一特定函數(shù)之后查找第二特定函數(shù),其中所述第二特定函數(shù)與特定漏洞所關(guān)聯(lián)的結(jié)束函數(shù)相同。
具體地,所述第二特定函數(shù)可以位于所述待檢測文件中的開始、中間或/和結(jié)尾等位置且在所述第一特定函數(shù)之后執(zhí)行。例如,所述收集的函數(shù)序列依次包括A、B、C和S,則在函數(shù)序列的開始查找到與上述特定漏 洞X的起始函數(shù)A相同的第一特定函數(shù),在該函數(shù)序列的末尾即第一特定函數(shù)A之后查找到與上述特定漏洞X的結(jié)束函數(shù)S相同的第二特定函數(shù)。
對于上述步驟S302從確定的與特定漏洞相關(guān)的函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,可以參考上文步驟S103的相關(guān)描述,在此不再贅述。
繼續(xù)參考圖1,步驟S104,如果存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中存在漏洞。
具體地,以上文中的待檢測文件的函數(shù)序列1)~4)為例,由于函數(shù)序列1)和3)存在與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中存在漏洞,可選地,檢測出所述待檢測文件中存在特定漏洞X。
可選地,所述方法還包括:如果不存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中不存在所述特定漏洞。
具體地,以上文中的待檢測文件的函數(shù)序列1)~4)為例,由于函數(shù)序列2)和4)不存在與特定漏洞X所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述兩個待檢測文件中不存在所述特定漏洞。
本申請的實施例通過分析漏洞的函數(shù)屬性以及待檢測文件的執(zhí)行序列,可以有效地檢測出待檢測文件中的漏洞,尤其是可以檢測出待檢測文件存在或不存在何種漏洞,具有針對性。
可選地,在所述步驟S101之前,請參考圖4,所述方法還包括:
步驟S401,接收特定漏洞的多個樣本函數(shù)集合。
具體地,可以通過與用戶進行交互來接收輸入到計算機的多個樣本函數(shù)集合,也可以接收從計算機中預(yù)先存儲的數(shù)據(jù)庫中所選取的多個樣本函數(shù)集合,也可以通過其他現(xiàn)有的方式來接收。
所述樣本函數(shù)集合包括可以形成該特定漏洞的函數(shù)集合,也可以包括不能形成該特定漏洞的函數(shù)集合,以上述特定漏洞X而言,其可以包括如 下的樣本函數(shù)集合:
樣本一:{A、P2、P3、S}
樣本二:{A、P2、P4、S}
樣本三:{A、P2、P3、P4、S};
樣本四:{A、P1、P2、P3、P4、S};
其中,樣本一至樣本三可以形成特定漏洞X,而樣本四雖然與樣本一至樣本三存在某些函數(shù)的交集,但是由于多了函數(shù)P1而不能形成特定漏洞X。
步驟S402,為所述多個樣本集合中的每個樣本函數(shù)集合,確定所包含的函數(shù)及函數(shù)的執(zhí)行順序。
具體地,所述確定所包含的函數(shù)在此可以指確定必須包含的函數(shù)以及排除必須不能包含的函數(shù)。所述確定可以根據(jù)特定漏洞的功能是否能實現(xiàn)來判斷,例如,對于上述樣本三和樣本四而言,樣本四比樣本三多了一個函數(shù)P1,如果樣本三能實現(xiàn)特定漏洞X的功能,而樣本四不能實現(xiàn)特定漏洞X的功能,則排除特定漏洞X必須不能包含的函數(shù)P1。
所述樣本函數(shù)集合所包含的函數(shù)的執(zhí)行順序的也可以根據(jù)特定漏洞的功能是否能實現(xiàn)來確定,例如對于上述樣本一而言,只有依次執(zhí)行函數(shù)A、P2、P3、S的情況下,才能實現(xiàn)漏洞X的功能,否則,其他執(zhí)行順序下例如A-S-P2-P3,則不能實現(xiàn)漏洞X的功能,因此,對于樣本一所確定的函數(shù)及函數(shù)的執(zhí)行順序為:A-P2-P3-S。
步驟S403,根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù)及函數(shù)的執(zhí)行順序,確定所述多個樣本函數(shù)集合共同具有的函數(shù)、共同排除的函數(shù)、以及具有特定執(zhí)行順序的函數(shù),作為所述與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性。
具體地,仍以上述四個樣本函數(shù)集合為例,各自包含的函數(shù)即函數(shù)的執(zhí)行順序依次如下:
A-P2-P3-S;
A-P2-P4-S;
A-P2-P3-P4-S;
A-P1-P2-P3-P4-S
根據(jù)比對,上述三個樣本函數(shù)集合中共同具有的函數(shù)為A、P2和S以及{P3、P4}函數(shù)集合中的至少之一,共同排除的函數(shù)為P1、具有的特定執(zhí)行順序包括A-P2-P3-S、A-P2-P4-S和A-P2-P3-P4-S,則將這些函數(shù)所具有的以下屬性作為特定漏洞X的全部函數(shù)屬性:
-必須包含的起始函數(shù)A;
-必須包含的結(jié)束函數(shù)S;
-必須排除(或不能包含)的函數(shù)P1;
-必須包含的函數(shù)P2;
-必須包含的函數(shù)集合{P3、P4}中的至少之一的函數(shù)P3、P4。
可選地,上述確定所述多個樣本函數(shù)集合共同具有的函數(shù)、共同排除的函數(shù)、以及具有特定執(zhí)行順序的函數(shù)的步驟S403包括:
Ⅰ)根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù),確定所述多個樣本函數(shù)集合共同具有的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性;
具體地,以上述四個樣本為例,這四個樣本各自所包含的函數(shù)中,函數(shù)A、P2、{P3、P4}中的至少之一是這四個樣本共同具有的函數(shù),因此,確定以下函數(shù)屬性作為特定漏洞X所關(guān)聯(lián)的函數(shù)屬性:
-必須包含的起始函數(shù)A;
-必須包含的結(jié)束函數(shù)S;
-必須包含的函數(shù)P2;
-必須包含的函數(shù)集合{P3、P4}中的至少之一的函數(shù)P3、P4。
Ⅱ)根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù),確定所述多個樣本函數(shù)集合共同排除的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性;
具體地,仍以上述四個樣本為例,這四個樣本共同需排除的函數(shù)為P1,否則不能形成漏洞X,則確定以下函數(shù)屬性作為特定漏洞X所關(guān)聯(lián)的函數(shù)屬性:
-必須排除(或不能包含)的函數(shù)P1。
Ⅲ)根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù)的執(zhí)行順序,確定 所述多個樣本函數(shù)中一旦包含則一定在特定函數(shù)之前包含的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性;
具體地,仍以上述四個樣本為例,在前三個可以形成特定漏洞X的樣本中,都包含函數(shù)A,且函數(shù)A必須在所有其他函數(shù)之前包含。
Ⅳ)根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù)的執(zhí)行順序,確定所述多個樣本函數(shù)中一旦包含則一定在特定函數(shù)之后包含的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性。
具體地,仍以上述四個樣本為例,在前三個可以形成特定漏洞X的樣本中,都包含函數(shù)S,且函數(shù)S必須在所有其他函數(shù)之后包含。
根據(jù)本申請的另一個實施例,還提供了一種漏洞檢測裝置。
本實施例中,漏洞檢測主要針對軟件中的待檢測文件中的漏洞進行檢測。所述軟件在此是泛指,包括系統(tǒng)軟件、應(yīng)用軟件和介于這兩者之間的中間件等,或者說包括在計算機上運行的程序以及與該程序相關(guān)的文檔等等。
所述待檢測文件可以指所述軟件的全部或部分應(yīng)用程序、編碼等。
請參考圖5,所述漏洞檢測裝置包括:
-文件放入單元501,被配置為將所述待檢測文件放入與該待檢測文件的實際執(zhí)行環(huán)境隔離的獨立空間中執(zhí)行。其中所述獨立空間包括但不限于沙箱和/或虛擬機。
-收集單元502,被配置為收集所述待檢測文件在所述獨立空間中執(zhí)行的函數(shù)序列。
-函數(shù)判斷單元503,被配置為從所述函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,所述函數(shù)屬性指示特定漏洞在具有或排除特定函數(shù)、以及按特定順序具有特定函數(shù)方面的屬性;
-漏洞檢測單元504,被配置為如果存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中存在漏洞。
可選地,所述收集單元502被配置為:
-確定所述待檢測文件在所述獨立空間中執(zhí)行時順序執(zhí)行到的待檢測 文件中的函數(shù);
-將確定的函數(shù)按執(zhí)行順序串聯(lián)成函數(shù)序列。
可選地,所述裝置還包括:
-函數(shù)序列確定單元(圖中未示出),被配置為在收集的函數(shù)序列中進一步確定與特定漏洞相關(guān)的函數(shù)序列;
其中所述函數(shù)判斷單元503,被配置為從確定的與特定漏洞相關(guān)的函數(shù)序列中判斷是否存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合。
可選地,所述函數(shù)序列確定單元被配置為:
從收集的函數(shù)序列中查找第一特定函數(shù),其中所述第一特定函數(shù)與特定漏洞所關(guān)聯(lián)的起始函數(shù)相同;
如果查找到所述第一特定函數(shù),在收集的函數(shù)序列中第一特定函數(shù)之后查找第二特定函數(shù),其中所述第二特定函數(shù)與特定漏洞所關(guān)聯(lián)的結(jié)束函數(shù)相同。
可選地,上述特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性包括以下中的至少一項:
特定漏洞必須包含的函數(shù);
特定漏洞必須排除的函數(shù);
特定漏洞可能包含、但如果包含必須在特定函數(shù)之前包含的函數(shù);
特定漏洞可能包含、但如果包含必須在特定函數(shù)之后包含的函數(shù)。
可選地,所述漏洞檢測單元504還被配置為:
-如果不存在與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性相匹配的函數(shù)集合,則檢測出所述待檢測文件中不存在所述特定漏洞。
可選地,請參考圖6,所述裝置還包括:
樣本函數(shù)集合接收單元601,被配置為接收特定漏洞的多個樣本函數(shù)集合;
第一確定單元602,被配置為為所述多個樣本集合中的每個樣本函數(shù)集合,確定所包含的函數(shù)及函數(shù)的執(zhí)行順序;
第二確定單元603,被配置為根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù)及函數(shù)的執(zhí)行順序,確定所述多個樣本函數(shù)集合共同具有的函數(shù)、 共同排除的函數(shù)、以及具有特定執(zhí)行順序的函數(shù),作為所述與特定漏洞所關(guān)聯(lián)的全部函數(shù)屬性。
可選地,所述第二確定單元603被配置為:
根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù),確定所述多個樣本函數(shù)集合共同具有的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性;
根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù),確定所述多個樣本函數(shù)集合共同排除的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性;
根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù)的執(zhí)行順序,確定所述多個樣本函數(shù)中一旦包含則一定在特定函數(shù)之前包含的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性;
根據(jù)確定的各樣本函數(shù)集合各自所包含的函數(shù)的執(zhí)行順序,確定所述多個樣本函數(shù)中一旦包含則一定在特定函數(shù)之后包含的函數(shù),作為與特定漏洞所關(guān)聯(lián)的函數(shù)屬性。
應(yīng)當理解,圖5-圖6所述的結(jié)構(gòu)框圖僅僅是為了示例的目的,而不是對本申請范圍的限制。在某些情況下,可以根據(jù)具體情況增加或減少某些設(shè)備。
所屬技術(shù)領(lǐng)域的技術(shù)人員知道,本申請可以實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:可以是完全的硬件,也可以是完全的軟件,還可以是硬件和軟件結(jié)合的形式。
附圖中的流程圖和框圖顯示了根據(jù)本申請的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬 件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實施例的細節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本申請。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標記視為限制所涉及的權(quán)利要求。