本發明涉及虛擬機技術,尤其涉及一種虛擬機內核的保護方法及裝置。
背景技術:
::近年來,云計算技術得到了快速發展,不可忽視地,當前存在的眾多惡意程序以及內核惡意代碼也會給云平臺虛擬機內部進程帶來安全威脅。其中,虛擬機內核在虛擬機中起著核心作用,虛擬機運行過程中,所有應用程序的系統調用請求、以及內部和外部的中斷處理等均會直接進入虛擬機內核,由虛擬機內核來進行必要的處理。具體實現過程中,所有進入虛擬機內核的接口中,系統調用接口是應用程序與虛擬機內核進行交互、進而獲取虛擬機內核服務的一種重要接口,相應地,系統調用執行路徑是進入虛擬機內核的路徑分支中的一種重點需要防護的路徑。一旦系統調用執行路徑遭到劫持,惡意代碼就可以在特定進程的進程環境下得到執行時機,進而在進程中利用自己的合法身份讀寫進程內存,以突破進程內存對第三方進程的讀寫限制,從而惡意代碼可以篡改系統調用執行結果、威脅進程數據安全、影響進程正常運行等。現有技術中,為了對系統調用執行路徑進行反劫持防護,主要由虛擬機中的虛擬機監視器(VirtualMachineMonitor,簡稱VMM)實時對虛擬機內核進行透明攔截監控,即在避免用戶側獲知的情況下進行攔截監控,以實現實時攔截非法操作對進程內存的讀寫,具體地,主要利用硬件輔助虛擬化機制提供的異常陷入機制和基于硬件輔助的內存虛擬化機制來實現,在VMM中,通過頁表來實施相應的內存隔離,以捕獲非法操作并及時處理。但是,采用現有技術,VMM基于頁表粒度進行攔截,經常會出現遺漏,例如惡意代碼連續操作特定頁的情況下,一旦第一次未攔截放行后,后續難以再次捕獲,即攔截效果較差,且實時攔截造成的開銷過大。技術實現要素:本發明提供一種虛擬機內核的保護方法及裝置,用于解決現有技術對惡意代碼攔截效果差,且需要實時攔截的問題。本發明第一方面提供一種虛擬機內核的保護方法,包括:截獲應用程序發起的系統調用函數;根據虛擬機原始內核基地址與影子內核基地址的偏移值,將所述系統調用函數指向影子內核,根據所述影子內核中的影子系統服務描述表SSDT確定所述系統調用函數在影子內核中對應的入口地址;其中,所述影子內核構建于所述虛擬機原始內核的非分頁池中,所述影子內核為根據所述虛擬機原始內核的鏡像文件構建的可執行內核代碼。進一步地,上述方法中還包括構建所述影子內核。其中,構建所述影子內核可以包括:根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,并獲取修復后的待重定向數據;將所述修復后的待重定向數據中SSDT對應的數據和影子中斷描述表IDT對應的數據進行備份,以獲取影子IDT和所述影子SSDT;將所述修復后的待重定向數據重定向到所述虛擬機原始內核,以獲取目標重定向數據,并將所述目標重定向數據中的SSDT和IDT替換為所述影子SSDT和所述影子IDT。可選地,所述將所述虛擬機原始內核的文件進行復制以獲取鏡像文件之前,所述方法還包括:在所述虛擬機原始內核的非分頁池中申請緩沖區,其中,所述影子內核構建于所述緩沖區中。可選地,所述根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數據,包括:根據公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase將所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數;其中,Ddefault為所述待重定向數據的地址,Dactual_imagebase為所述緩沖區的首地址,Ddefault_imagebase為所述影子內核基地址,Dactual為所述修復后的待重定向數的地址。進一步地,所述將所述系統調用函數指向影子內核之后,還包括:攔截應用程序對所述虛擬機原始內核中的SSDT的讀寫操作。具體地,可以利用VMM針對應用程序對原始內核中SSDT的讀寫操作進行攔截,并向上欺騙虛擬機內部檢測代碼,同時忽略應用程序對原始內核中SSDT的更改。可選地,所述虛擬機原始內核中的SSDT包括:系統調用函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子SSDT包括:系統調用函數的標識和在影子內核中入口地址的對應關系;相應地,所述根據所述影子內核中的影子SSDT確定所述系統調用函數在影子內核中對應的入口地址,可以是:根據所述影子SSDT中系統調用函數的標識和在影子內核中入口地址的對應關系,確定所述系統調用函數在影子內核中對應的入口地址。進一步地,所述方法還包括:截獲虛擬機中斷處理函數;根據原始內核基地址與影子內核基地址的偏移值,將所述中斷處理函數指向所述影子內核,根據所述影子內核中的影子IDT確定所述中斷處理函數在影子內核中對應的入口地址。其中,所述將所述中斷處理函數指向所述影子內核之后,還可以包括:攔截應用程序對虛擬機原始內核中的IDT的讀寫操作。具體地,所述影子IDT的基地址保存在IDTR寄存器中,以對中斷處理函數進行入口尋址和分發,并利用VMM透明地對將IDTR的內容存入指定地址單元指令進行攔截陷入。攔截到應用程序對原始內核中IDT的讀寫操作后,返回原始內核中IDT基地址和大小信息進行欺騙。可選地,虛擬機原始內核中的IDT包括:中斷處理函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子IDT包括:中斷處理函數的標識和在影子內核中入口地址的對應關系;相應地,所述根據所述影子內核中的影子IDT確定所述中斷處理函數在影子內核 中對應的入口地址,包括:根據所述影子IDT中中斷處理函數的標識和在影子內核中入口地址的對應關系,確定所述中斷處理函數在影子內核中對應的入口地址。可選地,虛擬機原始內核基地址與影子內核基地址的偏移值為虛擬機原始內核基地址與影子內核基地址相減的差值。本發明第二方面提供一種虛擬機內核的保護裝置,包括:第一截獲模塊,用于截獲應用程序發起的系統調用函數;第一轉移模塊,用于根據虛擬機原始內核基地址與影子內核基地址的偏移值,將所述系統調用函數指向影子內核,根據所述影子內核中的影子系統服務描述表SSDT確定所述系統調用函數在影子內核中對應的入口地址;其中,所述影子內核構建于所述虛擬機原始內核的非分頁池中,所述影子內核為根據所述虛擬機原始內核的鏡像文件構建的可執行內核代碼。進一步地,所述裝置還包括:構建模塊,用于構建所述影子內核。所述構建模塊,包括:復制單元,用于將所述虛擬機原始內核的文件進行復制以獲取鏡像文件;映射單元,用于將所述鏡像文件按照可執行格式文件映射到所述虛擬機原始內核的非分頁池中,以形成影子內核初始代碼;第一重定向單元,用于根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,并獲取修復后的待重定向數據;備份單元,用于將所述修復后的待重定向數據中SSDT對應的數據和影子中斷描述表IDT對應的數據進行備份,以獲取影子IDT和所述影子SSDT;第二重定向單元,用于將所述修復后的待重定向數據重定向到所述虛擬機原始內核,以獲取目標重定向數據,并將所述目標重定向數據中的SSDT和IDT替換為所述影子SSDT和所述影子IDT。可選地,所述裝置還包括:申請模塊,用于在所述復制單元將所述虛擬機原始內核的文件進行復制以獲取鏡像文件之前,在所述虛擬機原始內核的非分頁池中申請緩沖區,其中,所述影子內核構建于所述緩沖區中。可選地,所述第一重定向單元,具體用于根據公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase將所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數;其中,Ddefault為所述待重定向數據的地址,Dactual_imagebase為所述緩沖區的首地址,Ddefault_imagebase為所述影子內核基地址,Dactual為所述修復后的待重定向數的地址。進一步地,所述裝置還包括:第一攔截模塊,用于攔截應用程序對所述虛擬機原始內核中的SSDT的讀寫操作。可選地,所述虛擬機原始內核中的SSDT包括:系統調用函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子SSDT包括:系統調用函數的標識和在影子內核中入口地址的對應關系;相應地,所述第一轉移模塊,具體用于根據所述影子SSDT中系統調用函數的標識和在影子內核中入口地址的對應關系,確定所述系統調用函數在影子內核中對應的入口地址。進一步地,所述裝置還包括:第二截獲模塊,用于截獲虛擬機中斷處理函數;第二轉移模塊,用于根據原始內核基地址與影子內核基地址的偏移值,將所述中斷處理函數指向所述影子內核,根據所述影子內核中的影子IDT確定所述中斷處理函數在影子內核中對應的入口地址。所述裝置還包括:第二攔截模塊,用于攔截所述應用程序對虛擬機原始內核中的IDT的讀寫操作。所述虛擬機原始內核中的IDT包括:中斷處理函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子IDT包括:中斷處理函數的標識和在影子內核中入口地址的對應關系;相應地,所述第二轉移模塊,具體用于根據所述影子IDT中中斷處理函數的標識和在影子內核中入口地址的對應關系,確定所述中斷處理函數在影子內核中對應的入口地址。本發明第三方面提供一種虛擬機內核的保護裝置,包括:處理器、接口電路、存儲器和總線,其中,所述處理器、所述接口電路和所述存儲器通過所述總線連接并完成相互間的通信,其中所述存儲器中存儲一組程序代碼,所述處理器調用所述存儲器中存儲的程序代碼,執行以下操作:截獲應用程序發起的系統調用函數;根據虛擬機原始內核基地址與影子內核基地址的偏移值,將所述系統調用函數指向影子內核,根據所述影子內核中的影子系統服務描述表SSDT確定所述系統調用函數在影子內核中對應的入口地址;其中,所述影子內核構建于所述虛擬機原始內核的非分頁池中,所述影子內核為根據所述虛擬機原始內核的鏡像文件構建的可執行內核代碼。進一步地,所述處理器還用于構建所述影子內核。具體地:將所述虛擬機原始內核的文件進行復制以獲取鏡像文件;將所述鏡像文件按照可執行格式文件映射到所述虛擬機原始內核的非分頁池中,以形成影子內核初始代碼;根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,并獲取修復后的待重定向數據;將所述修復后的待重定向數據中SSDT對應的數據和影子中斷描述表IDT對應的數據進行備份,以獲取影子IDT和所述影子SSDT;將所述修復后的待重定向數據重定向到所述虛擬機原始內核,以獲取目標重定向數據,并將所述目標重定向數據中的SSDT和IDT替換為所述影子SSDT和所述影子IDT。可選地,處理器將所述虛擬機原始內核的文件進行復制以獲取鏡像文件之前,在所述虛擬機原始內核的非分頁池中申請緩沖區,其中,所述影子內核構建于所述緩沖區中。處理器根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數據,可以為:根據公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase將所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數;其中,Ddefault為所述待重定向數據的地址,Dactual_imagebase為所述緩沖區的首 地址,Ddefault_imagebase為所述影子內核基地址,Dactual為所述修復后的待重定向數的地址。處理器將所述系統調用函數指向影子內核之后,還用于攔截應用程序對所述虛擬機原始內核中的SSDT的讀寫操作。所述虛擬機原始內核中的SSDT包括:系統調用函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子SSDT包括:系統調用函數的標識和在影子內核中入口地址的對應關系;相應地,所述處理器具體用于根據所述影子SSDT中系統調用函數的標識和在影子內核中入口地址的對應關系,確定所述系統調用函數在影子內核中對應的入口地址。進一步地,所述處理器,還用于截獲虛擬機中斷處理函數;根據原始內核基地址與影子內核基地址的偏移值,將所述中斷處理函數指向所述影子內核,根據所述影子內核中的影子IDT確定所述中斷處理函數在影子內核中對應的入口地址。進一步地,所述處理器將所述中斷處理函數指向所述影子內核之后,還用于攔截應用程序對虛擬機原始內核中的IDT的讀寫操作。所述虛擬機原始內核中的IDT包括:中斷處理函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子IDT包括:中斷處理函數的標識和在影子內核中入口地址的對應關系;相應地,處理器具體用于根據所述影子IDT中中斷處理函數的標識和在影子內核中入口地址的對應關系,確定所述中斷處理函數在影子內核中對應的入口地址。本發明實施例提供的虛擬機內核的保護方法及裝置中,通過截獲應用程序發起的系統調用函數,根據虛擬機原始內核基地址與影子內核基地址的偏移值,將上述系統調用函數指向影子內核,根據影子內核中的影子SSDT確定系統調用函數在影子內核中對應的入口地址,實現了系統調用路徑完全在影子內核的純凈代碼中執行,保證了系統調用路徑的完整性,從而也保證了整個內核代碼運行的完整性。且影子內核構建在虛擬機原始內核的非分頁池中構建,簡單易實現,也不會在注冊表等其他地方留下痕跡,安全性更高。附圖說明為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本發明提供的虛擬機平臺實施例一的架構示意圖;圖2為本發明提供的虛擬機平臺實施例二的架構示意圖;圖3為本發明提供的虛擬機內核的保護方法實施例一的流程示意圖;圖4為本發明提供的虛擬機內核的保護方法實施例二的流程示意圖;圖5為本發明提供的虛擬機內核的保護方法實施例三的流程示意圖;圖6為本發明提供的虛擬機內核的保護裝置實施例一的結構示意圖;圖7為本發明提供的虛擬機內核的保護裝置實施例二的結構示意圖;圖8為本發明提供的虛擬機內核的保護裝置實施例三的結構示意圖;圖9為本發明提供的虛擬機內核的保護裝置實施例四的結構示意圖;圖10為本發明提供的虛擬機內核的保護裝置實施例五的結構示意圖;圖11為本發明提供的虛擬機內核的保護裝置實施例六的結構示意圖;圖12為本發明提供的虛擬機內核的保護裝置實施例七的結構示意圖。具體實施方式本發明實施例應用于虛擬機平臺,虛擬機平臺的部署架構可以有兩種模式:圖1為本發明提供的虛擬機平臺實施例一的架構示意圖,圖1為虛擬機平臺的裸機模式,如圖1所示,虛擬機平臺可以包括多個虛擬機(圖1中以虛擬機1和虛擬機2為例),虛擬機下層包括VMM,VMM下層包括底層硬件。其中,虛擬機中包括:虛擬機應用層和虛擬機內核層,本發明中,虛擬機內核層還包括:監控代理。圖2為本發明提供的虛擬機平臺實施例二的架構示意圖,圖2為虛擬機平臺的宿主模式,如圖2所示,該虛擬機平臺可以包括多個虛擬機(圖2中以虛擬機1和虛擬機2為例),與虛擬機同層還可以包括普通宿主機用戶進程,在虛擬機下層是宿主機,VMM在宿主機的操作系統上運行。宿主機下層是底層硬件,宿主模式中,由宿主機直接控制底層硬件。其中,虛擬機中包括: 虛擬機應用層和虛擬機內核層,本發明中,虛擬機內核層還包括:監控代理。圖3為本發明提供的虛擬機內核的保護方法實施例一的流程示意圖,該方法的執行主體可以是虛擬機平臺,如圖3所示,該方法包括:S301、截獲應用程序發起的系統調用函數。這些系統調用函數用于請求完成相關的系統調用處理。S302、根據虛擬機原始內核基地址與影子內核基地址的偏移值,將上述系統調用函數指向影子內核,根據影子內核中的影子系統服務描述表(SystemServicesDescriptorTable,簡稱SSDT)確定該系統調用函數在影子內核中對應的入口地址。其中,該影子內核構建于虛擬機原始內核的非分頁池,該影子內核為根據上述虛擬機原始內核的鏡像文件構建的可執行內核代碼。虛擬機原始內核基地址與影子內核基地址的偏移值是固定不變的,可以通過影子內核基地址和原始內核基地址相減獲取。具體地,在截獲到應用程序發起的系統調用函數后,不再進入虛擬機原始內核進行處理,而是將應用程序的系統調用函數指向影子內核,由影子內核來進行必要的處理。這里影子內核是根據原始內核的鏡像文件建立的可執行內核代碼,該可執行代碼是純凈的內核代碼。具體實現過程中,可以通過在VMM層透明地設置快速系統調用,將上述系統調用函數指向影子內核,并根據影子內核中的影子SSDT確定系統調用函數在影子內核中對應的入口地址。本實施例中,通過截獲應用程序發起的系統調用函數,根據虛擬機原始內核基地址與影子內核基地址的偏移值,將上述系統調用函數指向影子內核,根據影子內核中的影子SSDT確定系統調用函數在影子內核中對應的入口地址,實現了系統調用路徑完全在影子內核的純凈代碼中執行,保證了系統調用路徑的完整性,從而也保證了整個內核代碼運行的完整性。且影子內核構建在虛擬機原始內核的非分頁池中構建,簡單易實現,也不會在注冊表等其他地方留下痕跡,安全性更高。在將上述系統調用函數指向影子內核之后,還可以攔截應用程序對上述虛擬機原始內核中的SSDT的讀寫操作。具體實現過程中,將上述系統調用函數指向影子內核之后,可以利用 VMM針對應用程序對原始內核中SSDT的讀寫操作進行攔截,并向上欺騙虛擬機內部檢測代碼,同時忽略應用程序對原始內核中SSDT的更改,從而可以確保系統調用路徑完全在影子內核中完成,保證了系統調用路徑的完整性。具體地,可以設置虛擬機系統調用入口讀寫陷入,如果有第三方應用程序對原始內核中SSDT進行讀寫操作,就向該應用程序返回原始內核中SSDT,并向上欺騙虛擬機內部檢測代碼,同時忽略應用程序對原始內核中SSDT的更改。其中,虛擬機原始內核中的SSDT包括:系統調用函數的標識和在虛擬機原始內核中入口地址的對應關系;影子SSDT中包括:系統調用函數的標識和在影子內核中入口地址的對應關系。相應地,上述根據影子內核中的影子SSDT確定該系統調用函數在影子內核中對應的入口地址可以是:根據影子SSDT中系統調用函數的標識和在影子內核中入口地址的對應關系,確定上述系統調用函數在影子內核中對應的入口地址。上述系統調用函數的標識可以是系統調用函數的編號,但不以此為限。圖4為本發明提供的虛擬機內核的保護方法實施例二的流程示意圖,可選地,虛擬機平臺也可以對虛擬機內部、外部的中斷處理執行與上述系統調用同樣的處理。具體地,S401、截獲虛擬機中斷處理函數。這些中斷處理函數可以是虛擬機內部或外部發起的中斷處理函數,用于請求執行虛擬機內部或外部的中斷處理。S402、根據原始內核基地址與影子內核基地址的偏移值,將上述中斷處理函數指向影子內核,根據影子內核中的影子中斷描述表(InterruptDescriptorTable,簡稱IDT)確定該中斷處理函數在影子內核中對應的入口地址。進而,中斷處理函數轉到影子內核進行處理,確保中斷處理的完整性。進一步地,將上述中斷處理函數指向影子內核之后,還可以攔截應用程序對虛擬機原始內核中的IDT的讀寫操作。具體實現過程中,在每次VMM運行虛擬機之前設置保存影子IDT基地址的中斷描述符表(InterruptDescriptorTableRegister,簡稱IDTR)寄存器值,使該IDTR寄存器包含影子IDT中的基地址,這樣就可以對中斷處理函數進 行入口尋址和分發,同時利用VMM透明地對將IDTR的內容存入指定地址單元指令(StoreInterruptDescriptorTableRegister,簡稱SIDT指令)進行攔截陷入。一旦發現可疑地第三方應用程序對原始內核中IDT的讀寫操作,就返回原始內核中IDT基地址和大小信息進行欺騙,但是忽略其更改操作,實現對原始內核IDT讀寫操作的攔截,而且IDTR寄存器使用的是影子DIT表的基地址,因而保證了各中斷處理過程均能在影子內核代碼上執行,確保整個流程的完整性。虛擬機原始內核中IDT包括:中斷處理函數的標識和在虛擬機原始內核中入口地址的對應關系。影子IDT包括:中斷處理函數的標識和在影子內核中入口地址的對應關系。相應地,上述根據影子內核中的影子IDT確定該中斷處理函數在影子內核中對應的入口地址,可以是:根據影子IDT中中斷處理函數的標識和在影子內核中入口地址的對應關系,確定上述中斷處理函數在影子內核中對應的入口地址。其中,中斷處理函數的標識可以是中斷處理函數的中斷號。需要說明的是,并不一定是所有的系統調用函數和中斷處理函數都需要指向影子內核,可以只將對應的受保護的系統調用函數和中斷處理函數轉到影子內核進行處理,其它地還是可以直接在原始內核中進行處理,具體地,可以提前預設好哪些系統調用函數和中斷處理函數需要受保護,在此不作限制。圖5為本發明提供的虛擬機內核的保護方法實施例三的流程示意圖,在上述實施例的基礎上,截獲應用程序發起的系統調用函數之前,還包括構建上述影子內核。具體地,可以由虛擬機平臺上的監控代理模塊來完成影子內核的構建。監控代理模塊構建完影子內核后,會將影子內核的相關信息,包括其中影子SSDT和影子IDT的基地址等信息傳遞給VMM,以便于后續VMM執行攔截操作。如圖5所示,上述構建影子內核的方法包括:S501、將上述虛擬機原始內核的文件進行復制以獲取鏡像文件。S502、將該鏡像文件按照可執行格式文件映射到虛擬機原始內核的非分 頁池中,形成影子內核初始代碼。本實施例中,以Windows系統為例,對應的可執行格式為Windows可執行(PortableExecutable,簡稱PE)文件格式。但不以此為限,如果應用到其它操作系統,則采用對應的可執行文件格式即可。具體實現過程中,先打開原始內核,讀取原始內核的文件,并進行復制獲取原始內核的鏡像文件,將該鏡像文件按照可執行格式映射到影子內核的建立位置,例如將鏡像文件按照可執行格式映射到虛擬機原始內核的非分頁池中。具體地,讀取原內核的文件包括讀取原內核中文件的基地址、大小等內容。S503、根據上述鏡像文件所映射的地址以及影子內核基地址,對上述影子內核初始代碼中的待重定向數據進行修復,獲取修復后的待重定向數據。由于構建影子內核的過程中,虛擬機的原始內核可能已經開始運行了,因此原始內核的一些內核數據已經不再是初始化后的內容,例如某些全局的時間數據、性能計算相關數據等。鏡像文件按照可執行格式映射到虛擬機原始內核的非分頁池中時,可能會加載到一個隨機的虛擬地址,而不是默認的影子內核基地址,因而就需要進行重定向,修復后這些待重定向數據會指向影子內核中對應的地址。其中,上述可執行格式文件中的重定向表中會標識哪些數據需要重定向。具體實現過程中,可以根據可執行格式文件中的重定向表獲取待重定向數據的地址Ddefault,進而獲取構建影子內核的位置的首地址,例如在非分頁池中申請的用于構建影子內核的緩沖區的首地址Dactual_imagebase,Dactual_imagebase也就是鏡像文件按照可執行格式實際要加載的地址,再根據上述可執行格式文件默認的建立影子內核基地址Ddefault_imagebase計算獲取修復后的待重定向數據的地址Dactual。重定向數據重定向前與重定向后的相對基地址的偏移是不變的,因此,基于這一原理,可以具體采用的公式可以為:Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase。修復完一個待重定向數據后,再在重定向表中獲取下一個待重定向數據的當前地址,以完成修復,依次類推,完成所有待重定向數據的修復,形成修復后的待重定向數據。S504、將上述修復后的待重定向數據中SSDT對應的數據和IDT對應的數據進行備份,以獲取影子SSDT和影子IDT。上述待重定向數據中包括SSDT和IDT,上述修復后的待重定向數據均指向影子內核中對應的地址,例如SSDT中系統調用函數的標識對應的入口地址都變為影子內核中的地址,IDT中中斷處理函數的標識對應的地址也都變為影子內核中的地址,將目前系統調用函數的標識對應的地址、以及中斷處理函數的標識對應的地址寫入備份數組進行備份,構建影子SSDT和影子IDT。具體實現過程中,先獲取待重定向數據中SSDT的基地址和IDT的基地址,根據上述修復后的待重定向數據中SSDT的基地址和IDT的基地址將上述修復后的待重定向數據中SSDT對應的數據和IDT對應的數據進行備份。其中,舉例說明:上述修復后的待重定向數據中SSDT的基地址由下述公式確定:NewSSDTBaseAddr=OrigSSDTBaseAddr+delta,其中,NewSSDTBaseAddr表示上述修復后的待重定向數據中SSDT的基地址,OrigSSDTBaseAddr表示原始內核中SSDT的基地址,delta表示原始內核基地址與影子內核基地址的偏移值。上述修復后的待重定向數據中IDT的基地址確定方法與上述修復后的待重定向數據中SSDT的基地址確定方法類似,在此不再贅述。S505、將上述修復后的待重定向數據重定向到虛擬機原始內核,以獲取目標重定向數據,并將該目標重定向數據中的SSDT和IDT替換為上述影子SSDT和影子IDT。由于原始內核數據是經過內核初始化及運行后的正常數據,可能在運行過程中發生變化,而建立影子內核時讀取的只是剛初始化后的數據,而且修復后的上述待重定向數據中有一些未初始化數據,這些數據在初次被調用時才會初始化,但是原始內核中對應的數據可能已經被調用完成了初始化。所以上述修復后的待重定向數據都需要再重定向到原始內核,這樣影子內核才 能正常執行,避免引用全局內核數據錯誤而導致系統藍屏。重定向后這些修復后的待重定向數據又都指向了原始內核,其中,上述SSDT中的系統調用函數的標識對應的地址變成原始內核中的地址,同樣,IDT中的中斷處理函數的標識對應的地址也變成原始內核中的地址相同。但是,需要把影子內核的SSDT和IDT替換成S503中的影子SSDT和影子IDT,以使影子SSDT中系統調用函數的地址指向影子內核中對應的地址、且IDT中的中斷處理函數指向影子內核中對應的地址。進一步地,上述S501之前:還可以在虛擬機原始內核的非分頁池中申請緩沖區。需要說明的是,構建影子內核之前,在虛擬機內核加載完成后,虛擬機平臺會執行初始化函數,得到原始內核基地址以及系統調用函數在原始內核中的入口地址,接下來在虛擬機原始內核的非分頁池中開辟存放原始內核鏡像文件的緩沖區,在該緩沖區完成影子內核的構建。本發明實施例中構建影子內核的方法僅需要申請一塊緩沖區進行影子內核的構建,在構建過程中也只需要利用操作系統的基本原理解析文件的可執行格式,然后通過簡單的復制、映射完成影子內核的構建,其實現方法簡單通用,容易擴展到各類操作系統,且整個構建過程中影子內核不會出現在系統的注冊表、驅動鏈表、對象目錄表中,其隱蔽性非常好,不易被第三方應用程序發現并攻擊。圖6為本發明提供的虛擬機內核的保護裝置實施例一的結構示意圖,該裝置可以集成于虛擬機平臺,如圖6所示,該裝置包括:第一截獲模塊601和第一轉移模塊602,其中:第一截獲模塊601,用于截獲應用程序發起的系統調用函數。第一轉移模塊602,用于根據虛擬機原始內核基地址與影子內核基地址的偏移值,將所述系統調用函數指向影子內核,根據所述影子內核中的影子SSDT確定所述系統調用函數在影子內核中對應的入口地址。其中,所述影子內核構建于所述虛擬機原始內核的非分頁池中,所述影子內核為根據所述虛擬機原始內核的鏡像文件構建的可執行內核代碼。本實施例中,通過截獲應用程序發起的系統調用函數,根據虛擬機原始內核基地址與影子內核基地址的偏移值,將上述系統調用函數指向影子內核, 根據影子內核中的影子SSDT確定系統調用函數在影子內核中對應的入口地址,實現了系統調用路徑完全在影子內核的純凈代碼中執行,保證了系統調用路徑的完整性,從而也保證了整個內核代碼運行的完整性。且影子內核構建在虛擬機原始內核的非分頁池中構建,簡單易實現,也不會在注冊表等其他地方留下痕跡,安全性更高。圖7為本發明提供的虛擬機內核的保護裝置實施例二的結構示意圖,如圖7所示,在圖6的基礎上,該裝置還可以包括:構建模塊603,用于構建所述影子內核。參照圖7,具體地,構建模塊603可以包括:復制單元701、映射單元702、第一重定向單元703、備份單元704以及第二重定向單元705,其中:復制單元701,用于將所述虛擬機原始內核的文件進行復制以獲取鏡像文件。映射單元702,用于將所述鏡像文件按照可執行格式文件映射到所述虛擬機原始內核的非分頁池中,以形成影子內核初始代碼。第一重定向單元703,用于根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,并獲取修復后的待重定向數據。備份單元704,用于將所述修復后的待重定向數據中SSDT對應的數據和影子中斷描述表IDT對應的數據進行備份,以獲取影子IDT和所述影子SSDT。第二重定向單元705,用于將所述修復后的待重定向數據重定向到所述虛擬機原始內核,以獲取目標重定向數據,并將所述目標重定向數據中的SSDT和IDT替換為所述影子SSDT和所述影子IDT。圖8為本發明提供的虛擬機內核的保護裝置實施例三的結構示意圖,如圖8所示,在圖7的基礎上,該裝置還可以包括:申請模塊801,用于在復制單元701將所述虛擬機原始內核的文件進行復制以獲取鏡像文件之前,在所述虛擬機原始內核的非分頁池中申請緩沖區,其中,所述影子內核構建于所述緩沖區中。進一步地,上述第一重定向單元702,具體用于根據公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase將所述影子內核初始代碼中的待重定向 數據進行修復,以獲取修復后的待重定向數;其中,Ddefault為所述待重定向數據的地址,Dactual_imagebase為所述緩沖區的首地址,Ddefault_imagebase為所述影子內核基地址,Dactual為所述修復后的待重定向數的地址。圖9為本發明提供的虛擬機內核的保護裝置實施例四的結構示意圖,如圖9所示,在上述圖6的基礎上,該裝置還可以包括:第一攔截模塊604,用于攔截應用程序對所述虛擬機原始內核中的SSDT的讀寫操作。當然,也可以在圖7、圖8的基礎上,在此未示出。進一步地,虛擬機原始內核中的SSDT包括:系統調用函數的標識和在虛擬機原始內核中入口地址的對應關系,影子SSDT包括:系統調用函數的標識和在影子內核中入口地址的對應關系;相應地,第一轉移模塊602,具體用于根據所述影子SSDT中系統調用函數的標識和在影子內核中入口地址的對應關系,確定所述系統調用函數在影子內核中對應的入口地址。圖10為本發明提供的虛擬機內核的保護裝置實施例五的結構示意圖,如圖10所示,在圖6的基礎上,該裝置還可以包括:第二截獲模塊901和第二轉移模塊902,當然,也可以在圖7~圖9任一個的基礎上,在此未示出。其中:第二截獲模塊901,用于截獲虛擬機中斷處理函數。第二轉移模塊902,用于根據原始內核基地址與影子內核基地址的偏移值,將所述中斷處理函數指向所述影子內核,根據所述影子內核中的影子IDT確定所述中斷處理函數在影子內核中對應的入口地址。圖11為本發明提供的虛擬機內核的保護裝置實施例五的結構示意圖,如圖11所示,在圖10的基礎上,該裝置還可以包括:第二攔截模塊110,用于攔截應用程序對虛擬機原始內核中的IDT的讀寫操作。進一步地,所述虛擬機原始內核中的IDT包括:中斷處理函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子IDT包括:中斷處理函數的標識和在影子內核中入口地址的對應關系;相應地,第二轉移模塊902,具體用于根據所述影子IDT中中斷處理函數的標識和在影子內核中入口地址的對應關系,確定所述中斷處理函數在影子內核中 對應的入口地址。上述這些模塊、單元可以由虛擬機內核的保護裝置的處理元件實現,且該處理元件可以為單獨設立的處理元件,也可以集成在虛擬機內核的保護裝置的某一個處理元件中實現,此外,也可以以程序代碼的形式存儲于虛擬機內核的保護裝置的存儲元件中,由虛擬機內核的保護裝置的某一個處理元件調用并執行以上功能。該裝置用于執行前述方法實施例,其實現原理和技術效果類似,在此不再贅述。圖12為本發明提供的虛擬機內核的保護裝置實施例七的結構示意圖,如圖12所示,該裝置包括:處理器111、接口電路112、存儲器113和總線114,其中,處理器111、接口電路112以及存儲器113通過總線114連接并完成相互間的通信,存儲器113中存儲一組程序代碼,處理器111調用存儲器113中存儲的程序代碼,執行以下操作:截獲應用程序發起的系統調用函數;根據虛擬機原始內核基地址與影子內核基地址的偏移值,將所述系統調用函數指向影子內核,根據所述影子內核中的影子系統服務描述表SSDT確定所述系統調用函數在影子內核中對應的入口地址;其中,所述影子內核構建于所述虛擬機原始內核的非分頁池中,所述影子內核為根據所述虛擬機原始內核的鏡像文件構建的可執行內核代碼。進一步地,處理器111還用于構建所述影子內核。處理器111構建所述影子內核,具體為:將所述虛擬機原始內核的文件進行復制以獲取鏡像文件;將所述鏡像文件按照可執行格式文件映射到所述虛擬機原始內核的非分頁池中,以形成影子內核初始代碼;根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,并獲取修復后的待重定向數據;將所述修復后的待重定向數據中SSDT對應的數據和影子中斷描述表IDT對應的數據進行備份,以獲取影子IDT和所述影子SSDT;將所述修復后的待重定向數據重定向到所述虛擬機原始內核,以獲取目標重定向數據,并將所述目標重定向數據中的SSDT和IDT替換為所述影子 SSDT和所述影子IDT。可選地,處理器111將所述虛擬機原始內核的文件進行復制以獲取鏡像文件之前,在所述虛擬機原始內核的非分頁池中申請緩沖區,其中,所述影子內核構建于所述緩沖區中。處理器111根據所述鏡像文件所映射的地址以及影子內核基地址,對所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數據,可以為:根據公式Dactual-Dactual_imagebase=Ddefault-Ddefault_imagebase將所述影子內核初始代碼中的待重定向數據進行修復,以獲取修復后的待重定向數;其中,Ddefault為所述待重定向數據的地址,Dactual_imagebase為所述緩沖區的首地址,Ddefault_imagebase為所述影子內核基地址,Dactual為所述修復后的待重定向數的地址。處理器111將所述系統調用函數指向影子內核之后,還用于攔截應用程序對所述虛擬機原始內核中的SSDT的讀寫操作。所述虛擬機原始內核中的SSDT包括:系統調用函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子SSDT包括:系統調用函數的標識和在影子內核中入口地址的對應關系;相應地,處理器111具體用于根據所述影子SSDT中系統調用函數的標識和在影子內核中入口地址的對應關系,確定所述系統調用函數在影子內核中對應的入口地址。進一步地,處理器111還用于截獲虛擬機中斷處理函數;根據原始內核基地址與影子內核基地址的偏移值,將所述中斷處理函數指向所述影子內核,根據所述影子內核中的影子IDT確定所述中斷處理函數在影子內核中對應的入口地址。進一步地,處理器111將所述中斷處理函數指向所述影子內核之后,還用于攔截應用程序對虛擬機原始內核中的IDT的讀寫操作。可選地,所述虛擬機原始內核中的IDT包括:中斷處理函數的標識和在虛擬機原始內核中入口地址的對應關系,所述影子IDT包括:中斷處理函數的標識和在影子內核中入口地址的對應關系;相應地,處理器111具體用于根據所述影子IDT中中斷處理函數的標識和在影子內核中入口地址的對應關系,確定所述中斷處理函數在影子內核中對應的入 口地址。在本發明所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用硬件加軟件功能單元的形式實現。上述以軟件功能單元的形式實現的集成的單元,可以存儲在一個計算機可讀取存儲介質中。上述軟件功能單元存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)或處理器(英文:processor)執行本發明各個實施例所述方法的部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(英文:Read-OnlyMemory,簡稱:ROM)、隨機存取存儲器(英文:RandomAccessMemory,簡稱:RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。最后應說明的是:以上各實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照前述各實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發明各實施例技術方案的范圍。當前第1頁1 2 3 當前第1頁1 2 3