本發(fā)明屬于云計算安全
技術領域:
:,更具體地,涉及一種基于系統(tǒng)調(diào)用重定向的vmi方法及系統(tǒng)。
背景技術:
::隨著云計算的快速發(fā)展,越來越多的人會開始租用虛擬機(virtualmachine,vm),vm背后的核心技術就是虛擬化。近年來,隨著虛擬化的研究發(fā)展,導致虛擬機自省(virtualmachineintrospection,vmi)技術及工具的演進。vmi指的是從vm外面監(jiān)控vm內(nèi)部運行的狀態(tài),實現(xiàn)入侵檢測、惡意軟件分析、完整性檢查、日志審計等安全功能。vmi的核心問題是語義鴻溝,即管理程序(hypervisor)能夠看到的底層狀態(tài)(二進制的byte或者bit)與它們在vm內(nèi)部所表達的語義的分離(如進程pid)。到目前為止,已經(jīng)有很多的vmi系統(tǒng)能夠解決或避免語義鴻溝,如xenaccess庫、內(nèi)核數(shù)據(jù)重定向、進程及代碼注入、系統(tǒng)調(diào)用重定向等。每種vmi系統(tǒng)解決語義鴻溝的方法都有自己的優(yōu)劣,但是目前仍然沒有一種vmi工具及技術能夠直接應用到云計算環(huán)境,主要原因如下:首先,管理大量的vms可能會導致不可避免的管理成本,這就需要一個自動的方式來管理這些vms。最近一種可寫的vmi技術已經(jīng)被提出從vm外面修改vm的內(nèi)核狀態(tài)而不需要任何管理員的介入,此種方式極大的減少了管理成本。另外,可寫的vmi更能夠自發(fā)地響應目標vm,例如當檢測到目標vm的一個隱藏進程后,可寫vmi技術能夠自發(fā)的從目標vm外面kill掉這個隱藏進程而不需任何的人工努力。因此,一個先進的vmi技術應該提供一個可寫的能力來自動地管理云環(huán)境中的vms和提高云安全。其次,云平臺要同時為海量云用戶提供服務,而各個云用戶需要的系統(tǒng)環(huán)境可能是千差萬別的,故針對云平臺來說,vm的數(shù)量是龐大的,而且每個vm的客戶操作系統(tǒng)的版本可能是不同的,這在一定程度上增加了監(jiān)控的復雜性及難度,因此需要一種監(jiān)控工具能夠同時對云平臺中大量vm同時監(jiān)控,而且能夠兼容每個vm的操作系統(tǒng)版本。最后,目前存在的大多數(shù)的vmi技術都帶來了極大的性能開銷及資源消耗。因此一個實用的vmi技術應該帶來更低的性能開銷和資源的消耗。綜上所述,目前的vmi工具及技術難以全面適應到云計算環(huán)境的需求,一個適合云環(huán)境的vmi技術應該提供可寫、低性能開銷及監(jiān)控多臺不同操作系統(tǒng)的vms的能力。技術實現(xiàn)要素:針對現(xiàn)有技術的以上缺陷或改進需求,本發(fā)明提供了一種基于系統(tǒng)調(diào)用重定向的vmi方法及系統(tǒng),能夠從目標vm外面對該vm的內(nèi)核狀態(tài)進行修改,而不需要任何的用戶權限,極大的減少了vm的管理成本,而且能夠用來主動地提高云環(huán)境安全,解決現(xiàn)有的vmi系統(tǒng)難以直接應用到云環(huán)境,無法同時滿足云環(huán)境的一些現(xiàn)實需求:可寫性、高效性、通用性、同時監(jiān)控、可靠性等的技術問題。為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種基于系統(tǒng)調(diào)用重定向的vmi方法,包括:(1)選擇目標虛擬機vm,并將目標vm中的init進程選擇為輔助進程;(2)在host中運行虛擬機自省vmi應用程序,截獲vmi應用程序的每個系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號,依據(jù)系統(tǒng)調(diào)用號以及預設的系統(tǒng)調(diào)用重定向策略決定截獲到的系統(tǒng)調(diào)用是否需要被重定向到目標vm中執(zhí)行;(3)若需要重定向,則將重定向的系統(tǒng)調(diào)用參數(shù)寫入共享內(nèi)存中,暫停host中vmi應用程序的執(zhí)行,向內(nèi)核虛擬機kvm發(fā)出重定向請求;(4)kvm在接收到重定向請求后,從共享內(nèi)存中讀取系統(tǒng)調(diào)用參數(shù),并對輔助進程進行安全檢查及保護,然后調(diào)度輔助進程在目標vm中執(zhí)行重定向的系統(tǒng)調(diào)用。(5)若系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的用戶層數(shù)據(jù)進行更新,則將執(zhí)行結果重新寫回到共享內(nèi)存中,并將共享內(nèi)存中更新的數(shù)據(jù)拷貝到host中vmi應用程序的用戶空間;若系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的內(nèi)核狀態(tài)進行更新,則直接對目標vm的內(nèi)存進行更新,然后恢復host中vmi應用程序的執(zhí)行;(6)若vmi應用程序執(zhí)行結束,則獲取目標vm中的監(jiān)控結果;若vmi應用程序沒有執(zhí)行結束,則返回步驟(2)。優(yōu)選地,在步驟(2)中,截獲vmi應用程序的系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號具體為:利用共享庫介入技術,修改glibc庫文件中系統(tǒng)調(diào)用入口處的匯編代碼,添加自定義的系統(tǒng)調(diào)用重定向決策函數(shù),并重新編譯glibc庫文件,在vmi應用程序由用戶空間進入到庫空間開始執(zhí)行系統(tǒng)調(diào)用時,自動執(zhí)行系統(tǒng)調(diào)用重定向決策函數(shù),截獲vmi應用程序的系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號。優(yōu)選地,在步驟(2)中,依據(jù)系統(tǒng)調(diào)用號以及預設的系統(tǒng)調(diào)用重定向策略決定截獲的系統(tǒng)調(diào)用是否需要重定向到目標vm中執(zhí)行具體為:將系統(tǒng)調(diào)用分為只讀read-only和可寫writable兩類,并分別對每一個系統(tǒng)調(diào)用進行分類,分別對兩類系統(tǒng)調(diào)用的重定向策略進行分析,其中與系統(tǒng)文件和socket讀寫相關的系統(tǒng)調(diào)用并且對此文件和socket后續(xù)的系統(tǒng)調(diào)用讀寫操作均需要重定向。優(yōu)選地,在步驟(4)中,對輔助進程進行安全檢查及保護具體為:輔助進程的用戶空間安全保護:利用kvm的ept進程地址空間隔離將輔助進程所在的內(nèi)存頁的讀寫權限從ept頁表中移除,以使對輔助進程內(nèi)存頁的讀寫操作被拒絕,保證輔助進程的內(nèi)存不會被惡意軟件讀寫;輔助進程的內(nèi)核空間安全檢查:在vm首次創(chuàng)建時,利用kvm獲取內(nèi)核靜態(tài)函數(shù)的地址并保存,之后每次在輔助進程執(zhí)行前,再一次的獲取內(nèi)核靜態(tài)函數(shù)的地址,并與先前保存的地址做一致性對比,若二者不一致,則表明系統(tǒng)內(nèi)核被rootkits破壞,利用kvm向vmi應用程序發(fā)出安全警告,并將不一致信息寫入內(nèi)核日志文件。按照本發(fā)明的另一方面,提供了一種基于系統(tǒng)調(diào)用重定向的vmi系統(tǒng),包括:初始化模塊,用于選擇目標虛擬機vm,并將目標vm中的init進程選擇為輔助進程;系統(tǒng)調(diào)用截獲及重定向決策模塊,用于在host中截獲vmi應用程序的每個系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號,依據(jù)系統(tǒng)調(diào)用號以及預設的系統(tǒng)調(diào)用重定向策略決定截獲到的系統(tǒng)調(diào)用是否需要重定向到目標vm中執(zhí)行;系統(tǒng)調(diào)用重定向模塊,用于在需要重定向時,將重定向的系統(tǒng)調(diào)用參數(shù)寫入共享內(nèi)存中,暫停host中vmi應用程序的執(zhí)行,向內(nèi)核虛擬機kvm發(fā)出重定向請求;重定向系統(tǒng)調(diào)用執(zhí)行模塊,用于在kvm接收到重定向請求后,從共享內(nèi)存中讀取系統(tǒng)調(diào)用參數(shù),并調(diào)度輔助進程在目標vm中執(zhí)行重定向的系統(tǒng)調(diào)用;安全保護模塊,用于在輔助進程執(zhí)行系統(tǒng)調(diào)用前,檢查保護系統(tǒng)調(diào)用的執(zhí)行環(huán)境,保證可靠自省的結果;重定向結果更新模塊,用于在系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的用戶層數(shù)據(jù)進行更新時,將執(zhí)行結果重新寫回到共享內(nèi)存中,并將共享內(nèi)存中更新的數(shù)據(jù)拷貝到host中vmi應用程序的用戶空間,在系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的內(nèi)核狀態(tài)進行更新時,直接對目標vm的內(nèi)存進行更新,然后恢復host中vmi應用程序的執(zhí)行;重定向結果獲取模塊,用于在vmi應用程序執(zhí)行結束后,獲取目標vm中的監(jiān)控結果;若vmi應用程序沒有執(zhí)行結束,則返回所述系統(tǒng)調(diào)用截獲及重定向決策模塊??傮w而言,通過本發(fā)明所構思的以上技術方案與現(xiàn)有技術相比,主要有以下的技術優(yōu)點:(1)高效性。本發(fā)明基于系統(tǒng)調(diào)用重定向技術,且基于硬件虛擬化技術kvm實現(xiàn),與現(xiàn)有的基于內(nèi)核數(shù)據(jù)重定向及軟件虛擬化技術qemu相比,性能開銷低,效率高,對客戶vm的性能影響低。(2)可寫性。本發(fā)明詳細設計了系統(tǒng)調(diào)用重定向策略,實現(xiàn)了一種可寫vmi,不僅僅能夠從vm外面獲取目標vm的內(nèi)存狀態(tài),而且能夠從vm外面對目標vm的內(nèi)核狀態(tài)進行修改,不需要任何人工的操作,提高了vmi程序的自發(fā)性,能夠用來主動地提高云環(huán)境安全。(3)通用性。由于本發(fā)明基于系統(tǒng)調(diào)用重定向,系統(tǒng)調(diào)用在linux的不同發(fā)型版中除非存在系統(tǒng)調(diào)用接口隨機化,否則幾乎所有的系統(tǒng)調(diào)用的接口都是兼容的,這就保證了一個vmi程序能夠兼容不同的guestos。(4)可靠性。本發(fā)明與現(xiàn)有的基于系統(tǒng)調(diào)用重定向的方法相比,針對輔助進程做了相關的安全保護策略,保護了重定向系統(tǒng)調(diào)用執(zhí)行環(huán)境的安全,從而保證了自省結果的可靠性。附圖說明圖1是本發(fā)明實施例公開的一種基于系統(tǒng)調(diào)用重定向的vmi方法的流程示意圖;圖2是本發(fā)明實施例公開的一種基于系統(tǒng)調(diào)用重定向的vmi的系統(tǒng)架構圖;圖3是本發(fā)明實施例公開的一種基于host截獲系統(tǒng)調(diào)用的原理圖。具體實施方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術特征只要彼此之間未構成沖突就可以相互組合。如圖1所示為本發(fā)明實施例公開的一種基于系統(tǒng)調(diào)用重定向的vmi方法的流程示意圖,在圖1所示的方法中,包括以下步驟:(1)選擇目標虛擬機vm,并將目標vm中的init進程選擇為輔助進程;其中,可以通過向目標vm中注入一個getpid系統(tǒng)調(diào)用來選擇init進程作為執(zhí)行重定向系統(tǒng)調(diào)用的輔助進程。(2)在host中運行vmi應用程序,截獲vmi應用程序的每個系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號,依據(jù)系統(tǒng)調(diào)用號以及預設的系統(tǒng)調(diào)用重定向策略決定截獲到的系統(tǒng)調(diào)用是否需要被重定向到目標vm中執(zhí)行;其中,vmi應用程序可以包括ps,lsmod,iostat等現(xiàn)有的系統(tǒng)管理命令或者用戶自定義的應用程序,可以利用動態(tài)庫介入技術在host的庫空間中截獲vmi應用程序的每個系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號。(3)若需要重定向,則將重定向的系統(tǒng)調(diào)用參數(shù)寫入共享內(nèi)存中,暫停host中vmi應用程序的執(zhí)行,向內(nèi)核虛擬機(kernel-basedvirtualmachine,kvm)發(fā)出重定向請求;其中,若不需要重定向,則vmi應用程序繼續(xù)執(zhí)行系統(tǒng)調(diào)用入口指令陷入host內(nèi)核空間中執(zhí)行。(4)kvm在接收到重定向請求后,從共享內(nèi)存中讀取系統(tǒng)調(diào)用參數(shù),并對輔助進程進行安全檢查及保護,然后調(diào)度輔助進程在目標vm中執(zhí)行重定向的系統(tǒng)調(diào)用。其中,在調(diào)度輔助進程在目標vm中執(zhí)行重定向的系統(tǒng)調(diào)用之前,需要對目標vm的控制流進行完整性檢查,確保輔助進程的安全執(zhí)行。(5)若系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的用戶層數(shù)據(jù)進行更新,則將執(zhí)行結果重新寫回到共享內(nèi)存中,并將共享內(nèi)存中更新的數(shù)據(jù)拷貝到host中vmi應用程序的用戶空間,若系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的內(nèi)核狀態(tài)進行更新,則直接對目標vm的內(nèi)存進行更新,然后恢復host中vmi應用程序的執(zhí)行;(6)若vmi應用程序執(zhí)行結束,則獲取目標vm中的監(jiān)控結果;若vmi應用程序沒有執(zhí)行結束,則返回步驟(2)。作為一種可選的實施方式,在步驟(2)中,截獲vmi應用程序的系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號具體為:利用共享庫介入技術,修改glibc庫文件中系統(tǒng)調(diào)用入口處的匯編代碼,添加自定義的系統(tǒng)調(diào)用重定向決策函數(shù),并重新編譯glibc庫文件,在vmi應用程序由用戶空間進入到庫空間開始執(zhí)行系統(tǒng)調(diào)用時,自動執(zhí)行系統(tǒng)調(diào)用重定向決策函數(shù),截獲vmi應用程序的系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號。作為一種可選的實施方式,在步驟(2)中,依據(jù)系統(tǒng)調(diào)用號以及預設的系統(tǒng)調(diào)用重定向策略決定截獲的系統(tǒng)調(diào)用是否需要重定向到目標vm中執(zhí)行具體為:將系統(tǒng)調(diào)用分為只讀read-only和可寫writable兩類,并分別對每一個系統(tǒng)調(diào)用進行分類,如read、getdents64、getpid等屬于read-only,而write、kill、nice等則屬于writable類,分別對兩類系統(tǒng)調(diào)用的重定向策略進行分析,其中與系統(tǒng)文件和socket讀寫相關的系統(tǒng)調(diào)用并且對此文件和socket后續(xù)的系統(tǒng)調(diào)用讀寫操作均需要重定向,例如open一個文件返回0后,之后對文件0操作的系統(tǒng)調(diào)用都要重定向,如read(0,,),write(0,,)等。作為一種可選的實施方式,在步驟(4)中,對輔助進程進行安全檢查及保護具體包括:輔助進程的用戶空間安全保護:輔助進程init在用戶空間主要面臨著惡意軟件的威脅,惡意軟件可能會破壞init進程的代碼、干擾init進程讀寫的共享內(nèi)存、惡意改變進程的控制流。為了保證init進程在用戶空間的代碼、數(shù)據(jù)、控制流不會被惡意軟件破壞,利用kvm的擴展頁表(extendedpagetables,ept)進程地址空間隔離技術來保證init進程的內(nèi)存不會被惡意軟件讀寫。即使惡意軟件具有客戶vm系統(tǒng)的根權限,也不能訪問kvm上的ept。ept進程地址空間隔離主要是基于kvm,把init進程所在的內(nèi)存頁的寫權限從ept頁表中移除。之后對init進程內(nèi)存頁寫操作都會被拒絕,同樣地,惡意軟件也就不能對init進程做任何的操作,從而保證進程的代碼及控制流的完整性。另外由于init進程讀寫的共享內(nèi)存地址是隨機生成的,惡意軟件是不能夠定位和修改的,故init進程的讀寫的數(shù)據(jù)也得到了完整性保護。輔助進程的內(nèi)核空間安全檢查:輔助進程主要用來在目標vm中執(zhí)行重定向的系統(tǒng)調(diào)用,其主要依靠目標vm中的內(nèi)核函數(shù)指針,例如中斷描述符表(interruptdescriptortable,idt)、系統(tǒng)調(diào)用表及系統(tǒng)調(diào)用處理函數(shù)。通常地,絕大多數(shù)的內(nèi)核rootkits通過hook這些idt、系統(tǒng)調(diào)用表和函數(shù)指針來破壞內(nèi)核的控制流完整性,從而實現(xiàn)一些惡意的目的,如隱藏惡意進程、隱藏惡意模塊等。因此,這些內(nèi)核rootkits將會直接影響輔助進程在目標vm中的正常執(zhí)行,從而獲得不正確的自省結果。然而,這些內(nèi)核rootkits仍然會執(zhí)行原始的控制流來隱藏自身的存在,因此內(nèi)核rootkits不會使輔助進程中斷執(zhí)行。另外,idt、系統(tǒng)調(diào)用表及函數(shù)指針都是靜態(tài)的,在os執(zhí)行的過程中不會發(fā)生變化除非被惡意的改變。因此,我們提出了一種完整性檢查機制來比對這些靜態(tài)內(nèi)核函數(shù)的地址是否一致。首先,在vm首次創(chuàng)建時,利用kvm獲取這些內(nèi)核靜態(tài)函數(shù)的地址并保存。之后每次在輔助進程執(zhí)行前,再一次的獲取這些數(shù)據(jù)的地址,并與先前保存地址的做一致性對比。如果發(fā)現(xiàn)二者不一致,那么就能知道系統(tǒng)內(nèi)核已經(jīng)被rootkits破壞,利用kvm向vmi程序發(fā)出一個安全警告,并且將具體的不一致信息寫入內(nèi)核日志文件。當vmi程序完成執(zhí)行后,如果收到一個安全警告信息時,管理員將會知道此次的自省結果是不正確的,另外kvm將會利用先前保存的數(shù)據(jù)自動地恢復內(nèi)核控制流的完整性,從而保證了后續(xù)自省程序的正確執(zhí)行。本發(fā)明還提供了一種基于系統(tǒng)調(diào)用重定向的vmi系統(tǒng),包括:初始化模塊,用于選擇目標虛擬機vm,并將目標vm中的init進程確定為輔助進程;系統(tǒng)調(diào)用截獲及重定向決策模塊,用于在host中運行虛擬機自省vmi應用程序,截獲vmi應用程序的每個系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用號,依據(jù)系統(tǒng)調(diào)用號以及預設的系統(tǒng)調(diào)用重定向策略決定截獲的系統(tǒng)調(diào)用是否需要重定向到目標vm中執(zhí)行;系統(tǒng)調(diào)用重定向模塊,用于在需要重定向時,將重定向的系統(tǒng)調(diào)用參數(shù)寫入共享內(nèi)存中,暫停host中vmi應用程序的執(zhí)行,向內(nèi)核虛擬機kvm發(fā)出重定向請求;重定向系統(tǒng)調(diào)用執(zhí)行模塊,用于在kvm接收到重定向請求后,從共享內(nèi)存中讀取系統(tǒng)調(diào)用參數(shù),并調(diào)度輔助進程在目標vm中執(zhí)行重定向的系統(tǒng)調(diào)用。安全保護模塊,在輔助進程執(zhí)行系統(tǒng)調(diào)用前,檢查保護系統(tǒng)調(diào)用的執(zhí)行環(huán)境,保證可靠自省的結果。重定向結果更新模塊,用于在系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的用戶層數(shù)據(jù)進行更新時,將執(zhí)行結果重新寫回到共享內(nèi)存中,并將共享內(nèi)存中更新的數(shù)據(jù)拷貝到host中vmi應用程序的用戶空間,在系統(tǒng)調(diào)用的執(zhí)行結果對目標vm的內(nèi)核狀態(tài)進行更新時,直接對目標vm的內(nèi)核狀態(tài)進行更新修改,然后恢復host中vmi應用程序的執(zhí)行;重定向結果獲取模塊,用于在vmi應用程序執(zhí)行結束后,獲取目標vm中的監(jiān)控結果;若vmi應用程序沒有執(zhí)行結束,則返回所述系統(tǒng)調(diào)用截獲及重定向決策模塊。下面以具體的實例ps進程為例,說明本發(fā)明中的基于系統(tǒng)調(diào)用重定向的vmi方法的實現(xiàn)過程:(1)系統(tǒng)管理員首先確定需要被監(jiān)控的目標vm,之后在目標vm中選擇并初始化init進程作為輔助進程;(2)在host中執(zhí)行ps命令,當程序需要執(zhí)行系統(tǒng)調(diào)用時會陷入到用戶庫空間;(3)在庫空間中截獲ps的所有系統(tǒng)調(diào)用,如open、read、close等,并且根據(jù)自定義的系統(tǒng)調(diào)用重定向策略決定該系統(tǒng)調(diào)用是否系統(tǒng)被重定向。如果需要被重定向則執(zhí)行(4),否則直接執(zhí)行int0x80指令陷入到host的內(nèi)核中執(zhí)行;(4)將需要重定向的系統(tǒng)調(diào)用的參數(shù)寫入到共享buffer中,暫停host中該程序的執(zhí)行并通知kvm重定向該系統(tǒng)調(diào)用;(5)kvm根據(jù)目標vm對應的信號量與host中的ps進程建立進程間通信,同時激活輔助進程;(6)安全防護模塊利用ept保護輔助進程的用戶層代碼、數(shù)據(jù);利用一致性檢測機制對目標vm中的idt表及系統(tǒng)調(diào)用表進行完整性檢查和一致性恢復;(7)輔助進程讀取共享buffer中的數(shù)據(jù),執(zhí)行int0x80或sysenter進入被監(jiān)控目標vm的內(nèi)核空間,執(zhí)行重定向的系統(tǒng)調(diào)用;(8)當重定向的系統(tǒng)調(diào)用執(zhí)行完成后,根據(jù)其執(zhí)行結果做出不同的處理。如果系統(tǒng)調(diào)用對系統(tǒng)的數(shù)據(jù)有更新,那么執(zhí)行步驟(9);否則,執(zhí)行步驟(10);(9)如果系統(tǒng)調(diào)用執(zhí)行結果對系統(tǒng)的用戶層進行更新,那么將結果重新寫回到共享內(nèi)存中。然后將共享內(nèi)存中更新的數(shù)據(jù)拷貝到host中ps進程的用戶空間,并恢復在host中的執(zhí)行。如果系統(tǒng)調(diào)用執(zhí)行結果需要對目標vm的內(nèi)核狀態(tài)進行更新,那么這些更新直接修改目標vm的內(nèi)核狀態(tài),執(zhí)行完成后恢復在host中的ps執(zhí)行;(10)繼續(xù)在host中執(zhí)行ps程序,如果程序執(zhí)行結束,那么得出目標vm中的進程列表;否則繼續(xù)重復(3)-(9)的執(zhí)行步驟。如圖2所示為本發(fā)明基于系統(tǒng)調(diào)用重定向的高效可寫vmi的系統(tǒng)架構圖,主要包括系統(tǒng)調(diào)用截獲及重定向決策、重定向系統(tǒng)調(diào)用執(zhí)行、安全保護。系統(tǒng)調(diào)用截獲及重定向決策:利用動態(tài)庫介入技術完成基于host的系統(tǒng)調(diào)用截獲,制定系統(tǒng)調(diào)用重定向的策略,依據(jù)截獲的系統(tǒng)調(diào)用號和重定向策略決定該系統(tǒng)調(diào)用是否需要被重定向。重定向系統(tǒng)調(diào)用執(zhí)行:基于kvm和vmi程序選擇目標vm,并利用映射表與vmi程序建立通信,并將init進程由守護狀態(tài)變?yōu)閳?zhí)行狀態(tài),讀取共享buffer的數(shù)據(jù)來執(zhí)行重定向來的系統(tǒng)調(diào)用。安全保護:在每個系統(tǒng)調(diào)用執(zhí)行前,分別從用戶空間和內(nèi)核空間對init進程做安全檢查及保護,從而保證系統(tǒng)調(diào)用執(zhí)行結果的可靠性。如圖3所示為本發(fā)明基于host截獲系統(tǒng)調(diào)用并進行重定向選擇的原理圖。當vmi程序執(zhí)行系統(tǒng)調(diào)用時,會首先進入用戶的glibc庫空間,通過系統(tǒng)調(diào)用處理的匯編代碼entry(syscall)找到進入系統(tǒng)內(nèi)核入口的地址enter_kernel。傳統(tǒng)的enter_kernel宏定義為int0x80,因此只需要將enter_kernel宏的定義int0x80改為自定義的系統(tǒng)調(diào)用重定向決策函數(shù)的地址,那么當vmi執(zhí)行系統(tǒng)調(diào)用時,就會執(zhí)行系統(tǒng)調(diào)用的決策函數(shù),而不會直接執(zhí)行int0x80進入到host內(nèi)核空間了,完成了系統(tǒng)調(diào)用的截獲及重定向策略的執(zhí)行。本領域的技術人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。當前第1頁12當前第1頁12