顧佳男,鄭蓓蕾,翁楚良
華東師范大學(xué) 數(shù)據(jù)科學(xué)與工程學(xué)院,上海 200062
近年來,隨著人工智能、物聯(lián)網(wǎng)等新興領(lǐng)域的成熟,以及多核/眾核、GPGPU(general-purpose computing on graphics processing units)、NVM(non-volatile memory)存儲(chǔ)介質(zhì)、RDMA(remote direct memory access)等新型硬件的發(fā)展,多租戶云平臺(tái)的作用也在這個(gè)大數(shù)據(jù)時(shí)代展現(xiàn)得淋漓盡致。多租戶云平臺(tái)針對(duì)用戶的服務(wù)由原先的應(yīng)用托管、內(nèi)容交付、電子商務(wù)、網(wǎng)絡(luò)托管等,加入了海量數(shù)據(jù)存儲(chǔ)、計(jì)算等重要的大數(shù)據(jù)應(yīng)用場(chǎng)景。以虛擬化技術(shù)為基礎(chǔ)搭建的多租戶云平臺(tái),例如亞馬遜的EC2[1]、微軟的Azure[2],相比于自主構(gòu)建的純硬件環(huán)境,在計(jì)算資源和存儲(chǔ)資源的廉價(jià)性、實(shí)用性以及擴(kuò)展性等方面有著諸多的優(yōu)勢(shì)。這些優(yōu)勢(shì)使得各類多租戶云平臺(tái)在越來越多的大數(shù)據(jù)應(yīng)用領(lǐng)域顯得有競(jìng)爭(zhēng)力。如果將數(shù)據(jù)比喻成當(dāng)今互聯(lián)網(wǎng)行業(yè)的一個(gè)重要能源,那么云平臺(tái)就是驅(qū)動(dòng)這個(gè)能源的重要發(fā)動(dòng)機(jī)之一。
Hypervisor是虛擬化技術(shù)中最重要的軟件層次,也是多租戶云平臺(tái)底層能夠有效和安全地驅(qū)動(dòng)數(shù)據(jù)能源的關(guān)鍵組件之一。在系統(tǒng)虛擬化技術(shù)中,Hypervisor扮演著為客戶虛擬機(jī)映射真實(shí)物理資源的角色,同時(shí)它也需要為不同客戶虛擬機(jī)之間的物理資源實(shí)現(xiàn)共享和隔離。因此,Hypervisor的功能與效率直接決定系統(tǒng)虛擬化技術(shù)的功能與效率,它的安全和可靠更是虛擬化技術(shù)的基礎(chǔ)?,F(xiàn)有很多工作[3-19]就是基于可信Hypervisor來構(gòu)建針對(duì)客戶虛擬機(jī)的保護(hù)機(jī)制,以保證其內(nèi)核和上層應(yīng)用的安全。
但是,和操作系統(tǒng)內(nèi)核一樣,Hypervisor也面臨著來自漏洞和惡意攻擊的威脅。一個(gè)完整的Hypervisor就如同操作系統(tǒng)內(nèi)核一般,其代碼量也是很龐大的。例如一切以精簡出發(fā)設(shè)計(jì)的開源虛擬化技術(shù)Xen[20],其4.8版本的Hypervisor也由 近30萬行的代碼構(gòu)成,更不用說代碼量更龐大的KVM(kernel-based virtual machine)[21]、VMware[22]等其他虛擬化技術(shù)。另外,NVD(National Vulnerability Database)[23]數(shù)據(jù)庫中存有很多針對(duì)Xen、KVM和VMware等虛擬化技術(shù)的漏洞報(bào)告,而文獻(xiàn)[24-25]也全面綜述了Hypervisor中存在的安全問題。因此,Hypervisor的龐大攻擊面以及其在虛擬化技術(shù)中的核心地位,使得任意可行的攻擊[26-28]對(duì)整個(gè)多租戶云平臺(tái)的安全造成極大的威脅。
綜上所述,設(shè)計(jì)和實(shí)現(xiàn)面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制迫在眉睫。現(xiàn)有一系列的研究工作運(yùn)用不同的思想和方法來構(gòu)建面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制。本文將對(duì)這些研究工作進(jìn)行梳理,并分析該領(lǐng)域存在的問題和挑戰(zhàn)以及研究趨勢(shì),從而為未來虛擬化技術(shù)在多租戶云平臺(tái)中安全運(yùn)用的研究提供有價(jià)值的參考。與現(xiàn)有綜述[29]不同的是,本文從面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制的構(gòu)建角度出發(fā),分別深入梳理和分析現(xiàn)有的完整性檢測(cè)機(jī)制、防御機(jī)制以及針對(duì)非可信Hypervisor的虛擬機(jī)隔離機(jī)制。
本章將介紹構(gòu)建面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制的可行性與挑戰(zhàn),并對(duì)現(xiàn)有保護(hù)機(jī)制的構(gòu)建進(jìn)行分類。
典型虛擬化技術(shù)中的Hypervisor運(yùn)行在Ring0層級(jí),同時(shí)它擁有最高執(zhí)行權(quán)限。而Hypervisor的保護(hù)機(jī)制運(yùn)行的不同層級(jí)選擇都會(huì)面臨相應(yīng)挑戰(zhàn),這些挑戰(zhàn)也是決定保護(hù)機(jī)制是否有效的重要因素。
一般來說,在計(jì)算機(jī)系統(tǒng)中,處在越低層級(jí)的管理系統(tǒng)意味著可以對(duì)運(yùn)行在它上層的應(yīng)用或是系統(tǒng)有著更多的控制權(quán),即執(zhí)行權(quán)限越高。不同的執(zhí)行權(quán)限分別對(duì)應(yīng)CPU(central processing unit)執(zhí)行的Ring0、Ring1、Ring2、Ring3權(quán)限。因此,按照這樣的思路,保護(hù)機(jī)制如果有Ring0的執(zhí)行權(quán)限,而Hypervisor保有Ring0權(quán)限或者置于Ring1權(quán)限,此時(shí)擁有Ring0權(quán)限的保護(hù)機(jī)制則可以針對(duì)Hypervisor來全面地執(zhí)行保護(hù)操作。但是,若將保護(hù)機(jī)制置于Ring0權(quán)限,無論Hypervisor是置于Ring0權(quán)限或是Ring1權(quán)限,其本身對(duì)虛擬化系統(tǒng)帶來的修改相對(duì)于添加一個(gè)上層應(yīng)用來說是比較大的。那么是否能將保護(hù)機(jī)制直接置于Ring1權(quán)限或者Ring3權(quán)限,而對(duì)Hypervisor不進(jìn)行任何修改呢?文獻(xiàn)[30]論述了此思路的可行性。其基本原理在于,在系統(tǒng)虛擬化中,Hypervisor的存在對(duì)上層應(yīng)用并不是完全透明的。系統(tǒng)虛擬化與裸機(jī)之間是會(huì)表現(xiàn)出邏輯差異、資源差異和時(shí)間差異的,并且這些差異能夠被上層應(yīng)用間接感知。通過對(duì)底層的感知,上層的保護(hù)機(jī)制可以做到對(duì)Hypervisor的檢測(cè)和有針對(duì)性的防御。而上層的保護(hù)機(jī)制是否有效的關(guān)鍵問題在于,其是否能正確理解在Hypervisor中的惡意攻擊的基本邏輯和實(shí)際影響。
下面列出面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制所面臨的挑戰(zhàn):
第一,語義鴻溝。底層或者上層的保護(hù)機(jī)制在實(shí)際運(yùn)行中會(huì)遇到難以理解Hypervisor所做的映射、調(diào)度、隔離等任務(wù)操作的問題。
第二,避免引入新的攻擊面。保護(hù)機(jī)制的加入要注意不能過度地“入侵”Hypervisor的運(yùn)行,以避免新攻擊面的引入。
第三,確保保護(hù)機(jī)制本身的完整性。如果惡意Hypervisor感知到保護(hù)機(jī)制的存在,它可能有很多方式去繞過或者瓦解保護(hù)機(jī)制。例如,篡改保護(hù)機(jī)制的內(nèi)存、控制流以及任何有效跳轉(zhuǎn)。保護(hù)機(jī)制需要保證其本身的完整性,使得其運(yùn)行的過程中不受到惡意Hypervisor的影響。
第四,確保保護(hù)機(jī)制輸入和輸出的可信度。任何惡意的Hypervisor都有可能偽造保護(hù)機(jī)制的輸入或者輸出,以達(dá)到欺騙保護(hù)機(jī)制的目的。在這種情況下,即使保護(hù)機(jī)制本身運(yùn)行正常,如果其檢測(cè)或者防御的輸入和輸出沒有足夠的可信度,那么一切努力都將付之東流。
如圖1所示,根據(jù)面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制的研究現(xiàn)狀,可將不同類型和側(cè)重的保護(hù)機(jī)制進(jìn)行如下分類。第一類是構(gòu)建Hypervisor完整性檢測(cè)機(jī)制,其構(gòu)建方法有:基于快照、基于事件和基于遠(yuǎn)程驗(yàn)證。這類保護(hù)機(jī)制旨在檢測(cè)Hypervisor運(yùn)行中是否存在破壞其完整性的攻擊或漏洞。第二類是構(gòu)建Hypervisor防御機(jī)制,其構(gòu)建角度有:針對(duì)Hypervisor的控制流、指令仿真和精簡可信計(jì)算基(trusted computing base,TCB)。這類保護(hù)機(jī)制旨在提高Hypervisor自身抵御攻擊和漏洞的能力。第三類是構(gòu)建針對(duì)非可信Hypervisor的虛擬機(jī)隔離機(jī)制,其構(gòu)建方法有:基于嵌套虛擬化和基于加密技術(shù),其中加密技術(shù)又分為基于軟件和基于硬件的加密技術(shù)。這類保護(hù)機(jī)制旨在保證即使面對(duì)惡意的Hypervisor,客戶虛擬機(jī)依然能夠保有隱私和完整性。
Fig.1 Classification of protection mechanisms for untrusted Hypervisor in cloud圖1 面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制的分類
本章將梳理針對(duì)非可信Hypervisor的完整性檢測(cè)機(jī)制,其中包括基于快照、基于事件以及基于遠(yuǎn)程驗(yàn)證的完整性檢測(cè)機(jī)制。
基于快照的檢測(cè)是最常用的完整性衡量方式。完整性檢測(cè)機(jī)制通過分析其截獲的Hypervisor在內(nèi)存中的快照,來查找惡意攻擊的痕跡或者漏洞。
HyperCheck[31]借助x86的SMM(system management mode)來構(gòu)建基于快照的完整性檢測(cè)機(jī)制以實(shí)現(xiàn)針對(duì)非可信Hypervisor的保護(hù)。在SMM中,CPU的運(yùn)行會(huì)切換到一個(gè)單獨(dú)的SMRAM(system management random access memory)存儲(chǔ)器中的地址空間,并且當(dāng)前運(yùn)行的代碼的所有硬件上下文也都保存在SMRAM存儲(chǔ)器中。處于SMM模式中的CPU可以透明地執(zhí)行SMRAM存儲(chǔ)器中的代碼。SMRAM存儲(chǔ)器可以充當(dāng)可信的存儲(chǔ)空間,因?yàn)樗鼰o法被任何其他設(shè)備訪問。因此,只要SMRAM存儲(chǔ)器被正確設(shè)置后鎖定,即使是Hypervisor也不能干擾SMRAM存儲(chǔ)器中程序的執(zhí)行。借助SMM的上述特性,Hyper-Check針對(duì)Hypervisor的靜態(tài)數(shù)據(jù)結(jié)構(gòu)是否被攻擊進(jìn)行檢測(cè)。HyperCheck具體由三部分組成:物理內(nèi)存獲取模塊、分析模塊和CPU寄存器檢查模塊。物理內(nèi)存獲取模塊由網(wǎng)卡設(shè)備實(shí)現(xiàn),而網(wǎng)卡的驅(qū)動(dòng)程序和CPU寄存器檢查模塊一起放入可信的SMRAM中。CPU寄存器檢查模塊讀取CPU寄存器并驗(yàn)證其完整性。分析模塊是獨(dú)立于系統(tǒng)的安全模塊。物理內(nèi)存獲取模塊通過網(wǎng)卡與分析模塊交互,分析模塊檢查網(wǎng)卡發(fā)來的物理內(nèi)存的內(nèi)容并驗(yàn)證其是否安全。
上述HyperCheck的完整性檢測(cè)本身是由Hypervisor觸發(fā)的。檢測(cè)觸發(fā)的不透明性很有可能留下攻擊隱患,例如擦洗攻擊可以在HyperCheck觸發(fā)檢測(cè)之前隱藏自己的痕跡。HyperSentry[32]也用到了SMM來構(gòu)建基于快照的完整性檢測(cè)機(jī)制,并且還用到了IPMI(intelligent platform management interface)技術(shù)[33]進(jìn)一步構(gòu)建隱秘信道來實(shí)現(xiàn)檢測(cè)的觸發(fā)。IPMI是一種面向服務(wù)器的平臺(tái)管理接口,它直接實(shí)現(xiàn)在硬件和固件中。IPMI的關(guān)鍵特性在于其管理功能獨(dú)立于主處理器、BIOS(basic input output system)和任何系統(tǒng)軟件。因此,基于IPMI構(gòu)建的信道可以避免任何惡意Hypervisor等最高權(quán)限代碼的感知。IPMI能通過直接串接或局域網(wǎng)等方式向遠(yuǎn)程端計(jì)算機(jī)提交信息。系統(tǒng)管理員能使用IPMI消息去向目標(biāo)機(jī)器發(fā)出請(qǐng)求。HyperSentry正是利用IPMI技術(shù)的上述特性構(gòu)建了隱秘通道,如此一來避免了非可信Hypervisor對(duì)檢測(cè)觸發(fā)的感知,進(jìn)一步提高了完整性檢測(cè)機(jī)制的保護(hù)效果。具體來說,HyperSentry將完整性檢測(cè)代碼駐留在SMM的SMRAM存儲(chǔ)器中,SMRAM存儲(chǔ)器提供其基本代碼所需的保護(hù)。HyperSentry的隱秘通道使用IPMI和目標(biāo)平臺(tái)主板上的基板管理控制器遠(yuǎn)程觸發(fā)硬件SMI(system management interrupt)中斷,從而觸發(fā)SMM中對(duì)Hypervisor的代碼、數(shù)據(jù)和CPU狀態(tài)的完整性檢測(cè)。
但是,HyperSentry和HyperCheck中運(yùn)用的SMM,其安全性不能被視為理所當(dāng)然,因?yàn)镾MM的處理程序可以被惡意攻擊篡改[34-35]。
Copilot[36]使用專用的PCI(peripheral component interconnect)設(shè)備,即EBSA(Intel StrongARM SA-110/21285 evaluation board)[37]來監(jiān)控系統(tǒng)運(yùn)行時(shí)內(nèi)存快照的完整性。EBSA具有完整的總線主控功能,并支持與主機(jī)存儲(chǔ)器的DMA(direct memory access)通信。在EBSA的獨(dú)立模式下,Copilot將其配置為拒絕來自主機(jī)處理器的所有配置讀取和寫入,從而使其執(zhí)行路徑不受主機(jī)上的攻擊者的影響。在完整性檢測(cè)中,一方面通過哈希主機(jī)的內(nèi)核,Copilot可以檢測(cè)任何對(duì)主機(jī)內(nèi)核現(xiàn)有指令的惡意修改。另一方面,Copilot監(jiān)視惡意攻擊可能添加跳轉(zhuǎn)指令的位置或可能導(dǎo)致現(xiàn)有主機(jī)內(nèi)核執(zhí)行外部程序的函數(shù)指針。盡管Copilot利用了PCI設(shè)備的特性,既可不被惡意修改也可不被主機(jī)系統(tǒng)檢測(cè)到它的存在,但是它有兩個(gè)主要缺點(diǎn):首先,PCI設(shè)備上運(yùn)行的代碼與正在運(yùn)行的系統(tǒng)之間存在語義鴻溝,即PCI設(shè)備不能訪問CPU狀態(tài),例如CR3寄存器的狀態(tài)。而對(duì)CPU狀態(tài)的訪問對(duì)于細(xì)粒度的完整性檢測(cè)過程是必不可少的。其次,現(xiàn)有的攻擊[38]可以防止Copilot正確地訪問物理存儲(chǔ)器,使得PCI設(shè)備看到的物理內(nèi)存與CPU看到的不同,因此被篡改的物理內(nèi)存區(qū)域?qū)⒈浑[藏于檢測(cè)之外。
在3.1節(jié)中討論的HyperSentry、HyperCheck和Copilot的完整性保護(hù)機(jī)制所采用的方法都是基于快照的檢測(cè)方法。但是,基于快照的檢測(cè)通常存在固有的弱點(diǎn)。主要是因?yàn)樗鼈冎粰z查在一定間隔內(nèi)收集的快照,而忽略了間隔中的變化。攻擊者恰恰可以利用檢查間隔這一關(guān)鍵限制,即在此檢測(cè)間隔之內(nèi)完成攻擊并恢復(fù)攻擊前的Hypervisor狀態(tài),仿佛沒有攻擊過一樣。這類攻擊稱為擦洗攻擊,HyperSentry利用IPMI技術(shù)構(gòu)建的檢測(cè)通道使得攻擊者無法預(yù)測(cè)完整性保護(hù)機(jī)制的檢測(cè)間隔,這種方法在一定程度上緩解了擦洗攻擊的威脅。但是,還存在一種攻擊稱為瞬態(tài)攻擊[39],它屬于擦洗攻擊的變種,能在極其短的時(shí)間內(nèi)完成攻擊?,F(xiàn)有一些針對(duì)非可信Hypervisor的基于事件的完整性檢測(cè)工作[40-43],可以很好地解決瞬態(tài)攻擊的問題。
MGUARD[41]利用FB-DIMM(fully buffered dual in-line memory module)硬件[44]實(shí)現(xiàn)了一種基于事件捕獲的完整性檢測(cè)機(jī)制。MGUARD的完整性檢測(cè)包括檢查對(duì)DRAM(dynamic random access memory)存儲(chǔ)器中的內(nèi)核和關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的未授權(quán)更改。其基本原理是,當(dāng)內(nèi)核被編譯并加載到內(nèi)存中,內(nèi)核控制數(shù)據(jù)(例如系統(tǒng)調(diào)用表)往往是靜態(tài)的,對(duì)內(nèi)核控制數(shù)據(jù)的任何動(dòng)態(tài)修改都被視為惡意。MGUARD通過檢查捕獲的DRAM頁面狀態(tài)和DRAM頁面數(shù)據(jù)來實(shí)現(xiàn)檢測(cè)。此外,F(xiàn)B-DIMM中包括一個(gè)串行接口,可以將捕獲的數(shù)據(jù)傳輸?shù)郊械奈恢?,以進(jìn)一步詳細(xì)分析捕獲的數(shù)據(jù)來檢測(cè)攻擊的存在。MGUARD在系統(tǒng)啟動(dòng)時(shí)就連續(xù)地監(jiān)視任何對(duì)物理DRAM存儲(chǔ)器的訪問。利用FB-DIMM硬件,MGUARD透明地對(duì)系統(tǒng)進(jìn)行完整性檢測(cè),除了物理攻擊以外,它沒有其他的攻擊面。
Vigilare[42]提出了一種基于事件監(jiān)聽的完整性檢測(cè)機(jī)制。其完整性監(jiān)控系統(tǒng)構(gòu)建在位于主機(jī)系統(tǒng)外部的單獨(dú)硬件的獨(dú)立系統(tǒng)中,它監(jiān)聽主機(jī)系統(tǒng)的總線上的流量以監(jiān)視主機(jī)系統(tǒng)的操作。Vigilare可以對(duì)幾乎所有系統(tǒng)事件的流量進(jìn)行安全監(jiān)控,因?yàn)镮/O設(shè)備、內(nèi)存和處理器之間的所有處理器指令和數(shù)據(jù)傳輸都必須通過系統(tǒng)總線。并且Vigilare本身完全獨(dú)立于主機(jī)系統(tǒng),能夠抵御來自主機(jī)中的任何潛在危害或攻擊。具體來說,Vigilare系統(tǒng)構(gòu)建在基于ARM的SoC(system on a chip)上運(yùn)行的Linux內(nèi)核中。它主要由兩部分組成:Snooper和Verifier。Snooper是一個(gè)硬件組件,它收集流量并將其傳輸?shù)絍erifier。Verifier是一個(gè)精簡的計(jì)算機(jī)系統(tǒng),經(jīng)過優(yōu)化可以分析數(shù)據(jù),以確定主機(jī)系統(tǒng)的完整性。因?yàn)閂igilare的系統(tǒng)不依賴于主機(jī)系統(tǒng),所以主機(jī)系統(tǒng)的完整性不會(huì)影響Vigilare系統(tǒng)的完整性,并且主機(jī)系統(tǒng)無法以任何方式訪問Vigilare系統(tǒng)的內(nèi)存。
ED-monitor[43]構(gòu)建了與Hypervisor同地址空間的基于事件驅(qū)動(dòng)的Hypervisor完整性檢測(cè)機(jī)制。EDmonitor的基于事件驅(qū)動(dòng)方法與Vigilare基于事件監(jiān)聽的方法本質(zhì)上是一樣的,但是實(shí)現(xiàn)方法上有所區(qū)別。Vigilare是基于監(jiān)聽總線上的事件來判斷是否有破壞完整性的攻擊,而ED-monitor是通過在Hypervisor中加入鉤子(hook)來觸發(fā)檢測(cè)[4]。前者需要獨(dú)立的硬件系統(tǒng)來保證完整性保護(hù)機(jī)制本身的安全性,而后者需要依靠特定的軟件技術(shù)來自我防御。這里特定的軟件技術(shù)就是ASR(address space randomization)和IPR(instrumentation-based privilege restriction)。ED-monitor將ASR和IPR技術(shù)結(jié)合來保護(hù)其自身的安全。具體來說,ASR是一種用于保護(hù)代碼和數(shù)據(jù)免受駐留在同一地址空間中的惡意程序影響的輕量級(jí)方法。它使代碼和數(shù)據(jù)隨機(jī)化,以確保它們的位置在虛擬地址空間中是不可預(yù)測(cè)的,從而防止惡意程序破壞它們。但是,現(xiàn)有的ASR技術(shù)不足以隱藏針對(duì)非可信Hypervisor的完整性保護(hù)機(jī)制,因?yàn)閻阂獾腍ypervisor還可以執(zhí)行特權(quán)指令來繞過ASR或者找出保護(hù)機(jī)制的隨機(jī)化位置。例如,Hypervisor可以操縱MMU(memory management unit)配置以將Hypervisor的完整性保護(hù)機(jī)制重新映射到已知地址并借此繞過ASR。為了使基于ASR的保護(hù)機(jī)制對(duì)惡意的Hypervisor有效,ED-monitor限制了Hypervisor直接執(zhí)行最高權(quán)限操作的能力。它利用IPR來消除Hypervisor代碼中的所有特權(quán)指令,以便限制Hypervisor必須向ED-monitor請(qǐng)求才能去執(zhí)行特權(quán)指令。通過這種方式,ED-monitor可以攔截并驗(yàn)證Hypervisor中的特權(quán)操作(特權(quán)指令執(zhí)行、內(nèi)存管理單元的配置、中斷處理等)。另外,為了實(shí)現(xiàn)基于事件驅(qū)動(dòng)的檢測(cè)手段,ED-monitor在發(fā)生指定的Hypervisor事件時(shí)調(diào)用完整性檢測(cè)程序。ED-monitor利用hook捕獲指定的Hypervisor事件。這些hook可以是插入Hypervisor代碼中任意位置的代碼hook(即跳轉(zhuǎn)指令),或是調(diào)用表中的數(shù)據(jù)hook。當(dāng)Hypervisor的執(zhí)行到達(dá)hook時(shí),hook便會(huì)將控制流傳輸?shù)紼Dmonitor來觸發(fā)完整性檢測(cè)。
Pioneer[45]提出了一個(gè)在不可信系統(tǒng)中構(gòu)建遠(yuǎn)程驗(yàn)證可執(zhí)行文件完整性的方法,并且其不需要特定的硬件或者是軟件技術(shù)來支持。通過Pioneer可以實(shí)現(xiàn)基于軟件的遠(yuǎn)程代碼驗(yàn)證。其允許驗(yàn)證者從一個(gè)可信實(shí)體出發(fā),驗(yàn)證在另一個(gè)非可信實(shí)體上運(yùn)行的軟件堆棧的完整性。驗(yàn)證者和被驗(yàn)證平臺(tái)通常是不同的物理計(jì)算設(shè)備。被驗(yàn)證平臺(tái)上的驗(yàn)證代理對(duì)平臺(tái)的軟件堆棧進(jìn)行完整性測(cè)量,并將其測(cè)量結(jié)果發(fā)送給驗(yàn)證者。一方面,Pioneer在不可信系統(tǒng)中動(dòng)態(tài)建立可信計(jì)算庫,稱為動(dòng)態(tài)信任基。動(dòng)態(tài)信任基中包含的所有代碼都可保證未被修改。動(dòng)態(tài)信任基一旦建立,它就會(huì)測(cè)量可執(zhí)行文件的完整性??蓤?zhí)行文件將在動(dòng)態(tài)信任基的執(zhí)行環(huán)境中執(zhí)行。另一方面,驗(yàn)證者的代碼由三部分組成:校驗(yàn)和代碼、哈希函數(shù)和發(fā)送函數(shù)。校驗(yàn)和代碼計(jì)算整個(gè)驗(yàn)證函數(shù)的校驗(yàn)和,其需要在可屏蔽中斷的最高權(quán)限級(jí)別執(zhí)行,因此Pioneer需要最高執(zhí)行權(quán)限。Pioneer使用哈希函數(shù)(secure Hash algorithm 1,SHA-1)來進(jìn)行對(duì)可執(zhí)行文件的完整性測(cè)量。發(fā)送函數(shù)通過通信鏈路將校驗(yàn)和結(jié)果與完整性測(cè)量結(jié)果返回給調(diào)度程序。在驗(yàn)證過程中,驗(yàn)證者使用輪詢-響應(yīng)協(xié)議來獲得不可信平臺(tái)上可驗(yàn)證代碼執(zhí)行的保證。該協(xié)議有兩個(gè)步驟:首先,調(diào)度程序獲得在不受信任的平臺(tái)上存在動(dòng)態(tài)信任基的保證;其次,調(diào)度程序使用動(dòng)態(tài)信任基來獲得可驗(yàn)證代碼執(zhí)行的保證。
Pioneer提出的遠(yuǎn)程驗(yàn)證方法可以用來保護(hù)Hypervisor的完整性檢測(cè)機(jī)制的安全,即Pioneer可以用來對(duì)完整性檢測(cè)機(jī)制本身的完整性進(jìn)行實(shí)時(shí)驗(yàn)證。進(jìn)一步的,Pioneer還可以用作構(gòu)建任意安全應(yīng)用程序的基本原語。
在Hypervisor的完整性檢測(cè)機(jī)制中,本章分別分析了基于快照、基于事件和基于遠(yuǎn)程驗(yàn)證的三種構(gòu)建方法?;诳煺盏耐暾詸z測(cè)相較于基于事件更為通用和直接,但是其安全性較弱。因?yàn)榭煺盏牟东@需要時(shí)間驅(qū)動(dòng),這就容易留下攻擊窗口,例如擦洗攻擊和瞬時(shí)攻擊。基于事件的完整性檢測(cè)避免了留下時(shí)間窗口,更為可靠和安全,但是其對(duì)事件的針對(duì)性較強(qiáng),實(shí)現(xiàn)方式也更為復(fù)雜,因?yàn)楸Wo(hù)機(jī)制需要先識(shí)別Hypervisor中的特定事件才能觸發(fā)監(jiān)聽?;谶h(yuǎn)程驗(yàn)證的完整性檢測(cè)則是通過建立動(dòng)態(tài)的可信來觸發(fā)完整性檢測(cè)。這種方法在實(shí)現(xiàn)上比較靈活,可以作為任意安全程序的構(gòu)建基礎(chǔ)。但在安全性方面,其需要依靠一個(gè)可信的主機(jī)來保證驗(yàn)證結(jié)果的可靠性,因此可信主機(jī)需要避免被攻擊。在構(gòu)建上述完整性檢測(cè)機(jī)制的過程中,首先,依靠軟件的方式在現(xiàn)實(shí)中比起依賴于特殊硬件更為實(shí)際和通用,例如ED-monitor中的ASR和IPR只需安裝并開啟即可。其次,特殊硬件的選擇要注意其本身的限制,避免引入新的威脅,例如本章所提的HyperSentry中的SMM和Copilot中的PCI設(shè)備分別存在的問題。
第3章分析了針對(duì)非可信Hypervisor的完整性檢測(cè)方法,采用檢測(cè)的手段有一個(gè)局限性,即它是屬于被動(dòng)防御,不能預(yù)防攻擊的出現(xiàn)。本章將梳理針對(duì)非可信Hypervisor的主動(dòng)防御工作,即旨在建立可信的Hypervisor。其中包括針對(duì)Hypervisor的控制流、指令仿真以及精簡TCB的防御機(jī)制。
Hypersafe[46]構(gòu)造了旨在保證Hypervisor的運(yùn)行時(shí)控制流完整性的保護(hù)機(jī)制。運(yùn)行時(shí)的控制流完整性包括靜態(tài)控制流和動(dòng)態(tài)控制流的完整性,其中靜態(tài)控制流的完整性由Hypervisor的代碼和靜態(tài)控制數(shù)據(jù)決定,而動(dòng)態(tài)控制流的完整性由運(yùn)行時(shí)的動(dòng)態(tài)控制數(shù)據(jù)決定。Hypersafe使用不可旁路的內(nèi)存鎖定技術(shù)和受限制的指針?biāo)饕夹g(shù)來構(gòu)建防御機(jī)制,使得攻擊者無法對(duì)Hypervisor的控制流的完整性作出破壞操作。具體來說,不可旁路的內(nèi)存鎖定技術(shù)保證了Hypervisor的代碼和靜態(tài)控制數(shù)據(jù)的安全,它本質(zhì)上是基于x86系統(tǒng)的內(nèi)存保護(hù)機(jī)制實(shí)現(xiàn)的,即對(duì)頁表的W⊕X位設(shè)置寫保護(hù)。而為了對(duì)頁表進(jìn)行正常的更新操作,Hypersafe利用WP位的硬件功能(即CPU控制寄存器CR0中的寫保護(hù)位)構(gòu)造了一種安全的方法來臨時(shí)繞過寫保護(hù),并且這種繞過的方法不會(huì)被惡意濫用。受限制的指針?biāo)饕夹g(shù)保證了Hypervisor運(yùn)行時(shí)執(zhí)行路徑符合控制流完整性,即保護(hù)動(dòng)態(tài)控制數(shù)據(jù)的安全。它將每個(gè)動(dòng)態(tài)控制數(shù)據(jù)替換為目標(biāo)表的受限索引。目標(biāo)表包含Hypervisor的控制流程圖允許的所有間接控制轉(zhuǎn)移指令的合法位置。基于目標(biāo)表,Hypersafe可以替換Hypervisor中所有運(yùn)行時(shí)的動(dòng)態(tài)控制數(shù)據(jù)。
FWinst[47]針對(duì)Hypervisor的指令仿真進(jìn)行了保護(hù)工作。理想情況下,Hypervisor只需要仿真指令集的小部分。但是,在x86架構(gòu)上,可能需要Hypervisor仿真大多數(shù)指令[48-49],包括仿真以下五方面中除敏感指令外的其他指令:端口I/O、內(nèi)存映射I/O、影子頁表、實(shí)模式、遷移。仿真大多數(shù)x86指令很復(fù)雜,且容易出錯(cuò)。x86仿真器中存在很多漏洞,例如CVE2016-9756、CVE2017-2584、CVE2015-0239和CVE2017-2583[23]。另外,文獻(xiàn)[48]證明了任何指令都可以被強(qiáng)制模仿,這種新的攻擊媒介允許攻擊者有機(jī)會(huì)利用任何指令中的漏洞實(shí)施攻擊。
FWinst通過限制和縮小Hypervisor指令仿真的有效攻擊面來防御針對(duì)指令仿真的攻擊。要仿真的合法指令子集取決于調(diào)用仿真器的仿真上下文。如果仿真器僅接受每個(gè)上下文中的合法指令集,則針對(duì)指令的攻擊面就會(huì)縮小,因?yàn)楣粽邿o法利用當(dāng)前上下文中不合法的指令中的漏洞。具體來說,F(xiàn)Winst識(shí)別五個(gè)上下文:端口I/O上下文、內(nèi)存映射I/O上下文、影子頁表上下文、實(shí)模式上下文和遷移上下文。并且給出每個(gè)上下文的合法指令的列表。為了縮小攻擊面,F(xiàn)Winst使用Hypervisor的配置確定哪個(gè)上下文有效。當(dāng)調(diào)用Hypervisor來仿真指令時(shí),F(xiàn)Winst會(huì)檢查當(dāng)前上下文是否有效。如果FWinst認(rèn)為當(dāng)前上下文無效,則不會(huì)允許任何指令的仿真,反之則將合法指令傳遞給仿真器。
FWinst針對(duì)指令仿真中的漏洞和攻擊進(jìn)行了一定的限制和防御,但是FWinst目前的工作只針對(duì)Linux4.8版本中的KVM,在其他虛擬化技術(shù)中是否有效還有待驗(yàn)證。
Hypervisor是具有廣泛攻擊面的大型代碼庫,本文引言中已經(jīng)提到了這一點(diǎn)。在Hypervisor代碼庫中,其設(shè)計(jì)和實(shí)現(xiàn)的組件相當(dāng)復(fù)雜,包括復(fù)雜的內(nèi)存虛擬化和客戶虛擬機(jī)的指令仿真等。這些組件占據(jù)其代碼庫的一半,并且通常是各種可利用漏洞的存在之處。在4.1節(jié)和4.2節(jié)中提到的Hypersafe和FWinst都是有針對(duì)性地對(duì)Hypervisor構(gòu)建防御,但Hypervisor的龐大攻擊面這一特性依然存在。根據(jù)TCB的可驗(yàn)證原理,更小的代碼量通常意味著更可信[50]。因此,有一些研究工作[51-58]針對(duì)如何重構(gòu)Hypervisor,實(shí)現(xiàn)既能保留其功能,又能精簡其代碼量的目的。精簡后的Hypervisor便可以是TCB的一部分,并且其代碼的正確性易被驗(yàn)證。驗(yàn)證Hypervisor精簡TCB的方法有很多,例如seL4[59]和Verve[60]。其中,seL4提供了驗(yàn)證微內(nèi)核是否存在特定類型的軟件漏洞的方法,Verve可以用來驗(yàn)證軟件堆棧中Hypervisor的每條指令的類型和內(nèi)存安全。另外,文獻(xiàn)[61]提出了一種快速驗(yàn)證Hypervisor可擴(kuò)展部分安全性的方法,也可以用來提高精簡Hypervisor在功能擴(kuò)展時(shí)的安全。下面舉例梳理重構(gòu)Hypervisor的研究工作。
NOVA[54]借助微內(nèi)核的思想將Hypervisor的功能細(xì)粒度地分解為micro-Hypervisor、根分區(qū)管理器、用戶層的Hypervisor、設(shè)備驅(qū)動(dòng)程序和其他系統(tǒng)服務(wù)設(shè)備。其中micro-Hypervisor運(yùn)行在CPU的最高權(quán)限,而其余功能模塊都運(yùn)行在用戶層。NOVA遵循最小權(quán)限原則,它實(shí)現(xiàn)的micro-Hypervisor作為TCB,其代碼量要比原本的Hypervisor少一個(gè)數(shù)量級(jí)。但NOVA存在的一個(gè)問題是,客戶虛擬機(jī)某些正常功能可能涉及到很多CPU模式的切換,造成性能損失。
Dichotomy[58]基于Hypervisor即服務(wù)的思想,將傳統(tǒng)的Hypervisor分為hyperplexor和featurevisor兩部分。其中hyperplexor為核心部分,它是一個(gè)小型、安全且穩(wěn)定的Hypervisor,僅用于管理物理硬件的調(diào)度和為featurevisor提供支持。而featurevisor是一種輕度修改的Hypervisor,它在用戶層運(yùn)行,即在hyperplexor之上運(yùn)行,負(fù)責(zé)面向客戶虛擬機(jī)的具體服務(wù)和管理。每個(gè)客戶虛擬機(jī)可以根據(jù)所需的服務(wù)分配不同的featurevisor。另外,Dichotomy還提出了短暫虛擬化的概念,即featurevisor可以靈活地暫時(shí)將客戶虛擬機(jī)的管理轉(zhuǎn)移給hyperplexor,以此減少上下層切換的開銷。
與NOVA和Dichotomy類似的,DeHype[53]也將Hypervisor分解。它將Hypervisor的特權(quán)指令代碼的最小子集定義為OS(operating systems)擴(kuò)展,稱為HypeLet,而將其他的大多數(shù)Hypervisor代碼放在用戶模式下執(zhí)行。當(dāng)用戶模式下的Hypervisor發(fā)出特權(quán)指令請(qǐng)求時(shí),它需要通過系統(tǒng)調(diào)用方式進(jìn)入特權(quán)模式執(zhí)行HypeLet中的相關(guān)指令。用戶模式運(yùn)行的Hypervisor基本上作為用戶庫運(yùn)行,提供與HypeLet交互的必要功能。而HypeLet是當(dāng)前虛擬機(jī)管理程序代碼庫添加的唯一特權(quán)組件。DeHype是針對(duì)KVM的研究工作,其原型中HypeLet只包含兩萬多代碼行并且僅定義了10個(gè)系統(tǒng)調(diào)用,但其是否適用于其他虛擬化方案還有待驗(yàn)證。
NoHype[51]與上述工作的思想不同,它認(rèn)為Hypervisor并不是虛擬化管理工作必不可少的一部分,因此它直接將客戶虛擬機(jī)之間的物理資源進(jìn)行預(yù)分配和隔離,而不再需要Hypervisor。具體來說,它依靠硬件的虛擬化特性[62],嚴(yán)格地劃分客戶虛擬機(jī)之間的物理資源,使得客戶虛擬機(jī)只需要在啟動(dòng)時(shí)與一個(gè)臨時(shí)的Hypervisor交互,而在其運(yùn)行期間不再需要與Hypervisor交互。NoHype去掉了傳統(tǒng)意義上的Hypervisor管理層,因此大大減少了其TCB的存在。但是,NoHype對(duì)沒有硬件支持物理隔離的環(huán)境并不友好,另外其仍然需要對(duì)客戶虛擬機(jī)的操作系統(tǒng)內(nèi)核進(jìn)行微小修改,增加了開發(fā)難度。
上述研究對(duì)Hypervisor進(jìn)行重新設(shè)計(jì)采用的方法不盡相同,但卻殊途同歸。不同方法有各自的優(yōu)勢(shì)和劣勢(shì),研究人員需要根據(jù)不同的場(chǎng)景選擇不同的方式。而如何構(gòu)建一個(gè)完備而又通用的方法,使得Hypervisor的TCB既精簡且易于驗(yàn)證,同時(shí)性能減損,是留給研究人員繼續(xù)攻克的問題。
在Hypervisor的防御機(jī)制中,本章梳理了針對(duì)控制流、指令仿真和精簡TCB的構(gòu)建方法。三者比較而言,一方面,前兩者相比于精簡TCB的構(gòu)建更為實(shí)用,可直接被現(xiàn)有實(shí)際的Hypervisor所采用,而4.3節(jié)所提的精簡TCB的方法需要對(duì)原有Hypervisor進(jìn)行不同程度的重構(gòu)。簡單直接的重構(gòu)需要?jiǎng)澐諬ypervisor的功能模塊,例如NOVA,而復(fù)雜的重構(gòu)需要直接去除Hypervisor層,例如NoHype。另一方面,構(gòu)建Hypervisor的精簡TCB在安全性方面更為全面和可靠。Hypersafe和FWinst都是有側(cè)重的防御工作,兩者需要結(jié)合才能提供較全面的防御。而精簡TCB的構(gòu)建因?yàn)槠浔旧戆踩缘囊子隍?yàn)證,可以提供更直接的全面防御。
第3、第4章分別分析了Hypervisor的完整性檢測(cè)機(jī)制和防御機(jī)制的研究工作。這些工作也都各有側(cè)重和優(yōu)缺點(diǎn),因此在實(shí)際中可能還是會(huì)有繞過檢測(cè)和防御的攻擊方法。本章將梳理致力于隔離惡意Hypervisor和客戶虛擬機(jī)的研究工作。其中包括基于嵌套虛擬化技術(shù)和基于加密技術(shù)的隔離機(jī)制。
CloudVisor[63]致力于限制和隔離任何非可信的Hypervisor對(duì)上層客戶虛擬機(jī)的資源(CPU、內(nèi)存和I/O設(shè)備)的非法操作。它利用嵌套虛擬化技術(shù)[64-65],將Hypervisor置于Ring1權(quán)限,而其本身運(yùn)行在Ring0權(quán)限,如此一來CloudVisor中保護(hù)操作的執(zhí)行便對(duì)任何惡意的Hypervisor來說都是透明的,并且其擁有更高的權(quán)限。具體來說,在CPU方面,CloudVisor為Hypervisor和客戶虛擬機(jī)之間所有控制轉(zhuǎn)移進(jìn)行必要的轉(zhuǎn)換和保護(hù)。而在內(nèi)存方面,CloudVisor跟蹤Hypervisor維護(hù)的每個(gè)頁和每個(gè)頁表的所有權(quán)(即擴(kuò)展頁表),并且不允許Hypervisor直接覆蓋擴(kuò)展頁表,它會(huì)在Hypervisor頁表的更新時(shí)檢查頁面的所有權(quán)是否與頁表的所有權(quán)匹配,如果不匹配則加密頁面內(nèi)容。最后在I/O設(shè)備方面,為了保護(hù)虛擬磁盤,CloudVisor在客戶虛擬機(jī)的每次磁盤I/O訪問期間透明地加密和解密數(shù)據(jù)。它使用信息摘要哈希算法(message-digest algorithm,MD5)和Merkle樹[66]來確保磁盤數(shù)據(jù)的完整性。另外,它通過維護(hù)每個(gè)客戶虛擬機(jī)的I/O訪問權(quán)限表來防止來自Hypervisor的DMA攻擊。
利用加密的手段來保護(hù)客戶虛擬機(jī)免受非可信Hypervisor的入侵是一種有效的辦法,因?yàn)閻阂釮ypervisor無法對(duì)加密的數(shù)據(jù)進(jìn)行攻擊。本節(jié)將分別分析基于軟件和基于硬件的加密技術(shù)。
5.2.1 基于軟件的加密
文獻(xiàn)[67]提出了由AISE(address independent seed encryption)內(nèi)存加密算法和BMT(Bonsai Merkle tree)哈希樹算法組成的軟件加密技術(shù)。AISE+BMT的加密方法需要信任CPU,因?yàn)樗揽緾PU運(yùn)行時(shí)對(duì)密文元數(shù)據(jù)的處理邏輯來實(shí)現(xiàn)加密。
在AISE中,處理器不會(huì)直接加密數(shù)據(jù)塊(Cache數(shù)據(jù)塊),而是通過加密數(shù)據(jù)塊的種子(seed)來產(chǎn)生一個(gè)偽隨機(jī)數(shù),然后將這個(gè)偽隨機(jī)數(shù)與數(shù)據(jù)塊的明文進(jìn)行異或后產(chǎn)生數(shù)據(jù)塊的密文。數(shù)據(jù)塊的seed是地址獨(dú)立的,并且每加密一次都會(huì)發(fā)生改變,其具體由三部分組成:LPID(logical per-page ID)、計(jì)數(shù)器和偏移。LPID對(duì)于每個(gè)物理內(nèi)存頁面都是唯一的。LPID的值在初始化時(shí)分配,與頁面地址無關(guān)。計(jì)數(shù)器和頁面偏移量是針對(duì)每個(gè)Cache數(shù)據(jù)塊的值。當(dāng)計(jì)數(shù)器溢出,相應(yīng)的頁面將會(huì)被分配新的LPID并重新加密。BMT哈希樹用來對(duì)AISE中的Cache數(shù)據(jù)塊的seed進(jìn)行完整性保護(hù),它會(huì)將seed的密文的哈希值更新到一棵哈希樹中,該哈希樹的根節(jié)點(diǎn)保存在CPU中。當(dāng)處理器將seed的密文從內(nèi)存加載到Cache時(shí),處理器會(huì)先從BMT獲取其對(duì)應(yīng)的哈希值,然后將其與當(dāng)前加載的密文數(shù)據(jù)計(jì)算所得的哈希值進(jìn)行比較,以確定當(dāng)前獲取的seed的完整性。
在性能方面,AISE+BMT的加密方法引入的開銷較低。首先,加密和解密操作是針對(duì)數(shù)據(jù)的seed而不是具體的數(shù)據(jù),因此可以與存儲(chǔ)器的加載和存儲(chǔ)操作并行化來提升性能。其次,由于seed中的計(jì)數(shù)器很小,因此其緩存的命中率非常高。再者,BMT可以很大程度上減少內(nèi)存和緩存中哈希的大小。
SecureME[68]和HyperCoffer[69]都是運(yùn)用了AISE+BMT的方法來加密客戶虛擬機(jī)數(shù)據(jù)的保護(hù)機(jī)制,但是兩者適用的場(chǎng)景有所不同。SecureME利用了Hypervisor來實(shí)現(xiàn)其保護(hù)機(jī)制,并將Hypervisor列為了TCB的一部分,因此它的保護(hù)機(jī)制無法隔離來自惡意Hypervisor的攻擊。而HyperCoffer只信任客戶虛擬機(jī)的OS內(nèi)核。在HyperCoffer中,客戶虛擬機(jī)中的所有數(shù)據(jù)都受到保護(hù),包括CPU上下文中的數(shù)據(jù)、Cache數(shù)據(jù)、內(nèi)存和I/O數(shù)據(jù)。因此,在面對(duì)非可信Hypervisor時(shí),HyperCoffer能真正對(duì)客戶虛擬機(jī)的安全進(jìn)行基于加密的隔離保護(hù)。
5.2.2 基于硬件的加密
Fidelius[70]使用其改進(jìn)的AMD的SEV(secure encrypted virtualization)技術(shù)[71]實(shí)現(xiàn)了對(duì)客戶虛擬機(jī)數(shù)據(jù)的加密和保護(hù)。與5.2.1小節(jié)中AISE+BMT的軟件加密方法的比較而言,F(xiàn)idelius使用的SEV更具優(yōu)勢(shì)。首先,SEV是在主流處理器的固件中實(shí)現(xiàn)的,硬件的支持使其更可靠,并且它可以在實(shí)際運(yùn)用中得到更廣泛的支持。其次,SEV授予客戶虛擬機(jī)以頁粒度方式控制加密粒度的能力,因此它更靈活,可以適應(yīng)更復(fù)雜的加密場(chǎng)景。
SEV是集成在AMD-V技術(shù)中的內(nèi)存加密技術(shù),它專門針對(duì)虛擬化的場(chǎng)景。SEV實(shí)現(xiàn)在獨(dú)立的SoC固件中,并與容納在CPU中的存儲(chǔ)器控制器協(xié)同工作。所有密鑰都由獨(dú)立的安全處理器管理,并安裝到內(nèi)存控制器中,以支持片上的AES(advanced encryption standard)加密引擎。但是,在面向非可信Hypervisor時(shí),只使用SEV的保護(hù)并不充分[72-73]。首先,SEV未加密VMCB(virtual machine control block),因此其完整性在當(dāng)前SEV中不受保護(hù)。其次,物理內(nèi)存映射仍由Hypervisor控制,即使啟用了SEV的一種特殊模式SEV-ES(secure encrypted virtualizationencrypted state),暴露物理頁表可能導(dǎo)致客戶虛擬機(jī)受到攻擊威脅。再者,啟用密鑰共享的客戶虛擬機(jī)無法阻止Hypervisor將密鑰暴露給其他惡意的客戶虛擬機(jī)。最后,SEV不支持DMA在加密數(shù)據(jù)上操作,因此客戶虛擬機(jī)的I/O數(shù)據(jù)是沒有加密的。
為了既有效地利用SEV加密技術(shù),又能避免其在面對(duì)非可信Hypervisor時(shí)暴露的缺陷,F(xiàn)idelius結(jié)合SEV技術(shù)進(jìn)行了如下改進(jìn)。首先,F(xiàn)idelius分離Hypervisor對(duì)硬件資源的管理功能與提供服務(wù)功能。Hypervisor仍然為客戶虛擬機(jī)提供服務(wù),但是具體的資源管理交由Fidelius驗(yàn)證和管理。這樣就避免了惡意Hypervisor對(duì)VMCB和SEV密鑰等資源的濫用。其次,構(gòu)造針對(duì)物理頁表的不可旁路的內(nèi)存隔離保護(hù)。Fidelius利用文獻(xiàn)[74-75]中的方法獲得與Hypervisor相同的執(zhí)行權(quán)限,并通過4.1節(jié)中Hypersafe的不可旁路的內(nèi)存鎖定將物理頁表與Hypervisor保持分離。Hypervisor對(duì)物理頁表只讀,而Fidelius參與正常的物理頁表操作并基于頁面信息表來驗(yàn)證物理頁表的更新。最后,通過改進(jìn)SEV的發(fā)送和接收接口,F(xiàn)idelius可以加密客戶虛擬機(jī)的磁盤I/O數(shù)據(jù)。
但是,F(xiàn)idelius信任客戶虛擬機(jī)內(nèi)核,無法隔離來自客戶虛擬機(jī)內(nèi)核的攻擊。如果需要在完全不可信的環(huán)境中只保護(hù)客戶虛擬機(jī)的應(yīng)用程序,那么真正完全有效的方法是既不信任Hypervisor,也不信任客戶虛擬機(jī)內(nèi)核,做到只針對(duì)應(yīng)用程序的加密級(jí)別。Intel的SGX(software guard extensions)技術(shù)[76]就可以用來實(shí)現(xiàn)此場(chǎng)景的需求,例如Haven[77]對(duì)SGX的運(yùn)用。文獻(xiàn)[78]將業(yè)界的Intel的SGX和AMD的SEV進(jìn)行了詳細(xì)的對(duì)比。SGX技術(shù)擁有和SEV一樣的來自主流處理器的廣泛支持的特點(diǎn)。但是不同于SEV,SGX技術(shù)無法用來加密整個(gè)虛擬機(jī),它只支持應(yīng)用層面的加密。利用SGX技術(shù)可以將受保護(hù)的應(yīng)用程序與外界任意軟件隔離,構(gòu)建僅和CPU之間可信的通道。
在針對(duì)非可信Hypervisor的虛擬機(jī)隔離機(jī)制中,本章梳理了基于嵌套虛擬化和基于加密技術(shù)的構(gòu)建方法。利用嵌套虛擬化可以從執(zhí)行權(quán)限方面隔離Hypervisor,而基于軟件和基于硬件的加密技術(shù)將客戶虛擬機(jī)的數(shù)據(jù)安全地與Hypervisor隔離。本質(zhì)上它們都旨在使得惡意的Hypervisor無法肆意地破壞客戶虛擬機(jī),從而保護(hù)了客戶虛擬機(jī)的安全。兩者比較而言,嵌套虛擬化對(duì)原有虛擬化系統(tǒng)的改動(dòng)比較大,不過這種方法的隔離構(gòu)建更為有效和徹底,例如CloudVisor將Hypervisor置于Ring1權(quán)限,全面地限制了Hypervisor作惡的能力。而加密技術(shù)在實(shí)現(xiàn)上更為簡單,例如Fidelius方法可以直接在現(xiàn)有支持AMD的SEV技術(shù)的機(jī)器中實(shí)現(xiàn)。另外,在加密技術(shù)中,具體加密方法的選擇與運(yùn)用,還需要研究者結(jié)合加密技術(shù)支持情況和受保護(hù)的對(duì)象是虛擬機(jī)或是應(yīng)用程序等條件來權(quán)衡。
性能和安全,在系統(tǒng)領(lǐng)域一直是互相影響的兩方面。一方面,安全機(jī)制的存在不可避免地會(huì)引入額外的開銷,導(dǎo)致性能降低;另一方面,在追求極致性能的研究路上又可能留下安全漏洞?,F(xiàn)有工作[11,79]同時(shí)考慮了系統(tǒng)安全性和效率,分別針對(duì)客戶虛擬機(jī)在安全性方面和隔離性方面存在的問題,構(gòu)建了相應(yīng)的保護(hù)機(jī)制,在保留高性能的同時(shí)提高了多租戶云平臺(tái)的可靠性。在未來面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制研究趨勢(shì)中,結(jié)合性能和安全的考慮,本章給出以下三方面的探討。
首先,可以構(gòu)建基于硬件技術(shù)的保護(hù)機(jī)制??v觀虛擬化的發(fā)展,早先的虛擬化技術(shù)是沒有硬件特性的技術(shù)支持的,因此其性能并不樂觀。在Intel和AMD分別推出Intel-VT和AMD-V后,處理器對(duì)虛擬化的支持極大改善了虛擬化的性能。同樣的,在安全方面,Intel的SGX和AMD的SEV也都從硬件層面對(duì)虛擬化技術(shù)提供保護(hù)的支持。一般來說,基于硬件實(shí)現(xiàn)的保護(hù)機(jī)制在性能方面要優(yōu)于純軟件實(shí)現(xiàn)保護(hù)機(jī)制。因此,利用硬件技術(shù)來構(gòu)建保護(hù)機(jī)制將會(huì)一直是一個(gè)重要的研究方向。特定硬件能提供的特性也不僅僅在于性能,更有獨(dú)立于主機(jī)系統(tǒng)或執(zhí)行模式等安全特性,即硬件本身可以成為TCB的一部分。本文所提到的完整性檢測(cè)機(jī)制、防御機(jī)制和隔離機(jī)制的研究工作中,也都有利用硬件技術(shù)構(gòu)造保護(hù)機(jī)制的影子。但是,在這個(gè)方向中也存在著幾點(diǎn)重要考慮因素。一是硬件本身也可能存在漏洞和異常;二是其通用程度。前者是基于硬件的保護(hù)機(jī)制是否能正確運(yùn)作的基礎(chǔ),而后者決定了其是否能夠在實(shí)際中更廣泛地運(yùn)用。
其次,可以構(gòu)建分布式保護(hù)機(jī)制來動(dòng)態(tài)地建立安全。在多租戶云平臺(tái)中,惡意的Hypervisor往往只局限于少數(shù)服務(wù)器中。攻擊者對(duì)云平臺(tái)的布局一般是未知的,因此攻擊在各個(gè)主機(jī)之間是獨(dú)立發(fā)生的。同時(shí)攻擊多個(gè)服務(wù)器并使它們作惡,其難度要比只攻擊單臺(tái)服務(wù)器大很多。因此,可以基于大多數(shù)云平臺(tái)服務(wù)器安全的前提,來構(gòu)建面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制,以保護(hù)少數(shù)非可信的云平臺(tái)服務(wù)器。分布式保護(hù)機(jī)制本質(zhì)上可以借鑒分布式共識(shí)協(xié)議在很多應(yīng)用場(chǎng)景的核心思想。最典型的便是區(qū)塊鏈技術(shù)中,聯(lián)盟鏈里用到的解決拜占庭問題的PBFT(practical Byzantine fault tolerance)共識(shí)協(xié)議[80]。利用多數(shù)派安全的特征,集群可以動(dòng)態(tài)地從其中找出主可信節(jié)點(diǎn),并且可以不斷更換主可信節(jié)點(diǎn)來進(jìn)一步提高安全性。當(dāng)然,分布式的引入可能會(huì)帶來性能消耗,因此性能止損是構(gòu)建分布式保護(hù)機(jī)制的關(guān)鍵挑戰(zhàn)之一。
再者,可以構(gòu)建基于機(jī)器學(xué)習(xí)的保護(hù)機(jī)制。近年來,人工智能等新興應(yīng)用領(lǐng)域在多租戶云平臺(tái)的底層基礎(chǔ)支持下,滲入到了各行各業(yè)中,也被運(yùn)用得越來越廣泛。但反過來,人工智能中的技術(shù),例如機(jī)器學(xué)習(xí),其本身處理數(shù)據(jù)的方式也能夠促進(jìn)云平臺(tái)的安全構(gòu)建。機(jī)器學(xué)習(xí)可以用來分析現(xiàn)有攻擊的特征,包括其對(duì)虛擬化系統(tǒng)帶來的硬件和軟件上影響的特征信息。在對(duì)這些特征信息捕獲、分析和建模后,構(gòu)建的保護(hù)機(jī)制便可以高效地進(jìn)行檢測(cè)、防御和隔離工作,甚至可以預(yù)知潛在攻擊的威脅。舉例來說,硬件性能計(jì)數(shù)器和系統(tǒng)日志是構(gòu)建保護(hù)機(jī)制很好的信息來源和載體。一方面,硬件性能計(jì)數(shù)器可以用來分析惡意攻擊程序運(yùn)行時(shí)觸發(fā)的硬件事件,包括Cache、分支預(yù)測(cè)和CPU周期等方面的硬件事件?,F(xiàn)有研究工作[81-83]基于硬件性能計(jì)數(shù)器中的信息,運(yùn)用機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)了對(duì)側(cè)信道攻擊的實(shí)時(shí)檢測(cè)。研究工作[84]也利用硬件性能計(jì)數(shù)器中的信息構(gòu)建了針對(duì)內(nèi)核控制流攻擊的檢測(cè)機(jī)制。另一方面,系統(tǒng)日志中記錄了系統(tǒng)運(yùn)行中所有重要的狀態(tài)和事件,是理解系統(tǒng)是否正確運(yùn)行的寶貴資源。并且,系統(tǒng)日志非常像自然語言,因?yàn)槠涫怯勺裱瓏?yán)格邏輯和控制流的程序生成的。研究工作[85]即基于大量系統(tǒng)日志信息,構(gòu)建了檢測(cè)系統(tǒng)異常和攻擊的機(jī)器學(xué)習(xí)模型。目前,機(jī)器學(xué)習(xí)在系統(tǒng)安全方面的研究工作尚且不多,這也是留給研究人員的很好機(jī)會(huì)。
Hypervisor在虛擬化軟件層中扮演著至關(guān)重要的角色,但它和其他軟件層一樣受到漏洞和攻擊的威脅。為此,需要構(gòu)建面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制來提高虛擬化安全性。保護(hù)機(jī)制的構(gòu)建可以從完整性檢測(cè)、主動(dòng)防御和虛擬機(jī)隔離機(jī)制這三方面出發(fā)。在完整性檢測(cè)方面,檢測(cè)機(jī)制需正確捕獲Hypervisor運(yùn)行的異常。其實(shí)現(xiàn)方式直接決定了檢測(cè)局限性所在。構(gòu)建完備的檢測(cè)機(jī)制需要結(jié)合檢測(cè)目標(biāo),選擇合適的檢測(cè)手段,確保檢測(cè)的有效性和檢測(cè)機(jī)制本身的安全性。在主動(dòng)防御方面,防御機(jī)制旨在提高Hypervisor運(yùn)行的安全性。構(gòu)建有效的防御機(jī)制需要結(jié)合Hypervisor的攻擊面,充分考慮潛在的威脅,并致力于避免防御機(jī)制被繞過和攻擊。在虛擬機(jī)隔離方面,隔離機(jī)制應(yīng)針對(duì)非可信Hypervisor,結(jié)合具體的隔離目標(biāo)和現(xiàn)有的隔離技術(shù),構(gòu)建惡意攻擊無法入侵的屏障。最后,未來的研究工作可以從基于硬件保護(hù)、機(jī)器學(xué)習(xí)和分布式保護(hù)這三方面出發(fā),綜合考慮性能與安全,構(gòu)建實(shí)用的面向云平臺(tái)非可信Hypervisor的保護(hù)機(jī)制。