專利名稱:基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及虛擬機(jī)技術(shù),尤其涉及一種基于虛擬機(jī)監(jiān)控器(Virtual Machine Monitor,簡稱為VMM)的隱藏進(jìn)程檢測方法和裝置,屬于計(jì)算機(jī)技術(shù)領(lǐng)域。
背景技術(shù):
虛擬化技術(shù)的發(fā)展促進(jìn)了虛擬機(jī)技術(shù)的出現(xiàn)。通過虛擬硬件來實(shí)現(xiàn)虛擬機(jī),將一臺(tái)物理計(jì)算機(jī)系統(tǒng)虛擬化為一臺(tái)或多臺(tái)虛擬計(jì)算機(jī)系統(tǒng),每個(gè)虛擬計(jì)算機(jī)系統(tǒng)都擁有自己的虛擬硬件(如CPU、內(nèi)存和設(shè)備等)。虛擬機(jī)的各種優(yōu)點(diǎn)促使了虛擬計(jì)算環(huán)境的發(fā)展。當(dāng)然,作為計(jì)算環(huán)境的核心,虛擬機(jī)的安全性必須要得到更好的保證,這也成為當(dāng)前虛擬計(jì)算環(huán)境下所要研究的重要問題。此外,虛擬機(jī)技術(shù)的發(fā)展不僅促進(jìn)虛擬計(jì)算環(huán)境的發(fā)展,其本身的一些優(yōu)勢也為安全技術(shù)的發(fā)展帶來了新的機(jī)遇。虛擬機(jī)監(jiān)控器處于客戶機(jī)以及客戶機(jī)系統(tǒng)的底層,具有更高的特權(quán)級(jí)。因此,通過虛擬機(jī)監(jiān)控器可以更容易解決安全的一些問題。
在虛擬機(jī)系統(tǒng)會(huì)出現(xiàn)的各種安全問題中,系統(tǒng)中隱藏對象帶來日益嚴(yán)重的安全問題。所謂“隱藏”,指的是“用戶不可見”。有這樣一種惡意軟件,常被稱為“Rootkit (內(nèi)核級(jí)后門/木馬)”,他們運(yùn)行在系統(tǒng)內(nèi)核態(tài),可以自隱藏自己的進(jìn)程、服務(wù)、日志以及網(wǎng)絡(luò)連接等等,并能夠?qū)φ5挠脩舫绦蜻M(jìn)行隱藏。于是,如何檢測到系統(tǒng)中的隱藏對象成為維護(hù)系統(tǒng)內(nèi)部安全的重要內(nèi)容,也是虛擬計(jì)算環(huán)境下保障虛擬機(jī)內(nèi)部安全的重要內(nèi)容。
目前關(guān)于如何檢測系統(tǒng)內(nèi)隱藏的各種對象,主要有三種方法一種基于系統(tǒng)內(nèi)部的研究和實(shí)現(xiàn),一種基于輔助的硬件,還有一種基于虛擬機(jī)控制器的一些安全機(jī)制?;谙到y(tǒng)級(jí)的隱藏對象檢測機(jī)制存在篡改、禁用、繞過的危險(xiǎn),而基于輔助硬件的,需要專門硬件的支持,增加了成本,且實(shí)現(xiàn)功能不完整?;赩MM的安全技術(shù)已經(jīng)有了很大的發(fā)展,而且安全性在增加,但是也會(huì)分別出現(xiàn)一些不足有些是粗粒度的檢測;有些是利用內(nèi)核數(shù)據(jù)結(jié)構(gòu)進(jìn)行語義轉(zhuǎn)換,在沒有驗(yàn)證的情況下,會(huì)漏掉一些信息;有些為了實(shí)現(xiàn)更高安全性,犧牲掉了一些完整的語義信息;而更多的研究放在了研究進(jìn)程方面,關(guān)于文件、網(wǎng)絡(luò)連接的研究比較少,如果存在只終止了隱藏的進(jìn)程而忽略了遺留的隱藏文件,或者沒有關(guān)注隱藏的網(wǎng)絡(luò)連接,這些連接很有可能是非隱藏的進(jìn)程創(chuàng)建的,等等一些情況下,導(dǎo)致檢測的范圍受限。除外,一些不支持開源的商用系統(tǒng)的研究使用范圍也有一定限制。發(fā)明內(nèi)容
本發(fā)明的第一個(gè)方面是提供一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法,包括
分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息;
比較所述用戶態(tài)中的進(jìn)程信息與所述內(nèi)核態(tài)中的進(jìn)程信息,獲得用戶態(tài)中的隱藏進(jìn)程;
比較所述內(nèi)核態(tài)中的進(jìn)程信息與所述虛擬機(jī)監(jiān)控器中的進(jìn)程信息,獲得內(nèi)核態(tài)中的隱藏進(jìn)程。
本發(fā)明的第二個(gè)方面是提供一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法,包括
比較虛擬機(jī)內(nèi)部用戶態(tài)程序維護(hù)的網(wǎng)絡(luò)連接信息與虛擬機(jī)監(jiān)控器維護(hù)的網(wǎng)絡(luò)連接信息,獲得隱藏的網(wǎng)絡(luò)連接;
利用虛擬機(jī)監(jiān)控器獲取進(jìn)程與端口的映射信息,根據(jù)所述隱藏的網(wǎng)絡(luò)連接的網(wǎng)絡(luò)端口,獲得隱藏進(jìn)程。
本發(fā)明的第二個(gè)方面是提供一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測裝置,包括
獲得模塊,用于分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息;
第一比較模塊,用于比較所述用戶態(tài)中的進(jìn)程信息與所述內(nèi)核態(tài)中的進(jìn)程信息, 獲得用戶態(tài)中的隱藏進(jìn)程;
第二比較模塊,用于比較所述內(nèi)核態(tài)中的進(jìn)程信息與所述虛擬機(jī)監(jiān)控器中的進(jìn)程信息,獲得內(nèi)核態(tài)中的隱藏進(jìn)程。
本發(fā)明一個(gè)方面的技術(shù)效果是在利用硬件虛擬化的技術(shù),并且作為Linux系統(tǒng)可加載的模塊,在虛擬機(jī)監(jiān)控器KVM中進(jìn)行修改,不影響虛擬機(jī)監(jiān)控器的正常運(yùn)行以及產(chǎn)生可接受的額外性能開銷,實(shí)現(xiàn)了多種視圖的隱藏進(jìn)程檢測及識(shí)別技術(shù),并通過檢測隱藏的網(wǎng)絡(luò)連接進(jìn)一步發(fā)現(xiàn)可疑的進(jìn)程,實(shí)現(xiàn)多角度、全方位的進(jìn)程檢測,為虛擬機(jī)提供更高的安全性。
圖1為本發(fā)明一個(gè)實(shí)施例提供的基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法流程圖2為本發(fā)明實(shí)施例提供的內(nèi)核態(tài)進(jìn)程列表的獲取流程圖3為本發(fā)明實(shí)施例提供的VMM進(jìn)程列表的獲取流程圖4為本發(fā)明實(shí)施例提供的多視圖示意圖5為本發(fā)明實(shí)施例提供的虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法流程圖6為本發(fā)明實(shí)施例提供的基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測裝置結(jié)構(gòu)示意圖7為本發(fā)明實(shí)施例提供的基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
針對目前隱藏進(jìn)程檢測機(jī)制中的缺陷和不足,結(jié)合虛擬機(jī)環(huán)境的特點(diǎn),本發(fā)明提出了一種基于虛擬機(jī)監(jiān)控器的多視圖隱藏進(jìn)程檢測方法和裝置,在利用硬件虛擬化的技術(shù),并且作為(如Linux)系統(tǒng)可加載的模塊,在虛擬機(jī)監(jiān)控器KVM中進(jìn)行修改,不影響虛擬機(jī)監(jiān)控器的正常運(yùn)行以及產(chǎn)生可接受的額外性能開銷,實(shí)現(xiàn)了多種視圖的隱藏進(jìn)程檢測, 并通過檢測隱藏的網(wǎng)絡(luò)連接進(jìn)一步發(fā)現(xiàn)可疑的進(jìn)程,實(shí)現(xiàn)多角度、全方位的進(jìn)程檢測,為虛擬機(jī)提供更高的安全性。
圖1為本發(fā)明一個(gè)實(shí)施例提供的基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法流程圖, 如圖1所示,該方法包括
步驟101、分別獲得用戶態(tài)(User-level)、內(nèi)核態(tài)(Kernel-level)以及虛擬機(jī)監(jiān)控器(VMM-level)下的進(jìn)程信息;
其中可以包括
(1)從系統(tǒng)提供的用戶態(tài)的應(yīng)用程序編程接口 API獲得her-level的進(jìn)程列表及相應(yīng)的進(jìn)程信息;
(2)通過截獲系統(tǒng)調(diào)用來維護(hù)一個(gè)Kernel-level的進(jìn)程列表及相應(yīng)的進(jìn)程信息;
具體的,Kernel-level的進(jìn)程列表可以但不限于通過如下方式進(jìn)行獲取
Kernel-level進(jìn)程列表的獲取主要通過截獲系統(tǒng)調(diào)用來實(shí)現(xiàn)。當(dāng)進(jìn)程創(chuàng)建和執(zhí)行的時(shí)候都需要通過調(diào)用系統(tǒng)調(diào)用來完成操作,這個(gè)時(shí)候,快速系統(tǒng)調(diào)用指令(SYSENTER 指令)將會(huì)被執(zhí)行,系統(tǒng)就會(huì)從用戶態(tài)轉(zhuǎn)入內(nèi)核態(tài),并且進(jìn)行內(nèi)核初始化操作,將相應(yīng)的值載入到相關(guān)的寄存器中,比如執(zhí)行最高權(quán)限(Ring 0)代碼的代碼選擇符指定寄存器 (SYSENTER_CS_MSR)保存內(nèi)核代碼段的選擇符,執(zhí)行最高權(quán)限Ring 0代碼的起始地址指定寄存器(SYSENTER_EIP_MSR)保存內(nèi)核入口點(diǎn)的線性地址,執(zhí)行Ring 0代碼的棧指針指定寄存器(SYSENTER_ESP_MSR)保存內(nèi)核堆棧指針。于是,可以將一個(gè)不存在的地址賦值給 SYSENTER_EIP_MSR,使得在發(fā)生系統(tǒng)調(diào)用的時(shí)候產(chǎn)生缺頁錯(cuò)誤(PageFault)的錯(cuò)誤異常, 迫使虛擬機(jī)將CPU的控制權(quán)交換給虛擬機(jī)監(jiān)控器。這個(gè)時(shí)候,虛擬機(jī)監(jiān)控器得到了 CPU控制權(quán),并且可以通過讀取EAX寄存器獲取當(dāng)前系統(tǒng)調(diào)用號(hào),通過該系統(tǒng)調(diào)用號(hào)判斷當(dāng)前系統(tǒng)調(diào)用類型(進(jìn)程的執(zhí)行execve、退出eXit_group),來對Kernel-level的進(jìn)程列表進(jìn)行添加或者刪除成員。內(nèi)核態(tài)進(jìn)程列表的獲取流程圖可以如圖2所示。步驟201、設(shè)置虛擬機(jī)的SYSENTER_EIP_MSR為一個(gè)不可用的地址Oxffffffff ;步驟202、由上述地址,導(dǎo)致虛擬機(jī)發(fā)生異常,CPU控制權(quán)被KVM掌握;步驟203、判斷上述異常是否為缺頁錯(cuò)誤,如果是轉(zhuǎn)入步驟204,如果不是繼續(xù)步驟201 ;步驟204、截獲虛擬機(jī)當(dāng)前系統(tǒng)調(diào)用以及進(jìn)程的信息;步驟205、從虛擬機(jī)當(dāng)前系統(tǒng)調(diào)用的信息中獲取系統(tǒng)調(diào)用號(hào);步驟206、判斷系統(tǒng)調(diào)用號(hào);系統(tǒng)調(diào)用號(hào)為11轉(zhuǎn)入步驟207,系統(tǒng)調(diào)用號(hào)為252,轉(zhuǎn)入步驟211 ;步驟207、如果系統(tǒng)調(diào)用號(hào)為 11則轉(zhuǎn)入步驟208 ;步驟208、在Kernel-level的進(jìn)程列表中查詢當(dāng)前進(jìn)程信息;步驟209、 判斷Kernel-level視圖是否有當(dāng)前進(jìn)程信息,如有,流程結(jié)束;沒有,轉(zhuǎn)入步驟210 ;步驟 210、將該進(jìn)程信息加入Kerne 1-1 eve 1視圖,則流程結(jié)束;步驟211、該系統(tǒng)調(diào)用號(hào)為252,轉(zhuǎn)入步驟212 ;步驟212、將該進(jìn)程從Kernel-level視圖中刪除,流程結(jié)束。
在獲得了進(jìn)程列表之后,還需要進(jìn)行進(jìn)程語義信息的獲取。進(jìn)程語義信息的獲取主要是通過讀取內(nèi)核為進(jìn)程維護(hù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)程描述符taSk_StrUCt中的信息。而進(jìn)程描述符taSk_StrUCt的獲取是依據(jù)進(jìn)程內(nèi)核堆棧地址與進(jìn)程描述符地址之間的映射關(guān)系獲取的。在Linux中,內(nèi)核分配進(jìn)程任務(wù)結(jié)構(gòu)空間時(shí),是以8KB為單位來分配的,包含兩個(gè)頁面空間,一個(gè)是進(jìn)程信息結(jié)構(gòu)體(threacLinfo結(jié)構(gòu)體)存儲(chǔ)空間,一個(gè)是進(jìn)程用于系統(tǒng)空間堆棧的存儲(chǔ)空間。其中threacLinfo結(jié)構(gòu)體存儲(chǔ)了進(jìn)程描述符taSk_Struct,并且位于該地址空間的起始地址,而堆??臻g則從內(nèi)存空間的高地址向低地址增長。由于進(jìn)程內(nèi)核空間起始地址是8KB的整數(shù)倍,即213,則taSk_Struct的地址與進(jìn)程堆棧地址的前19位相同,在發(fā)生進(jìn)程上下午切換的時(shí)候,當(dāng)前CPU的堆棧指針寄存器(ESP寄存器)存放的便是切換后的進(jìn)程的內(nèi)核堆棧,將此值與OxffffeOOO (十六進(jìn)制)按位相與便得到task_strUCt 結(jié)構(gòu)的地址。同時(shí),考慮到內(nèi)存虛擬化,從內(nèi)存中讀取進(jìn)程描述符的時(shí)候要考慮兩次地址轉(zhuǎn)換的機(jī)制,即客戶機(jī)虛擬機(jī)地址(GVA,Guest Virtual Address)- >客戶機(jī)物理地址(GPA, Guest Physical Address)- >宿主機(jī)物理地址(ΗΡΑ,Host Physical Address)的轉(zhuǎn)換。
(3)獲得虛擬機(jī)監(jiān)控器維護(hù)的VMM-level的進(jìn)程列表。
具體的,VMM-level的進(jìn)程列表可以但不限于通過如下方式進(jìn)行獲取
在虛擬機(jī)環(huán)境下,處理器與系統(tǒng)進(jìn)程之間是存在邏輯的一致性的,于是盡管具體語義的系統(tǒng)進(jìn)程對于虛擬機(jī)監(jiān)控器是不可見的,但是進(jìn)程所用的地址空間是對虛擬機(jī)監(jiān)控器是可見的。于是虛擬機(jī)監(jiān)控器想要維護(hù)進(jìn)程列表便可以通過截獲進(jìn)程的CPU事件,比如進(jìn)程的上下文切換。在X86架構(gòu)下,CPU的第四個(gè)控制寄存器(CR3寄存器)保存著進(jìn)程地址空間下頁目錄表的基地址,一旦一個(gè)新的進(jìn)程使用CPU,其相應(yīng)的頁目錄表基地址便被寫入到CR3中,同時(shí)會(huì)將其內(nèi)核堆棧地址寫入ESP寄存器。于是,在系統(tǒng)虛擬化軟件KVM的CR3 寄存器控制操作中設(shè)置截獲點(diǎn)插入函數(shù)來判斷是否有新的進(jìn)程啟動(dòng)。關(guān)于進(jìn)程的退出,采用固定時(shí)間間隔依據(jù)內(nèi)核進(jìn)程鏈表的進(jìn)程狀態(tài)對進(jìn)程判斷是否退出,并作出相應(yīng)的操作。 VMM進(jìn)程列表的獲取流程圖可以如圖3所示。步驟301、等待CPU發(fā)生寄存器更新事件;步驟 302、CPU發(fā)生寄存器事件,KVM獲得CPU控制權(quán),KVM判斷當(dāng)前寄存器事件;步驟303、若當(dāng)前寄存器是CR3寄存器發(fā)生變化,則進(jìn)行步驟304 ;否則,從步驟301開始。步驟304、進(jìn)程函數(shù)準(zhǔn)備執(zhí)行;步驟305、獲取當(dāng)前進(jìn)程的信息;步驟306、根據(jù)獲取的進(jìn)程信息查詢VMM-level 進(jìn)程列表;步驟307、判斷步驟306的結(jié)果,如果存在該進(jìn)程,則轉(zhuǎn)入步驟309 ;否則,轉(zhuǎn)入步驟308 ;步驟308、將該進(jìn)程信息添加進(jìn)VMM-level進(jìn)程列表;步驟309、查看VMM-level列表更新時(shí)間標(biāo)志,判斷距離上次更新時(shí)間是否超過2秒;如果超過,則進(jìn)行步驟310,若無, 流程結(jié)束;步驟310、對VMM-level的列表進(jìn)行更新操作準(zhǔn)備;步驟311、從VMM-level的列表中取下一個(gè)進(jìn)程,判斷是否還有進(jìn)程,如果有,進(jìn)行步驟312,若無,流程退出;步驟312、 查詢內(nèi)核維護(hù)的進(jìn)程數(shù)據(jù)結(jié)構(gòu)雙向鏈表;步驟313、判斷該進(jìn)程是否存在雙向鏈表中,如果存在,則進(jìn)行步驟311 ;否則,進(jìn)行步驟314 ;步驟314、將該進(jìn)程從VMM-level列表中刪除, 轉(zhuǎn)入步驟311。
在獲得了進(jìn)程列表之后,還包括進(jìn)程語義信息獲取。如上述O)中的描述,此處不做贅述。
步驟102、比較所述her-level的進(jìn)程信息以及所述Kernel-level的進(jìn)程信息, 獲得her-level中的隱藏進(jìn)程;
步驟103、比較所述Kernel-level的進(jìn)程信息以及所述VMM-level的進(jìn)程信息,獲得Kernel-level中的隱藏進(jìn)程。
其中,本實(shí)施例并不限制步驟102與步驟103之間的執(zhí)行順序,可以先執(zhí)行步驟 102、后執(zhí)行步驟103,也可以先執(zhí)行步驟103、后執(zhí)行步驟102,或者兩個(gè)步驟同時(shí)進(jìn)行。
下面具體對各步驟中的技術(shù)進(jìn)行詳細(xì)的介紹。
首先,多視圖驗(yàn)證技術(shù)是通過多個(gè)角度對系統(tǒng)對象進(jìn)行觀察得出不同的視圖,并且這些視圖之間沒有任何的相關(guān)性。在整個(gè)系統(tǒng)的層次中,越高的層次獲得的視圖可信度越低。按照對系統(tǒng)的攻擊的難易,一個(gè)隱藏的系統(tǒng)對象更可能出現(xiàn)在較低層次的視圖中。當(dāng)一個(gè)系統(tǒng)對象出現(xiàn)在較高可信視圖中而未出現(xiàn)在較低可信視圖中,那么該隱藏對象便可被檢測發(fā)現(xiàn)。
而對于進(jìn)程來說,最不可信的視圖,從系統(tǒng)提供的用戶態(tài)的應(yīng)用程序編程API函數(shù)(Application Programming Interface)便可獲得,比如利用系統(tǒng)查看命令ps和top 來維護(hù)一個(gè)^er-Ievel的進(jìn)程列表。同時(shí),如果創(chuàng)建或者執(zhí)行進(jìn)程,一般是需要在用戶態(tài)調(diào)用庫函數(shù)以及系統(tǒng)調(diào)用來實(shí)現(xiàn)的,所以,通過截獲系統(tǒng)調(diào)用便可以發(fā)現(xiàn)一個(gè)進(jìn)程是否創(chuàng)建、活動(dòng)或者銷毀,因此,如圖4所示的多視圖示意圖,可以通過截獲系統(tǒng)調(diào)用來維護(hù)一個(gè)Kernel-level的進(jìn)程列表。通過這個(gè)Kernel-level列表和剛才得到的her-level列表對比,便可以得到隱藏的進(jìn)程,并且可知該進(jìn)程隱藏于用戶態(tài),因?yàn)槠鋵τ谟脩魬B(tài)的API是不可見的,但是內(nèi)核態(tài)的系統(tǒng)庫函數(shù)是可以截獲得到的??墒窍到y(tǒng)調(diào)用是可以繞過的,比如在內(nèi)核內(nèi)部通過直接執(zhí)行內(nèi)核函數(shù)或者修改系統(tǒng)調(diào)用表等等,以及通過可加載內(nèi)核模塊程序 (LKM,Loadable Kernel Module)實(shí)現(xiàn)的rootkit,隱藏在內(nèi)核態(tài)里,不僅不會(huì)被用戶態(tài)的程序發(fā)現(xiàn),也不會(huì)被系統(tǒng)調(diào)用所發(fā)現(xiàn),于是獲取最可信視圖便成為必需。在虛擬機(jī)環(huán)境下,虛擬機(jī)監(jiān)控器對虛擬機(jī)擁有最高權(quán)限,虛擬機(jī)的任何活動(dòng)權(quán)限都不可能越過虛擬機(jī)監(jiān)控器的級(jí)別,于是,從虛擬機(jī)監(jiān)控器維護(hù)一個(gè)真實(shí)VMM-level進(jìn)程列表便成為可能,又如圖4所示, 通過這個(gè)列表與Kernel-level列表對比,便可以發(fā)現(xiàn)Kernel-level列表所不能發(fā)現(xiàn)的隱藏于內(nèi)核態(tài)的rootkit。
該發(fā)明滿足如下要求1)對客戶機(jī)透明。對于虛擬機(jī)來說,整個(gè)檢測的活動(dòng)是透明的,檢測行為不會(huì)影響正常虛擬機(jī)的運(yùn)行狀態(tài),并且,由于其透明性,使得虛擬機(jī)內(nèi)部的惡意軟件也對檢測系統(tǒng)的存在不可知,更加提高了檢測系統(tǒng)的安全性與準(zhǔn)確性。2)跨越語義,用戶交互。從虛擬機(jī)的外部實(shí)現(xiàn)檢測功能,但是系統(tǒng)仍舊需要為用戶提供清晰地語義和友好的界面,以便用戶能夠隨時(shí)掌握自己虛擬機(jī)內(nèi)部的狀態(tài)和信息。同時(shí),良好的語義為識(shí)別隱藏進(jìn)程提供了便利。幻視圖的更加完整,沒有遺漏。通過多視圖檢測機(jī)制,尤其是通過 Kernel-level以及隱藏網(wǎng)絡(luò)端口提供的進(jìn)程信息,使得對于虛擬機(jī)內(nèi)部隱藏進(jìn)程的檢測更加完善。同時(shí),能夠?qū)﹄[藏進(jìn)程的類型更細(xì)化的區(qū)分,比如,進(jìn)程是隱藏于用戶態(tài)還是內(nèi)核態(tài),甚至對于具有隱藏行為(如隱藏網(wǎng)絡(luò)連接)的可疑進(jìn)程進(jìn)行探測和發(fā)掘,提高檢測級(jí)別,進(jìn)一步增強(qiáng)虛擬機(jī)的安全性。4)主動(dòng)檢測。由于一些對于隱藏進(jìn)程的掃描是隔時(shí)的甚至被動(dòng)的,也可能在不恰當(dāng)?shù)臅r(shí)間間隔內(nèi),隱藏進(jìn)程巧妙躲避檢測,所以,對于進(jìn)程一旦創(chuàng)建甚至運(yùn)行便進(jìn)行捕捉檢測是非常必要的。5)功能易用性。根據(jù)當(dāng)前主機(jī)環(huán)境的需求,本系統(tǒng)應(yīng)該是動(dòng)態(tài)可加載可卸除的,不影響主機(jī)整體環(huán)境。
圖5為本發(fā)明實(shí)施例提供的虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法流程圖,如圖5所示,該方法包括
步驟501、比較虛擬機(jī)內(nèi)部用戶態(tài)程序維護(hù)的網(wǎng)絡(luò)連接信息(視圖)與虛擬機(jī)監(jiān)控器維護(hù)的網(wǎng)絡(luò)連接信息相比較,獲得隱藏的網(wǎng)絡(luò)連接;
步驟502、利用虛擬機(jī)監(jiān)控器獲取進(jìn)程與端口的映射信息,根據(jù)所述隱藏的網(wǎng)絡(luò)連接的端口,獲得隱藏進(jìn)程。
其中,網(wǎng)絡(luò)端口截獲,依據(jù)虛擬機(jī)監(jiān)控器KVM對于虛擬機(jī)的網(wǎng)卡是可見的,并且可以在宿主機(jī)的用戶態(tài)便執(zhí)行抓包截獲的操作,本發(fā)明實(shí)施例主要就是通過這樣的方式實(shí)現(xiàn)的。特別的,本文中虛擬機(jī)的網(wǎng)絡(luò)配置是以網(wǎng)橋形式配置的,每一個(gè)虛擬機(jī)都有對應(yīng)的測試訪問端口(tap端口,Test Access Port)來進(jìn)行數(shù)據(jù)包的接受和發(fā)送。宿主機(jī)對于tap端口是可見的,并且可以通過對tap端口的抓包來進(jìn)行網(wǎng)絡(luò)狀態(tài)的控制。網(wǎng)絡(luò)端口截獲模塊便對tap端口進(jìn)行偵聽,一旦有數(shù)據(jù)包發(fā)送便可以被獲得。
進(jìn)程與端口映射關(guān)系可以通過如下方式獲取在Linux中,進(jìn)程建立網(wǎng)絡(luò)連接是通過創(chuàng)建套接字(socket)文件實(shí)現(xiàn)的,當(dāng)進(jìn)程進(jìn)行網(wǎng)絡(luò)通信的時(shí)候,就打開相應(yīng)的socket 文件。Linux內(nèi)核為每一個(gè)進(jìn)程都維護(hù)了一個(gè)打開文件的列表。通過這個(gè)列表又可以去查詢每個(gè)文件具體對應(yīng)的目錄,依據(jù)這個(gè)目錄便可以搜索獲得Linux文件系統(tǒng)上真實(shí)的索引文件。在Linux文件系統(tǒng)中,為每一個(gè)真實(shí)文件都維護(hù)了一個(gè)文件索引節(jié)點(diǎn)(inode)的索引數(shù)據(jù)結(jié)構(gòu),并且設(shè)置相應(yīng)的模式屬性字段(i_mode)來表示,通過內(nèi)置的socket判斷宏(S_ ISSOCK())可以來判斷i_mode是否是socket類型。當(dāng)進(jìn)程的一個(gè)文件類型結(jié)構(gòu)(file)指針指向socket文件時(shí),會(huì)講該文件對應(yīng)的socket結(jié)構(gòu)體地址賦值給文件的私有數(shù)據(jù)屬性 (private_data屬性),通過前面的判斷,便可以得到socket結(jié)構(gòu)體。在Linux的網(wǎng)絡(luò)協(xié)議棧中,不會(huì)將具體的地址信息存放在socket結(jié)構(gòu)中,socket結(jié)構(gòu)是基于虛擬文件系統(tǒng)創(chuàng)建出來,不保存具體的網(wǎng)絡(luò)連接信息,具體的網(wǎng)絡(luò)協(xié)議信息存放在擴(kuò)展的socket數(shù)據(jù)結(jié)構(gòu) (sock數(shù)據(jù)結(jié)構(gòu))中,但是它屬于網(wǎng)絡(luò)層的socket,更詳細(xì)的網(wǎng)絡(luò)域(INET域)信息,例如網(wǎng)絡(luò)地址(IP地址),端口等存放在inet_S0Ck數(shù)據(jù)結(jié)構(gòu)。于是通過這樣的分析,便可以找到進(jìn)程與端口的映射關(guān)系。
具體的,Rootkits的目的主要是通過網(wǎng)絡(luò)連接來控制目的主機(jī),于是隱藏掉相關(guān)的網(wǎng)絡(luò)連接也是其重要的攻擊手段。通過檢測發(fā)現(xiàn)隱藏的網(wǎng)絡(luò)端口,并且通過端口與進(jìn)程的對應(yīng)關(guān)系,從而可以進(jìn)一步發(fā)現(xiàn)可疑的進(jìn)程,防止了 rootkit利用看似正常的用戶進(jìn)程進(jìn)行惡意的網(wǎng)絡(luò)行為,比如遠(yuǎn)程訪問命令(sshtelnet)等。網(wǎng)絡(luò)連接的隱藏是用戶態(tài)程序 (例如網(wǎng)絡(luò)連接查看程序netstat程序)無法發(fā)現(xiàn)的,但是網(wǎng)絡(luò)活動(dòng)的存在是可以通過截獲網(wǎng)卡網(wǎng)絡(luò)活動(dòng)發(fā)現(xiàn)的。在虛擬機(jī)內(nèi)部實(shí)現(xiàn),則存在被繞過的可能,但是虛擬機(jī)監(jiān)控器由于對虛擬網(wǎng)卡是可見的,于是虛擬機(jī)監(jiān)控器自然也對于該網(wǎng)卡上的網(wǎng)絡(luò)活動(dòng)具有全部視圖獲取的能力。從而,通過虛擬機(jī)內(nèi)部用戶態(tài)程序(例如netstat)維護(hù)的視圖與虛擬機(jī)監(jiān)控器維護(hù)的網(wǎng)絡(luò)連接列表所對比,便可以發(fā)現(xiàn)隱藏的網(wǎng)絡(luò)連接。發(fā)現(xiàn)了隱藏端口之后,利用虛擬機(jī)監(jiān)控器獲取進(jìn)程與端口的映射信息,找到可以進(jìn)程。
在上述實(shí)施方式的基礎(chǔ)上,該方法還可以包括
獲取從客戶機(jī)內(nèi)得到的進(jìn)程列表和網(wǎng)絡(luò)視圖,獲取從VMM得到的兩個(gè)進(jìn)程列表和進(jìn)程與端口對應(yīng)信息,獲取從網(wǎng)絡(luò)端口模塊得到的網(wǎng)絡(luò)視圖,對得到的網(wǎng)絡(luò)視圖進(jìn)行處理加上進(jìn)程內(nèi)容,對進(jìn)程的三個(gè)視圖進(jìn)行整理,對網(wǎng)絡(luò)的兩個(gè)視圖進(jìn)行整理。由于可以采用設(shè)備的方式實(shí)現(xiàn),宿主機(jī)內(nèi)核與用戶態(tài)的交互主要通過設(shè)備系統(tǒng)設(shè)備控制函數(shù)(ioctl)來實(shí)現(xiàn),而其他的用戶態(tài)的數(shù)據(jù)傳送主要通過字符串以及緩存。
持久化處理位于宿主機(jī)用戶態(tài),主要實(shí)現(xiàn)的功能就是將從得到的各個(gè)視圖信息存儲(chǔ)到數(shù)據(jù)庫中,例如Mysql數(shù)據(jù)庫。對于進(jìn)程列表和網(wǎng)絡(luò)連接視圖,需要存儲(chǔ)的每條信息已經(jīng)過整理。
用戶界面的展示要實(shí)現(xiàn)的功能是動(dòng)態(tài)的將本發(fā)明的檢測的結(jié)果展示給用戶。本實(shí)施例采用基于瀏覽器/服務(wù)器(B/S)的模式進(jìn)行web客戶端的展示,并且利用基于Ruby語言的網(wǎng)絡(luò)框架Rails (Ruby On Rails)的敏捷開發(fā)方式,緊密與Mysql數(shù)據(jù)庫進(jìn)行結(jié)合,動(dòng)態(tài)捕獲數(shù)據(jù)庫的變更,動(dòng)態(tài)的頁面顯示,即一旦有進(jìn)程創(chuàng)建便會(huì)有頁面更新。
圖6為本發(fā)明實(shí)施例提供的基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測裝置結(jié)構(gòu)示意圖, 如圖6所示,該裝置可以包括獲得模塊601、第一比較模塊602和第二比較模塊603。其中, 獲得模塊601用于分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息,第一比較模塊602用于比較用戶態(tài)中的進(jìn)程信息與內(nèi)核態(tài)中的進(jìn)程信息,獲得用戶態(tài)中的隱藏進(jìn)程, 第二比較模塊603用于比較內(nèi)核態(tài)中的進(jìn)程信息與虛擬機(jī)監(jiān)控器中的進(jìn)程信息,獲得內(nèi)核態(tài)中的隱藏進(jìn)程。
一種實(shí)施方式下,進(jìn)程信息包括進(jìn)程列表和進(jìn)程的寓意信息,則獲得模塊601可以包括第一單元、第二單元、第三單元和第四單元。其中,第一單元用于從系統(tǒng)提供的用戶態(tài)的API獲得用戶態(tài)的進(jìn)程列表,第二單元用于通過截獲系統(tǒng)調(diào)用獲得內(nèi)核態(tài)的進(jìn)程列表,第三單元用于通過截獲進(jìn)程的CPU事件獲得虛擬機(jī)監(jiān)控器的進(jìn)程列表,第四單元用于通過讀取內(nèi)核為進(jìn)程維護(hù)的數(shù)據(jù)結(jié)構(gòu)描述符中的信息獲得各進(jìn)程列表中的各進(jìn)程的語義 fn息ο
在上述實(shí)施方式的基礎(chǔ)上,第二單元可以包括第一子單元、第二子單元和第三子單元。其中,第一子單元用于如果發(fā)生系統(tǒng)調(diào)用,則獲得當(dāng)前發(fā)生的系統(tǒng)調(diào)用號(hào),第二子單元用于根據(jù)當(dāng)前發(fā)生的系統(tǒng)調(diào)用號(hào)判定當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型,第三子單元用于如果當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型為進(jìn)程的執(zhí)行,則將該進(jìn)程加入內(nèi)核態(tài)的進(jìn)程列表,如果當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型為進(jìn)程的退出,則將該進(jìn)程從內(nèi)核態(tài)的進(jìn)程列表中刪除。
在上述實(shí)施方式的基礎(chǔ)上,第三單元用于如果發(fā)生進(jìn)程的CPU事件,則將該進(jìn)程加入到虛擬機(jī)監(jiān)控器的進(jìn)程列表,根據(jù)預(yù)設(shè)時(shí)間間隔內(nèi)內(nèi)核進(jìn)程鏈表的進(jìn)程狀態(tài)判斷進(jìn)程是否退出,如果退出,則將該進(jìn)程從虛擬機(jī)監(jiān)控器的進(jìn)程中刪除。
圖7為本發(fā)明實(shí)施例提供的基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測裝置結(jié)構(gòu)示意圖, 如圖7所示,該裝置可以包括第一模塊701和第二模塊702。其中,第一模塊701用于比較虛擬機(jī)內(nèi)部用戶態(tài)程序維護(hù)的網(wǎng)絡(luò)連接信息與虛擬機(jī)監(jiān)控器維護(hù)的網(wǎng)絡(luò)連接信息,獲得隱藏的網(wǎng)絡(luò)連接。第二模塊702用于利用虛擬機(jī)監(jiān)控器獲取進(jìn)程與端口的映射信息,根據(jù)隱藏的網(wǎng)絡(luò)連接的網(wǎng)絡(luò)端口,獲得隱藏進(jìn)程。
一種實(shí)施方式下,該第二模塊702中包括處理單元,用于根據(jù)進(jìn)程的文件指針?biāo)赶蛱捉幼治募?,得到套接字結(jié)構(gòu)體,該套接字結(jié)構(gòu)體的inet_SOck數(shù)據(jù)結(jié)構(gòu)中保存有端口,從而獲得進(jìn)程與端口的映射信息。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括只讀存儲(chǔ)器 (ROM)、隨機(jī)存儲(chǔ)器(RAM)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說明的是以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制; 盡管參照前述各實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
權(quán)利要求
1.一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法,其特征在于,包括 分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息;比較所述用戶態(tài)中的進(jìn)程信息與所述內(nèi)核態(tài)中的進(jìn)程信息,獲得用戶態(tài)中的隱藏進(jìn)程;比較所述內(nèi)核態(tài)中的進(jìn)程信息與所述虛擬機(jī)監(jiān)控器中的進(jìn)程信息,獲得內(nèi)核態(tài)中的隱藏進(jìn)程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述進(jìn)程信息包括進(jìn)程列表和進(jìn)程的語義信息,則分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息的過程,包括從系統(tǒng)提供的用戶態(tài)的應(yīng)用程序編程接口 API獲得用戶態(tài)的進(jìn)程列表; 通過截獲系統(tǒng)調(diào)用獲得內(nèi)核態(tài)的進(jìn)程列表; 通過截獲進(jìn)程的CPU事件獲得虛擬機(jī)監(jiān)控器的進(jìn)程列表;通過讀取內(nèi)核為進(jìn)程維護(hù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)程描述符中的信息獲得上述各進(jìn)程列表中的各進(jìn)程的語義信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述通過截獲系統(tǒng)調(diào)用獲得內(nèi)核態(tài)的進(jìn)程列表,包括如果發(fā)生系統(tǒng)調(diào)用,虛擬機(jī)監(jiān)控器獲取當(dāng)前發(fā)生的系統(tǒng)調(diào)用號(hào);根據(jù)所述當(dāng)前發(fā)生的系統(tǒng)調(diào)用號(hào)判定當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型;如果當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型為進(jìn)程的執(zhí)行,則將該進(jìn)程加入內(nèi)核態(tài)的進(jìn)程列表;如果當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型為進(jìn)程的退出,則將該進(jìn)程從內(nèi)核態(tài)的進(jìn)程列表中刪除。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述通過截獲進(jìn)程的CPU事件獲得虛擬機(jī)監(jiān)控器的進(jìn)程列表,包括如果發(fā)生進(jìn)程的CPU事件,則將該進(jìn)程加入虛擬機(jī)監(jiān)控器的進(jìn)程列表; 根據(jù)預(yù)設(shè)時(shí)間間隔內(nèi)內(nèi)核進(jìn)程鏈表的進(jìn)程狀態(tài)判斷進(jìn)程是否退出,如果退出,則將該進(jìn)程從虛擬機(jī)監(jiān)控器的進(jìn)程列表中刪除。
5.一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法,其特征在于,包括比較虛擬機(jī)內(nèi)部用戶態(tài)程序維護(hù)的網(wǎng)絡(luò)連接信息與虛擬機(jī)監(jiān)控器維護(hù)的網(wǎng)絡(luò)連接信息,獲得隱藏的網(wǎng)絡(luò)連接;利用虛擬機(jī)監(jiān)控器獲取進(jìn)程與端口的映射信息,根據(jù)所述隱藏的網(wǎng)絡(luò)連接的網(wǎng)絡(luò)端口,獲得隱藏進(jìn)程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述利用虛擬機(jī)監(jiān)控器獲取進(jìn)程與端口的映射信息,包括根據(jù)進(jìn)程的文件指針?biāo)赶蛱捉幼治募?,得到套接字結(jié)構(gòu)體,該套接字的套接字專有屬性擴(kuò)展數(shù)據(jù)結(jié)構(gòu)(inet_S0Ck)中保存有端口。
7.一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測裝置,其特征在于,包括 獲得模塊,用于分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息;第一比較模塊,用于比較所述用戶態(tài)中的進(jìn)程信息與所述內(nèi)核態(tài)中的進(jìn)程信息,獲得用戶態(tài)中的隱藏進(jìn)程;第二比較模塊,用于比較所述內(nèi)核態(tài)中的進(jìn)程信息與所述虛擬機(jī)監(jiān)控器中的進(jìn)程信息,獲得內(nèi)核態(tài)中的隱藏進(jìn)程。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述進(jìn)程信息包括進(jìn)程列表和進(jìn)程的語義信息,則所述獲得模塊包括第一單元,用于從系統(tǒng)提供的用戶態(tài)的應(yīng)用程序編程接口 API獲得用戶態(tài)的進(jìn)程列表;第二單元,用于通過截獲系統(tǒng)調(diào)用獲得內(nèi)核態(tài)的進(jìn)程列表; 第三單元,用于通過截獲進(jìn)程的CPU事件獲得虛擬機(jī)監(jiān)控器的進(jìn)程列表; 第四單元,用于通過讀取內(nèi)核為進(jìn)程維護(hù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)程描述符中的信息獲得上述各進(jìn)程列表中的各進(jìn)程的語義信息。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第二單元包括 第一子單元,用于如果發(fā)生系統(tǒng)調(diào)用,獲取當(dāng)前發(fā)生的系統(tǒng)調(diào)用號(hào);第二子單元,用于根據(jù)所述當(dāng)前發(fā)生的系統(tǒng)調(diào)用號(hào)判定當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型; 第三子單元,用于如果當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型為進(jìn)程的執(zhí)行,則將該進(jìn)程加入內(nèi)核態(tài)的進(jìn)程列表;如果當(dāng)前發(fā)生的系統(tǒng)調(diào)用類型為進(jìn)程的退出,則將該進(jìn)程從內(nèi)核態(tài)的進(jìn)程列表中刪除。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第三單元用于如果發(fā)生進(jìn)程的CPU 事件,則將該進(jìn)程加入虛擬機(jī)監(jiān)控器的進(jìn)程列表;根據(jù)預(yù)設(shè)時(shí)間間隔內(nèi)內(nèi)核進(jìn)程鏈表的進(jìn)程狀態(tài)判斷進(jìn)程是否退出,如果退出,則將該進(jìn)程從虛擬機(jī)監(jiān)控器的進(jìn)程列表中刪除。
全文摘要
本發(fā)明提供一種基于虛擬機(jī)監(jiān)控器的隱藏進(jìn)程檢測方法和裝置,該方法包括分別獲得用戶態(tài)、內(nèi)核態(tài)以及虛擬機(jī)監(jiān)控器中的進(jìn)程信息;比較所述用戶態(tài)中的進(jìn)程信息與所述內(nèi)核態(tài)中的進(jìn)程信息,獲得用戶態(tài)中的隱藏進(jìn)程;比較所述內(nèi)核態(tài)中的進(jìn)程信息與所述虛擬機(jī)監(jiān)控器中的進(jìn)程信息,獲得內(nèi)核態(tài)中的隱藏進(jìn)程。該裝置包括獲得模塊、第一比較模塊和第二比較模塊。本發(fā)明提供的方案實(shí)現(xiàn)了多種視圖的隱藏進(jìn)程檢測及識(shí)別技術(shù),為虛擬機(jī)提供更好的安全保障。
文檔編號(hào)G06F21/00GK102521537SQ20111040170
公開日2012年6月27日 申請日期2011年12月6日 優(yōu)先權(quán)日2011年12月6日
發(fā)明者李博, 李建欣, 沃天宇, 王穎 申請人:北京航空航天大學(xué)