蔡夢娟,陳興蜀,金 鑫,趙 成,殷明勇
(1.四川大學(xué) 網(wǎng)絡(luò)空間安全研究院,成都 610065; 2.四川大學(xué) 計(jì)算機(jī)學(xué)院,成都 610065;3.中國工程物理研究院 計(jì)算機(jī)應(yīng)用研究所,四川 綿陽 621900)(*通信作者電子郵箱chenxsh@scu.edu.cn)
虛擬化技術(shù)是云計(jì)算平臺的核心技術(shù)之一,隨著云計(jì)算服務(wù)的大量應(yīng)用,云計(jì)算平臺中的安全成為關(guān)注焦點(diǎn)。一般情況下,云環(huán)境下的關(guān)鍵業(yè)務(wù)需要長時(shí)間地穩(wěn)定運(yùn)行,為用戶提供高質(zhì)量的服務(wù),安全性和可用性是保證服務(wù)質(zhì)量的關(guān)鍵。美國國家標(biāo)準(zhǔn)機(jī)構(gòu)(National Institute of Standards and Technology, NIST)發(fā)布的《完全虛擬化安全指南》[1]指出,傳統(tǒng)主機(jī)面臨的安全威脅同樣適用于云計(jì)算環(huán)境下的虛擬機(jī)。對于部署在虛擬機(jī)中的業(yè)務(wù)程序,一方面虛擬機(jī)操作系統(tǒng)存在代碼漏洞或內(nèi)部配置不合理等缺陷,另一方面業(yè)務(wù)程序自身代碼也存在安全漏洞。《2015年12月計(jì)算機(jī)病毒疫情分析》[2]指出的惡意木馬變種Trojan.PSW/Tepfer.lst等可竊取計(jì)算機(jī)操作系統(tǒng)敏感數(shù)據(jù),破壞應(yīng)用程序甚至修改宿主進(jìn)程代碼以偽裝自身存在,嚴(yán)重威脅關(guān)鍵業(yè)務(wù)運(yùn)行的穩(wěn)定性及云平臺信息的安全性。文獻(xiàn)[3]指出云服務(wù)商須對自身進(jìn)行安全監(jiān)管以保障云平臺上業(yè)務(wù)及數(shù)據(jù)的安全,因此,對虛擬機(jī)中進(jìn)程代碼進(jìn)行完整性度量,以檢測其是否遭受惡意篡改,對于保證服務(wù)的穩(wěn)定性與安全性、減少用戶損失、增強(qiáng)虛擬機(jī)安全性等具有重要作用。
傳統(tǒng)的基于主機(jī)的監(jiān)控系統(tǒng)因其與惡意軟件位于同一操作系統(tǒng)內(nèi)部,易被其繞過或攻擊而失效,如HookAPI[4]等。虛擬化技術(shù)的發(fā)展在提高資源利用率的同時(shí)也為安全研究帶來了新的思路:文獻(xiàn)[5-8]采用在虛擬機(jī)監(jiān)視器(Virtual Machine Monitor, VMM)層部署監(jiān)控系統(tǒng),利用VMM的強(qiáng)隔離性、強(qiáng)控制性和高特權(quán)級等優(yōu)勢,使檢測模塊與虛擬機(jī)系統(tǒng)隔離開來,在虛擬機(jī)外部采用虛擬機(jī)自省(Virtual Machine Introspection, VMI)[9]獲取虛擬機(jī)內(nèi)部信息,實(shí)現(xiàn)對虛擬機(jī)中進(jìn)程的監(jiān)控,解決傳統(tǒng)基于主機(jī)的檢測過程中遇到的問題。完整性驗(yàn)證流程一般包括度量和驗(yàn)證兩部分:度量部分負(fù)責(zé)收集系統(tǒng)內(nèi)部信息并發(fā)送至驗(yàn)證部分;驗(yàn)證部分負(fù)責(zé)保存原始基值,并與接收的度量信息進(jìn)行比較以驗(yàn)證完整性。云環(huán)境下針對虛擬機(jī)系統(tǒng)進(jìn)行度量的方法中,根據(jù)度量部分的部署位置可分為兩類:1)將度量部分部署在虛擬機(jī)中;2)將度量部分部署在Hypervisor中。第一類方法通過在虛擬機(jī)內(nèi)部捕獲進(jìn)程行為,獲取系統(tǒng)信息并傳至驗(yàn)證部分,如文獻(xiàn)[10-11]。此類方法可獲取豐富的虛擬機(jī)系統(tǒng)信息,但存在以下不足:1)依賴目標(biāo)虛擬機(jī)版本,通用性不強(qiáng);2)易受虛擬機(jī)內(nèi)部惡意軟件的攻擊,需要Hypervisor提供額外的防護(hù)措施,增加了開發(fā)的復(fù)雜性。第二類方法在虛擬機(jī)外部完成信息獲取及驗(yàn)證的流程,如文獻(xiàn)[12-14],其中IVirt[12]通過Xen提供的Xencontrol和Xenstore接口在虛擬機(jī)外部進(jìn)行地址轉(zhuǎn)換和內(nèi)容定位,將虛擬機(jī)代碼頁逐頁復(fù)制到特權(quán)用戶可訪問的存儲空間進(jìn)行完整性驗(yàn)證。此類方法無需修改虛擬機(jī),克服了將度量部分部署在虛擬機(jī)內(nèi)部的不足,但同時(shí)也面臨挑戰(zhàn):1)VMM層與虛擬機(jī)之間的語義鴻溝[15]問題;2)現(xiàn)代操作系統(tǒng)使用“按需分配”的方式分配物理內(nèi)存,在某一時(shí)刻只有部分進(jìn)程代碼被加載至物理內(nèi)存,且其物理地址空間不一定連續(xù),因此在VMM層難以獲取完整的虛擬機(jī)進(jìn)程代碼段。如IVirt[12]就需保證虛擬機(jī)進(jìn)程代碼全部加載至內(nèi)存中,當(dāng)代碼段很大時(shí),該種實(shí)現(xiàn)方式會帶來嚴(yán)重的內(nèi)存消耗。
針對以上問題,本文提出一種基于硬件虛擬化的虛擬機(jī)進(jìn)程代碼分頁式度量方法,并實(shí)現(xiàn)了原型系統(tǒng)——虛擬機(jī)分頁式度量系統(tǒng)(Virtual Machine Paging-Measurement System, VMPMS)。VMPMS以基于內(nèi)核的虛擬機(jī)(Kernel-based Virtual Machine, KVM)作為虛擬機(jī)監(jiān)視器,在VMM層截獲虛擬機(jī)進(jìn)程行為作為度量流程的觸發(fā)點(diǎn),可實(shí)現(xiàn)對運(yùn)行進(jìn)程的動態(tài)度量;并基于相對地址偏移方法對虛擬機(jī)中進(jìn)程語義進(jìn)行重構(gòu),解決了不同版本虛擬機(jī)之間的語義差異;提出并實(shí)現(xiàn)了分頁式度量方法在虛擬機(jī)外部驗(yàn)證進(jìn)程代碼段的完整性,無需修改虛擬機(jī)。VMPMS采用無代理方式,可實(shí)現(xiàn)在VMM層對虛擬機(jī)中運(yùn)行進(jìn)程代碼段的完整性驗(yàn)證,且無需保證度量進(jìn)程代碼段全部加載至內(nèi)存,具有較好的適用性與靈活性。
進(jìn)程代碼完整性攻擊威脅主要包括兩種:1)修改進(jìn)程二進(jìn)制可執(zhí)行文件;2)對運(yùn)行進(jìn)程代碼進(jìn)行掛鉤操作,破壞原有執(zhí)行流程。現(xiàn)有的部分研究集中于在程序啟動之前驗(yàn)證其完整性,如基于可信計(jì)算組織(Trusted Computing Group, TCG)的完整性度量架構(gòu)(Integrity Measurement Architecture, IMA)[16]及其改進(jìn)方法PRIMA(Policy-Reduced Integrity Measurement Architecture)[17],此類方法為靜態(tài)度量,無法驗(yàn)證運(yùn)行進(jìn)程的完整性。Huh等[18]及Stelte等[19]設(shè)計(jì)的SIMA(Sensory Integrity Measurement Architecture)在虛擬機(jī)內(nèi)核中安裝度量代理,對運(yùn)行進(jìn)程的完整性進(jìn)行驗(yàn)證,但將度量軟件與被度量程序置于同一系統(tǒng),安全性較差;同時(shí),若要度量多個(gè)目標(biāo)虛擬機(jī),則需在每個(gè)虛擬機(jī)中插入度量模塊,增加了管理的復(fù)雜性。針對以上缺陷,本文設(shè)計(jì)的VMPMS采用無代理方式,將度量流程置于VMM層,利用其高特權(quán)級提升系統(tǒng)的安全性;同時(shí)每一臺物理機(jī)只需部署一套度量系統(tǒng),減少了資源消耗;此外,VMPMS基于事件捕獲機(jī)制,可實(shí)現(xiàn)對運(yùn)行進(jìn)程完整性的驗(yàn)證。
KVM是基于硬件輔助虛擬化的一個(gè)Linux內(nèi)核模塊,其實(shí)現(xiàn)需要Intel VT(Virtualization Technology)或AMD SVM(Secure Virtual Machine)技術(shù)的支持[20]。KVM運(yùn)行在Root模式,負(fù)責(zé)管理虛擬機(jī)內(nèi)存及CPU,處理虛擬機(jī)因異?;驁?zhí)行特權(quán)指令引發(fā)的VM Exit事件。同時(shí),KVM利用VMCS(Virtual Machine Control Structure)[21]保存宿主機(jī)與虛擬機(jī)切換過程中的硬件上下文環(huán)境,并可以指定引發(fā)VM Exit的事件。VMPMS基于虛擬機(jī)中的系統(tǒng)事件,主動觸發(fā)虛擬機(jī)進(jìn)程代碼段的度量,其總體架構(gòu)如圖1所示。
圖1 VMPMS架構(gòu)Fig. 1 Architecture of VMPMS
VMPMS分為三個(gè)模塊:捕獲模塊、語義重構(gòu)模塊和分頁動態(tài)度量模塊。捕獲模塊負(fù)責(zé)捕獲虛擬機(jī)進(jìn)程的系統(tǒng)調(diào)用事件。語義重構(gòu)模塊采用VMI獲取虛擬機(jī)進(jìn)程信息,如進(jìn)程名稱、進(jìn)程代碼段起始地址與結(jié)束地址等。分頁動態(tài)度量模塊根據(jù)語義重構(gòu)模塊傳遞的進(jìn)程信息,以虛擬機(jī)物理頁大小為單位對進(jìn)程代碼段進(jìn)行劃分,對已載入物理內(nèi)存的代碼頁進(jìn)行度量,并根據(jù)基值庫中的基值驗(yàn)證其完整性,將對比結(jié)果寫入日志;對于尚未載入物理內(nèi)存的代碼頁,暫時(shí)忽略其度量,待其被載入物理內(nèi)存之后再度量?;祹毂4嫣摂M機(jī)進(jìn)程代碼各頁的度量值,可以文件、數(shù)據(jù)庫等形式存在,日志則用于記錄度量模塊的代碼頁度量信息與基值庫中基值信息的對比結(jié)果。
捕獲模塊捕獲虛擬機(jī)中的系統(tǒng)事件,根據(jù)其引發(fā)的虛擬機(jī)寄存器等狀態(tài)的變化獲取底層語義。系統(tǒng)事件為虛擬機(jī)系統(tǒng)中能引發(fā)虛擬機(jī)退出的進(jìn)程行為,本文采用攔截虛擬機(jī)中進(jìn)程的系統(tǒng)調(diào)用,實(shí)現(xiàn)在VMM層對進(jìn)程行為的捕獲。
在X86架構(gòu)下,當(dāng)操作系統(tǒng)中的進(jìn)程需要執(zhí)行系統(tǒng)調(diào)用時(shí),其首先將系統(tǒng)調(diào)用號保存至EAX寄存器,之后通過系統(tǒng)調(diào)用陷入指令完成用戶態(tài)到內(nèi)核態(tài)的切換和進(jìn)程上下文的保存。以32位操作系統(tǒng)為例,當(dāng)其使用sysenter指令執(zhí)行系統(tǒng)調(diào)用時(shí),系統(tǒng)會讀取存放在MSR_IA32_SYSENTER_EIP寄存器中的系統(tǒng)調(diào)用入口函數(shù)地址,據(jù)此VMPMS實(shí)現(xiàn)了基于MSR_IA32_SYSENTER_EIP寄存器的虛擬機(jī)系統(tǒng)調(diào)用攔截機(jī)制,其原理如圖2。
在虛擬機(jī)啟動加載內(nèi)核鏡像完畢后,VMPMS在VMM層將MSR_IA32_SYSENTER_EIP寄存器的值初始化為一個(gè)非法地址,并將原地址保存。虛擬機(jī)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時(shí),將由于訪問非法地址引發(fā)page fault異常,產(chǎn)生VM Exit陷入至VMM層觸發(fā)其處理流程。VMPMS讀取虛擬機(jī)退出原因,若其因page fault異常退出,則判斷當(dāng)前虛擬機(jī)EIP寄存器的值是否為初始化的非法地址,若是則說明虛擬機(jī)因系統(tǒng)調(diào)用被攔截而退出,VMPMS進(jìn)而開啟對當(dāng)前進(jìn)程的度量流程,度量完畢后將被截獲的系統(tǒng)調(diào)用入口函數(shù)地址裝入虛擬機(jī)EIP寄存器,執(zhí)行VM Entry恢復(fù)虛擬機(jī)系統(tǒng)調(diào)用正常執(zhí)行流程。對于不需要處理的page fault陷入則注入虛擬機(jī)中按照原有流程正常執(zhí)行,避免額外的性能損耗。
圖2 虛擬機(jī)系統(tǒng)調(diào)用截獲原理Fig. 2 Interception principle of virtual machine system call
在KVM平臺上,虛擬機(jī)內(nèi)部產(chǎn)生的page fault異常默認(rèn)由虛擬機(jī)內(nèi)核自身處理,不會產(chǎn)生VM Exit陷入至KVM中,故需設(shè)置VMCS 中EXCEPTION_BITMAP字段,使虛擬機(jī)的page fault可引發(fā)VM Exit。Intel官方定義的page fault有五種[22]:存在位異常、讀寫異常、模式異常、保留位異常及取指令異常。內(nèi)核在處理缺頁異常之前,CPU控制單元將產(chǎn)生一個(gè)硬件錯(cuò)誤碼(Hardware Error Code)并壓入到內(nèi)核態(tài)堆棧中,引發(fā)缺頁異常的原因不同,硬件錯(cuò)誤碼也不同,其保存在缺頁錯(cuò)誤碼(Page Fault Error Code, PFEC)字段中。只有當(dāng)PFEC中的硬件錯(cuò)誤碼滿足式(1)的關(guān)系時(shí),虛擬機(jī)中產(chǎn)生的page fault才會引發(fā)VM Exit。
PFEC & PFEC_MASK=PFEC_MATCH
(1)
本文通過對缺頁錯(cuò)誤錯(cuò)誤碼掩碼域(Page Fault Error Code Mask, PFEC_MASK)和缺頁錯(cuò)誤錯(cuò)誤碼匹配域(Page Fault Error Code Match, PFEC_MATCH)兩個(gè)字段進(jìn)行設(shè)置,可讓虛擬機(jī)僅在發(fā)生取指令異常時(shí)陷入至VMM中,對缺頁異常進(jìn)行過濾。
VMM位于虛擬機(jī)底層,具有更高的權(quán)限,能獲取目標(biāo)虛擬機(jī)內(nèi)存中的二進(jìn)制數(shù)據(jù)。但兩者存在語義鴻溝問題,VMM無法得知這些數(shù)據(jù)的具體含義,語義重構(gòu)模塊利用捕獲模塊截獲的虛擬機(jī)底層語義,結(jié)合內(nèi)核數(shù)據(jù)結(jié)構(gòu)得出高級語義。文獻(xiàn)[23]中的vMon結(jié)合虛擬機(jī)操作系統(tǒng)內(nèi)核源碼和硬件虛擬化技術(shù),可對多種版本虛擬機(jī)進(jìn)程相關(guān)語義信息進(jìn)行重構(gòu),但vMon在無法獲取虛擬機(jī)內(nèi)核版本或內(nèi)核源碼的情況下作用有限,且分析復(fù)雜內(nèi)核源碼的工作量很大。本文實(shí)現(xiàn)了一種基于相對地址偏移的語義重構(gòu)方法,利用測試模塊獲取進(jìn)程描述符與其內(nèi)部屬性的相對地址偏移,可靈活地獲取虛擬機(jī)進(jìn)程描述符中的信息,對vMon的方法進(jìn)行了改進(jìn)。
本文在目標(biāo)虛擬機(jī)中實(shí)現(xiàn)測試模塊,由于進(jìn)程描述符中的元素在內(nèi)存中是連續(xù)存放的,元素之間的相對地址偏移量保持不變,故獲取進(jìn)程描述符地址與其內(nèi)部屬性地址的差值即為相對地址偏移量,該方法僅需運(yùn)行一次即可得到相關(guān)偏移量,具有通用性,可兼容多種虛擬機(jī)內(nèi)核版本。
以獲取進(jìn)程描述符中屬性pid為例,原理如圖3。Linux操作系統(tǒng)為每一個(gè)CPU準(zhǔn)備了一個(gè)任務(wù)狀態(tài)段(Task State Segment, TSS),任務(wù)寄存器(Task Register, TR)用于保存其地址。操作系統(tǒng)發(fā)生進(jìn)程調(diào)度時(shí),內(nèi)核將當(dāng)前進(jìn)程的內(nèi)核棧指針保存在TSS的esp0域中。故獲取虛擬機(jī)TR寄存器中的值,進(jìn)一步得到tss.esp0,即當(dāng)前進(jìn)程內(nèi)核棧棧頂單元地址,與GUEST_ESP_TO_THREAD進(jìn)行與運(yùn)算后得到thread_info結(jié)構(gòu)體的首地址,其task字段指向進(jìn)程描述符;得到進(jìn)程描述符地址后,結(jié)合測試模塊所得的偏移量,由式(2)即可得到屬性pid的地址,同理可獲取其他屬性的地址及內(nèi)容。
TaskAddr+offset=MemAddr
(2)
其中:TaskAddr為進(jìn)程描述符基地址,offset表示元素與基地址的偏移量,MemAddr表示元素地址。
圖3 Linux環(huán)境下語義重構(gòu)原理Fig. 3 Principle of semantic reconstruction in Linux environment
在操作系統(tǒng)中,進(jìn)程利用頁表完成虛擬地址到物理地址的映射和轉(zhuǎn)換。在開啟分頁機(jī)制的情況下,操作系統(tǒng)通過“按需加載”的方式以物理頁為單位分配物理內(nèi)存。在物理內(nèi)存資源緊張時(shí),操作系統(tǒng)會將一部分物理頁面的內(nèi)容寫入到磁盤,因此在進(jìn)程運(yùn)行的某一時(shí)刻,進(jìn)程的所有代碼頁并不一定全部載入物理內(nèi)存中,還可能存在于磁盤文件或交換分區(qū)中。此外,由內(nèi)存虛擬化[24],客戶機(jī)操作系統(tǒng)所見為虛擬的客戶機(jī)物理地址空間,為了正確地訪問內(nèi)存,需要將客戶機(jī)虛擬地址(Guest Virtual Address, GVA)轉(zhuǎn)換成宿主機(jī)物理地址(Host Physical Address, HPA),其映射過程如圖4所示。GVA到客戶機(jī)物理地址(Guest Physical Address, GPA)的轉(zhuǎn)換由客戶機(jī)頁表完成,支持?jǐn)U展頁表(Extended Page Table, EPT)機(jī)制時(shí),GPA到宿主機(jī)虛擬地址(Host Virtual Machine, HVA)的映射是線性一一對應(yīng)的,宿主機(jī)頁表完成HVA到HPA的轉(zhuǎn)換,可見在虛擬機(jī)中連續(xù)存放的內(nèi)存地址映射至宿主機(jī)中則不一定連續(xù)。若要在VMM層一次獲取虛擬機(jī)完整代碼段再度量,則需獲取在內(nèi)存與不在內(nèi)存的所有代碼頁,并按其順序重新“拼湊”,其實(shí)現(xiàn)十分復(fù)雜且內(nèi)存消耗巨大。
圖4 GVA到HPA的映射過程Fig. 4 Mapping process from GVA to HPA
基于此,本文提出分頁式度量的方法在VMM層驗(yàn)證虛擬機(jī)進(jìn)程代碼段的完整性。VMPMS攔截虛擬機(jī)進(jìn)程系統(tǒng)調(diào)用,使其產(chǎn)生page fault異常陷入至KVM,經(jīng)過語義重構(gòu)得到當(dāng)前運(yùn)行進(jìn)程代碼段的起始地址與結(jié)束地址,以虛擬機(jī)物理頁大小為單位對代碼段進(jìn)行劃分,按照代碼頁順序依次進(jìn)行度量操作。對某個(gè)特定的代碼頁,KVM首先判斷其是否已載入物理內(nèi)存中,若是則采用SHA-1哈希算法對其進(jìn)行度量操作,并將度量值與基值庫中該頁的基值進(jìn)行對比,將結(jié)果寫入日志文件中;若該代碼頁尚未載入物理內(nèi)存,說明在此度量時(shí)刻虛擬機(jī)尚未執(zhí)行該代碼頁,則暫時(shí)忽略其度量,待其載入內(nèi)存中后再度量。VMPMS捕獲進(jìn)程系統(tǒng)調(diào)用作為度量流程的觸發(fā)點(diǎn),使度量時(shí)機(jī)與進(jìn)程執(zhí)行時(shí)機(jī)相關(guān),在KVM中實(shí)現(xiàn)對虛擬機(jī)進(jìn)程代碼段的動態(tài)度量。
基值是進(jìn)程在“純凈”狀態(tài)下得到的代碼段各頁的度量值,存儲于基值庫,用于對比虛擬機(jī)進(jìn)程代碼段動態(tài)度量值,驗(yàn)證其完整性。本文采用在VMM層捕獲虛擬機(jī)進(jìn)程代碼頁第一次載入內(nèi)存時(shí)刻的度量值作為基值,動態(tài)地完成基值庫的建立,并利用VMM層的強(qiáng)隔離性與高特權(quán)級提升基值庫的安全性。
為驗(yàn)證VMPMS對虛擬機(jī)進(jìn)程代碼完整性度量的有效性,并評估其對目標(biāo)進(jìn)程和虛擬機(jī)操作系統(tǒng)產(chǎn)生的性能消耗,進(jìn)行相關(guān)測試并與現(xiàn)有部分完整性度量方案作對比。
實(shí)驗(yàn)測試環(huán)境如下:宿主機(jī)操作系統(tǒng)為64位Ubuntu- 12.04,內(nèi)核版本為Linux- 3.10.1,KVM版本為kvm- kmod- 3.10.1,QEMU版本為Qemu- 2.3.0;宿主機(jī)的CPU型號為Intel Core i3- 4160,主頻為3.60 GHz,物理內(nèi)存為4 GB,支持硬件輔助虛擬化。虛擬機(jī)為32位CentOS 6.5操作系統(tǒng),內(nèi)核版本為Linux- 2.6.32.24。
功能測試分為兩個(gè)步驟:1)對正常的虛擬機(jī)進(jìn)程代碼段進(jìn)行度量;2)通過修改源代碼的方式模擬針對進(jìn)程的攻擊,并度量修改后的進(jìn)程代碼段,以驗(yàn)證其完整性是否被破壞。VMPMS可對所有虛擬機(jī)進(jìn)程進(jìn)行度量,為方便說明,本文在虛擬機(jī)中部署版本為2.2.15的Apache服務(wù)器軟件,將其作為度量對象。
Apache服務(wù)進(jìn)程通過sysenter指令執(zhí)行系統(tǒng)調(diào)用引發(fā)page fault異常陷入KVM后,KVM獲取其名稱及代碼段地址等,采用分頁式度量的方法驗(yàn)證其代碼段完整性,Apache服務(wù)進(jìn)程正常運(yùn)行狀態(tài)下,其度量結(jié)果如圖5所示。
圖5 正常進(jìn)程度量結(jié)果Fig. 5 Measurement result of normal process
通過在Apache服務(wù)進(jìn)程源代碼的入口函數(shù)添加一行輸出代碼,模擬進(jìn)程代碼段篡改行為。修改后啟動Apache服務(wù)器進(jìn)程并對其進(jìn)行度量,其結(jié)果如圖6所示。
實(shí)驗(yàn)選取的httpd進(jìn)程代碼段較長,故此處僅截取部分代碼頁度量結(jié)果。對比圖5、6可見,進(jìn)程運(yùn)行過程中并非所有代碼頁均已載入物理內(nèi)存,如第108、109頁;攻擊前后進(jìn)程名稱和代碼語義信息并無明顯變化,但代碼頁的度量值發(fā)生了改變,如第105、106、107、110頁。實(shí)驗(yàn)結(jié)果表明,VMPMS能夠從虛擬機(jī)外部判斷進(jìn)程代碼頁是否載入物理內(nèi)存,并可度量已載入內(nèi)存的代碼頁,驗(yàn)證虛擬機(jī)進(jìn)程代碼段的完整性。
圖6 模擬攻擊后進(jìn)程度量結(jié)果Fig. 6 Process measurement result after simulation attack
本節(jié)分別通過ApacheBench和Unixbench測試工具測試VMPMS對目標(biāo)進(jìn)程及對虛擬機(jī)操作系統(tǒng)整體性能的影響。利用ApacheBench模擬了請求數(shù)量為3 000,并發(fā)數(shù)量為100的情況下VMPMS對Apache服務(wù)器的影響,其結(jié)果如表1所示。為更好地分析性能損耗來源,本節(jié)同時(shí)測試了開啟事件捕獲、關(guān)閉哈希運(yùn)算的性能消耗。由表1可知,在關(guān)閉哈希運(yùn)算的情況下,每秒Apache服務(wù)器的處理請求數(shù)下降24%左右。開啟捕獲及哈希運(yùn)算之后,其平均并發(fā)請求時(shí)間為初始情況的2倍,單位時(shí)間處理請求數(shù)降低了近一半。對比可知,攔截系統(tǒng)調(diào)用會帶來一定的性能損耗,但主要的性能損耗源于哈希運(yùn)算的過程,此為哈希算法本身固有的屬性,為實(shí)時(shí)地驗(yàn)證代碼的完整性,這樣的性能損耗可以接受。
表1 ApacheBench測試結(jié)果Tab. 1 ApacheBench test result
除了測試VMPMS對所度量的Apache服務(wù)器的性能損耗,本節(jié)還利用版本為5.1.2的基準(zhǔn)測試工具UnixBench測試了其對虛擬機(jī)系統(tǒng)整體性能的影響,其測試結(jié)果為指數(shù)值,如表2所示。相比于初始環(huán)境,開啟VMPMS后浮點(diǎn)運(yùn)算效率測試項(xiàng)性能損耗幾乎為0,excel函數(shù)調(diào)用測試項(xiàng)和shell腳本執(zhí)行效率測試項(xiàng)性能損耗提高近30%,文件數(shù)據(jù)傳輸速率測試項(xiàng)、進(jìn)程管道通信速率測試項(xiàng)和進(jìn)出系統(tǒng)內(nèi)核速率測試項(xiàng)性能消耗增加明顯。由于VMPMS設(shè)置攔截系統(tǒng)調(diào)用作為度量觸發(fā)點(diǎn),故系統(tǒng)調(diào)用相關(guān)操作性能消耗會相應(yīng)提高;且設(shè)置度量點(diǎn)后,虛擬機(jī)進(jìn)程的系統(tǒng)調(diào)用會引發(fā)缺頁異常陷入至KVM,故虛擬機(jī)與宿主機(jī)的上下文切換也較為頻繁;此外,選取的度量進(jìn)程代碼段較大,度量過程中涉及從基值文件中讀取基線值的過程,故文件相關(guān)的操作性能損耗也會增加。
測試結(jié)果表明,VMPMS會給目標(biāo)進(jìn)程及虛擬機(jī)系統(tǒng)帶來一定的性能損耗;在VMM層驗(yàn)證虛擬機(jī)進(jìn)程代碼段的完整性,需在KVM中設(shè)置相應(yīng)度量點(diǎn),因此會帶來如上下文切換、文件操作等的性能損耗。為提升驗(yàn)證進(jìn)程代碼段完整性的安全性與可行性,此類性能損耗可以接受。
VMPMS與現(xiàn)有虛擬機(jī)進(jìn)程完整性度量方案的對比如表3所示。從表3可以看出,這三種方法均可檢測虛擬機(jī)中運(yùn)行進(jìn)程代碼段的完整性,但與文獻(xiàn)[10]的方案相比,VMPMS無需在客戶機(jī)中添加代理模塊,提高了系統(tǒng)的安全性,在度量多個(gè)虛擬機(jī)時(shí)無需重復(fù)部署相關(guān)代理;而與IVirt[12]相比,VMPMS則不需要將所度量的進(jìn)程代碼段全部載入內(nèi)存,這樣在度量代碼段較長的進(jìn)程時(shí),VMPMS不會給內(nèi)存資源帶來較大的負(fù)擔(dān)。由對比可知,VMPMS具有更強(qiáng)的適用性與靈活性。
表2 UnixBench測試結(jié)果Tab. 2 UnixBench test result
表3 VMPMS與現(xiàn)有方案對比Tab. 3 Comparison between VMPMS and existing methods
為解決虛擬機(jī)進(jìn)程物理內(nèi)存不連續(xù)且動態(tài)換入換出導(dǎo)致的難以在VMM層度量虛擬機(jī)進(jìn)程完整代碼段的問題,本文提出了分頁式度量方法在VMM層透明實(shí)時(shí)地驗(yàn)證虛擬機(jī)中運(yùn)行進(jìn)程代碼段的完整性;此外,實(shí)現(xiàn)了基于相對地址偏移的方法獲取虛擬機(jī)進(jìn)程信息,解決了不同版本虛擬機(jī)之間的語義差異。實(shí)驗(yàn)結(jié)果表明,在功能上本文實(shí)現(xiàn)的VMPMS能夠在VMM層有效驗(yàn)證被度量進(jìn)程代碼是否遭受篡改,在性能上VMPMS給度量進(jìn)程及虛擬機(jī)系統(tǒng)帶來的性能損耗在可接受范圍內(nèi)。同時(shí)本文也存在一些不足:1)本文截獲進(jìn)程的系統(tǒng)調(diào)用行為作為度量流程的觸發(fā)點(diǎn),可將度量時(shí)機(jī)與進(jìn)程行為相關(guān),實(shí)現(xiàn)對虛擬機(jī)進(jìn)程的動態(tài)度量,但此種方法會帶來一定的性能損耗;2)本文目前針對的虛擬機(jī)操作系統(tǒng)為Linux,對Windows尚未涉及。下一步將研究在實(shí)現(xiàn)代碼完整性驗(yàn)證的同時(shí),降低VMPMS帶來的性能損耗;并針對不同虛擬機(jī)操作系統(tǒng)進(jìn)行開發(fā),進(jìn)一步提高VMPMS的通用性。
參考文獻(xiàn):
[1]王惠蒞,楊晨,楊建軍.美國NIST云計(jì)算安全標(biāo)準(zhǔn)跟蹤及研究[J].信息技術(shù)與標(biāo)準(zhǔn)化,2012(6):51-54. (WANG H L, YANG C, YANG J J. Research on clouds computing security standards of NIST [J]. Information Technology & Standardization, 2012(6): 51-54.)
[2]張瑞,劉威.2015年12月計(jì)算機(jī)病毒疫情分析[J].信息網(wǎng)絡(luò)安全,2016(2):74. (ZHANG R, LIU W. Analysis of epidemic situation of computer virus in December 2015[J]. Netinfo Security, 2016(2): 74.)
[3]陳興蜀,葛龍,羅永剛,等.云計(jì)算服務(wù)持續(xù)監(jiān)管研究[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2016,2(10):2-3. (CHEN X S, GE L, LUO Y G, et al. Research on continuous monitoring of cloud computing service [J]. Chinese Journal of Network and Information Security, 2016, 2(10): 2-3.)
[4]徐江峰,邵向陽.基于HOOK API技術(shù)的進(jìn)程監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(4):1330-1332. (XU J F, SHAO X Y. Design and realization of process-monitoring system based on HOOK API technology [J]. Computer Engineering and Design, 2011, 32(4): 1330-1332.)
[5]崔競松,張雅娜,郭遲,等.支持多種虛擬化技術(shù)的進(jìn)程非代理監(jiān)控方法[J]. 華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,42(11):122-124. (CUI J S, ZHANG Y N, GUO C, et al. Agent-free processes monitoring method supporting various virtualization technologies [J]. Journal of Huazhong University of Science and Technology (Nature Science Edition), 2014, 42(11): 122-124.)
[6]李博,沃天宇,胡春明,等.基于VMM的操作系統(tǒng)隱藏對象關(guān)聯(lián)檢測技術(shù)[J].軟件學(xué)報(bào),2013, 24(2):405-420. (LI B, WO T Y, HU C M, et al. Hidden OS objects correlated detection technology based on VMM [J]. Journal of Software, 2013, 24(2): 405-420.)
[7]張磊,陳興蜀,任益,等.一種基于VMM的內(nèi)核級Rootkit檢測技術(shù)[J].信息網(wǎng)絡(luò)安全,2015(4):57-59. (ZHANG L, CHEN X S, REN Y, et al. Kernel-level Rootkit detection technology based on VMM [J]. Netinfo Security, 2015(4): 57-59.)
[8]HWANG T, SHIN Y, SON K, et al. Design of a hypervisor-based rootkit detection method for virtualized systems in cloud computing environments [C]// Proceedings of the 2013 AASRI Winter International Conference on Engineering and Technology. Amsterdam: Atlantis Press, 2013:27-33.
[9]GARFINKEL T, ROSENBLUM M. A virtual machine introspection based architecture for intrusion detection [C]// Proceedings of the Internet Society’s 2003 Symposium on Network and Distributed Systems Security Symposium. [S.l.]: Internet Society, 2003: 253-285.
[10]駱源,毛亞強(qiáng),廖振壹.一種用于虛擬機(jī)上的混合監(jiān)控度量方法及系統(tǒng):中國,CN104714877A [P]. 2015- 06- 17.
[11]孫紹鋼,李曉勇.一種基于虛擬化技術(shù)的惡意代碼行為檢測方法:中國,CN102682229A [P]. 2012- 09- 19.
[12]林杰,劉川意,方濱興.IVirt:基于虛擬機(jī)自省的運(yùn)行環(huán)境完整性度量機(jī)制[J].計(jì)算機(jī)學(xué)報(bào),2015,38(1):191-203. (LIN J, LIU C Y, FANG B X. IVirt: runtime environment integrity measurement mechanism based on virtual machine introspection [J]. Chinese Journal of Computers, 2015, 38(1): 191-203.)
[13]AZAB A M, NING P, SEZER E C, et al. HIMA: a hypervisor-based integrity measurement agent [C]// ACSAC’09: Proceedings of the 2009 IEEE Annual Computer Security Applications Conference. Piscataway, NJ: IEEE, 2009: 461-470.
[14]GARFINKEL T, PFAFF B, CHOW J, et al. Terra: a virtual machine-based platform for trusted computing [C]// SOSP’03: Proceedings of the 19th ACM Symposium on Operating Systems Principles. New York: ACM, 2003: 193-206.
[15]陳興蜀,李輝,張磊,等.基于Xen的自下而上調(diào)用的設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技大學(xué)學(xué)報(bào),2014,43(6):881-884. (CHEN X S, LI H, ZHANG L, et al. The design and implement of Xen-based upcall [J]. Journal of University of Electronic Science and Technology of China, 2014, 43(6): 881-884.)
[16]SAILER R, ZHANG X, JAEGER T, et al. Design and implementation of a TCG-based integrity measurement architecture [C]// SSYM’04: Proceedings of the 13th Conference on USENIX Security Symposium. Berkeley, CA: USENIX Association, 2004, 13: 223-238.
[17]JAEGER T, SAILER R, SHANKAR U. PRIMA: Policy-Reduced Integrity Measurement Architecture [C]// SACMAT 2006: Proceedings of the 11th ACM Symposium on Access Control Models and Technologies. New York: ACM, 2006: 19-28.
[18]HUH J H, MONTANARI M, DAGIT D, et al. An empirical study on the software integrity of virtual appliances: are you really getting what you paid for? [C]// ASIA CCS’13: Proceedings of the 2013 ACM SIGSAC Symposium on Information, Computer and Communications Security. New York: ACM, 2013: 231-242.
[19]STELTE B, KOCH R, ULLMANN M. Towards integrity measurement in virtualized environments — a hypervisor based sensory integrity measurement architecture (SIMA) [C]// HST ’10: Proceedings of the 2010 IEEE International Conference on Technologies for Homeland Security. Piscataway, NJ: IEEE, 2010: 106-112.
[20]ALI S. Virtualization with KVM [M]// Practical Linux Infrastructure. Berkeley, CA: Apress, 2015: 53-80.
[21]Intel. Intel 64 and IA- 32 architectures software developer’s manual [EB/OL]. [2017- 05- 06]. http://www.ti.uni-bielefeld.de/html/teaching/WS1314/techinf1/64-ia-32-architectures-software-developers-manual.pdf.
[22]鄧志.處理器虛擬化[M].北京:電子工業(yè)出版社,2014:200-201. (DENG Z. Processor virtualization [M]. Beijing: Publishing House of Electronics Industry, 2014: 200-201.)
[23]LI N, LI B, LI J, et al. vMON: An efficient out-of-VM process monitor for virtual machines [C]// HPCC_EUC 2013: Proceedings of the 2013 IEEE 10th International Conference on High Performance Computing and Communications & 2013 IEEE International Conference on Embedded and Ubiquitous Computing. Piscataway, NJ: IEEE, 2013: 1366-1373.
[24]英特爾開源軟件技術(shù)中心,復(fù)旦大學(xué)并行處理研究所. 系統(tǒng)虛擬化——原理與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2009:51-54. (Intel Open Source Technology Center,Parallel Processing Institution of Fudan University . System Virtualization: Principles and Implementation [M]. Beijing: Tsinghua University Press, 2009: 51-54.)