何重陽,朱仲馬,劉曉浩,周 英
(中國電子科技集團公司第二十八研究所,江蘇 南京 210007)
隨著云計算的普及,云安全問題逐漸成為人們關注的焦點。云計算通過虛擬化技術將計算、存儲、網絡資源轉化為共享資源,在提升資源使用效率、增加IT基礎設施靈活性的同時,也使IT基礎設施透明度和用戶對資產的控制性降低,用戶在采用云計算服務時會產生諸多安全顧慮[1]。因此,為確保云環境下用戶數據的安全性,必須對云環境下的安全風險進行深入分析并加以解決。
云安全研究主要圍繞訪問認證、數據層面、虛擬化層風險、網絡攻擊等展開,目的是防止用戶非授權訪問其他用戶資源,確保用戶關鍵數據加密存儲和傳輸、發現并解決虛擬化層漏洞,提供安全可靠的密鑰管理機制及防止網絡攻擊,確保不同用戶網絡流量的隔離等[2-6]。本文主要研究從虛擬化層面對云計算安全進行增強設計。
虛擬化技術作為云計算的核心技術,以虛擬機的形式將計算資源交付給用戶,用戶可按需指定CPU、內存以及磁盤大小,每個虛擬機用戶看到的都是相互獨立的操作系統,可在一定程度上保證用戶數據安全,但是這種安全建立在可靠的虛擬化技術之上,一旦虛擬化層被攻破,虛擬機之間的隔離性也就蕩然無存。針對虛擬化層的攻擊主要來源于虛擬機監視器自身的安全威脅、資源再分配時的殘余信息泄露等。攻擊者可能會利用虛擬機監視器漏洞獲取對整個主機的訪問,實施虛擬機逃逸等攻擊,從而可以訪問或控制主機上運行的其它虛擬機[5];其次,在資源再分配方面,當不再需要的虛擬機被刪除后,釋放的資源被分配給其它虛擬機時,可能發生數據泄露,例如攻擊者可以采用取證調查技術獲取整個物理內存以及數據存儲鏡像,從而獲取前一臺虛擬機遺留下的重要信息。
本文主要從安全隔離角度出發,基于虛擬化技術原理,提出從CPU虛擬化、內存虛擬化、IO虛擬化3個方面進行安全隔離增強的設計方案,分別包括關鍵控制結構混淆保護、內存殘余信息清除、虛擬機磁盤IO邊界檢查、虛擬機磁盤剩余信息清除等技術方案。
虛擬化技術發展經歷了全虛擬化、半虛擬化以及現在基于硬件輔助的虛擬化實現。考慮到業界主流的云計算廠商,如亞馬遜云、阿里云以及開源Openstack等,底層虛擬化技術基本采用KVM作為虛擬化技術,因此本文將主要關注KVM虛擬化技術[7-8]。
下面將分別從CPU、內存、I/O虛擬化3個方面介紹虛擬化技術原理。
CPU虛擬化是虛擬化技術的核心, CPU虛擬化從基于攔截再模擬的全虛擬化、到通過修改虛擬機操作系統代碼實現Hypercall(超級調用)的半虛擬化,以及現在主流的基于硬件輔助的虛擬化技術過程[9-10]。

圖1 CPU虛擬化技術原理
以Intel CPU硬件虛擬化技術為例,每個客戶虛擬機可以包含多個虛擬VCPU,每個VCPU實際對應一個Qemu線程,VCPU的生命周期處理都在Qemu線程上下文中進行,需要Kernel、User和Guest三種模式相互配合,其工作模型如圖1所示。Qemu線程以ioctl的方式與KVM內核模塊進行交互,而KVM內核模塊與客戶虛擬機通過VM Exit和VM entry操作進行切換。

圖2 內存虛擬化
客戶機物理地址空間都是從零開始的連續地址空間,但對于宿主機來說客戶機的物理地址空間并不一定是連續的,客戶機物理地址空間有可能映射在若干個不連續的宿主機地址區間。內存虛擬化原理如圖2所示,通過KVM 引入新的地址空間,即客戶機物理地址空間 (Guest Physical Address, GPA),該地址空間只是宿主機虛擬地址空間在客戶機地址空間的一個映射。
客戶機內存虛擬化經過兩層轉換,第一層是客戶機虛擬地址到客戶機物理地址轉換:GVA (Guest Virtual Address) → GPA (Guest Physical Address),由客戶機操作系統透過頁表作轉換,即傳統做法;第二層轉換由VMM負責實現,完成客戶機物理地址到宿主機物理地址轉換[11-13]:GPA (Guest Physical Address) → HPA (Host Physical Address)。
目前有3種IO虛擬化方式:①軟件模擬方案,通過軟件實現,優點是容易實現,缺點是性能差;②半虛擬化技術通過共享內存控制請求的傳輸,基于傳送消息進行設備通知,性能很高;③設備直通模式,優點是可以達到接近設備原生的性能,缺點是虛擬機和物理設備是強耦合關系[14-15],如圖3所示。

圖3 IO虛擬化3種常見模式
本文以主流的基于前后端驅動實現的virtio模型為例介紹其實現原理,前端驅動frontend是運行在客戶虛擬機上的驅動程序模塊(virtio-blk,virtio-net等驅動),后端通過QEMU實現,屏蔽了底層設備驅動之間的差異,因此效率很高。
虛擬化技術在一定程度上實現了基本的資源隔離功能,但是從虛擬化安全的角度看仍存在一定的安全風險,比如相關資源釋放之前沒有進行清除等問題。為進一步提升系統安全性能,對系統潛在的安全風險進行評估,進而提出對資源隔離增強、剩余信息保護等關鍵技術,系統采用的關鍵技術如下[16]:

圖4 CPU虛擬化
在基于qemu-kvm的虛擬化機制中,每個虛擬機以一個進程的形式存在,而每個VCPU則是這個進程中的一個線程,VMM通過操作系統的調度機制實現了不同虛擬機不同VCPU的調度運行。每個VCPU都能得到在物理CPU上運行的時間片,即計算資源。這種計算資源使用的切換即進程上下文的切換,可保證不同虛擬機獲得相對獨立的計算資源[17],如圖4、圖5所示。

圖5 VM-Entry過程上下文切換
Intel 通過引入虛擬機控制VMCS關鍵數據結構,對VCPU的上下文切換提供硬件支持。

圖6 VMCS關鍵數據結構
如圖6所示,VMCS承載了虛擬機的關鍵信息,相對敏感且存在泄漏的可能,比如惡意軟件的跨進程獲取等。出于安全增強目的,系統在VMM讀取物理CPU信息到VMCS數據結構時采取了異或混淆算法,在每個虛擬機開機時生成隨機密鑰,對VMCS數據進行混淆,從而保證VMCS信息不被泄漏,混淆保護原理見圖7。

圖7 VMCS混淆保護原理
內存虛擬化實現了從客戶機內部的虛擬地址空間到宿主機的物理內存空間的映射,前一種映射由客戶機頁表自己維護,后一種映射由VMM實現。當虛擬機內部程序訪問虛擬地址時,通過硬件擴展頁表機制(EPT)實現加速[18]。
在qemu-kvm內存虛擬化體制中,客戶機的物理內存是作為虛擬機所在進程的線性地址空間的一部分存在的。在宿主機中,不同進程的內存獨立分配且隔離,系統禁用了內存共享機制KSM,可以保證各虛擬機獨占式的內存訪問。
基于剩余信息的保護,在虛擬機內存資源釋放時,系統進行了內存剩余信息的清除,保證任何時候虛擬機信息不被泄漏。

圖8 內存剩余信息清除流程
內存清除采用數據覆寫,在系統釋放內存前使用二進制值填充需要保護的內存空間,剩余信息保護子系統作為可擴展模塊由事件觸發回調,系統初始化時注冊事件回調,系統退出時注銷回調。
虛擬機內部的一次IO操作經過客戶機內部的IO棧,通過IO虛擬化機制(virtio)進入QEMU設備模擬部分。虛擬機的磁盤在物理機上以文件形式存在,qemu通過主機的IO棧實現最終磁盤的讀寫。在進入主機IO棧VFS層時,系統會根據文件描述符fd的值在當前進程的文件描述表中找到對應的file,然后找到f_op指向的索引節點inode文件操作方法,最后調用inode指向的文件讀寫函數完成讀寫。圖9是虛擬機讀寫磁盤的IO路徑[19-20]。

圖9 虛擬機讀寫磁盤IO路徑
基于上述分析,系統通過在VFS層增加“鉤子層”,對虛擬機的磁盤IO訪問進行邊界校驗,確保不同虛擬機的磁盤讀寫操作不會越界,進而提升虛擬機磁盤的隔離性。VFS存在于文件系統層面上,可以兼容多種文件系統,如EXT3、EXT4、 XFS、GFS2、NFS等,具有兼容性好的優點。即使VMM存在漏洞或被攻破,VFS也能從宿主機系統層面進行保護,因此該功能與VMM無關,有良好的獨立性和可控性。
在刪除虛擬磁盤鏡像時,首先對鏡像文件所占用的數據塊按塊進行覆寫,然后對文件進行隨機位置覆寫,最后用逐位覆寫方式寫0,覆蓋磁盤文件所使用的磁盤扇區,流程見圖10。

圖10 磁盤剩余信息清除流程
服務器虛擬化技術作為云計算的核心技術,在為云環境提供靈活按需分配、提升系統資源利用率、虛擬機熱遷移等特性的同時,也給IT基礎設施帶來了安全風險。本文從資源隔離增強和剩余信息清除角度出發,通過分析虛擬化技術的實現原理和安全風險,分別從CPU虛擬化、內存虛擬化、IO虛擬化方面提出了安全隔離增強的具體設計方案。在CPU虛擬化方面,系統通過對關鍵數據結構VMCS進行混淆加密,達到防止關鍵信息泄露導致的安全風險,保證用戶虛擬機敏感信息可控;在內存虛擬化方面,系統通過虛擬機殘余內存信息的清除,避免了虛擬機釋放后的內存信息被惡意獲取并使用的安全風險;在IO虛擬化方面,系統通過對虛擬機磁盤IO訪問進行邊界檢查和磁盤剩余信息清除,杜絕了虛擬機非法訪問其它非授權地址空間的可能性,確保用戶虛擬機刪除后其他用戶或惡意軟件無法對磁盤信息進行恢復和再利用。