本發(fā)明涉及計(jì)算機(jī)安全技術(shù)領(lǐng)域,具體涉及一種基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法及裝置。
背景技術(shù):
網(wǎng)絡(luò)惡意行為是指網(wǎng)絡(luò)系統(tǒng)的硬件、軟件及其系統(tǒng)中的數(shù)據(jù)受到惡意代碼攻擊而遭到破壞、更改、泄露,致使系統(tǒng)不能連續(xù)可靠正常地運(yùn)行,網(wǎng)絡(luò)服務(wù)中斷的行為。隨著信息化的普及,網(wǎng)絡(luò)新應(yīng)用的大量出現(xiàn),網(wǎng)絡(luò)惡意代碼所表現(xiàn)出的行為也層出不窮,目前最流行的網(wǎng)絡(luò)惡意行為是網(wǎng)頁掛馬、盜取帳號、端口掃描、漏洞掃描、ARP(Address Resolution Protocol,地址解析協(xié)議)欺騙、IP(Internet Protocol,因特網(wǎng)協(xié)議)劫持、DDOS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊、溢出攻擊、木馬攻擊等。
漏洞是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問或破壞系統(tǒng)。內(nèi)核作為操作系統(tǒng)的核心,如何檢測內(nèi)核漏洞是安全防護(hù)工作的重中之重?,F(xiàn)有技術(shù)中,黑客在入侵系統(tǒng)時(shí),往往通過提權(quán)的方式獲得系統(tǒng)的最高權(quán)限,從而取得操作系統(tǒng)的控制權(quán)。簡單來說,提權(quán)就是將一個(gè)低權(quán)限、受限制很多的用戶提升到系統(tǒng)中最高權(quán)限(如管理員權(quán)限)。權(quán)限控制是系統(tǒng)安全的基石,也是一切安全軟件的基石,一旦這道門檻被突破,任何防御措施都是無效的。因此,如何能夠有效地檢測內(nèi)核漏洞,預(yù)防黑客通過提權(quán)的方式進(jìn)行系統(tǒng)攻擊成為現(xiàn)有技術(shù)亟待解決的問題。在內(nèi)核漏洞檢測過程中,如何避免惡意樣本進(jìn)程訪問檢測進(jìn)程,破壞檢測過程也是一個(gè)重要的問題。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法,所述方法在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,方法包括:
獲取各檢測子進(jìn)程的相關(guān)信息,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中;
利用掛鉤技術(shù),在調(diào)用指定API之前,獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息;
判斷所述操作目標(biāo)進(jìn)程的相關(guān)信息是否記錄在所述進(jìn)程過濾名單中,且所述當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否未記錄在所述進(jìn)程過濾名單中;
若是,終止調(diào)用所述指定API。
根據(jù)本發(fā)明的另一方面,提供了一種基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)裝置,所述裝置在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,裝置包括:
寫入模塊,適于獲取各檢測子進(jìn)程的相關(guān)信息,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中;
掛鉤處理模塊,適于利用掛鉤技術(shù),在調(diào)用指定API之前,獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息;
判斷模塊,適于判斷所述操作目標(biāo)進(jìn)程的相關(guān)信息是否記錄在所述進(jìn)程過濾名單中,且所述當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否未記錄在所述進(jìn)程過濾名單中;
終止模塊,適于若所述判斷模塊判斷出所述操作目標(biāo)進(jìn)程的相關(guān)信息記錄在所述進(jìn)程過濾名單中,且所述當(dāng)前上下背景文進(jìn)程的相關(guān)信息未記錄在所述進(jìn)程過濾名單中,終止調(diào)用所述指定API。
根據(jù)本發(fā)明提供的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法及裝置,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中,在調(diào)用指定API之前,利用掛鉤獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息,通過將當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息與進(jìn)程過濾名單相匹配,判定是否終止調(diào)用指定API。利用本發(fā)明,可保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行的檢測進(jìn)程的地址空間,防止被沙箱逃逸的惡意樣本進(jìn)程訪問,避免機(jī)密信息失竊,提升在虛擬機(jī)沙箱隔離環(huán)境下內(nèi)核漏洞檢測的安全性。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖;
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖;
圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖;
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖;
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法的流程圖;
圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測文件保護(hù)方法的流程圖;
圖7示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置的功能框圖;
圖8示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置的功能框圖;
圖9示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)的功能框圖;
圖10示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測文件保護(hù)的功能框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖。本方法在服務(wù)器端虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,用于針對指定的樣本文件進(jìn)行動態(tài)的內(nèi)核漏洞利用檢測。如圖1所示,該方法包括如下步驟:
步驟S101,啟動通信代理進(jìn)程,所述通信代理進(jìn)程監(jiān)聽指定端口,等待并接收虛擬機(jī)外部主機(jī)傳輸?shù)臋z測包和樣本文件,將檢測包和樣本文件分別存儲到檢測目錄和臨時(shí)目錄下。
通信代理進(jìn)程是負(fù)責(zé)與虛擬機(jī)外部主機(jī)進(jìn)行數(shù)據(jù)交互、文件傳遞的進(jìn)程。當(dāng)服務(wù)端虛擬機(jī)操作系統(tǒng)開機(jī)時(shí),通信代理進(jìn)程隨之自啟動。通信代理進(jìn)程監(jiān)聽指定端口,等待并接收虛擬機(jī)外部主機(jī)的相關(guān)進(jìn)程傳輸?shù)臋z測包和樣本文件。通信代理進(jìn)程對檢測包進(jìn)行解壓操作,將解壓得到的文件存儲到檢測目錄下;另外,通信代理進(jìn)程將樣本文件存儲到臨時(shí)目錄下。隨后,通信代理線程啟動檢測包中的調(diào)度管控進(jìn)程。
步驟S102,啟動檢測包中的調(diào)度管控進(jìn)程,所述調(diào)度管控進(jìn)程獲取樣本文件存儲路徑,識別樣本文件類型,根據(jù)通用檢測配置文件中的配置選項(xiàng)選擇檢測模式和各檢測功能點(diǎn),以創(chuàng)建針對所述樣本文件的目標(biāo)檢測配置文件。
在調(diào)度管控進(jìn)程啟動之后,調(diào)度管控進(jìn)程獲取樣本文件存儲路徑,識別樣本文件類型。接著,調(diào)度管控進(jìn)程讀取自身關(guān)聯(lián)的通用檢測配置文件,根據(jù)樣本文件類型選擇檢測模式和各檢測功能點(diǎn),初始化自身各功能,創(chuàng)建針對樣本文件的目標(biāo)檢測配置文件。隨后,調(diào)度管控進(jìn)程啟動輔助檢測進(jìn)程,并將樣本文件的存儲路徑(可為URL)通過參數(shù)的方式傳遞給輔助檢測進(jìn)程。
步驟S103,啟動輔助檢測進(jìn)程,所述輔助檢測進(jìn)程利用所述目標(biāo)檢測配置文件控制各檢測功能點(diǎn)的開關(guān)。
在輔助檢測進(jìn)程啟動之后,輔助檢測進(jìn)程根據(jù)目標(biāo)檢測配置文件進(jìn)行初始化,加載核心檢測進(jìn)程的驅(qū)動程序,利用目標(biāo)檢測配置文件控制各檢測功能點(diǎn)的開關(guān)。
步驟S104,啟動核心檢測進(jìn)程,所述核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,執(zhí)行漏洞的檢測,根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序后,核心檢測進(jìn)程啟動。核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,執(zhí)行初始化操作。而后,根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息執(zhí)行樣本文件的檢測,根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測方法在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,通過通信代理進(jìn)程實(shí)現(xiàn)與虛擬機(jī)外部主機(jī)的數(shù)據(jù)交互和文件傳遞,借助調(diào)度管控進(jìn)程和輔助檢測進(jìn)程來輔助核心檢測進(jìn)程實(shí)現(xiàn)樣本文件的檢測。本方法將內(nèi)核漏洞的檢測與外部隔離,為可疑樣本提供了一個(gè)封閉的檢測環(huán)境,即使可疑樣本確實(shí)存在漏洞,也不會對服務(wù)器側(cè)造成損害,提供了一種安全且高效地內(nèi)核漏洞檢測機(jī)制。
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖。本方法描述的是基于虛擬機(jī)的內(nèi)核漏洞檢測的整體方案,具體是在服務(wù)器端虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,用于針對指定的樣本文件進(jìn)行動態(tài)的內(nèi)核漏洞利用檢測。如圖2所示,該方法包括如下步驟:
步驟S201,服務(wù)器端虛擬機(jī)操作系統(tǒng)開機(jī)時(shí),通信代理進(jìn)程自啟動。
通信代理進(jìn)程是負(fù)責(zé)與虛擬機(jī)外部主機(jī)進(jìn)行數(shù)據(jù)交互、文件傳遞的進(jìn)程。當(dāng)服務(wù)端虛擬機(jī)操作系統(tǒng)開機(jī)時(shí),通信代理進(jìn)程隨之自啟動。
步驟S202,通信代理進(jìn)程監(jiān)聽指定端口,等待數(shù)據(jù)。
服務(wù)器端虛擬機(jī)向虛擬外部主機(jī)提供用于訪問的指定端口,通信代理進(jìn)程啟動后就監(jiān)聽該指定端口,等待虛擬機(jī)外部主機(jī)發(fā)送過來的數(shù)據(jù)。
步驟S203,通信代理進(jìn)程接收虛擬機(jī)外部主機(jī)傳輸?shù)臋z測包和樣本文件,將檢測包和樣本文件分別存儲到檢測目錄和臨時(shí)目錄下。
在通信代理進(jìn)程接收到虛擬機(jī)外部主機(jī)通過指定端口傳輸?shù)臋z測包和樣本文件后,對其中的檢測包進(jìn)行解壓操作,將解壓得到的文件存儲到檢測目錄下,該檢測目錄可以為某個(gè)隨機(jī)產(chǎn)生的目錄;另外,通信代理進(jìn)程將樣本文件存儲到臨時(shí)目錄下。
步驟S204,通信代理進(jìn)程啟動調(diào)度管控進(jìn)程。
通信代理進(jìn)程發(fā)送啟動命令,用于啟動調(diào)度管控進(jìn)程。
步驟S205,通信代理進(jìn)程創(chuàng)建消息通信線程,建立與調(diào)度管控進(jìn)程之間的通信連接。
在調(diào)度管控進(jìn)程啟動后,通信代理進(jìn)程創(chuàng)建消息通信線程,可選地,通過RPC(Remote Procedure Call Protocol,遠(yuǎn)程過程調(diào)用協(xié)議)與調(diào)度管控進(jìn)程建立通信連接。這里,RPC是XMLRPCLIB庫中的機(jī)制,XML RPC是使用HTTP協(xié)議做為傳輸協(xié)議的遠(yuǎn)程過程調(diào)用機(jī)制,使用XML文本的方式傳輸命令和數(shù)據(jù)。利用該通信連接,可將后續(xù)接收到的來自于調(diào)度管控進(jìn)程的消息數(shù)據(jù)包實(shí)時(shí)轉(zhuǎn)發(fā)至虛擬機(jī)外部主機(jī)。
步驟S206,調(diào)度管控進(jìn)程初始化自身功能。
在調(diào)度管控進(jìn)程啟動后,調(diào)度管控進(jìn)程獲取樣本文件存儲路徑,識別樣本文件類型。接著,調(diào)度管控進(jìn)程讀取自身關(guān)聯(lián)的通用檢測配置文件,根據(jù)樣本文件類型選擇檢測模式和各檢測功能點(diǎn),初始化自身各功能。除此之外,調(diào)度管控進(jìn)程根據(jù)通用檢測配置文件中的配置選項(xiàng)選擇超時(shí)限制條件,其中超時(shí)限制條件具體限制了核心檢測進(jìn)程執(zhí)行檢測的時(shí)長。通過配置超時(shí)限制條件,避免后續(xù)針對某個(gè)樣本文件的檢測占用過長時(shí)間,提升檢測的效率。
步驟S207,調(diào)度管控進(jìn)程創(chuàng)建屏幕截取線程和/或鼠標(biāo)模擬點(diǎn)擊線程。
可選地,調(diào)度管控進(jìn)程創(chuàng)建屏幕截取線程和/或鼠標(biāo)模擬點(diǎn)擊線程。其中屏幕截取線程的作用是對虛擬機(jī)所在的服務(wù)器的屏幕進(jìn)行截圖,截取到的屏幕圖像可通過通信代理進(jìn)程發(fā)送給虛擬機(jī)外部主機(jī)。鼠標(biāo)模擬點(diǎn)擊線程的作用是隨機(jī)針對屏幕坐標(biāo)模擬鼠標(biāo)點(diǎn)擊操作,以及針對特定控件模擬鼠標(biāo)點(diǎn)擊操作。
步驟S208,調(diào)度管控進(jìn)程創(chuàng)建針對樣本文件的目標(biāo)檢測配置文件,啟動輔助檢測進(jìn)程,并將樣本文件的存儲路徑通過參數(shù)的方式傳遞給輔助檢測進(jìn)程。
調(diào)度管控進(jìn)程通過讀取通用檢測配置文件,對其中的配置選項(xiàng)進(jìn)行選擇和配置,得到針對樣本文件的目標(biāo)檢測配置文件。針對于不同類型的樣本文件,檢測模式和配置的檢測功能點(diǎn)有所不同,調(diào)度管控進(jìn)程可為不同類型的樣本文件創(chuàng)建定制的目標(biāo)檢測配置文件。而后,調(diào)度管控進(jìn)程啟動輔助檢測進(jìn)程,將樣本文件的存儲路徑通過命令行參數(shù)的方式傳遞給輔助檢測進(jìn)程。
步驟S209,屏幕截取線程每隔預(yù)定時(shí)間截取屏幕圖像,將截取的屏幕圖像實(shí)時(shí)發(fā)送給通信代理進(jìn)程。
步驟S210,鼠標(biāo)模擬點(diǎn)擊線程隨機(jī)針對屏幕坐標(biāo)模擬鼠標(biāo)點(diǎn)擊操作,以及針對特定控件模擬鼠標(biāo)點(diǎn)擊操作。
步驟S211,輔助檢測進(jìn)程根據(jù)目標(biāo)檢測配置文件進(jìn)行初始化,利用目標(biāo)檢測配置文件控制各檢測功能點(diǎn)的開關(guān)。
輔助檢測進(jìn)程通過解析命令行參數(shù)和目標(biāo)檢測配置文件,對自身功能進(jìn)行初始化。具體地,輔助檢測進(jìn)程解析得到樣本文件存儲路徑、檢測模式、各檢測功能點(diǎn)、以及其它一些檢測功能配置選項(xiàng)等基礎(chǔ)信息,計(jì)算樣本文件的MD5,控制各檢測功能點(diǎn)的開關(guān)。通過計(jì)算得到的樣本文件的MD5,可將后續(xù)檢測過程中產(chǎn)生的樣本數(shù)據(jù)與任務(wù)數(shù)據(jù)相關(guān)聯(lián),一個(gè)樣本文件可能對應(yīng)多個(gè)檢測任務(wù)。通過MD5還可以將樣本數(shù)據(jù)與木馬信息、VT、元查殺引擎相關(guān)聯(lián)。另外,通過MD5還可以將統(tǒng)一存儲的URL、木馬、APT類樣本進(jìn)行分類展示。
步驟S212,輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序,以啟動核心檢測進(jìn)程。
步驟S213,輔助檢測進(jìn)程通過IO控制碼的方式發(fā)送樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
輔助檢測進(jìn)程通過IO控制碼的方式向核心檢測進(jìn)程發(fā)送樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,以開啟內(nèi)核層漏洞利用行為的監(jiān)控。
步驟S214,輔助檢測進(jìn)程啟動樣本進(jìn)程,使樣本進(jìn)程運(yùn)行樣本文件。
步驟S215,核心檢測進(jìn)程執(zhí)行初始化操作。
在核心檢測進(jìn)程的驅(qū)動程序加載時(shí),初始化驅(qū)動程序所需的相關(guān)數(shù)據(jù)結(jié)構(gòu)對象和變量,這些相關(guān)數(shù)據(jù)結(jié)構(gòu)對象和變量與各功能檢測點(diǎn)密切關(guān)聯(lián)。
步驟S216,核心檢測進(jìn)程創(chuàng)建日志記錄線程。
為了便于記錄檢測過程,創(chuàng)建日志記錄線程,用于記錄檢測過程中產(chǎn)生的日志。
步驟S217,核心檢測進(jìn)程接收輔助檢測進(jìn)程通過IO控制碼的方式發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的各種IO控制碼,對其進(jìn)行解析獲取樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。針對各檢測功能點(diǎn)的開關(guān)信息,控制開啟相應(yīng)檢測功能點(diǎn)的監(jiān)控。
步驟S218,核心檢測進(jìn)程執(zhí)行漏洞檢測。
核心檢測進(jìn)程可檢測的漏洞包含有關(guān)惡意網(wǎng)頁的URL以及有關(guān)各種漏洞、病毒、木馬、攻擊的樣本目標(biāo)。除此之外,樣本目標(biāo)還包括:0Day,NDay,暴露期0Day,位置掛馬信息,重要網(wǎng)站,位置掛馬跟進(jìn)等等。其中,0Day是已經(jīng)被發(fā)現(xiàn)(有可能未被公開),而官方還沒有相關(guān)補(bǔ)丁的漏洞。這些漏洞被發(fā)現(xiàn)后立即被惡意利用,例如利用0Day可以修改注冊表、下載文件、運(yùn)行系統(tǒng)文件。樣本目標(biāo)的格式可以是文件、可執(zhí)行程序等,本發(fā)明對此不作限制。
步驟S219,日志記錄線程根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
后續(xù)鑒定引擎可讀取日志文件,在鑒定引擎里面(靜態(tài),動態(tài))將各種需要的日志信息抓取出來,對檢測結(jié)果進(jìn)行分析和篩選,進(jìn)行基本的規(guī)則判定。其中后臺的規(guī)則可達(dá)幾百條。所謂分析選概括來說,就是結(jié)合靜態(tài)和動態(tài)的日志數(shù)據(jù),利用規(guī)則和關(guān)聯(lián)分析,對樣本的危害級別進(jìn)行鑒定(黑,白,灰)。而篩選的作用主要是過濾出命中了利用檢測行為特征的樣本,以及有些高可疑行為特征的樣本,按照不同組的需求,對數(shù)據(jù)進(jìn)行分發(fā)。
步驟S220,在上述檢測過程中,實(shí)時(shí)判斷是否滿足超時(shí)限制條件,若是,則結(jié)束檢測過程,將檢測結(jié)果打包為數(shù)據(jù)包發(fā)送給通信代理進(jìn)程,以供通信代理進(jìn)程將數(shù)據(jù)包發(fā)送給虛擬機(jī)外部主機(jī)。
本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測方法在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,通過通信代理進(jìn)程實(shí)現(xiàn)與虛擬機(jī)外部主機(jī)的數(shù)據(jù)交互和文件傳遞,借助調(diào)度管控進(jìn)程和輔助檢測進(jìn)程來輔助核心檢測進(jìn)程實(shí)現(xiàn)樣本文件的檢測。本方法將內(nèi)核漏洞的檢測與外部隔離,為可疑樣本提供了一個(gè)封閉的檢測環(huán)境,即使可疑樣本確實(shí)存在漏洞,也不會對服務(wù)器側(cè)造成損害,提供了一種安全且高效地內(nèi)核漏洞檢測機(jī)制。本方法中,調(diào)度管控進(jìn)程根據(jù)通用檢測配置文件中的配置選項(xiàng)選擇超時(shí)限制條件,通過配置超時(shí)限制條件,避免后續(xù)針對某個(gè)樣本文件的檢測占用過長時(shí)間,提升檢測的效率。調(diào)度管控進(jìn)程創(chuàng)建屏幕截取線程和/或鼠標(biāo)模擬點(diǎn)擊線程,能將服務(wù)器屏幕呈現(xiàn)的圖像傳遞給虛擬機(jī)外部主機(jī),供虛擬機(jī)外部主機(jī)的用戶查看檢測過程的進(jìn)展和具體情況,可視化效果良好。
圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖。本實(shí)施例主要是對上述核心檢測進(jìn)程的工作過程進(jìn)行詳細(xì)闡述,并詳細(xì)描述了核心檢測過程執(zhí)行漏洞檢測的具體內(nèi)容。但需要說明的是,本實(shí)施例的方法是實(shí)現(xiàn)漏洞檢測的獨(dú)立方案,它可以不依賴于前述實(shí)施例描述的環(huán)境和前提下實(shí)現(xiàn)。本實(shí)施例的方法在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,如圖3所示,該方法包括如下步驟:
步驟S301,加載驅(qū)動程序。
在核心檢測進(jìn)程的驅(qū)動程序加載時(shí),初始化驅(qū)動程序所需的相關(guān)數(shù)據(jù)結(jié)構(gòu)對象和變量。記錄至少一個(gè)系統(tǒng)進(jìn)程的進(jìn)程ID,記錄HAL例程地址表(HalDispatchTable)中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值,例如HALQuerySystemInformatica等函數(shù)指針值。
步驟S302,接收用戶層進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
本實(shí)施例中,用戶層進(jìn)程可以指的是上述實(shí)施例中描述的輔助檢測進(jìn)程。核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的各種IO控制碼,對其進(jìn)行解析獲取樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
步驟S303,根據(jù)各檢測功能點(diǎn)的開關(guān)信息開啟內(nèi)核層行為監(jiān)控總控開關(guān)。
步驟S304,當(dāng)系統(tǒng)創(chuàng)建新進(jìn)程時(shí),將新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中。
當(dāng)系統(tǒng)啟動樣本進(jìn)程來運(yùn)行樣本文件時(shí),樣本進(jìn)程被認(rèn)定為所創(chuàng)建的新進(jìn)程,將樣本進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中。
步驟S305,對新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測。
本實(shí)施例通過掛鉤技術(shù)實(shí)現(xiàn)對新進(jìn)程的內(nèi)核層各操作行為的檢測。具體地,在核心檢測進(jìn)程接收到輔助檢測進(jìn)程發(fā)送的IO控制碼之后,對其進(jìn)行解析識別出“內(nèi)核利用監(jiān)控”的標(biāo)記,然后根據(jù)傳入緩沖區(qū)(Buffer)的數(shù)據(jù),選擇進(jìn)入對應(yīng)的分發(fā)處理例程中。根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,掛鉤(Hook)SSDT(System Services Descriptor Table,系統(tǒng)服務(wù)描述符表)中針對各功能檢測點(diǎn)的指定API和NtQueryIntervalProfile。
利用鉤子,在系統(tǒng)調(diào)用指定API和NtQueryIntervalProfile之前,執(zhí)行自定義的函數(shù),實(shí)現(xiàn)對內(nèi)核層各操作行為的檢測。
步驟S306,根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測方法在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,根據(jù)用戶層進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,開啟內(nèi)核層行為監(jiān)控總控開關(guān);監(jiān)控系統(tǒng)創(chuàng)建的新進(jìn)程,對新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測。本方法將內(nèi)核漏洞的檢測與外部隔離,為可疑樣本提供了一個(gè)封閉的檢測環(huán)境,即使可疑樣本確實(shí)存在漏洞,也不會對服務(wù)器側(cè)造成損害,提供了一種安全且高效地內(nèi)核漏洞檢測機(jī)制。
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測方法的流程圖。本實(shí)施例在圖3所示的方法基礎(chǔ)上,進(jìn)一步詳細(xì)闡述了核心檢測進(jìn)程的工作過程,如圖4所示,該方法包括如下步驟:
步驟S401,加載驅(qū)動程序。
在核心檢測進(jìn)程的驅(qū)動程序加載時(shí),初始化驅(qū)動程序所需的相關(guān)數(shù)據(jù)結(jié)構(gòu)對象和變量。記錄至少一個(gè)系統(tǒng)進(jìn)程的進(jìn)程ID,記錄HAL例程地址表(HalDispatchTable)中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值,例如HALQuerySystemInformatica等函數(shù)指針值。
步驟S402,創(chuàng)建日志記錄線程。
為了便于記錄檢測過程,創(chuàng)建日志記錄線程,用于記錄檢測過程中產(chǎn)生的日志。
步驟S403,接收用戶層進(jìn)程通過IO控制碼發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
本實(shí)施例中,用戶層進(jìn)程可以指的是上述實(shí)施例中描述的輔助檢測進(jìn)程。核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的各種IO控制碼,對其進(jìn)行解析獲取樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
具體地,核心檢測進(jìn)程通過解析IO控制碼識別出“內(nèi)核利用監(jiān)控”的標(biāo)記,然后根據(jù)傳入緩沖區(qū)(Buffer)的數(shù)據(jù),選擇進(jìn)入對應(yīng)的分發(fā)處理例程中。
步驟S404,根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,掛鉤SSDT中針對各功能檢測點(diǎn)的指定API和NtQueryIntervalProfile。
本實(shí)施例通過掛鉤技術(shù)實(shí)現(xiàn)對新進(jìn)程的內(nèi)核層各操作行為的檢測。根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,掛鉤SSDT中針對各功能檢測點(diǎn)的指定API和NtQueryIntervalProfile。所掛鉤的API具體為針對內(nèi)存、特權(quán)、注冊表、進(jìn)程/線程、文件等操作的關(guān)鍵NTAPI。而且,設(shè)置進(jìn)程創(chuàng)建通知例程,在系統(tǒng)有新的進(jìn)程創(chuàng)建時(shí),進(jìn)入進(jìn)程創(chuàng)建通知例程執(zhí)行相關(guān)操作。
步驟S405,根據(jù)各檢測功能點(diǎn)的開關(guān)信息開啟內(nèi)核層行為監(jiān)控總控開關(guān)。
步驟S406,當(dāng)系統(tǒng)創(chuàng)建新進(jìn)程時(shí),將新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中。
當(dāng)系統(tǒng)創(chuàng)建新進(jìn)程時(shí),首先進(jìn)入進(jìn)程創(chuàng)建通知例程,在該例程中記錄所創(chuàng)建的新進(jìn)程的屬性值,例如:Privileges、UserSID、OwnerSID等屬性值。然后,將新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中。
步驟S407,對新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測。
當(dāng)新進(jìn)程調(diào)用NtQueryIntervalProfile時(shí),先判斷該新進(jìn)程是否在進(jìn)程創(chuàng)建記錄名單中,若否,則將該新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中;當(dāng)新進(jìn)程調(diào)用前述指定API時(shí),判斷該新進(jìn)程是否在進(jìn)程創(chuàng)建記錄名單中,若否,則將該新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中。
在確保新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單的情況下,利用掛鉤技術(shù),對新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測,具體包含以下幾種實(shí)施方式:
(1)HalDispatchTable檢測
利用掛鉤技術(shù),在調(diào)用NtQueryIntervalProfile之前,獲取HalDispatchTable中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值;將所獲取的HalDispatchTable中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值與加載驅(qū)動程序過程中所記錄的HalDispatchTable中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值進(jìn)行比對;若至少一項(xiàng)關(guān)鍵函數(shù)指針值比對不一致,則檢測出新進(jìn)程存在提權(quán)行為。
(2)Token替換檢測
利用掛鉤技術(shù),在調(diào)用相應(yīng)的指定API之前,根據(jù)加載驅(qū)動程序過程中所記錄的至少一個(gè)系統(tǒng)進(jìn)程的進(jìn)程ID獲取至少一個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址,同時(shí)獲取新進(jìn)程的EPROCESS結(jié)構(gòu)地址;將新進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值與至少一個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值進(jìn)行比對;若新進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值與其中一個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值比對一致,則檢測出新進(jìn)程存在提權(quán)行為。
這里,指定API可以為:創(chuàng)建進(jìn)程(NtCreateUserProcess)、對其它進(jìn)程內(nèi)存創(chuàng)建以及讀寫(NtAllocateVirtualMemory/NtProtectVirtualMemory/NtReadVirtualMemory/NtWriteVirtualMemory)、打開其它進(jìn)程/線程(NtOpenThread/NtOpenProcess/NtSetContextThread)、注冊表讀寫、文件讀寫等等。
(3)Token屬性值檢測
利用掛鉤技術(shù),在調(diào)用相應(yīng)的指定API之前,獲取所述新進(jìn)程的屬性值;將所獲取的新進(jìn)程的屬性值與在進(jìn)程創(chuàng)建通知例程中所記錄的新進(jìn)程的屬性值進(jìn)行比對;若比對不一致,則檢測出新進(jìn)程存在提權(quán)行為。
在具體比對時(shí),將獲取的新進(jìn)程的Privileges、TokenUser、和/或TokenOwner與在進(jìn)程創(chuàng)建通知例程中所記錄的新進(jìn)程的Privileges、TokenUser、和/或TokenOwner進(jìn)行比對,若其中有一項(xiàng)比對不一致,則檢測出新進(jìn)程存在提權(quán)行為。
這里,指定API指的是與Token相關(guān)的函數(shù)。
(4)Token屬性值置空檢測
利用掛鉤技術(shù),在調(diào)用相應(yīng)的指定API之前,查詢新進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域內(nèi)的ACL是否被置空;若是,則檢測出新進(jìn)程存在提權(quán)行為。
(5)內(nèi)核ROP(Return Oriented Programming,基于代碼復(fù)用技術(shù)的新型攻擊)檢測
目前常見的內(nèi)核ROP用于關(guān)閉SMEP(Supervisor Mode Execution Protection,監(jiān)督模式執(zhí)行保護(hù))或修改CR4寄存器,本方法利用掛鉤技術(shù),在調(diào)用棧對CR4寄存器進(jìn)行操作之前,查看調(diào)用棧是否為允許調(diào)用CR4寄存器修改指令的調(diào)用棧,或者,檢測調(diào)用棧是否調(diào)用禁用SMEP的指令;若是,則檢測出新進(jìn)程存在提權(quán)行為。
(6)Bitmap利用檢測
對于利用Bitmap來將有限制的內(nèi)核地址寫操作轉(zhuǎn)化為內(nèi)核任意地址讀寫操作的行為,對這種行為進(jìn)行檢測,若存在,則檢測出所述新進(jìn)程存在提權(quán)行為。
步驟S408,根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
按照預(yù)設(shè)格式打點(diǎn)生成日志,將日志插入到日志緩沖清單中。在日志記錄線程中,持續(xù)不斷地檢查日志緩沖清單是否有新的日志插入,若有,則將新的日志追加寫入到配置選項(xiàng)中指定路徑的日志文件中,并釋放日志緩沖清單中該新的日志的節(jié)點(diǎn)。
本方案打點(diǎn)檢出日志生成形式為緩存方式打點(diǎn)。所檢出的日志被暫存于日志緩沖清單中。日志記錄線程輪詢該日志緩沖清單并依照FIFO(先進(jìn)先出)的方式依次處理各日志節(jié)點(diǎn),將日志內(nèi)容追加寫入日志文件中,在檢測完成后由外部相關(guān)調(diào)度模塊進(jìn)程獲取并處理該日志文件。
本方案的打點(diǎn)數(shù)據(jù)包含:環(huán)境和文件基本信息,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)等。環(huán)境和文件基本信息以流水日志等形式輸出,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)以行為日志的形式輸出。其中環(huán)境和文件基本信息包含:樣本進(jìn)程文件MD5,樣本文件路徑,以及主要系統(tǒng)模塊名稱和文件版本等。對于HalDispatchTable檢測,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)包含:進(jìn)程ID、線程ID、被篡改函數(shù)的名稱、篡改后的指針值、檢出時(shí)所在Hooked API(NtQueryIntervalProfile)等;對于Token替換檢測,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)包含:進(jìn)程ID、線程ID、Token地址、命中系統(tǒng)進(jìn)程名、檢出時(shí)所在Hooked API等。對于Token屬性值檢測,檢出功能點(diǎn)觸發(fā)數(shù)據(jù)包含:進(jìn)程ID、線程ID、Privileges掩碼描述序列、UserSID、OwnerSID、檢出時(shí)所在Hooked API等。其它檢測方式的檢出功能點(diǎn)觸發(fā)數(shù)據(jù)與之類似,在此不再贅述。
本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測方法在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,根據(jù)用戶層進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,開啟內(nèi)核層行為監(jiān)控總控開關(guān);監(jiān)控系統(tǒng)創(chuàng)建的新進(jìn)程,對新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測。本方法將內(nèi)核漏洞的檢測與外部隔離,為可疑樣本提供了一個(gè)封閉的檢測環(huán)境,即使可疑樣本確實(shí)存在漏洞,也不會對服務(wù)器側(cè)造成損害,提供了一種安全且高效地內(nèi)核漏洞檢測機(jī)制。本方法通過掛鉤技術(shù),針對用戶層進(jìn)程提供的各檢測功能點(diǎn)對應(yīng)的API設(shè)置鉤子函數(shù),在調(diào)用API之前,執(zhí)行檢測操作,能及時(shí)有效地發(fā)現(xiàn)提權(quán)和利用等問題,提升了內(nèi)核漏洞檢測的效率。
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法的流程圖。本實(shí)施例提供的方法主要是用于保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行的檢測進(jìn)程的地址空間,防止被沙箱逃逸的惡意樣本進(jìn)程訪問、釋放或泄露,避免機(jī)密信息失竊。如圖5所示,該方法包括如下步驟:
步驟S501,獲取各檢測子進(jìn)程的相關(guān)信息,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中。
在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序之后,讀取目標(biāo)檢測配置文件中的相關(guān)字段,解析得到一個(gè)或多個(gè)檢測子進(jìn)程的進(jìn)程名,根據(jù)進(jìn)程名獲取各檢測子進(jìn)程的進(jìn)程ID,通過IO控制碼將各檢測子進(jìn)程的進(jìn)程ID發(fā)送給核心檢測進(jìn)程。
核心檢測進(jìn)程接收輔助檢測進(jìn)程(用戶層進(jìn)程)通過IO控制碼發(fā)送的各檢測子進(jìn)程的進(jìn)程ID。具體地,核心檢測進(jìn)程在接收到標(biāo)記為“進(jìn)程ID過濾”的IO控制碼后,從輸入緩沖區(qū)中獲取當(dāng)次傳遞的進(jìn)程ID,根據(jù)進(jìn)程ID獲取檢測子進(jìn)程的相關(guān)信息。本方法中,相關(guān)信息可具體為EPROCESS結(jié)構(gòu)地址。核心檢測進(jìn)程獲取各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址之后,將各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址寫入進(jìn)程過濾名單中。
步驟S502,利用掛鉤技術(shù),在調(diào)用指定API之前,獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息。
本方法對關(guān)于進(jìn)程、線程、內(nèi)存地址空間操作的指定API進(jìn)行掛鉤,在Hook指定API后,在自定義函數(shù)中實(shí)現(xiàn)步驟S502-步驟S504。在步驟S502中,獲取當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址和操作目標(biāo)進(jìn)程的EPROCESS結(jié)構(gòu)地址。
步驟S503,判斷操作目標(biāo)進(jìn)程的相關(guān)信息是否記錄在進(jìn)程過濾名單中,且當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否未記錄在進(jìn)程過濾名單中,若是,則執(zhí)行步驟S504;若否,則執(zhí)行步驟S505。
可選地,判斷操作目標(biāo)進(jìn)程的EPROCESS結(jié)構(gòu)地址是否記錄在進(jìn)程過濾名單中,且當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址是否未記錄在進(jìn)程過濾名單中。
步驟S504,終止調(diào)用指定API。
若判斷出操作目標(biāo)進(jìn)程的EPROCESS結(jié)構(gòu)地址記錄在進(jìn)程過濾名單中,且當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址未記錄在進(jìn)程過濾名單中,則表明存在其它進(jìn)程試圖訪問某個(gè)檢測子進(jìn)程,則需要進(jìn)行阻止。例如,返回拒絕訪問的狀態(tài)碼,終止調(diào)用指定API。
步驟S505,繼續(xù)調(diào)用指定API,向調(diào)用者返回指定API的返回值。
若判斷出操作目標(biāo)進(jìn)程的EPROCESS結(jié)構(gòu)地址未記錄在進(jìn)程過濾名單中,或者,當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址記錄在進(jìn)程過濾名單中,則繼續(xù)調(diào)用指定API,向調(diào)用者返回指定API的返回值。
根據(jù)本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)方法,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中,在調(diào)用指定API之前,利用掛鉤獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息,通過將當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息與進(jìn)程過濾名單相匹配,判定是否終止調(diào)用指定API。利用本方法,可保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行的檢測進(jìn)程的地址空間,防止被沙箱逃逸的惡意樣本進(jìn)程訪問,避免機(jī)密信息失竊,提升在虛擬機(jī)沙箱隔離環(huán)境下內(nèi)核漏洞檢測的安全性。
圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測文件保護(hù)方法的流程圖。本實(shí)施例提供的方法主要是用于保護(hù)檢測過程中所產(chǎn)生的檢測文件,如日志文件等,防止被沙箱逃逸的惡意樣本進(jìn)程訪問、篡改、加密或損毀,避免因此導(dǎo)致的檢測失敗或結(jié)果異常,維護(hù)沙箱系統(tǒng)的穩(wěn)定和性能。如圖6所示,該方法包括如下步驟:
步驟S601,獲取各檢測子進(jìn)程的相關(guān)信息,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中。
在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序之后,讀取目標(biāo)檢測配置文件中的相關(guān)字段,解析得到一個(gè)或多個(gè)檢測子進(jìn)程的進(jìn)程名,根據(jù)進(jìn)程名獲取各檢測子進(jìn)程的進(jìn)程ID,通過IO控制碼將各檢測子進(jìn)程的進(jìn)程ID發(fā)送給核心檢測進(jìn)程。
核心檢測進(jìn)程接收輔助檢測進(jìn)程(用戶層進(jìn)程)通過IO控制碼發(fā)送的各檢測子進(jìn)程的進(jìn)程ID。具體地,核心檢測進(jìn)程在接收到標(biāo)記為“進(jìn)程ID過濾”的IO控制碼后,從輸入緩沖區(qū)中獲取當(dāng)次傳遞的進(jìn)程ID,根據(jù)進(jìn)程ID獲取檢測子進(jìn)程的相關(guān)信息。本方法中,相關(guān)信息可具體為EPROCESS結(jié)構(gòu)地址。核心檢測進(jìn)程獲取各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址之后,將各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址寫入進(jìn)程過濾名單中。
步驟S602,獲取檢測文件的存儲路徑信息,將檢測文件的存儲路徑信息寫入私有目錄名單中。
在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序之后,讀取目標(biāo)檢測配置文件中的相關(guān)字段,解析得到一個(gè)或多個(gè)檢測文件的存儲路徑,通過IO控制碼將各檢測文件的存儲路徑發(fā)送給核心檢測進(jìn)程。
核心檢測進(jìn)程接收輔助檢測進(jìn)程(用戶層進(jìn)程)通過IO控制碼發(fā)送的各檢測文件的存儲路徑。具體地,核心檢測進(jìn)程在接收到標(biāo)記為“私有目錄”的IO控制碼后,從輸入緩沖區(qū)中獲取當(dāng)次傳遞的檢測文件的存儲路徑,根據(jù)檢測文件的存儲路徑構(gòu)造出字符串對象作為檢測文件的存儲路徑信息,將檢測文件的存儲路徑信息寫入私有目錄名單中。
步驟S603,當(dāng)產(chǎn)生文件訪問操作時(shí),判斷文件訪問對象的存儲路徑信息是否記錄在私有目錄名單中。
本實(shí)施例實(shí)現(xiàn)檢測文件保護(hù)主要是在IRP分發(fā)函數(shù)的函數(shù)體中實(shí)現(xiàn)。例如,在READ,WRITE,CREATE,SET_INFORMATION,DIRECTORY_CONTROL等分發(fā)函數(shù)的自實(shí)現(xiàn)函數(shù)體中,實(shí)現(xiàn)判斷文件訪問對象的存儲路徑信息是否記錄在私有目錄名單中,若是,則執(zhí)行步驟S604;若否,執(zhí)行步驟S606。
步驟S604,判斷當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否記錄在所述進(jìn)程過濾名單中。
若判斷出文件訪問對象的存儲路徑信息記錄在私有目錄名單中,則進(jìn)一步判斷當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否記錄在進(jìn)程過濾名單中,具體地,判斷當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址是否記錄在進(jìn)程過濾名單中,若是,則執(zhí)行步驟S606;若否,則執(zhí)行步驟S605。
步驟S605,若判斷出當(dāng)前上下背景文進(jìn)程的相關(guān)信息未記錄在進(jìn)程過濾名單中,則拒絕文件訪問操作。
若文件訪問對象的存儲路徑信息記錄在私有目錄名單,而當(dāng)前上下背景文進(jìn)程的相關(guān)信息未記錄在進(jìn)程過濾名單中,表明有其它進(jìn)程試圖訪問檢測文件,則IPR不再向下分發(fā),拒絕文件訪問操作。
步驟S606,若判斷出文件訪問對象的存儲路徑信息未記錄在私有目錄名單中,或者,判斷出當(dāng)前上下背景文進(jìn)程的相關(guān)信息記錄在所述進(jìn)程過濾名單中,則繼續(xù)響應(yīng)文件訪問操作。
若文件訪問對象的存儲路徑信息未記錄在私有目錄名單,表明訪問的不是需要保護(hù)的檢測文件,則IPR繼續(xù)向下分發(fā),響應(yīng)文件訪問操作。若文件訪問對象的存儲路徑信息記錄在私有目錄名單,且當(dāng)前上下背景文進(jìn)程的相關(guān)信息記錄在進(jìn)程過濾名單中,表明是檢測子進(jìn)程試圖訪問檢測文件,則IPR繼續(xù)向下分發(fā),響應(yīng)文件訪問操作。
根據(jù)本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測文件保護(hù)方法,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中,將檢測文件的存儲路徑信息寫入私有目錄名單中,當(dāng)產(chǎn)生文件訪問操作時(shí),將文件訪問對象的存儲路徑信息和當(dāng)前上下背景文進(jìn)程的相關(guān)信息分別與進(jìn)程過濾名單和私有目錄名單相匹配,判定是否拒絕文件訪問操作。利用本方法,可保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下產(chǎn)生的檢測文件,防止被沙箱逃逸的惡意樣本進(jìn)程訪問、篡改、加密或損毀,避免因此導(dǎo)致的檢測失敗或結(jié)果異常,維護(hù)沙箱系統(tǒng)的穩(wěn)定和性能。
圖7示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置的功能框圖。本裝置具體是在服務(wù)器端虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,用于針對指定的樣本文件進(jìn)行動態(tài)的內(nèi)核漏洞利用檢測。如圖7所示,該裝置包括:通信代理模塊701,調(diào)度管控模塊702,輔助檢測模塊703,核心檢測模塊704。
通信代理模塊701,適于啟動通信代理進(jìn)程,使通信代理進(jìn)程監(jiān)聽指定端口,等待并接收虛擬機(jī)外部主機(jī)傳輸?shù)臋z測包和樣本文件,將檢測包和樣本文件分別存儲到檢測目錄和臨時(shí)目錄下。通信代理進(jìn)程是負(fù)責(zé)與虛擬機(jī)外部主機(jī)進(jìn)行數(shù)據(jù)交互、文件傳遞的進(jìn)程。當(dāng)服務(wù)端虛擬機(jī)操作系統(tǒng)開機(jī)時(shí),通信代理進(jìn)程隨之自啟動。通信代理進(jìn)程監(jiān)聽指定端口,等待并接收虛擬機(jī)外部主機(jī)的相關(guān)進(jìn)程傳輸?shù)臋z測包和樣本文件。通信代理進(jìn)程對檢測包進(jìn)行解壓操作,將解壓得到的文件存儲到檢測目錄下;另外,通信代理進(jìn)程將樣本文件存儲到臨時(shí)目錄下。隨后,通信代理線程啟動檢測包中的調(diào)度管控進(jìn)程。
調(diào)度管控模塊702,適于啟動檢測包中的調(diào)度管控進(jìn)程,使調(diào)度管控進(jìn)程獲取樣本文件存儲路徑,識別樣本文件類型,根據(jù)通用檢測配置文件中的配置選項(xiàng)選擇檢測模式和各檢測功能點(diǎn),以創(chuàng)建針對所述樣本文件的目標(biāo)檢測配置文件。在調(diào)度管控進(jìn)程啟動之后,調(diào)度管控進(jìn)程獲取樣本文件存儲路徑,識別樣本文件類型。接著,調(diào)度管控進(jìn)程讀取自身關(guān)聯(lián)的通用檢測配置文件,根據(jù)樣本文件類型選擇檢測模式和各檢測功能點(diǎn),初始化自身各功能,創(chuàng)建針對樣本文件的目標(biāo)檢測配置文件。隨后,調(diào)度管控進(jìn)程啟動輔助檢測進(jìn)程,并將樣本文件的存儲路徑(可為URL)通過參數(shù)的方式傳遞給輔助檢測進(jìn)程。
輔助檢測模塊703,適于啟動輔助檢測進(jìn)程,使輔助檢測進(jìn)程利用目標(biāo)檢測配置文件控制各檢測功能點(diǎn)的開關(guān)。在輔助檢測進(jìn)程啟動之后,輔助檢測進(jìn)程根據(jù)目標(biāo)檢測配置文件進(jìn)行初始化,加載核心檢測進(jìn)程的驅(qū)動程序,利用目標(biāo)檢測配置文件控制各檢測功能點(diǎn)的開關(guān)。
核心檢測模塊704,適于啟動核心檢測進(jìn)程,使核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,執(zhí)行漏洞檢測,根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序后,核心檢測進(jìn)程啟動。核心檢測進(jìn)程接收輔助檢測進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,執(zhí)行初始化操作。而后,根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息執(zhí)行樣本文件的檢測,根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
通信代理模塊701進(jìn)一步適于:使通信代理進(jìn)程創(chuàng)建消息通信線程,建立與所述調(diào)度管控進(jìn)程之間的通信連接。在調(diào)度管控進(jìn)程啟動后,通信代理進(jìn)程創(chuàng)建消息通信線程,可選地,通過RPC與調(diào)度管控進(jìn)程建立通信連接。利用該通信連接,可將后續(xù)接收到的來自于調(diào)度管控進(jìn)程的消息數(shù)據(jù)包實(shí)時(shí)轉(zhuǎn)發(fā)至虛擬機(jī)外部主機(jī)。
調(diào)度管控模塊702進(jìn)一步適于:使調(diào)度管控進(jìn)程創(chuàng)建屏幕截取線程,每隔預(yù)定時(shí)間截取屏幕圖像;利用調(diào)度管控進(jìn)程與通信代理進(jìn)程之間建立的通信連接,將截取的屏幕圖像實(shí)時(shí)發(fā)送給所述通信代理進(jìn)程。
通信代理模塊701進(jìn)一步適于:使通信代理進(jìn)程將所述截取的屏幕圖像發(fā)送給虛擬機(jī)外部主機(jī)。
調(diào)度管控模塊702進(jìn)一步適于:使調(diào)度管控進(jìn)程創(chuàng)建鼠標(biāo)模擬點(diǎn)擊線程,隨機(jī)針對屏幕坐標(biāo)模擬鼠標(biāo)點(diǎn)擊操作,以及針對特定控件模擬鼠標(biāo)點(diǎn)擊操作。
調(diào)度管控模塊702進(jìn)一步適于:使調(diào)度管控進(jìn)程根據(jù)通用檢測配置文件中的配置選項(xiàng)選擇超時(shí)限制條件;在執(zhí)行樣本文件的檢測過程中,判斷是否滿足超時(shí)限制條件,若是,則結(jié)束檢測過程,將檢測結(jié)果打包為數(shù)據(jù)包發(fā)送給所述通信代理進(jìn)程,以供所述通信代理進(jìn)程將所述數(shù)據(jù)包發(fā)送給虛擬機(jī)外部主機(jī)。
核心檢測模塊704進(jìn)一步適于:使核心檢測進(jìn)程接收所述輔助檢測進(jìn)程通過IO控制碼的方式發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。
本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,通過通信代理進(jìn)程實(shí)現(xiàn)與虛擬機(jī)外部主機(jī)的數(shù)據(jù)交互和文件傳遞,借助調(diào)度管控進(jìn)程和輔助檢測進(jìn)程來輔助核心檢測進(jìn)程實(shí)現(xiàn)樣本文件的檢測。本裝置將內(nèi)核漏洞的檢測與外部隔離,為可疑樣本提供了一個(gè)封閉的檢測環(huán)境,即使可疑樣本確實(shí)存在漏洞,也不會對服務(wù)器側(cè)造成損害,提供了一種安全且高效地內(nèi)核漏洞檢測機(jī)制。本裝置中,調(diào)度管控進(jìn)程根據(jù)通用檢測配置文件中的配置選項(xiàng)選擇超時(shí)限制條件,通過配置超時(shí)限制條件,避免后續(xù)針對某個(gè)樣本文件的檢測占用過長時(shí)間,提升檢測的效率。調(diào)度管控進(jìn)程創(chuàng)建屏幕截取線程和/或鼠標(biāo)模擬點(diǎn)擊線程,能將服務(wù)器屏幕呈現(xiàn)的圖像傳遞給虛擬機(jī)外部主機(jī),供虛擬機(jī)外部主機(jī)的用戶查看檢測過程的進(jìn)展和具體情況,可視化效果良好。
圖8示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置的功能框圖。該裝置在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,如圖8所示,該裝置包括:加載模塊801,接收模塊802,啟動模塊803,添加模塊804,檢測模塊805,日志存儲模塊806。
加載模塊801,適于加載驅(qū)動程序。加載模塊801在加載驅(qū)動程序時(shí),初始化驅(qū)動程序所需的相關(guān)數(shù)據(jù)結(jié)構(gòu)對象和變量。記錄至少一個(gè)系統(tǒng)進(jìn)程的進(jìn)程ID,記錄HAL例程地址表(HalDispatchTable)中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值,例如HALQuerySystemInformatica等函數(shù)指針值。
接收模塊802,適于接收用戶層進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。本實(shí)施例中,用戶層進(jìn)程可以指的是上述實(shí)施例中描述的輔助檢測進(jìn)程。接收模塊802接收輔助檢測進(jìn)程發(fā)送的各種IO控制碼,對其進(jìn)行解析獲取樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息。具體地,通過解析IO控制碼識別出“內(nèi)核利用監(jiān)控”的標(biāo)記,然后根據(jù)傳入緩沖區(qū)(Buffer)的數(shù)據(jù),選擇進(jìn)入對應(yīng)的分發(fā)處理例程中。
啟動模塊803,適于根據(jù)各檢測功能點(diǎn)的開關(guān)信息開啟內(nèi)核層行為監(jiān)控總控開關(guān)。
添加模塊804,適于當(dāng)系統(tǒng)創(chuàng)建新進(jìn)程時(shí),將新進(jìn)程添加到進(jìn)程創(chuàng)建記錄名單中。
檢測模塊805,適于對所述新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測。
日志存儲模塊806,適于根據(jù)檢測結(jié)果生成日志文件,將日志文件存儲到日志目錄下。
進(jìn)一步的,該裝置還包括:掛鉤配置模塊807,適于根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,掛鉤SSDT中針對各功能檢測點(diǎn)的指定API和NtQueryIntervalProfile。本裝置通過掛鉤技術(shù)實(shí)現(xiàn)對新進(jìn)程的內(nèi)核層各操作行為的檢測。根據(jù)樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,掛鉤SSDT中針對各功能檢測點(diǎn)的指定API和NtQueryIntervalProfile。所掛鉤的API具體為針對內(nèi)存、特權(quán)、注冊表、進(jìn)程/線程、文件等操作的關(guān)鍵NTAPI。
進(jìn)一步的,該裝置還包括:例程設(shè)置模塊808,適于設(shè)置進(jìn)程創(chuàng)建通知例程;在所述進(jìn)程創(chuàng)建通知例程中記錄所創(chuàng)建的新進(jìn)程的屬性值。當(dāng)系統(tǒng)創(chuàng)建新進(jìn)程時(shí),例程設(shè)置模塊808在進(jìn)程創(chuàng)建通知例程中記錄所創(chuàng)建的新進(jìn)程的屬性值,例如:Privileges、UserSID、OwnerSID等屬性值。
上述檢測模塊805進(jìn)一步適于:利用掛鉤技術(shù),在調(diào)用NtQueryIntervalProfile之前,獲取HAL例程地址表中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值;將所獲取的HAL例程地址表中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值與加載驅(qū)動程序過程中所記錄的HAL例程地址表中存儲的至少一項(xiàng)關(guān)鍵函數(shù)指針值進(jìn)行比對;若所述至少一項(xiàng)關(guān)鍵函數(shù)指針值比對不一致,則檢測出所述新進(jìn)程存在提權(quán)行為。
上述檢測模塊805進(jìn)一步適于:利用掛鉤技術(shù),在調(diào)用相應(yīng)的指定API之前,根據(jù)加載驅(qū)動程序過程中所記錄的至少一個(gè)系統(tǒng)進(jìn)程的進(jìn)程ID獲取至少一個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址,同時(shí)獲取所述新進(jìn)程的EPROCESS結(jié)構(gòu)地址;將所述新進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值與至少一個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值進(jìn)行比對;若所述新進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值與其中一個(gè)系統(tǒng)進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域的指針值比對一致,則檢測出所述新進(jìn)程存在提權(quán)行為。
上述檢測模塊805進(jìn)一步適于:利用掛鉤技術(shù),在調(diào)用相應(yīng)的指定API之前,獲取所述新進(jìn)程的屬性值;將所獲取的所述新進(jìn)程的屬性值與在所述進(jìn)程創(chuàng)建通知例程中所記錄的新進(jìn)程的屬性值進(jìn)行比對;若比對不一致,則檢測出所述新進(jìn)程存在提權(quán)行為。
上述檢測模塊805進(jìn)一步適于:將所述獲取的新進(jìn)程的Privileges、TokenUser、和/或TokenOwner與在所述進(jìn)程創(chuàng)建通知例程中所記錄的新進(jìn)程的Privileges、UserSID、和/或OwnerSID進(jìn)行比對。
上述檢測模塊805進(jìn)一步適于:利用掛鉤技術(shù),在調(diào)用相應(yīng)的指定API之前,查詢所述新進(jìn)程的EPROCESS結(jié)構(gòu)地址中的Token域內(nèi)的ACL是否被置空;若是,則檢測出所述新進(jìn)程存在提權(quán)行為。
上述檢測模塊805進(jìn)一步適于:利用掛鉤技術(shù),在調(diào)用棧對CR4寄存器進(jìn)行操作之前,查看所述調(diào)用棧是否為允許調(diào)用CR4寄存器修改指令的調(diào)用棧,或者,檢測所述調(diào)用棧是否調(diào)用禁用SMEP的指令;若是,則檢測出所述新進(jìn)程存在提權(quán)行為。
上述檢測模塊805進(jìn)一步適于:檢測是否存在將有限制的內(nèi)核地址寫操作轉(zhuǎn)化為內(nèi)核任意地址讀寫操作的行為,若是,則檢測出所述新進(jìn)程存在提權(quán)行為。
本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行,根據(jù)用戶層進(jìn)程發(fā)送的樣本文件的相關(guān)信息以及各檢測功能點(diǎn)的開關(guān)信息,開啟內(nèi)核層行為監(jiān)控總控開關(guān);監(jiān)控系統(tǒng)創(chuàng)建的新進(jìn)程,對新進(jìn)程的內(nèi)核層各操作行為進(jìn)行檢測。本裝置將內(nèi)核漏洞的檢測與外部隔離,為可疑樣本提供了一個(gè)封閉的檢測環(huán)境,即使可疑樣本確實(shí)存在漏洞,也不會對服務(wù)器側(cè)造成損害,提供了一種安全且高效地內(nèi)核漏洞檢測機(jī)制。本裝置通過掛鉤技術(shù),針對用戶層進(jìn)程提供的各檢測功能點(diǎn)對應(yīng)的API設(shè)置鉤子函數(shù),在調(diào)用API之前,執(zhí)行檢測操作,能及時(shí)有效地發(fā)現(xiàn)提權(quán)和利用等問題,提升了內(nèi)核漏洞檢測的效率。
圖9示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)的功能框圖。本實(shí)施例提供的裝置主要是用于保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行的檢測進(jìn)程的地址空間,防止被沙箱逃逸的惡意樣本進(jìn)程訪問、釋放或泄露,避免機(jī)密信息失竊。如圖9所示,該裝置包括:寫入模塊901,掛鉤處理模塊902,判斷模塊903,終止模塊904。可選地,還包括:接收模塊905和調(diào)用模塊906。
接收模塊905,適于接收用戶層進(jìn)程發(fā)送的各檢測子進(jìn)程的進(jìn)程ID。
在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序之后,讀取目標(biāo)檢測配置文件中的相關(guān)字段,解析得到一個(gè)或多個(gè)檢測子進(jìn)程的進(jìn)程名,根據(jù)進(jìn)程名獲取各檢測子進(jìn)程的進(jìn)程ID,通過IO控制碼將各檢測子進(jìn)程的進(jìn)程ID發(fā)送給核心檢測進(jìn)程。
核心檢測進(jìn)程內(nèi)部的接收模塊905接收輔助檢測進(jìn)程(用戶層進(jìn)程)通過IO控制碼發(fā)送的各檢測子進(jìn)程的進(jìn)程ID。具體地,接收模塊905在接收到標(biāo)記為“進(jìn)程ID過濾”的IO控制碼后,從輸入緩沖區(qū)中獲取當(dāng)次傳遞的進(jìn)程ID。
寫入模塊901,適于獲取各檢測子進(jìn)程的相關(guān)信息,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中。
寫入模塊901根據(jù)進(jìn)程ID獲取檢測子進(jìn)程的相關(guān)信息。其中,相關(guān)信息可具體為EPROCESS結(jié)構(gòu)地址。寫入模塊901獲取各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址之后,將各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址寫入進(jìn)程過濾名單中。
掛鉤處理模塊902,適于利用掛鉤技術(shù),在調(diào)用指定API之前,獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息。
掛鉤處理模塊902對關(guān)于進(jìn)程、線程、內(nèi)存地址空間操作的指定API進(jìn)行掛鉤,在Hook指定API后,在自定義函數(shù)中實(shí)現(xiàn)判斷模塊903和終止模塊904的功能。掛鉤處理模塊902首先獲取當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址和操作目標(biāo)進(jìn)程的EPROCESS結(jié)構(gòu)地址。
判斷模塊903,適于判斷所述操作目標(biāo)進(jìn)程的相關(guān)信息是否記錄在所述進(jìn)程過濾名單中,且所述當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否未記錄在所述進(jìn)程過濾名單中。具體地,判斷模塊903判斷操作目標(biāo)進(jìn)程的EPROCESS結(jié)構(gòu)地址是否記錄在進(jìn)程過濾名單中,且當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址是否未記錄在進(jìn)程過濾名單中。
終止模塊904,適于若判斷模塊903判斷出操作目標(biāo)進(jìn)程的相關(guān)信息記錄在進(jìn)程過濾名單中,且當(dāng)前上下背景文進(jìn)程的相關(guān)信息未記錄在進(jìn)程過濾名單中,終止調(diào)用指定API。
調(diào)用模塊906,適于若判斷模塊903判斷出操作目標(biāo)進(jìn)程的相關(guān)信息未記錄在所述進(jìn)程過濾名單中,或者,當(dāng)前上下背景文進(jìn)程的相關(guān)信息記錄在進(jìn)程過濾名單中,則繼續(xù)調(diào)用指定API,向調(diào)用者返回所述指定API的返回值。
根據(jù)本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測進(jìn)程保護(hù)裝置,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中,在調(diào)用指定API之前,利用掛鉤獲取當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息,通過將當(dāng)前上下背景文進(jìn)程的相關(guān)信息和操作目標(biāo)進(jìn)程的相關(guān)信息與進(jìn)程過濾名單相匹配,判定是否終止調(diào)用指定API。利用本裝置,可保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下運(yùn)行的檢測進(jìn)程的地址空間,防止被沙箱逃逸的惡意樣本進(jìn)程訪問,避免機(jī)密信息失竊,提升在虛擬機(jī)沙箱隔離環(huán)境下內(nèi)核漏洞檢測的安全性。
圖10示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測文件保護(hù)的功能框圖。本實(shí)施例提供的裝置主要是用于保護(hù)檢測過程中所產(chǎn)生的檢測文件,如日志文件等,防止被沙箱逃逸的惡意樣本進(jìn)程訪問、篡改、加密或損毀,避免因此導(dǎo)致的檢測失敗或結(jié)果異常,維護(hù)沙箱系統(tǒng)的穩(wěn)定和性能。如圖10所示,該裝置包括:第一寫入模塊1001,第二寫入模塊1002,第一判斷模塊1003,第二判斷模塊1004,拒絕模塊1005;可選地,該裝置還包括:接收模塊1006和響應(yīng)模塊1007。
接收模塊1006,適于接收用戶層進(jìn)程發(fā)送的檢測文件的存儲路徑。
在輔助檢測進(jìn)程加載核心檢測進(jìn)程的驅(qū)動程序之后,讀取目標(biāo)檢測配置文件中的相關(guān)字段,解析得到一個(gè)或多個(gè)檢測子進(jìn)程的進(jìn)程名以及一個(gè)或多個(gè)檢測文件的存儲路徑,根據(jù)進(jìn)程名獲取各檢測子進(jìn)程的進(jìn)程ID,通過IO控制碼將各檢測子進(jìn)程的進(jìn)程ID和各檢測文件的存儲路徑發(fā)送給核心檢測進(jìn)程。
核心檢測進(jìn)程內(nèi)部的接收模塊1006接收輔助檢測進(jìn)程(用戶層進(jìn)程)通過IO控制碼發(fā)送的各檢測子進(jìn)程的進(jìn)程ID和各檢測文件的存儲路徑。具體地,核心檢測進(jìn)程在接收到標(biāo)記為“進(jìn)程ID過濾”的IO控制碼后,從輸入緩沖區(qū)中獲取當(dāng)次傳遞的進(jìn)程ID;核心檢測進(jìn)程在接收到標(biāo)記為“私有目錄”的IO控制碼后,從輸入緩沖區(qū)中獲取當(dāng)次傳遞的檢測文件的存儲路徑。
第一寫入模塊1001,適于獲取各檢測子進(jìn)程的相關(guān)信息,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中。
第一寫入模塊1001根據(jù)進(jìn)程ID獲取檢測子進(jìn)程的相關(guān)信息。本方法中,相關(guān)信息可具體為EPROCESS結(jié)構(gòu)地址。第一寫入模塊1001獲取各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址之后,將各檢測子進(jìn)程的EPROCESS結(jié)構(gòu)地址寫入進(jìn)程過濾名單中。
第二寫入模塊1002,適于獲取檢測文件的存儲路徑信息,將檢測文件的存儲路徑信息寫入私有目錄名單中。
第二寫入模塊1002根據(jù)檢測文件的存儲路徑構(gòu)造出字符串對象作為檢測文件的存儲路徑信息,將檢測文件的存儲路徑信息寫入私有目錄名單中。
第一判斷模塊1003,適于當(dāng)產(chǎn)生文件訪問操作時(shí),判斷文件訪問對象的存儲路徑信息是否記錄在私有目錄名單中。
本實(shí)施例實(shí)現(xiàn)檢測文件保護(hù)主要是在IRP分發(fā)函數(shù)的函數(shù)體中實(shí)現(xiàn)。例如,在READ,WRITE,CREATE,SET_INFORMATION,DIRECTORY_CONTROL等分發(fā)函數(shù)的自實(shí)現(xiàn)函數(shù)體中,實(shí)現(xiàn)判斷文件訪問對象的存儲路徑信息是否記錄在私有目錄名單中。
第二判斷模塊1004,若第一判斷模塊1003判斷出文件訪問對象的存儲路徑信息記錄在私有目錄名單中,則判斷當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否記錄在所述進(jìn)程過濾名單中。
若判斷出文件訪問對象的存儲路徑信息記錄在私有目錄名單中,則第二判斷模塊1004進(jìn)一步判斷當(dāng)前上下背景文進(jìn)程的相關(guān)信息是否記錄在進(jìn)程過濾名單中,具體地,判斷當(dāng)前上下背景文進(jìn)程的EPROCESS結(jié)構(gòu)地址是否記錄在進(jìn)程過濾名單中。
拒絕模塊1005,適于若第二判斷模塊1004判斷出當(dāng)前上下背景文進(jìn)程的相關(guān)信息未記錄在進(jìn)程過濾名單中,則拒絕文件訪問操作。
若文件訪問對象的存儲路徑信息記錄在私有目錄名單,而當(dāng)前上下背景文進(jìn)程的相關(guān)信息未記錄在進(jìn)程過濾名單中,表明有其它進(jìn)程試圖訪問檢測文件,則IPR不再向下分發(fā),拒絕文件訪問操作。
響應(yīng)模塊1007,適于若第一判斷模塊1003判斷出文件訪問對象的存儲路徑信息未記錄在私有目錄名單中,或者,第二判斷模塊1004判斷出當(dāng)前上下背景文進(jìn)程的相關(guān)信息記錄在進(jìn)程過濾名單中,則繼續(xù)響應(yīng)文件訪問操作。
若文件訪問對象的存儲路徑信息未記錄在私有目錄名單,表明訪問的不是需要保護(hù)的檢測文件,則IPR繼續(xù)向下分發(fā),響應(yīng)文件訪問操作。若文件訪問對象的存儲路徑信息記錄在私有目錄名單,且當(dāng)前上下背景文進(jìn)程的相關(guān)信息記錄在進(jìn)程過濾名單中,表明是檢測子進(jìn)程試圖訪問檢測文件,則IPR繼續(xù)向下分發(fā),響應(yīng)文件訪問操作。
根據(jù)本實(shí)施例提供的基于虛擬機(jī)的內(nèi)核漏洞檢測文件保護(hù)裝置,將各檢測子進(jìn)程的相關(guān)信息寫入進(jìn)程過濾名單中,將檢測文件的存儲路徑信息寫入私有目錄名單中,當(dāng)產(chǎn)生文件訪問操作時(shí),將文件訪問對象的存儲路徑信息和當(dāng)前上下背景文進(jìn)程的相關(guān)信息分別與進(jìn)程過濾名單和私有目錄名單相匹配,判定是否拒絕文件訪問操作。利用本裝置,可保護(hù)在虛擬機(jī)沙箱隔離環(huán)境下產(chǎn)生的檢測文件,防止被沙箱逃逸的惡意樣本進(jìn)程訪問、篡改、加密或損毀,避免因此導(dǎo)致的檢測失敗或結(jié)果異常,維護(hù)沙箱系統(tǒng)的穩(wěn)定和性能。
本發(fā)明可以應(yīng)用于網(wǎng)絡(luò)安全、終端安全、云安全、應(yīng)用安全、安全管理和安全服務(wù)等多個(gè)領(lǐng)域。產(chǎn)品包括高中低端下一代防火墻、入侵防御系統(tǒng)、DDoS攻擊防御系統(tǒng)、虛擬綜合業(yè)務(wù)網(wǎng)關(guān)、沙箱、大數(shù)據(jù)安全分析系統(tǒng)等產(chǎn)品,以及相應(yīng)的針對傳統(tǒng)威脅及未知威脅的解決方案。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(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ù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的基于虛擬機(jī)的內(nèi)核漏洞檢測裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。