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