【摘 要】 虛擬化技術是云計算實現(xiàn)提供用戶靈活增減IT資源、按需付費等特色服務的基礎。虛擬化技術架構主要由宿主機、虛擬化層和虛擬機3部分組成,每個部分都存在各種安全問題,其中虛擬機逃逸被認為是對虛擬機安全最嚴重的威脅之一。本文提煉虛擬機逃逸的提權模型,劃分其表現(xiàn)特征,并對虛擬化安全的研究提出了展望。
【關鍵詞】 虛擬化 虛擬機逃逸 提權模型 表現(xiàn)特征
1 引言
近些年,虛擬化技術從開源KVM、XEN到Docker和Kubernetes,微服務和軟件定義網絡的理念模糊了開發(fā)和運維的界限,也把更多的安全問題帶入到虛擬化技術中。更多基礎設施即服務(Iaas)管理平臺的問題以及云供應商的不可控都給虛擬化技術的安全應用帶來阻礙,而真正的虛擬化安全要從虛擬化技術本身談起。虛擬機分享宿主機的資源,宿主機提供了虛擬機之間、宿主機與虛擬機之間的隔離。虛擬機的設計理念是虛擬機上運行的程序不能監(jiān)控和交互宿主機與其他虛擬機上運行的程序。但是隨著虛擬化技術的延展,這種隔離機制被弱化,導致安全問題的發(fā)生。一個最典型的攻擊類型是虛擬機逃逸,早在2007年,就有研究人員提出當宿主機與虛擬機之間的隔離機制被弱化的時候,它是最嚴重的威脅。虛擬機逃逸的定義是指虛擬機里運行的程序利用虛擬機的漏洞突破虛擬機管理器(Hypervisor),獲得宿主機操作系統(tǒng)管理權限,并控制宿主機上運行的其他虛擬機,導致安全環(huán)境架構的徹底破壞。
虛擬化環(huán)境中,上層虛擬機與底層虛擬機監(jiān)控器進行交互,實現(xiàn)對底層物理資源的訪問,而這種交互過程就是潛在的引入虛擬機逃逸漏洞的關鍵。虛擬機逃逸的發(fā)生來源于虛擬化技術自身的安全問題,而虛擬化自身的安全問題往往由虛擬化技術的機制產生。下面從虛擬機逃逸的提權模型和表現(xiàn)特征展開討論。
2 虛擬機逃逸的提權模型
虛擬機逃逸種類繁多,原因復雜,很難對其進行歸納總結,提取共同特征。本小節(jié)基于虛擬化系統(tǒng)中指令處理的機制和原理,嘗試揭示虛擬機逃逸的根本原因,提出虛擬機逃逸的提權模型,發(fā)掘虛擬機逃逸的根源。
2.1 虛擬機逃逸的提權機理
攻擊者利用虛擬機操作系統(tǒng)發(fā)起執(zhí)行相關敏感指令的請求,該指令會交由內核態(tài)去處理,對于某些特權指令會交由Hypervisor處理,此時攻擊者可利用Hypervisor的脆弱性漏洞使得Hypervisor執(zhí)行完特權指令后不產生指令狀態(tài)的返回,導致用戶態(tài)停留在了內核態(tài),攻擊者實現(xiàn)了提權,隨后攻擊者可以滲透到Hypervisor和虛擬機的其他區(qū)域,破壞虛擬化的隔離機制,完成逃逸操作。虛擬機逃逸的關鍵機理是先提權后滲透,提權完成系統(tǒng)級別的控制切換,滲透完成隔離機制的破壞,從而打破虛擬化體系的安全機制。
虛擬機逃逸是一個復雜多變的過程,完成一次成功的逃逸攻擊,需要具備下面4個條件:
(1) 一個有漏洞的內核;
(2)一次可匹配漏洞的逃逸;
(3)擁有將逃逸轉移到目標位置的能力;
(4)擁有在目標位置上執(zhí)行逃逸攻擊的能力。
假設用戶處于Ring3狀態(tài),實現(xiàn)逃逸利用的通用流程為:
(1)誘使內核在根模式Ring0下運行企圖的有效載荷;
(2)修改任意數(shù)據,例如進程權限;
(3)以新權限啟動一個Shell,并獲取root權限。
權限提升的目的:
(1)讀/寫任意的敏感文件;
(2)系統(tǒng)重啟后依然運行;
(3)插入永久后門。
2.2 虛擬機逃逸的提權模型構建
CPU指令按照運行級別的不同,可以劃分為特權指令和非特權指令兩類。特權指令只能在最高級別上運行,非特權指令可以在各個級別的狀態(tài)下執(zhí)行。引入虛擬化后,客戶機操作系統(tǒng)就不能運行在Ring 0上,原本需要在最高級別下執(zhí)行的指令不能直接執(zhí)行,而是交由Hypervisor處理執(zhí)行,這部分指令稱為敏感指令。屬于特權指令的敏感指令可以陷入Hypervisor下直接執(zhí)行。而非特權指令的敏感指令在(軟件)全虛擬化模式和半虛擬化模式下需要進行復雜的陷入和模擬操作才能執(zhí)行,該難題在硬件輔助虛擬化下得到解決。
權限提升在虛擬化系統(tǒng)中尤為重要,包括兩部分權限提升,從用戶層到內核層,從內核層到虛擬化層。權限提升可以使得攻擊者獲得更高的權限,運行的代碼級別更高,危害更大。下面分別給出全虛擬化/半虛擬化模式提權模型和硬件輔助虛擬化模式提權模型。
全虛擬化/半虛擬化的提權模型如圖1所示。
在全虛擬化和半虛擬化模式下,敏感指令在Ring0級執(zhí)行完后沒有返回用戶級Ring3,而是駐留在Ring0級,表示用戶態(tài)應用程序成功逃逸到最高特權級。
為了減輕全虛擬化模式應用二進制翻譯技術帶來的性能消耗過大,以及克服半虛擬化模式需要修改虛擬機操作系統(tǒng)帶來的不便,硬件輔助虛擬化模式在2005年出現(xiàn),并成為至今普遍推廣的虛擬化模式,其提權模型如圖2所示。
在硬件輔助虛擬化模式下,非根模式Ring3級的用戶操作使得敏感指令在根模式的Ring0級執(zhí)行后駐留在Ring0,表示虛擬機非根模式應用程序成功逃逸到根模式宿主機最高特權級。
3 虛擬機逃逸的表現(xiàn)特征
當前對虛擬機逃逸的分類沒有一定的標準,為了最大程
度涵蓋截至當前出現(xiàn)的虛擬機逃逸漏洞,本小節(jié)從國內外專業(yè)漏洞庫CVE(Common Vulnerabilities and Exposures,公共漏洞和暴露)和NVD(National Vulnerability Database,國家漏洞數(shù)據庫)搜集信息,采用造成虛擬機逃逸漏洞的表現(xiàn)特征來進行分類,任何一個逃逸漏洞包括表現(xiàn)特征的一個或多個組合,其表現(xiàn)特征主要劃分為以下4個方面。
3.1 拒絕服務類型
傳統(tǒng)拒絕服務是指通過占滿服務器的所有服務線程或者網絡帶寬,導致正常的服務請求無法得到響應,致使服務器處于癱瘓的狀態(tài)。拒絕服務類型虛擬機逃逸與傳統(tǒng)網絡攻擊中的拒絕服務攻擊有所區(qū)別,虛擬機環(huán)境中,惡意用戶以正常租戶的身份獲取客戶虛擬機,利用設備仿真或其他類型漏洞,引起緩沖區(qū)溢出或內核崩潰,導致客戶機惡意停止工作,甚至影響其他客戶虛擬機,造成嚴重的拒絕服務。一個典型的拒絕服務類型虛擬機逃逸漏洞如CVE-2019-3887:基于內核虛擬機的虛擬化系統(tǒng)(Kernrel-based Virtual Machine,KVM)的Hypervisor在啟用嵌套虛擬化的情況下處理x2APIC特殊機器寄存器(MSR)訪問的方式存在缺陷。在這種情況下,當啟用“virtualize x2APIC mode”時,L1 guest虛擬機可以通過L2 guest訪問L0的APIC寄存器值。攻擊者可以利用此漏洞致使主機內核崩潰,從而導致拒絕服務問題。
3.2 內存隔離失效類型
內存隔離失效類型主要包括緩沖區(qū)溢出和堆棧溢出等,緩沖區(qū)溢出是一種非常普遍、非常危險的漏洞,在各種操作系統(tǒng)、應用軟件中廣泛存在。緩沖區(qū)在系統(tǒng)中的表現(xiàn)形式是多樣的,高級語言定義的變量、數(shù)組、結構體等在運行時可以說都是保存在緩沖區(qū)內的,因此所謂緩沖區(qū)可以更抽象地理解為一段可讀寫的內存區(qū)域,緩沖區(qū)攻擊的最終目的就是希望系統(tǒng)能執(zhí)行這塊可讀寫內存中已經被蓄意設定好的惡意代碼。按照馮·諾依曼存儲程序原理,程序代碼是作為二進制數(shù)據存儲在內存的,同樣程序的數(shù)據也在內存中,因此直接從內存的二進制形式上是無法區(qū)分哪些是數(shù)據哪些是代碼的,這也為緩沖區(qū)溢出攻擊提供了可能。
利用緩沖區(qū)溢出攻擊,可以導致程序運行失敗、系統(tǒng)宕機、重新啟動等后果。而緩沖區(qū)溢出類型的虛擬機逃逸漏洞,則更為嚴重,它可以利用溢出執(zhí)行非授權指令,甚至可以取得系統(tǒng)特權,進而進行各種非法操作,對數(shù)據的安全造成嚴重威脅。
CVE-2020-8834是較新的堆棧損壞逃逸攻擊,在Power8處理器上的Linux內核中,KVM在kvmpc{save,restore}tm中使用HSTATE_HOST_R1將R1狀態(tài)存儲在kvmpcuhv_entry plus中時發(fā)生沖突,導致堆棧損壞。具有在客戶虛擬機內核空間中運行代碼能力的攻擊者可以導致主機內核死機。
3.3 權限提升類型
權限提升漏洞是指利用該安全漏洞使得自己突破了原來的限制,能夠非法訪問其他信息,甚至使得自己能夠如管理員那樣來獲取整個系統(tǒng)控制權。權限提升型虛擬機逃逸漏洞即:客戶機非法獲取了宿主機操作系統(tǒng)權限,進而實現(xiàn)對整個集群的控制能力。這種權限提升要么來源于指令操作的錯誤結果,要么來源于系統(tǒng)對某些指令或指針沒有預先的限制而導致潛在的權限提升可能。
CVE-2018-10853虛擬機逃逸漏洞是一個權限提升類型的代表,在KVM4.18版本之前,Linux內核的Hypervisor處發(fā)現(xiàn)了一個仿真指令的錯誤。在仿真非權限指令時,它不檢查當前權限級別,導致一個非權限用戶或進程可以利用這個錯誤提升權限。
3.4 QEMU仿真錯誤類型
KVM的內核模塊存在于系統(tǒng)Linux內核,并且直接在內核態(tài)上執(zhí)行,一旦內核模塊攻陷,攻擊者甚至無須進一步提權。但是,內核模塊比用戶空間組件的代碼量少很多,攻擊者難以下手,而且從實施的角度講,攻擊者很難從客戶機上接觸到存在于物理機的內核組件。QEMU是由法布里斯·貝拉(Fabrice Bellard)所編寫的以GPL許可證分發(fā)源碼的模擬處理器,可以模擬多款不同架構的CPU,還包含部分硬件模擬,例如軟驅、顯卡、并口、串口、聲卡、網卡等以提供基本的操作系統(tǒng)運行所需環(huán)境。而QEMU作為組件中代碼量最龐大也最陳舊的部分,在設備仿真過程中,更容易成為攻擊者的下手對象,當前的QEMU-KVM可以多線程實現(xiàn)硬件I/O虛擬化。
例如:CVE-2020-25637的漏洞,是在libvirt6.8.0之前的版本中,出現(xiàn)雙可用內存問題,該問題發(fā)生在請求有關正在運行的QEMU域的網絡接口信息的過程中,影響訪問控制驅動程序。尤其是使用有限的ACL權限連接到讀寫套接字的客戶端,可能會利用此漏洞使libvirt守護程序崩潰,可升級其在系統(tǒng)上的權限。
從以上4種虛擬機逃逸的類型中可以看出,無論逃逸用什么方法,最終的目的是提權,只有這樣,才能造成宿主機或Hypervisor崩潰,或執(zhí)行任意代碼,從而控制Hypervisor或其他虛擬機戶。
4 虛擬化安全研究展望
本文設計了虛擬機逃逸的提權模型,概括了虛擬機逃逸的表現(xiàn)特征。當前對虛擬化技術的安全威脅、安全研究點以及安全架構眾說紛紜,是為了研究虛擬化安全而試圖增添更多的威脅還是脫離了虛擬化技術本身而去研究實際系統(tǒng)安全,筆者做出以下的研究展望。首先,虛擬化技術本身是充分利用資源,是計算資源的高效利用,而不是敏感數(shù)據的無規(guī)則處理。研究虛擬化技術安全,應該從其本身的機理、特征出發(fā),分析其對系統(tǒng)造成的影響。其次,虛擬化的管理平臺帶來了更多的安全問題,從最早的cloudstack到openstack管理平臺,從紅帽的RHEV管理平臺到開源的oVirt管理平臺,以及各家各自基于開源代碼的虛擬化管理平臺均是如此。與其說是虛擬化技術選擇了管理平臺,不如說是管理平臺選擇了虛擬化,而所謂的安全問題、安全威脅讓虛擬化技術脫離其自身的機理,而是更偏向了傳統(tǒng)系統(tǒng)安全。最后,云供應商當前被認為是存儲數(shù)據不可控的源頭,甚至是虛擬化系統(tǒng)不安全的一個重要原因。實際一個安全的系統(tǒng)不應該由外界接觸,而是建立自己的補丁測試團隊和安全運維團隊。美國很早就讓敏感系統(tǒng)脫離外界接觸,供應商根本不知道給誰提供了系統(tǒng),給誰提供了服務,而是由敏感系統(tǒng)的設計團隊負責,只有這種模式才能解決外界不可控的問題?傊,虛擬化安全融入系統(tǒng)安全得到重視,也應因系統(tǒng)安全而萌發(fā)獨特活力。
(原載于《保密科學技術》雜志2020年10月刊)