本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種目標(biāo)樣本文件的檢測(cè)方法和裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,人們對(duì)于網(wǎng)絡(luò)的使用愈加頻繁,通過(guò)網(wǎng)絡(luò)可以進(jìn)行工作、學(xué)習(xí)、生活、娛樂(lè)等多方面的事宜,給人們帶來(lái)了極大的便利。然而,當(dāng)前互聯(lián)網(wǎng)技術(shù)中存在系統(tǒng)級(jí)的內(nèi)核漏洞,這些漏洞給惡意開(kāi)發(fā)者以可乘之機(jī),惡意開(kāi)發(fā)者們通過(guò)威脅樣本文件利用這些漏洞對(duì)各種客戶端、服務(wù)端所在的終端進(jìn)行攻擊,獲取用戶的個(gè)人信息,威脅用戶的信息安全,給用戶的人身、財(cái)產(chǎn)等方面損失。
因此,如何有效、全面地對(duì)互聯(lián)網(wǎng)中進(jìn)行漏洞利用攻擊的可疑樣本進(jìn)行挖掘、檢測(cè)和處理,是當(dāng)前亟待解決的重要問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的目標(biāo)樣本文件的檢測(cè)方法和裝置。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種目標(biāo)樣本文件的檢測(cè)方法,包括:
從數(shù)據(jù)源接收目標(biāo)樣本文件;
將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用;
是則,確定目標(biāo)樣本文件為威脅樣本文件;并根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志。
可選地,在所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行之前,該方法進(jìn)一步包括:
加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序;根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化;
則所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行包括:在對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化之后,在虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程,通過(guò)該進(jìn)程運(yùn)行所述目標(biāo)樣本文件;
則所述檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用包括:利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
可選地,所述加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序包括:
初始化所述驅(qū)動(dòng)程序的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量;
記錄虛擬機(jī)中的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息;
記錄虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的初始值。
可選地,該方法進(jìn)一步包括:
當(dāng)虛擬機(jī)中的系統(tǒng)創(chuàng)建進(jìn)程時(shí),將所創(chuàng)建的進(jìn)程的標(biāo)識(shí)信息記錄到安全進(jìn)程列表中。
可選地,所述利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用包括:
監(jiān)聽(tīng)虛擬機(jī)中執(zhí)行指定操作的函數(shù)的調(diào)用事件;
當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中執(zhí)行指定操作的函數(shù)被調(diào)用時(shí),攔截該調(diào)用事件;
獲取所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息,判斷所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息是否命中所述安全進(jìn)程列表;
是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用;否則,判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用。
可選地,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括:
獲取當(dāng)前虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的值;
將當(dāng)前獲取的各函數(shù)指針的值與在所述驅(qū)動(dòng)程序加載階段所記錄的相應(yīng)函數(shù)指針的初始值進(jìn)行匹配;
如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
可選地,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括:
根據(jù)在所述驅(qū)動(dòng)程序加載階段所記錄的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息,獲取各個(gè)系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址;
獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址;
判斷當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值是否命中系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值;
是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
可選地,該方法進(jìn)一步包括:
當(dāng)虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程時(shí),記錄該進(jìn)程所屬的初始屬性值。
可選地,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括:
獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值;
將當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值與在該進(jìn)程被創(chuàng)建時(shí)記錄的初始屬性值進(jìn)行匹配,如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
可選地,所述利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用還包括:
當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),結(jié)束所述調(diào)用事件;
當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用時(shí),允許所述調(diào)用事件繼續(xù)執(zhí)行。
可選地,所述根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化包括:在虛擬機(jī)中創(chuàng)建日志記錄線程;
則所述根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志包括:
利用所述日志記錄線程每隔預(yù)設(shè)時(shí)間間隔檢查虛擬機(jī)中是否生成新的關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志,是則將新的檢測(cè)結(jié)果日志以隊(duì)列的形式寫(xiě)入指定日志存儲(chǔ)區(qū)。
可選地,該方法進(jìn)一步包括:
當(dāng)所述目標(biāo)樣本文件運(yùn)行結(jié)束后,從所述指定日志存儲(chǔ)區(qū)讀取檢測(cè)結(jié)果日志并推送至數(shù)據(jù)源。
可選地,該方法進(jìn)一步包括:
獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息;
根據(jù)所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息,獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址;
監(jiān)聽(tīng)虛擬機(jī)中的指定事件;
當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),攔截所述指定事件;
獲取所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址,獲取所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址;
將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址、所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配;
如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,則確定所述驅(qū)動(dòng)程序受到攻擊,結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
可選地,該方法進(jìn)一步包括:
獲取檢測(cè)結(jié)果日志的存儲(chǔ)路徑;
在監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),還獲取所述指定事件的操作目標(biāo)的文件路徑;
將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配,以及,將所述指定事件的操作目標(biāo)的文件路徑與所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑進(jìn)行匹配;
如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)的文件路徑命中所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑,則確定檢測(cè)結(jié)果日志被惡意訪問(wèn),結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
依據(jù)本發(fā)明的另一個(gè)方面,提供了一種目標(biāo)樣本文件的檢測(cè)裝置,包括:
樣本接收單元,適于從數(shù)據(jù)源接收目標(biāo)樣本文件;
檢測(cè)處理單元,適于將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用;是則,確定目標(biāo)樣本文件為威脅樣本文件;并根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志。
可選地,所述檢測(cè)處理單元,進(jìn)一步適于在所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行之前,加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序;根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化;
則所述檢測(cè)處理單元,適于在對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化之后,在虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程,通過(guò)該進(jìn)程運(yùn)行所述目標(biāo)樣本文件;利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
可選地,所述檢測(cè)處理單元,適于初始化所述驅(qū)動(dòng)程序的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量;記錄虛擬機(jī)中的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息;記錄虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的初始值。
可選地,所述檢測(cè)處理單元,進(jìn)一步適于當(dāng)虛擬機(jī)中的系統(tǒng)創(chuàng)建進(jìn)程時(shí),將所創(chuàng)建的進(jìn)程的標(biāo)識(shí)信息記錄到安全進(jìn)程列表中。
可選地,所述檢測(cè)處理單元,適于監(jiān)聽(tīng)虛擬機(jī)中執(zhí)行指定操作的函數(shù)的調(diào)用事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中執(zhí)行指定操作的函數(shù)被調(diào)用時(shí),攔截該調(diào)用事件;獲取所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息,判斷所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息是否命中所述安全進(jìn)程列表;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用;否則,判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用。
可選地,所述檢測(cè)處理單元,適于獲取當(dāng)前虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的值;將當(dāng)前獲取的各函數(shù)指針的值與在所述驅(qū)動(dòng)程序加載階段所記錄的相應(yīng)函數(shù)指針的初始值進(jìn)行匹配;如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
可選地,所述檢測(cè)處理單元,適于根據(jù)在所述驅(qū)動(dòng)程序加載階段所記錄的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息,獲取各個(gè)系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址;獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址;判斷當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值是否命中系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
可選地,所述檢測(cè)處理單元,進(jìn)一步適于當(dāng)虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程時(shí),記錄該進(jìn)程所屬的初始屬性值。
可選地,所述檢測(cè)處理單元,適于獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值;將當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值與在該進(jìn)程被創(chuàng)建時(shí)記錄的初始屬性值進(jìn)行匹配,如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
可選地,所述檢測(cè)處理單元,適于當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),結(jié)束所述調(diào)用事件;當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用時(shí),允許所述調(diào)用事件繼續(xù)執(zhí)行。
可選地,所述檢測(cè)處理單元,適于在虛擬機(jī)中創(chuàng)建日志記錄線程;利用所述日志記錄線程每隔預(yù)設(shè)時(shí)間間隔檢查虛擬機(jī)中是否生成新的關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志,是則將新的檢測(cè)結(jié)果日志以隊(duì)列的形式寫(xiě)入指定日志存儲(chǔ)區(qū)。
可選地,所述檢測(cè)處理單元,進(jìn)一步適于當(dāng)所述目標(biāo)樣本文件運(yùn)行結(jié)束后,從所述指定日志存儲(chǔ)區(qū)讀取檢測(cè)結(jié)果日志并推送至數(shù)據(jù)源。
可選地,所述檢測(cè)處理單元,進(jìn)一步適于獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息;根據(jù)所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息,獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址;監(jiān)聽(tīng)虛擬機(jī)中的指定事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),攔截所述指定事件;獲取所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址,獲取所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址、所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,則確定所述驅(qū)動(dòng)程序受到攻擊,結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
可選地,所述檢測(cè)處理單元,進(jìn)一步適于獲取檢測(cè)結(jié)果日志的存儲(chǔ)路徑;在監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),還獲取所述指定事件的操作目標(biāo)的文件路徑;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配,以及,將所述指定事件的操作目標(biāo)的文件路徑與所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)的文件路徑命中所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑,則確定檢測(cè)結(jié)果日志被惡意訪問(wèn),結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
由上述可知,本發(fā)明的技術(shù)方案將從數(shù)據(jù)源接收的目標(biāo)樣本文件投放到虛擬機(jī)中進(jìn)行檢測(cè),當(dāng)檢測(cè)出目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),確定目標(biāo)樣本文件為威脅樣本文件,并生成相應(yīng)的檢測(cè)結(jié)果日志。本方案以虛擬機(jī)作為載體運(yùn)行目標(biāo)樣本文件,能夠清晰地檢測(cè)到目標(biāo)樣本文件的所有運(yùn)行軌跡,全面分析得到目標(biāo)樣本文件相關(guān)的特征信息,根據(jù)目標(biāo)樣本文件相關(guān)的特征信息可以更為準(zhǔn)確地判斷所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用,進(jìn)而確定出威脅樣本文件;生成關(guān)于威脅樣本文件的檢測(cè)結(jié)果日志,為后續(xù)信息安全防護(hù)提供參考和依據(jù)。
上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書(shū)的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說(shuō)明
通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種目標(biāo)樣本文件的檢測(cè)方法的流程圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的目標(biāo)樣本文件的檢測(cè)方案中每個(gè)模塊對(duì)應(yīng)的流程圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用的流程圖;
圖4A示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)虛擬機(jī)中輔助檢測(cè)進(jìn)程保護(hù)的流程圖;
圖4B示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)虛擬機(jī)中輔助檢測(cè)文件保護(hù)的流程圖;
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種目標(biāo)樣本文件的檢測(cè)裝置的示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種目標(biāo)樣本文件的檢測(cè)方法的流程圖。如圖1所示,該方法包括:
步驟S110,從數(shù)據(jù)源接收目標(biāo)樣本文件。
步驟S120,將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
步驟S130,是則,確定目標(biāo)樣本文件為威脅樣本文件;并根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志。
可見(jiàn),圖1所示的方法將從數(shù)據(jù)源接收的目標(biāo)樣本文件投放到虛擬機(jī)中進(jìn)行檢測(cè),當(dāng)檢測(cè)出目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),確定目標(biāo)樣本文件為威脅樣本文件,并生成相應(yīng)的檢測(cè)結(jié)果日志。本方案以虛擬機(jī)作為載體運(yùn)行目標(biāo)樣本文件,能夠清晰地檢測(cè)到目標(biāo)樣本文件的所有運(yùn)行軌跡,全面分析得到目標(biāo)樣本文件相關(guān)的特征信息,根據(jù)目標(biāo)樣本文件相關(guān)的特征信息可以更為準(zhǔn)確地判斷所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用,進(jìn)而確定出威脅樣本文件;生成關(guān)于威脅樣本文件的檢測(cè)結(jié)果日志,為后續(xù)信息安全防護(hù)提供參考和依據(jù)。
其中,分析得到的目標(biāo)樣本文件相關(guān)的特征信息包括:目標(biāo)樣本文件的靜態(tài)特征信息,和/或,目標(biāo)樣本文件的行為特征信息。也就是說(shuō),對(duì)于放入虛擬機(jī)中運(yùn)行的目標(biāo)樣本文件,無(wú)論是該目標(biāo)樣本文件的靜態(tài)特征,還是該目標(biāo)樣本文件在運(yùn)行過(guò)程中的動(dòng)態(tài)行為特征,均可以被解構(gòu)出來(lái),均可以從本方案的視角觀察到,即掌握了一個(gè)目標(biāo)樣本文件的完整的檔案,進(jìn)而對(duì)于該目標(biāo)樣本文件是不是具有威脅的威脅樣本文件、如果是威脅樣本文件如何對(duì)該可疑樣本進(jìn)行預(yù)防、查殺等問(wèn)題均可以找到準(zhǔn)確的答案。
在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)源可以是本方案的分布于不同終端上的客戶端,客戶端對(duì)于目標(biāo)樣本文件進(jìn)行打點(diǎn)記錄,本方案所接收到的目標(biāo)樣本文件可以是由各個(gè)客戶端上傳的;數(shù)據(jù)源也可以是與本方案合作的第三方安全檢測(cè)平臺(tái),本方案所接收到的目標(biāo)樣本文件可以是由該第三方安全檢測(cè)平臺(tái)檢測(cè)后上傳的;數(shù)據(jù)源也可以是其他產(chǎn)品的客戶端或者部署于其他產(chǎn)品的客戶端上的熱補(bǔ)丁,本方案所接收到的目標(biāo)樣本文件可以是由其他產(chǎn)品的客戶端或者部署于其他產(chǎn)品的客戶端上的熱補(bǔ)丁上傳的;此外,本方案所接收到的目標(biāo)樣本文件還可以是通過(guò)爬蟲(chóng)從各種網(wǎng)站上爬取的。
在本發(fā)明的一個(gè)實(shí)施例中,在步驟S120將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行之前,圖1所示的方法進(jìn)一步包括:加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序;根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化。則上述步驟S120將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用包括:在對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化之后,在虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程,通過(guò)該進(jìn)程運(yùn)行所述目標(biāo)樣本文件;利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
其中,上述加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序包括:初始化所述驅(qū)動(dòng)程序的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量;記錄虛擬機(jī)中的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息;記錄虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的初始值。
以及,圖1所示的方法進(jìn)一步包括:當(dāng)虛擬機(jī)中的系統(tǒng)創(chuàng)建進(jìn)程時(shí),將所創(chuàng)建的進(jìn)程的標(biāo)識(shí)信息記錄到安全進(jìn)程列表中。在此基礎(chǔ)上,上述步驟S120利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用包括:監(jiān)聽(tīng)虛擬機(jī)中執(zhí)行指定操作的函數(shù)的調(diào)用事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中執(zhí)行指定操作的函數(shù)被調(diào)用時(shí),攔截該調(diào)用事件;獲取所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息,判斷所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息是否命中所述安全進(jìn)程列表;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用;否則,判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用。
具體地,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括三種方案:
方案一,獲取當(dāng)前虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的值;將當(dāng)前獲取的各函數(shù)指針的值與在所述驅(qū)動(dòng)程序加載階段所記錄的相應(yīng)函數(shù)指針的初始值進(jìn)行匹配;如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
方案二,根據(jù)在所述驅(qū)動(dòng)程序加載階段所記錄的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息,獲取各個(gè)系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址;獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址;判斷當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值是否命中系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
方案三,當(dāng)虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程時(shí),記錄該進(jìn)程所屬的初始屬性值。獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值;將當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值與在該進(jìn)程被創(chuàng)建時(shí)記錄的初始屬性值進(jìn)行匹配,如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
基于上述三種方案,步驟S120利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用還包括:當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),結(jié)束所述調(diào)用事件;當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用時(shí),允許所述調(diào)用事件繼續(xù)執(zhí)行。
在本發(fā)明的一個(gè)實(shí)施例中,上述根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化包括:在虛擬機(jī)中創(chuàng)建日志記錄線程;則上述步驟S130根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志包括:利用所述日志記錄線程每隔預(yù)設(shè)時(shí)間間隔檢查虛擬機(jī)中是否生成新的關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志,是則將新的檢測(cè)結(jié)果日志以隊(duì)列的形式寫(xiě)入指定日志存儲(chǔ)區(qū)。則進(jìn)一步地,圖1所示的方法還包括:當(dāng)所述目標(biāo)樣本文件運(yùn)行結(jié)束后,從所述指定日志存儲(chǔ)區(qū)讀取檢測(cè)結(jié)果日志并推送至數(shù)據(jù)源。
以一個(gè)具體的例子來(lái)說(shuō)明本方案的實(shí)施過(guò)程:在本例中,通過(guò)對(duì)目標(biāo)樣本文件的檢測(cè)實(shí)現(xiàn)內(nèi)核漏洞后端檢測(cè),用于在服務(wù)器端虛擬機(jī)沙箱隔離環(huán)境中針對(duì)目標(biāo)樣本文件進(jìn)行動(dòng)態(tài)的內(nèi)核漏洞利用檢測(cè)。本方案的檢測(cè)過(guò)程在虛擬機(jī)中完成,實(shí)現(xiàn)代碼主要涉及虛擬機(jī)中的4個(gè)模塊:Agent.exe,虛擬機(jī)通信代理模塊,負(fù)責(zé)檢測(cè)模塊和樣本文件的接收,Analyzer進(jìn)程的創(chuàng)建,與虛擬機(jī)外部服務(wù)器端進(jìn)程實(shí)時(shí)數(shù)據(jù)交互、日志和文件傳遞。Analyzer.exe,內(nèi)部調(diào)度管控模塊,負(fù)責(zé)樣本文件類型識(shí)別、LoadHP進(jìn)程的創(chuàng)建,內(nèi)部檢測(cè)超時(shí)設(shè)定和限制,操作系統(tǒng)屏幕模擬點(diǎn)擊實(shí)現(xiàn),屏幕截取實(shí)現(xiàn),與Agent的數(shù)據(jù)通信。LoadHP.exe,檢測(cè)輔助操作模塊,負(fù)責(zé)加載檢測(cè)主模塊驅(qū)動(dòng)程序,通過(guò)配置文件選項(xiàng)控制各檢測(cè)功能開(kāi)關(guān),與核心模塊驅(qū)動(dòng)程序之間通信和交互,樣本文件進(jìn)程的啟動(dòng)。Honeypot.sys,檢測(cè)實(shí)現(xiàn)核心模塊,驅(qū)動(dòng)程序?qū)崿F(xiàn)。在操作系統(tǒng)內(nèi)核中設(shè)置進(jìn)程創(chuàng)建回調(diào)通知、對(duì)指定的內(nèi)核API掛鉤,在HOOK處理函數(shù)中判定進(jìn)程是否提權(quán),打點(diǎn)并生成檢測(cè)結(jié)果日志等。
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的目標(biāo)樣本文件的檢測(cè)方案中每個(gè)模塊對(duì)應(yīng)的流程圖,描述了虛擬機(jī)中的每個(gè)模塊在方案整體流程中所執(zhí)行的操作。服務(wù)器側(cè)在從數(shù)據(jù)源接收目標(biāo)樣本文件之后,需要將目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行并進(jìn)行檢測(cè),具體如圖2所示:
Agent.exe所執(zhí)行的操作流程為:1.啟動(dòng),Agent進(jìn)程隨虛擬機(jī)操作系統(tǒng)開(kāi)機(jī)自啟動(dòng)。2.接收和部署,監(jiān)聽(tīng)指定的端口,等待并接收虛擬機(jī)外部相關(guān)進(jìn)程傳輸檢測(cè)包和目標(biāo)樣本文件到虛擬機(jī)內(nèi)部,解壓檢測(cè)包到某隨機(jī)名稱目錄并放置樣本文件到臨時(shí)目錄中。啟動(dòng)檢測(cè)包目錄下的Analyzer進(jìn)程。3.監(jiān)聽(tīng)和通信,創(chuàng)建消息通信線程,通過(guò)RPC的方式與Analyzer建立通信連接,并將后面接收到的來(lái)自于Analyzer進(jìn)程的消息數(shù)據(jù)包實(shí)時(shí)轉(zhuǎn)發(fā)至虛擬機(jī)外部的主機(jī)網(wǎng)絡(luò)地址。
Analyzer.exe所執(zhí)行的操作流程為::1.初始化,根據(jù)analyzer.conf等配置文件獲取樣本文件路徑,判斷目標(biāo)樣本文件類型,并根據(jù)配置文件中的配置選項(xiàng)選擇對(duì)應(yīng)的檢測(cè)模式、超時(shí)限制、各功能開(kāi)關(guān)來(lái)初始化Analyzer自身各功能。2.輔助功能,創(chuàng)建屏幕截取線程,間隔單位時(shí)間截取屏幕圖像,并實(shí)時(shí)發(fā)送給Agent進(jìn)程。創(chuàng)建鼠標(biāo)模擬點(diǎn)擊線程,隨機(jī)針對(duì)屏幕坐標(biāo)模擬鼠標(biāo)左鍵單擊操作,并針對(duì)部分特定彈出對(duì)話框的按鈕等控件坐標(biāo)進(jìn)行點(diǎn)擊。3.啟動(dòng)進(jìn)程,創(chuàng)建LoadHP進(jìn)程所需的Honeypot.ini配置文件,并啟動(dòng)LoadHP進(jìn)程并將目標(biāo)樣本文件的路徑或URL通過(guò)參數(shù)的方式傳入。4.超時(shí)限制,在設(shè)定或默認(rèn)的檢測(cè)超時(shí)時(shí)間到達(dá)時(shí),結(jié)束檢測(cè)并將檢測(cè)結(jié)果目錄打包程壓縮包,并將壓縮包數(shù)據(jù)發(fā)送給Agent進(jìn)程,由Agent進(jìn)程發(fā)送給虛擬機(jī)外部網(wǎng)絡(luò)地址。隨后關(guān)閉虛擬機(jī)操作系統(tǒng),結(jié)束虛擬機(jī)內(nèi)的檢測(cè)流程。
LoadHP.exe所執(zhí)行的操作流程為:1.初始化,首先通過(guò)命令行參數(shù)和Honeypot.ini配置文件獲取樣本文件路徑、檢測(cè)模式、檢測(cè)功能配置選項(xiàng)、各檢測(cè)點(diǎn)功能開(kāi)關(guān)等基礎(chǔ)數(shù)據(jù),計(jì)算樣本文件MD5。2.加載驅(qū)動(dòng),加載驅(qū)動(dòng)程序Honeypot.sys并按照配置選項(xiàng)發(fā)送初始化檢測(cè)功能。3.傳遞數(shù)據(jù),通過(guò)IO控制碼的方式發(fā)送進(jìn)程、樣本等基礎(chǔ)信息至Honeypot驅(qū)動(dòng)模塊并開(kāi)啟內(nèi)核層漏洞利用行為監(jiān)控。3.啟動(dòng)樣本,隨后LoadHP.exe進(jìn)程啟動(dòng)目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程。
Honeypot.sys所執(zhí)行的操作流程為:在Honeypot.sys中與LoadHP進(jìn)程交互,進(jìn)行方案對(duì)于目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用的核心檢測(cè)實(shí)現(xiàn),并在創(chuàng)建的日志記錄線程中將檢測(cè)結(jié)果日志以文件的形式追加存儲(chǔ)于指定的日志存放目錄中。
其中,Honeypot.sys所執(zhí)行的對(duì)目標(biāo)樣本文件進(jìn)行檢測(cè)的具體操作如圖3所示,圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用的流程圖,包括:
1.加載,在Honeypot.sys驅(qū)動(dòng)程序加載時(shí)初始化驅(qū)動(dòng)程序必須的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量。記錄System、smss.exe、csrss.exe、wininit.exe等系統(tǒng)進(jìn)程的PID。記錄HalDispatchTable表中存儲(chǔ)的HalQuerySystemInformation等函數(shù)指針的值。
2.初始化,根據(jù)用戶層進(jìn)程LoadHP.exe發(fā)送的IO控制碼執(zhí)行相關(guān)的初始化操作,創(chuàng)建日志記錄線程。Honeypot在接收到標(biāo)記為“內(nèi)核利用監(jiān)控”的IO控制碼時(shí),根據(jù)傳入Buffer的數(shù)據(jù),選擇進(jìn)入對(duì)應(yīng)的分發(fā)處理例程中。HOOK SSDT中對(duì)內(nèi)存、特權(quán)、注冊(cè)表、進(jìn)線程、文件等操作的關(guān)鍵NTAPI和NtQueryIntervalProfile,并設(shè)置新的進(jìn)程創(chuàng)建通知回調(diào)例程。
3.開(kāi)啟監(jiān)控,根據(jù)LoadHP.exe發(fā)送的相關(guān)IOCTL開(kāi)啟內(nèi)核層行為監(jiān)控總控開(kāi)關(guān)。
4.通知和記錄,在系統(tǒng)創(chuàng)建新進(jìn)程時(shí),進(jìn)入前面設(shè)置的進(jìn)程創(chuàng)建通知例程。在該例程中記錄新創(chuàng)建的進(jìn)程所屬的Privileges、UserSID、OwnerSID等屬性值。將新進(jìn)程添加進(jìn)進(jìn)程創(chuàng)建記錄LIST。
5.監(jiān)控和檢測(cè),檢測(cè)目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用:通過(guò)NtQueryIntervalProfile的HOOK,NtQueryIntervalProfile在新創(chuàng)建的進(jìn)程中被調(diào)用時(shí),在Fake函數(shù)中判斷當(dāng)前進(jìn)程是否在前面維護(hù)的進(jìn)程LIST中,非進(jìn)程LIST中的進(jìn)程,加入LIST(進(jìn)程關(guān)閉時(shí)移除)。已經(jīng)在進(jìn)程LIST中,進(jìn)行HalDispatchTable檢測(cè)。以及,通過(guò)對(duì)前述關(guān)鍵操作行為的各NTAPI的HOOK,其在新創(chuàng)建的進(jìn)程中被調(diào)用時(shí),在Fake函數(shù)中判斷當(dāng)前進(jìn)程是否在前面維護(hù)的進(jìn)程LIST中,非進(jìn)程LIST中的進(jìn)程,加入LIST(進(jìn)程關(guān)閉時(shí)移除)。已經(jīng)在進(jìn)程LIST中,進(jìn)行系統(tǒng)進(jìn)程Token替換和進(jìn)程Token屬性值的檢測(cè)。檢測(cè)結(jié)束后,如果目標(biāo)樣本數(shù)據(jù)不是威脅樣本,在Fake函數(shù)中調(diào)用原API繼續(xù)執(zhí)行,并向Caller返回其返回的值。
其中,上述第5步中提到了的三種檢測(cè)解釋如下:
(1)HalDispatchTable檢測(cè):在調(diào)用原API之前,獲取HalDispatchTable各關(guān)鍵函數(shù)指針成員域的值,并與在Honeypot加載階段記錄的對(duì)應(yīng)各成員與的值進(jìn)行比對(duì)。如果至少1項(xiàng)匹配不相同,則判斷檢出該目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程提權(quán),即目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用,目標(biāo)樣本文件為威脅樣本文件,打點(diǎn)并按照格式生成檢測(cè)結(jié)果日志,將日志Buffer插入日志緩沖LIST。
(2)系統(tǒng)進(jìn)程Token替換檢測(cè):在調(diào)用原API之前,根據(jù)Honeypot.sys加載階段記錄的各個(gè)系統(tǒng)進(jìn)程的PID,依次獲取各個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址,并獲取當(dāng)前檢測(cè)樣本進(jìn)程的EPROCESS,并比對(duì)樣本進(jìn)程EPROCESS中的Token域的指針值是否和某個(gè)系統(tǒng)進(jìn)程EPROCESS中的Token域的指針值相同。如果匹配相同,則判斷檢出該樣本進(jìn)程提權(quán),即目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用,目標(biāo)樣本文件為威脅樣本文件,打點(diǎn)并按照格式生成檢測(cè)結(jié)果日志,將日志Buffer插入日志緩沖LIST。
(3)進(jìn)程Token屬性值檢測(cè):在調(diào)用原API之前,獲取當(dāng)前進(jìn)程的Privileges,TokenUser,TokenOwner,并比對(duì)這3個(gè)數(shù)據(jù)和該進(jìn)程創(chuàng)建時(shí)記錄的初始Privileges、UserSID、OwnerSID是否相同。若至少1項(xiàng)匹配不相同,則判斷檢出該樣本進(jìn)程提權(quán),即目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用,目標(biāo)樣本文件為威脅樣本文件,打點(diǎn)并按照格式生成檢測(cè)結(jié)果日志,將日志Buffer插入日志緩沖LIST。
檢測(cè)過(guò)程的最后一步,在確定目標(biāo)樣本文件為威脅文件時(shí):
6.日志生成,在Honeypot日志記錄線程中,持續(xù)不斷地檢查日志緩沖LIST中是否又新的日志Buffer插入。將新的日志Buffer追加寫(xiě)入到配置選項(xiàng)中指定路徑的配置文件中,并釋放日志緩沖LIST中該日志Buffer的節(jié)點(diǎn)。
對(duì)本例中生成檢測(cè)結(jié)果日志的細(xì)節(jié)進(jìn)行說(shuō)明:該方案打點(diǎn)檢出日志生成形式為緩存方式打點(diǎn)。檢出日志被暫存于日志緩沖LIST中。日志記錄線程輪詢?cè)撊罩揪彌_LIST并依照FIFO的方式依次處理各日志節(jié)點(diǎn),將檢測(cè)結(jié)果日志內(nèi)容追加寫(xiě)入日志記錄文件actions.log中,在檢測(cè)完成后由外部相關(guān)調(diào)度模塊進(jìn)程獲取并處理該日志文件。其中,檢測(cè)結(jié)果日志中的打點(diǎn)數(shù)據(jù)包括:環(huán)境和文件基本信息,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)等。其中環(huán)境和文件基本信息以流水日志等形式輸出,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)以行為日志actions.log的形式輸出。如檢測(cè)結(jié)果日志中包括:1.環(huán)境和文件基本信息:樣本進(jìn)程文件MD5,進(jìn)樣本程文件路徑,主要系統(tǒng)模塊名稱和文件版本等。2.檢出功能點(diǎn)觸發(fā)數(shù)據(jù):(1)HalDispatchTable檢測(cè),進(jìn)程ID,線程ID,被篡改函數(shù)的名稱,篡改后的指針值,檢出時(shí)所在Hooked API(NtQueryIntervalProfile)等。(2)系統(tǒng)進(jìn)程Token替換檢測(cè),進(jìn)程ID,線程ID,Token地址,命中系統(tǒng)進(jìn)程名,檢出時(shí)所在Hooked API等。(3)進(jìn)程Token屬性值檢測(cè),進(jìn)程ID,線程ID,Privileges掩碼描述序列,UserSID,OwnerSID,檢出時(shí)所在Hooked API等。
在本發(fā)明的一個(gè)實(shí)施例中,除了檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用之外,還有相關(guān)的輔助檢測(cè)流程,圖1所示的方法進(jìn)一步包括:獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息;根據(jù)所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息,獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址;監(jiān)聽(tīng)虛擬機(jī)中的指定事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),攔截所述指定事件;獲取所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址,獲取所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址、所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,則確定所述驅(qū)動(dòng)程序受到攻擊,結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
進(jìn)一步地,輔助檢測(cè)流程還包括:獲取檢測(cè)結(jié)果日志的存儲(chǔ)路徑;在監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),還獲取所述指定事件的操作目標(biāo)的文件路徑;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配,以及,將所述指定事件的操作目標(biāo)的文件路徑與所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)的文件路徑命中所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑,則確定檢測(cè)結(jié)果日志被惡意訪問(wèn),結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
沿用上文中的例子進(jìn)行說(shuō)明,圖4A示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)虛擬機(jī)中輔助檢測(cè)進(jìn)程保護(hù)的流程圖,圖4B示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)虛擬機(jī)中輔助檢測(cè)文件保護(hù)的流程圖。
如圖4A所示,檢測(cè)進(jìn)程保護(hù)機(jī)制用于保護(hù)檢測(cè)模塊相關(guān)進(jìn)程地址空間,防止被虛擬機(jī)沙箱逃逸的惡意樣本進(jìn)程訪問(wèn)、釋放或泄漏,導(dǎo)致檢測(cè)模塊機(jī)密信息失竊。初步的準(zhǔn)備工作包括:1.LoadHP.exe,在LoadHP進(jìn)程加載驅(qū)動(dòng)階段完成后,讀取Honeypot.ini配置文件中的“ourproc”等字段的值,并解析獲得1個(gè)或多個(gè)檢測(cè)模塊的進(jìn)程名,通過(guò)進(jìn)程名獲取檢測(cè)模塊各進(jìn)程的PID,依次通過(guò)IO控制碼方式發(fā)送給Honeypot驅(qū)動(dòng)程序。2.Honeypot.sys,Honeypot在接收到標(biāo)記為“進(jìn)程ID過(guò)濾”的IO控制碼時(shí),從輸入Buffer中獲取當(dāng)次傳遞的PID的值,并根據(jù)PID獲取對(duì)應(yīng)進(jìn)程EPROCESS地址,將該EPROCESS指針插入進(jìn)程過(guò)濾LIST。在此基礎(chǔ)上,輔助檢測(cè)過(guò)程包括:HOOK對(duì)進(jìn)程、線程、內(nèi)存地址空間操作的關(guān)鍵NTAPI,在Fake函數(shù)中針對(duì)上下背景文所在進(jìn)程的EPROCESS地址和操作目標(biāo)進(jìn)程的EPROCESS地址,在上述進(jìn)程過(guò)濾LIST中進(jìn)行匹配。如果上下背景文進(jìn)程EPROCESS地址不在進(jìn)程過(guò)濾LIST中,而操作目標(biāo)進(jìn)程EPROCESS地址在進(jìn)程過(guò)濾LIST中成功匹配,則可判定其他進(jìn)程試圖訪問(wèn)檢測(cè)模塊各進(jìn)程集中的某個(gè)進(jìn)程。進(jìn)行阻止,返回拒絕訪問(wèn)的狀態(tài)碼,不繼續(xù)向下調(diào)用,以終止當(dāng)前上下背景文進(jìn)程對(duì)該API的調(diào)用。如果未能成功匹配,則屬于對(duì)應(yīng)API正常調(diào)用的其他情況。不進(jìn)行阻止,繼續(xù)調(diào)用原API向下執(zhí)行,并向Caller返回其返回的值。
如圖4B所示,檢測(cè)文件保護(hù)機(jī)制用于保護(hù)檢測(cè)模塊和檢測(cè)結(jié)果日志相關(guān)各文件目錄,防止被某些樣本進(jìn)程訪問(wèn)、篡改、加密、損毀,造成檢測(cè)失敗或結(jié)果異常,影響沙箱系統(tǒng)穩(wěn)定和性能。初步的準(zhǔn)備工作包括:1.LoadHP.exe,在LoadHP進(jìn)程加載驅(qū)動(dòng)階段完成后,讀取Honeypot.ini配置文件中的“ourpath”等字段的值,并解析獲得1個(gè)或多個(gè)檢測(cè)結(jié)果日志的目錄路徑名,將各路徑Buffer依次通過(guò)IO控制碼方式發(fā)送給Honeypot驅(qū)動(dòng)程序。2.Honeypot.sys,Honeypot在接收到標(biāo)記為“私有目錄”的IO控制碼時(shí),從輸入Buffer中獲取當(dāng)次傳遞的目錄路徑的Buffer,并根據(jù)Buffer構(gòu)造UNICODE_STRING字符串對(duì)象,將該字符串對(duì)象插入私有目錄LIST。在此基礎(chǔ)上,輔助檢測(cè)過(guò)程包括:注冊(cè)文件系統(tǒng)過(guò)濾,實(shí)現(xiàn)各主要IRP分發(fā)函數(shù)。在READ,WRITE,CREATE,SET_INFORMATION,DIRECTORY_CONTROL等分發(fā)函數(shù)的自實(shí)現(xiàn)函數(shù)體中,判斷當(dāng)前IRP中FILE_OBJECT的文件路徑UNICODE_STRING對(duì)象是否能夠在私有目錄LIST中成功匹配。如果未能成功匹配,則當(dāng)前操作不是對(duì)檢測(cè)結(jié)果日志目錄或檢測(cè)模塊目錄進(jìn)行的,跳過(guò)當(dāng)前棧單元,并將IRP繼續(xù)向下分發(fā)。如果成功匹配,意味著當(dāng)前文件操作確實(shí)是針對(duì)檢測(cè)結(jié)果日志目錄或檢測(cè)模塊目錄進(jìn)行的。這時(shí)獲取上下背景文進(jìn)程的EPROCESS地址,并判斷該EPROCESS地址是否能夠在“檢測(cè)進(jìn)程保護(hù)”機(jī)制中的進(jìn)程過(guò)濾LIST中成功匹配。如果成功匹配,則判定屬于檢測(cè)模塊進(jìn)程自身對(duì)檢測(cè)結(jié)果日志目錄和檢測(cè)模塊目錄的訪問(wèn),跳過(guò)當(dāng)前棧單元,并將IRP繼續(xù)向下分發(fā)。如果未能成功匹配,意味著屬于第三方的進(jìn)程訪問(wèn)檢測(cè)結(jié)果日志目錄或檢測(cè)模塊目錄。賦值IRP的IO狀態(tài)域拒絕訪問(wèn)等錯(cuò)誤碼,完成IRP的IO請(qǐng)求,返回當(dāng)前IRP分發(fā)函數(shù),使當(dāng)前的文件訪問(wèn)操作失敗。
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種目標(biāo)樣本文件的檢測(cè)裝置的示意圖。如圖5所示,該目標(biāo)樣本文件的檢測(cè)裝置500包括:
樣本接收單元510,適于從數(shù)據(jù)源接收目標(biāo)樣本文件。
檢測(cè)處理單元520,適于將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用;是則,確定目標(biāo)樣本文件為威脅樣本文件;并根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志。
可見(jiàn),圖5所示的裝置將從數(shù)據(jù)源接收的目標(biāo)樣本文件投放到虛擬機(jī)中進(jìn)行檢測(cè),當(dāng)檢測(cè)出目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),確定目標(biāo)樣本文件為威脅樣本文件,并生成相應(yīng)的檢測(cè)結(jié)果日志。本方案以虛擬機(jī)作為載體運(yùn)行目標(biāo)樣本文件,能夠清晰地檢測(cè)到目標(biāo)樣本文件的所有運(yùn)行軌跡,全面分析得到目標(biāo)樣本文件相關(guān)的特征信息,根據(jù)目標(biāo)樣本文件相關(guān)的特征信息可以更為準(zhǔn)確地判斷所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用,進(jìn)而確定出威脅樣本文件;生成關(guān)于威脅樣本文件的檢測(cè)結(jié)果日志,為后續(xù)信息安全防護(hù)提供參考和依據(jù)。
在本發(fā)明的一個(gè)實(shí)施例中,檢測(cè)處理單元520,進(jìn)一步適于在所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行之前,加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序;根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化;則檢測(cè)處理單元520,適于在對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化之后,在虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程,通過(guò)該進(jìn)程運(yùn)行所述目標(biāo)樣本文件;利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
其中,檢測(cè)處理單元520,適于初始化所述驅(qū)動(dòng)程序的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量;記錄虛擬機(jī)中的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息;記錄虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的初始值。
進(jìn)一步地,檢測(cè)處理單元520,進(jìn)一步適于當(dāng)虛擬機(jī)中的系統(tǒng)創(chuàng)建進(jìn)程時(shí),將所創(chuàng)建的進(jìn)程的標(biāo)識(shí)信息記錄到安全進(jìn)程列表中。檢測(cè)處理單元520,適于監(jiān)聽(tīng)虛擬機(jī)中執(zhí)行指定操作的函數(shù)的調(diào)用事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中執(zhí)行指定操作的函數(shù)被調(diào)用時(shí),攔截該調(diào)用事件;獲取所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息,判斷所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息是否命中所述安全進(jìn)程列表;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用;否則,判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用。
在此基礎(chǔ)上,包括三種檢測(cè)方案:
方案一,檢測(cè)處理單元520,適于獲取當(dāng)前虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的值;將當(dāng)前獲取的各函數(shù)指針的值與在所述驅(qū)動(dòng)程序加載階段所記錄的相應(yīng)函數(shù)指針的初始值進(jìn)行匹配;如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
方案二,檢測(cè)處理單元520,適于根據(jù)在所述驅(qū)動(dòng)程序加載階段所記錄的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息,獲取各個(gè)系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址;獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址;判斷當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值是否命中系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
方案三,檢測(cè)處理單元520,進(jìn)一步適于當(dāng)虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程時(shí),記錄該進(jìn)程所屬的初始屬性值。則檢測(cè)處理單元520,適于獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值;將當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值與在該進(jìn)程被創(chuàng)建時(shí)記錄的初始屬性值進(jìn)行匹配,如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
在上述三種方案的基礎(chǔ)上,檢測(cè)處理單元520,適于當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),結(jié)束所述調(diào)用事件;當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用時(shí),允許所述調(diào)用事件繼續(xù)執(zhí)行。
在本發(fā)明的一個(gè)實(shí)施例中,檢測(cè)處理單元520,適于在虛擬機(jī)中創(chuàng)建日志記錄線程;利用所述日志記錄線程每隔預(yù)設(shè)時(shí)間間隔檢查虛擬機(jī)中是否生成新的關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志,是則將新的檢測(cè)結(jié)果日志以隊(duì)列的形式寫(xiě)入指定日志存儲(chǔ)區(qū)。其中,檢測(cè)處理單元520,進(jìn)一步適于當(dāng)所述目標(biāo)樣本文件運(yùn)行結(jié)束后,從所述指定日志存儲(chǔ)區(qū)讀取檢測(cè)結(jié)果日志并推送至數(shù)據(jù)源。
在本發(fā)明的一個(gè)實(shí)施例中,檢測(cè)處理單元520,進(jìn)一步適于獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息;根據(jù)所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息,獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址;監(jiān)聽(tīng)虛擬機(jī)中的指定事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),攔截所述指定事件;獲取所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址,獲取所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址、所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,則確定所述驅(qū)動(dòng)程序受到攻擊,結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
其中,檢測(cè)處理單元520,進(jìn)一步適于獲取檢測(cè)結(jié)果日志的存儲(chǔ)路徑;在監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),還獲取所述指定事件的操作目標(biāo)的文件路徑;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配,以及,將所述指定事件的操作目標(biāo)的文件路徑與所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)的文件路徑命中所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑,則確定檢測(cè)結(jié)果日志被惡意訪問(wèn),結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
其中,圖5所示裝置的各實(shí)施例與上文中圖1-圖4所描述的各個(gè)實(shí)施例對(duì)應(yīng)相同,上文中已有詳細(xì)說(shuō)明,在此不再贅述。
綜上所述,本發(fā)明的技術(shù)方案將從數(shù)據(jù)源接收的目標(biāo)樣本文件投放到虛擬機(jī)中進(jìn)行檢測(cè),當(dāng)檢測(cè)出目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),確定目標(biāo)樣本文件為威脅樣本文件,并生成相應(yīng)的檢測(cè)結(jié)果日志。本方案以虛擬機(jī)作為載體運(yùn)行目標(biāo)樣本文件,能夠清晰地檢測(cè)到目標(biāo)樣本文件的所有運(yùn)行軌跡,全面分析得到目標(biāo)樣本文件相關(guān)的特征信息,根據(jù)目標(biāo)樣本文件相關(guān)的特征信息可以更為準(zhǔn)確地判斷所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用,進(jìn)而確定出威脅樣本文件;生成關(guān)于威脅樣本文件的檢測(cè)結(jié)果日志,為后續(xù)信息安全防護(hù)提供參考和依據(jù)。
需要說(shuō)明的是:
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見(jiàn)的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書(shū)由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征以及如此公開(kāi)的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書(shū)中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的目標(biāo)樣本文件的檢測(cè)裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開(kāi)了A1、一種目標(biāo)樣本文件的檢測(cè)方法,其中,包括:
從數(shù)據(jù)源接收目標(biāo)樣本文件;
將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用;
是則,確定目標(biāo)樣本文件為威脅樣本文件;并根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志。
A2、如A1所述的方法,其中,在所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行之前,該方法進(jìn)一步包括:
加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序;根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化;
則所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行包括:在對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化之后,在虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程,通過(guò)該進(jìn)程運(yùn)行所述目標(biāo)樣本文件;
則所述檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用包括:利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
A3、如A2所述的方法,其中,所述加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序包括:
初始化所述驅(qū)動(dòng)程序的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量;
記錄虛擬機(jī)中的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息;
記錄虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的初始值。
A4、如A3所述的方法,其中,該方法進(jìn)一步包括:
當(dāng)虛擬機(jī)中的系統(tǒng)創(chuàng)建進(jìn)程時(shí),將所創(chuàng)建的進(jìn)程的標(biāo)識(shí)信息記錄到安全進(jìn)程列表中。
A5、如A4所述的方法,其中,所述利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用包括:
監(jiān)聽(tīng)虛擬機(jī)中執(zhí)行指定操作的函數(shù)的調(diào)用事件;
當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中執(zhí)行指定操作的函數(shù)被調(diào)用時(shí),攔截該調(diào)用事件;
獲取所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息,判斷所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息是否命中所述安全進(jìn)程列表;
是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用;否則,判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用。
A6、如A5所述的方法,其中,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括:
獲取當(dāng)前虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的值;
將當(dāng)前獲取的各函數(shù)指針的值與在所述驅(qū)動(dòng)程序加載階段所記錄的相應(yīng)函數(shù)指針的初始值進(jìn)行匹配;
如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
A7、如A5所述的方法,其中,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括:
根據(jù)在所述驅(qū)動(dòng)程序加載階段所記錄的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息,獲取各個(gè)系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址;
獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址;
判斷當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值是否命中系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值;
是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
A8、如A5所述的方法,其中,該方法進(jìn)一步包括:
當(dāng)虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程時(shí),記錄該進(jìn)程所屬的初始屬性值。
A9、如A8所述的方法,其中,所述判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用包括:
獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值;
將當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值與在該進(jìn)程被創(chuàng)建時(shí)記錄的初始屬性值進(jìn)行匹配,如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
A10、如A6、A7和A9中任一項(xiàng)所述的方法,其中,所述利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用還包括:
當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),結(jié)束所述調(diào)用事件;
當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用時(shí),允許所述調(diào)用事件繼續(xù)執(zhí)行。
A11、如A2所述的方法,其中,所述根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化包括:在虛擬機(jī)中創(chuàng)建日志記錄線程;
則所述根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志包括:
利用所述日志記錄線程每隔預(yù)設(shè)時(shí)間間隔檢查虛擬機(jī)中是否生成新的關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志,是則將新的檢測(cè)結(jié)果日志以隊(duì)列的形式寫(xiě)入指定日志存儲(chǔ)區(qū)。
A12、如A11所述的方法,其中,該方法進(jìn)一步包括:
當(dāng)所述目標(biāo)樣本文件運(yùn)行結(jié)束后,從所述指定日志存儲(chǔ)區(qū)讀取檢測(cè)結(jié)果日志并推送至數(shù)據(jù)源。
A13、如A2所述的方法,其中,該方法進(jìn)一步包括:
獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息;
根據(jù)所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息,獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址;
監(jiān)聽(tīng)虛擬機(jī)中的指定事件;
當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),攔截所述指定事件;
獲取所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址,獲取所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址;
將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址、所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配;
如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,則確定所述驅(qū)動(dòng)程序受到攻擊,結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
A14、如A13所的方法,其中,該方法進(jìn)一步包括:
獲取檢測(cè)結(jié)果日志的存儲(chǔ)路徑;
在監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),還獲取所述指定事件的操作目標(biāo)的文件路徑;
將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配,以及,將所述指定事件的操作目標(biāo)的文件路徑與所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑進(jìn)行匹配;
如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)的文件路徑命中所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑,則確定檢測(cè)結(jié)果日志被惡意訪問(wèn),結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
本發(fā)明還公開(kāi)了B15、一種目標(biāo)樣本文件的檢測(cè)裝置,其中,包括:
樣本接收單元,適于從數(shù)據(jù)源接收目標(biāo)樣本文件;
檢測(cè)處理單元,適于將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行,檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用;是則,確定目標(biāo)樣本文件為威脅樣本文件;并根據(jù)檢測(cè)到的所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生的內(nèi)核漏洞利用,生成關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志。
B16、如B15所述的裝置,其中,
所述檢測(cè)處理單元,進(jìn)一步適于在所述將所述目標(biāo)樣本文件投放到虛擬機(jī)中運(yùn)行之前,加載虛擬機(jī)中用于檢測(cè)內(nèi)核漏洞利用的驅(qū)動(dòng)程序;根據(jù)預(yù)置配置信息對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化;
則所述檢測(cè)處理單元,適于在對(duì)所述驅(qū)動(dòng)程序進(jìn)行初始化之后,在虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程,通過(guò)該進(jìn)程運(yùn)行所述目標(biāo)樣本文件;利用所述驅(qū)動(dòng)程序檢測(cè)所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中是否發(fā)生內(nèi)核漏洞利用。
B17、如B16所述的裝置,其中,
所述檢測(cè)處理單元,適于初始化所述驅(qū)動(dòng)程序的相關(guān)數(shù)據(jù)結(jié)構(gòu)對(duì)象和變量;記錄虛擬機(jī)中的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息;記錄虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的初始值。
B18、如B17所述的裝置,其中,
所述檢測(cè)處理單元,進(jìn)一步適于當(dāng)虛擬機(jī)中的系統(tǒng)創(chuàng)建進(jìn)程時(shí),將所創(chuàng)建的進(jìn)程的標(biāo)識(shí)信息記錄到安全進(jìn)程列表中。
B19、如B18所述的裝置,其中,
所述檢測(cè)處理單元,適于監(jiān)聽(tīng)虛擬機(jī)中執(zhí)行指定操作的函數(shù)的調(diào)用事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中執(zhí)行指定操作的函數(shù)被調(diào)用時(shí),攔截該調(diào)用事件;獲取所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息,判斷所述調(diào)用事件的執(zhí)行進(jìn)程的標(biāo)識(shí)信息是否命中所述安全進(jìn)程列表;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用;否則,判斷虛擬機(jī)中是否發(fā)生內(nèi)核漏洞利用。
B20、如B19所述的裝置,其中,
所述檢測(cè)處理單元,適于獲取當(dāng)前虛擬機(jī)中的第一調(diào)度表中存儲(chǔ)的函數(shù)指針的值;將當(dāng)前獲取的各函數(shù)指針的值與在所述驅(qū)動(dòng)程序加載階段所記錄的相應(yīng)函數(shù)指針的初始值進(jìn)行匹配;如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
B21、如B19所述的裝置,其中,
所述檢測(cè)處理單元,適于根據(jù)在所述驅(qū)動(dòng)程序加載階段所記錄的系統(tǒng)進(jìn)程的標(biāo)識(shí)信息,獲取各個(gè)系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址;獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址;判斷當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值是否命中系統(tǒng)進(jìn)程的指定結(jié)構(gòu)地址中的指定域的指針值;是則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
B22、如B19所述的裝置,其中,
所述檢測(cè)處理單元,進(jìn)一步適于當(dāng)虛擬機(jī)中創(chuàng)建所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程時(shí),記錄該進(jìn)程所屬的初始屬性值。
B23、如B22所述的裝置,其中,
所述檢測(cè)處理單元,適于獲取當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值;將當(dāng)前所述目標(biāo)樣本文件對(duì)應(yīng)的進(jìn)程的指定屬性值與在該進(jìn)程被創(chuàng)建時(shí)記錄的初始屬性值進(jìn)行匹配,如果至少存在一項(xiàng)匹配失敗,則確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用;否則,確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用。
B24、如B20、B21和B23中任一項(xiàng)所述的裝置,其中,
所述檢測(cè)處理單元,適于當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中發(fā)生內(nèi)核漏洞利用時(shí),結(jié)束所述調(diào)用事件;當(dāng)確定所述目標(biāo)樣本文件在虛擬機(jī)中運(yùn)行的過(guò)程中未發(fā)生內(nèi)核漏洞利用時(shí),允許所述調(diào)用事件繼續(xù)執(zhí)行。
B25、如B16所述的裝置,其中,
所述檢測(cè)處理單元,適于在虛擬機(jī)中創(chuàng)建日志記錄線程;利用所述日志記錄線程每隔預(yù)設(shè)時(shí)間間隔檢查虛擬機(jī)中是否生成新的關(guān)于所述目標(biāo)樣本文件的檢測(cè)結(jié)果日志,是則將新的檢測(cè)結(jié)果日志以隊(duì)列的形式寫(xiě)入指定日志存儲(chǔ)區(qū)。
B26、如B25所述的裝置,其中,
所述檢測(cè)處理單元,進(jìn)一步適于當(dāng)所述目標(biāo)樣本文件運(yùn)行結(jié)束后,從所述指定日志存儲(chǔ)區(qū)讀取檢測(cè)結(jié)果日志并推送至數(shù)據(jù)源。
B27、如B16所述的裝置,其中,
所述檢測(cè)處理單元,進(jìn)一步適于獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息;根據(jù)所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的標(biāo)識(shí)信息,獲取所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址;監(jiān)聽(tīng)虛擬機(jī)中的指定事件;當(dāng)監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),攔截所述指定事件;獲取所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址,獲取所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址、所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)進(jìn)程的指定結(jié)構(gòu)地址命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,則確定所述驅(qū)動(dòng)程序受到攻擊,結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。
B28、如B27所的裝置,其中,
所述檢測(cè)處理單元,進(jìn)一步適于獲取檢測(cè)結(jié)果日志的存儲(chǔ)路徑;在監(jiān)聽(tīng)到虛擬機(jī)中發(fā)生指定事件時(shí),還獲取所述指定事件的操作目標(biāo)的文件路徑;將所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址與所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址進(jìn)行匹配,以及,將所述指定事件的操作目標(biāo)的文件路徑與所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑進(jìn)行匹配;如果所述指定事件的上下文背景所在進(jìn)程的指定結(jié)構(gòu)地址未命中所述驅(qū)動(dòng)程序?qū)?yīng)的進(jìn)程的指定結(jié)構(gòu)地址,且所述指定事件的操作目標(biāo)的文件路徑命中所述檢測(cè)結(jié)果日志的存儲(chǔ)路徑,則確定檢測(cè)結(jié)果日志被惡意訪問(wèn),結(jié)束所述指定事件;否則允許所述指定事件繼續(xù)執(zhí)行。