天天看點

X86伺服器虛拟化的三種技術(2)

在上一講中我介紹了:Intel的VT(Virtual Technology)和AMD的AMD-V(AMD Virtualization)技術對X86架構處理器打了硬體更新檔之後,X86平台在虛拟CPU與内部存儲器方面變成了一個支援完全虛拟化的平台,在這方面,Citrix Xen,MS Hyper-V(“在旁邊的虛拟化”)與VMware ESX(全虛拟化)之間的差别已不複存在。但我必須提醒:前兩者與後者在虛拟輸入輸出裝置(IO Devices)方面仍然存在着一個根本的重要的差别。本講揭示這一差别。

與虛拟CPU和記憶體的情況一樣,虛拟一個IO裝置也是讓一個虛拟機(VM)感覺到它是在獨享該裝置。是以IO裝置虛拟化任務也是替每一個VM分别管理好所用裝置的服務狀态(service state)。設想當一個裝置(如網卡)在某個時間片斷為VM1提供了一個服務片斷(讀入一頁網頁),在下一個時間片斷要轉而向VM2提供服務時,此時系統就必須先記住該裝置為VM1提供目前服務片斷後的狀态,才可以讓裝置轉向服務于VM2。隻有這樣做該裝置才會知道以後再回到VM1時怎樣繼續提供尚未完成的服務。因為每一個IO裝置都完全受控于一個叫做裝置驅動器的軟體,是以對一個裝置和一個VM之間進行狀态跟蹤管理也就是針對相應驅動軟體的服務狀态進行跟蹤管理。

“在旁邊的虛拟化”(Para-Virtualization, Citrix Xen與MS Hyper-V都是)采用了非常簡單實用的“在旁邊有驅動器”之方法:讓所有的客戶(guest)VM 都去使用安裝在那個“管理OS”(Xen的Dom0,Hyper-V的Parent Partition)裡面現成的裝置驅動器。這樣一來整個平台上的IO裝置就可以步調一緻井井有條地為每一個客戶VM服務了。當一個客戶VM中的OS(中自有的裝置驅動器)向硬體發出IO裝置使用指令時,這些指令會被trap到hypervisor裡,再被轉到管理OS去使用它裡面相應的裝置驅動器。

與這個方法不同,VMware ESX選擇在hypervisor裡面置入并管理平台上所有的IO裝置驅動器。ESX上的管理OS(又叫做Host OS或Service Console)隻負責讓系統管理者來管理客戶VMs,比如創立、啟動客戶VM,啟動VMotion操作等等,而不負責虛拟任何IO驅動器。另外我們知道ESXi壓根就不帶有管理OS,系統管理者是通過網絡進入hypervisor來管理客戶VM的。

上回我還講道:Intel和AMD在給X86架構打硬體更新檔的工作還實作了統一控制平台上IO裝置對記憶體的直接通路(Direct Memory Access, DMA)。這改變了以前機器上IO裝置可以随意對主機記憶體進行直接通路的無政府主義危險狀況。諸位不要以為隻有中央處理器(CPU)才是平台上唯一的腦子可以對記憶體進行通路操作。CPU的确可以被看作是平台上的“大腦”,然而平台上還有諸多“小腦”們:幾乎每一個現代IO裝置都自身帶有固件,裡面裝有可執行指令可對主機記憶體進行讀寫通路。在以前的X86硬體上這些小腦們對主機記憶體進行DMA讀寫操作根本不必聽從大腦的指揮。幸虧在非虛拟情況下平台上隻跑一個作業系統,如果某個小腦對主機記憶體做了錯誤操作,造成的破壞也許還可以容忍,因為大不了平台崩潰隻不過毀掉了跑在一台機器上的應用(一定遇到過Windows的藍屏吧!)。如今在一個虛拟化的伺服器平台上跑着許多不同虛拟機和不同作業系統,無政府主義的危害就不再那麼單純無邪了。小腦的一個誤操作有可能打破不同虛拟機之間的隔離,輕者造成所模拟的作業系統出錯,重者導緻平台上所有的虛拟機全部崩潰。最近在X86硬體上的更新檔工作(Intel的 VT-d, AMD的 IOMMU)對主機闆進行了重新布線,将所有小腦們的IO連線都統一聯到北橋上的一個硬體部件IOMMU,于是大腦就可以使用該部件,采用MMU同樣的方法統一協調管理小腦們對記憶體的IO通路了。有了大腦統一協調管理IOMMU,小腦即使誤操作也應該無法穿越不同VM之間的隔離。但是這個說法隻适用于通常的非惡意系統軟硬體錯誤情形,不适用于在計算機安全上出錯的情形。在考慮安全問題時所謂錯誤都是惡意攻擊的結果,是攻擊者有意引入的。在考慮安全問題時小腦們的驅動器軟體(請回憶,IO裝置都是受驅動器控制的)身處于系統軟體棧的哪個權限層次就是一個非常重要的問題。這些軟體所處的權限層次越接近硬體層,攻擊者對它們進行攻擊的手段就越有限也越困難。

對于“在旁邊的虛拟化”方法( Citrix Xen與MS Hyper-V),前面我們說過所有裝置驅動器軟體都安裝在管理OS裡面。這個管理OS雖然跑在一個低特權态(hypervisor之上的非核心态),卻由于需要向平台上所有客戶VMs提供裝置驅動器服務因而必須可以操控所有這些客戶VMs。于是這個處于低特權态的管理OS就自然形成了一個可以被利用來對任一客戶VM進行DMA攻擊的最薄弱環節。所有對一般OS有效的攻擊方法(我們知道有大量這樣的方法)都可以被利用來攻擊這個OS中的驅動器軟體,對客戶VM實施DMA攻擊。

而VMware ESX的情況不同:平台上所有裝置驅動器都是在hypervisor中模拟得到的。我們知道hypervisor是直接跑在硬體上的,即處于最高特權态。一般攻擊OS的使用者态手段都不能對hypervisor産生有效攻擊。另外Intel VT-d和AMD IOMMU都格外注重對hypervisor代碼與資料施加保護。如果想要通過攻擊hypervisor中裝置驅動器的方法來對客戶VM實施DMA攻擊,那要遠比這些裝置驅動器處身于使用者态OS中的情況困難得多。

業界諸多專家已經認可如下為不争事實:用可信計算技術來保護hypervisor是一個可行方法,Intel的Trusted eXecution Technology(TXT)就是一個典型案例。而用可信計算技術來保護使用者态OS是一個不可行方法,MS的Vista OS中的BitLocker技術就是嘗試這一方法的一個典型失敗案例。

下一講将介紹可信計算技術并讨論為什麼使用可信計算技術來保護hypervisor,尤其是保護象VMware ESX那種自身含有IO裝置驅動器的hypervisor,這種技術方法可以在雲計算或基于服務架構的安全保護上找到重要有效的應用。

本文轉自 wenbomao 51CTO部落格,原文連結:http://blog.51cto.com/wenbomao/169028,如需轉載請自行聯系原作者

繼續閱讀