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