北京林業(yè)大學(xué)北京密碼管理局北京 王雅超
北京密碼管理局北京 黃澤剛
將系統(tǒng)進行虛擬化后,一臺物理計算機系統(tǒng)虛擬化為多臺虛擬計算機系統(tǒng),每臺虛擬機都有自己的硬件(包括CPU、內(nèi)存、I/O等設(shè)備),通過虛擬化層的模擬,虛擬機中的操作系統(tǒng)認為自己獨占一個操作系統(tǒng)在運行。每個虛擬機中的操作系統(tǒng)可以完全不同,其執(zhí)行環(huán)境也是完全獨立的。利用計算虛擬化技術(shù)可以實現(xiàn)快速存儲和計算性能的無縫擴展,因此虛擬化技術(shù)為云計算提供了很好的底層技術(shù)平臺,是云計算技術(shù)的精髓。但是云計算平臺上的云架構(gòu)提供者必須向客戶提供具有安全隔離保證的虛擬機[6],在保證共享資源的前提下,實現(xiàn)虛擬機的安全運行[7]。從目前的情況來看,提供給使用者的虛擬機必須保證虛擬機與宿主機之間運行指令、存儲空間、網(wǎng)絡(luò)流量和用戶訪問的隔離。
虛擬化實現(xiàn)技術(shù)中,虛擬化層就是業(yè)內(nèi)定義的VMM(虛擬機監(jiān)視器)。從VMM提供的虛擬化平臺類型可以將虛擬化技術(shù)分為完全虛擬化和半虛擬化兩大類:安全虛擬化指客戶操作系統(tǒng)不需要做任何修改就可以運行;半虛擬化要求操作系統(tǒng)進行修改來適應(yīng)虛擬化平臺。目前半虛擬化技術(shù)基本很少被采用,VMM基本都采用完全虛擬化技術(shù)。完全虛擬化經(jīng)歷了兩個階段:軟件輔助的完全虛擬化和硬件輔助的完全虛擬化。隨著虛擬化技術(shù)成為云計算的核心技術(shù),日益發(fā)展壯大,為了能夠取得先機,x86廠商在硬件上加入了對虛擬化的支持,因此目前基本上所有的VMM都是基于硬件輔助虛擬化實現(xiàn)的完全虛擬化。本文以Intel的硬件輔助虛擬化技術(shù)為例論述底層虛擬化的實現(xiàn)。
XEN誕生于劍橋大學(xué)實驗室,XEN 是一個基于X86架構(gòu)、發(fā)展最快、性能最穩(wěn)定、占用資源最少的開源虛擬化技術(shù),Xen可以在一套物理硬件上安全的執(zhí)行多個虛擬機,與 Linux是一個完美的開源組合,Novell SUSE Linux Enterprise Server最先采用了XEN虛擬技術(shù)[2]。它特別適用于服務(wù)器應(yīng)用整合,可有效節(jié)省運營成本,提高設(shè)備利用率,最大化利用數(shù)據(jù)中心的IT基礎(chǔ)架構(gòu)。XEN 可以在一套物理硬件上安全的執(zhí)行多個虛擬機,它和操作平臺結(jié)合地極為密切,占用的資源最少。以高性能、占用資源少著稱,贏得了IBM、AMD、HP、Red Hat和Novell等眾多世界級軟硬件廠商的高度認可和大力支持, XEN最成功的應(yīng)用案例是亞馬遜基于該技術(shù)提供彈性主機服務(wù),國內(nèi)不少服務(wù)商也開始基于XEN技術(shù)開發(fā)出可商用的云計算服務(wù)平臺。
同一物理機上不同虛擬機之間的資源隔離是VMM(虛擬機監(jiān)視器)具備的基本特征之一,包括CPU、內(nèi)存、內(nèi)部網(wǎng)絡(luò)隔離、磁盤I/O等的隔離,XEN采用硬件輔助虛擬化實現(xiàn)了這些設(shè)備的完全隔離。
X86架構(gòu)為了保護指令的運行,提供了指令的4個不同的特權(quán)級別,術(shù)語稱為Ring,從Ring 0~Ring 3。Ring 0的優(yōu)先級最高,Ring 3最低。用戶級的應(yīng)用一般運行在Ring 3級別,操作系統(tǒng)需要直接訪問內(nèi)存和硬件,需要在Ring 0執(zhí)行它的特權(quán)指令,各個級別對可以運行的指令有所限制,X86架構(gòu)下CPU依據(jù)這樣的方式運行。虛擬化之后必須保證宿主機和虛擬機的不同指令運行于不同的級別。
硬件輔助虛擬化方面,Intel VT為CPU提供了VT-x技術(shù),此項技術(shù)擴展了X86處理器架構(gòu),為X86架構(gòu)的處理器虛擬化提供了硬件支持。VT-x引入了兩種操作模式,統(tǒng)稱為VMX操作模式[2]。
(1)根操作模式:在此模式下所有的指令行為和傳統(tǒng)的X86一樣。
(2)非根操作模式:客戶機運行的模式,所有敏感指令的行為都被重新定義,使得它們能不經(jīng)過虛擬化就直接運行或者通過“陷入”的方式進行處理。
具體實現(xiàn)如圖1所示
圖1 CPU虛擬化實現(xiàn)過程
根模式和非根模式都有相應(yīng)的特權(quán)級Ring0—特權(quán)級Ring3。在使用VT-x時,描述程序運行在某個特權(quán)級時,必須指明當(dāng)時是處于根模式還是非根模式。
VT-x中,在非根模式下,敏感指令引起的“陷入”稱為VM-Exit。VM-Exit使得CPU自動從非根模式切換到根模式。與之對應(yīng)的VM-Entry則使得VMM調(diào)度某個客戶機運行時CPU由根模式切換到非根模式。
通過以上描述的方式,在XEN環(huán)境下虛擬機CPU指令在實現(xiàn)了虛擬化的同時與宿主機之間實現(xiàn)完全的的隔離,從而保證虛擬機的穩(wěn)定運行。
Intel EPT(擴展頁表)是Intel VT-x提供的內(nèi)存虛擬化技術(shù),在原有的的CR3頁表地址映射的基礎(chǔ)上引入了EPT頁表實現(xiàn)另一種映射[3]。(具體如圖2所示)
圖2 內(nèi)存虛擬化實現(xiàn)過程
CPU首先查找客戶機CR3寄存器指向的L4頁表。(關(guān)于虛擬機地址轉(zhuǎn)換的內(nèi)容可以參看文獻1基礎(chǔ)原理)客戶機CR3寄存器給出的是客戶機物理地址,CPU通過EPT頁表將客戶機CR3中的客戶機物理地址轉(zhuǎn)換為宿主機物理地址,在獲得宿主機地址之后,CPU根據(jù)客戶機虛擬地址和L4頁表項內(nèi)容來獲取L3頁表項的客戶機物理地址。如果L4頁表中客戶機虛擬地址顯示為“缺頁”,那么CPU產(chǎn)生Page Fault直接交由客戶機操作系統(tǒng)處理,在獲得L3頁表項的客戶機物理地址后CPU通過查詢EPT頁表來將L3的客戶機物理地址轉(zhuǎn)換為宿主機物理地址。同樣,CPU會依次完成L2、L1的查詢,獲得客戶機虛擬地址對應(yīng)的客戶機物理地址,然后最后一次查詢EPT頁表獲得宿主機物理地址[1]。
以上是對內(nèi)存虛擬化實現(xiàn)的描述,每次查詢和地址轉(zhuǎn)換都是由VMM來完成的,VMM(虛擬機監(jiān)視器)通過處理器硬件功能使得客戶機操作系統(tǒng)運行在與之完全不同的地址空間里,并通過段限制使客戶機操作系統(tǒng)所能看見的空間大小,以保證VMM自身的安全性,從而防止虛擬機觸及VMM自身的運行狀態(tài)。通過權(quán)限驗證使得客戶機操作系統(tǒng)局限在給定的地址空間里,以保證一個虛擬機只能訪問分配給它的內(nèi)存頁,從而實現(xiàn)了整個系統(tǒng)的安全隔離,包括虛擬機與虛擬機之間、虛擬機與VMM之間的隔離。
在介紹虛擬機存儲空間隔離之前,我們先介紹一下XEN的虛擬域概念。
XEN的體系結(jié)構(gòu)有XEN Hypervisor和虛擬域組成,XEN虛擬機稱為虛擬域(Domain),有特權(quán)虛擬域(Dom0和IDD)與非特權(quán)虛擬域(DomU和HVM)組成[2]。Dom0時運行在XEN VMM之上的并且可以直接訪問底層的物理資源和其他的虛擬域DomU交互,其他虛擬域訪問I/O設(shè)備都需要經(jīng)過Dom0。DomU不能像特權(quán)虛擬域一樣直接訪問物理I/O設(shè)備,DomU中的操作系統(tǒng)通過分離驅(qū)動模型的前端驅(qū)動來訪問硬件設(shè)備,客戶機操作系統(tǒng)通過前端設(shè)備驅(qū)動向位于Dom0中的后端驅(qū)動程序發(fā)送I/O請求,再由后端設(shè)備驅(qū)動將請求交給原始設(shè)備驅(qū)動處理,并將結(jié)果返給DomU[1]。
從上面的描述可以看出,前端驅(qū)動在DomainU中運行,而后端驅(qū)動和原生驅(qū)動則在Domain0中運行。前端驅(qū)動負責(zé)將DomainU的I/O請求傳遞到Domain0中的后端驅(qū)動,后端驅(qū)動解析I/O請求并映射到物理設(shè)備,提交給相應(yīng)的設(shè)備驅(qū)動程序控制硬件完成I/O操作。換言之,虛擬機所有的I/O操作都會由VMM截獲處理;VMM保證虛擬機只能訪問分配給它的物理磁盤空間,這樣通過域控制將I/O實現(xiàn)有效限制從而實現(xiàn)不同虛擬機硬盤空間的安全隔離。
通常情況下,虛擬機可以使用防火墻規(guī)則、VLAN等實現(xiàn)虛擬機的網(wǎng)絡(luò)隔離問題,這些實現(xiàn)技術(shù)與傳統(tǒng)的物理機沒有大的區(qū)別。這里介紹一種新的虛擬機網(wǎng)絡(luò)交互隔離的方法。在國內(nèi)一些廠商的實現(xiàn)過程中有的稱為“安全組技術(shù)”[9],這種方式可以解決云計算環(huán)境下特有的虛擬機網(wǎng)絡(luò)隔離問題。
它的使用場景主要是解決云環(huán)境下:1、租戶不能管理虛擬機主機的IP地址,也看不見VLAN的對應(yīng)關(guān)系的問題。2、一個VLAN內(nèi)不同VM之間要隔離,不能實現(xiàn)共享訪問的問題。
它的基本原理其實很簡單,就是使用主機Linux操作系統(tǒng)自帶包過濾防火墻Iptables,對進入主機操作系統(tǒng)的報文進行過濾。iptables信息包過濾系統(tǒng)是一款功能強大的工具,可用于添加、編輯和移除規(guī)則,它使插入、修改和除去信息包過濾表中的規(guī)則變得容易。通過各種不同的規(guī)則,對來自不同源地址、目的地址以及協(xié)議特征的數(shù)據(jù)包進行處理。規(guī)則存儲在包過濾表中,而包過濾表被集成在Linux內(nèi)核中[5]。在信息包過濾表中,規(guī)則被分組放在鏈中。
在云管理上創(chuàng)建安全組,將虛擬機網(wǎng)卡加入到安全組后,Iptables會根據(jù)同一級別的虛擬機(安全組)ID創(chuàng)建一條用戶鏈,并將虛擬機網(wǎng)卡加入到該鏈中。后面對這些虛擬機添加規(guī)則時,所有的規(guī)則都會加入到該鏈中。主機向虛擬機網(wǎng)卡轉(zhuǎn)發(fā)的數(shù)據(jù)報文均會通過用戶鏈中的規(guī)則進行匹配,滿足匹配要求的數(shù)據(jù)報文才能轉(zhuǎn)發(fā)給虛擬機[9]。
安全組在出方向上的數(shù)據(jù)報文全部放行,在入方向上的數(shù)據(jù)報文默認拒絕訪問。因此安全組只支持在入方向上添加安全組規(guī)則,以類似白名單的方式管理需要訪問安全組的源。如下圖3所示:
圖3 安全組訪問流程
實現(xiàn)云計算中虛擬機使用者具有強身份認證一直以來都是云計算需要解決的主要安全問題之一,其主要思想是利用認證中心頒發(fā)的數(shù)字證書來實現(xiàn),數(shù)字證書表明了使用者的身份,數(shù)字證書與屬性證書相結(jié)合形成一個數(shù)據(jù)結(jié)構(gòu),證書持有者的信息與一些屬性進行綁定,通過數(shù)字證書相應(yīng)包含的屬性實現(xiàn)相應(yīng)的權(quán)限。通過持有數(shù)字證書,當(dāng)訪問者訪問虛擬機時,驗證者通過預(yù)設(shè)的相應(yīng)的權(quán)限規(guī)范進行驗證,就能對用戶訪問的合法性做出判斷。關(guān)于這方面的內(nèi)容筆者已經(jīng)在《信息安全與通信保密》雜志的《云計算環(huán)境下虛擬機用戶身份認證技術(shù)研究及實現(xiàn)》一文中有過詳細的論述,有興趣的讀者可以參考,這里不再贅述。
云計算技術(shù)正在迅速發(fā)展,其結(jié)構(gòu)特征決定了其開放性、復(fù)雜性、按需服務(wù)、虛擬化使用資源、彈性搭建等特征,也決定了其面臨的安全問題也日益突出。虛擬機資源共享可以實現(xiàn)資源動態(tài)分配但也帶來了一些安全風(fēng)險,實現(xiàn)虛擬機的安全隔離一直是業(yè)內(nèi)關(guān)注的問題,了解目前虛擬機的隔離技術(shù)可以使我們在建設(shè)或使用虛擬資源時規(guī)避虛擬機隔離的安全風(fēng)險,但我們也應(yīng)該看到,虛擬機的資源共享帶來的很多安全風(fēng)險目前業(yè)界并沒有安全解決的辦法,例如虛擬機處于一臺物理主機之上時相互的隔離相對薄弱。這些都需要云計算安全研究人員在以后的工作中加以完善。筆者認為解決虛擬化的安全問題應(yīng)該將傳統(tǒng)的安全設(shè)備與方法進行適當(dāng)?shù)倪w移,拓闊思路結(jié)合第三方認證來實現(xiàn)可能是一條可行的道路。