逃離雲端“母體”——虛擬機器逃逸研究進展
作者:@楊坤 ,長亭科技首席安全研究員
雲端計算時代已然到來,計算能力已經如同水和電一般,能夠被我們隨時使用,按需按量使用。依託於公有云設施,你只需輕鬆點選滑鼠,即可購買處理器、記憶體、硬碟儲存、網路頻寬等資源,還可以伴隨著需求的變化隨時靈活調整用量,或增或減。實現這種魔法的核心技術之一正是虛擬化,它是一種能夠將單一的硬體資源抽象成可細粒度調配的虛擬硬體資源池的技術。虛擬化技術的誕生極大地提高了計算資源的伸縮性和可管理性。
什麼是虛擬機器逃逸?
越來越多的應用不再直接執行在硬體上,而是執行在虛擬世界——虛擬機器上。相對應的,真實世界中的每一臺物理機被稱為“宿主機”,通過虛擬化技術,它們被抽象成若干臺虛擬機器,每一臺虛擬機器之上可以執行不同的應用程式。這時候,為了防止不同虛擬機器中執行的應用之間互相干擾,搶佔許可權,洩露資訊,就要求“宿主機”有能力維持虛擬世界的秩序,讓虛擬機器之間完全隔離,讓應用認識到它所存在的虛擬機器就是世界的全部,而看不見其他虛擬機器的存在。“宿主機”的這種掌控能力,就是虛擬化技術在設計時必須考慮的目標之一,也是雲端計算安全的基石。
然而虛擬化技術構建的安全屏障並非牢不可破。《黑客帝國》的主人公Neo生存的“母體”就是一個完全虛擬的世界,當他吞下紅色藥丸,即可完成“母體”的逃離,從而認識真實世界。虛擬化技術在設計或實現中存在的漏洞就是這顆“紅色藥丸”,虛擬機器裡執行的程式可以通過漏洞利用,突破禁錮,掌控“宿主機”,實現虛擬機器逃逸。
虛擬機器逃逸攻擊打破了許可權與資料隔離的邊界,讓攻擊者從虛擬機器裡的“普通人類”,一躍成為掌控宿主機的“神”,得以窺探和管控同一片雲下成百上千個虛擬機器應用和海量資料。不得不說,虛擬機器逃逸已成為雲端計算時代令人聞風喪膽的重大安全威脅之一,這樣的攻擊能否真的實現?難度究竟有多少?
過去十年,主流虛擬化技術無一倖免
過去的二十年裡,虛擬化技術突飛猛進,虛擬化領域的各種流派都得到了極大的發展。在開源領域,KVM佔據了主導地位,Xen以將近二十年的歷史也佔據了一席之地,甲骨文的VirtualBox大多運用在小型測試場景;在商業戰場,VMware穩坐領頭羊的位置,微軟的Hyper-V在其身後不斷髮起衝擊。
而所有的這些主流虛擬化軟體,在過去的十年裡,面對虛擬化逃逸攻擊,無一倖免,讓我們一一盤點這些歷史上出現過的“紅色藥丸”。
2009年,Immunity的安全研究員Kostya在BlackHat上演示了VMware Workstation逃逸。研究人員發現了圖形顯示相關的SVGA裝置中的多個漏洞。SVGA模擬裝置為虛擬機器的2D和3D影象繪製提供了大量命令,由於在這些命令的處理程式碼中並未做好引數檢查,導致攻擊者可以利用記憶體越界訪問來實現虛擬機器逃逸。
2011年,來自Ksplice的核心工程師Nelson Elhage在BlackHat上演示了KVM逃逸,逃逸中利用了虛擬PIIX4裝置中的漏洞。PIIX4是一個主機板上的晶片,支援PCI熱插拔,由於虛擬裝置在程式碼實現中並未考慮硬體移除時產生的後果,導致出現了一個釋放後使用(Use After Free)的問題。
2014年,Francisco Falcon在REcon上演示了VirtualBox逃逸,逃逸中利用了VirtualBox在3D加速功能中出現的記憶體訪問漏洞。
2016年,阿里雲安全團隊的Shangcong Luan在HITBSec上演示了Xen逃逸。研究人員發現了Xen在虛擬記憶體管理中出現的一個漏洞,並通過它實現記憶體的任意讀寫,最終實現了對宿主機的控制。同年,世界黑客大賽Pwn2Own中首次引入虛擬機器逃逸比賽專案,吸引了全球範圍內的安全研究人員的關注,並在2017和2018年連續兩年均有參賽選手成功挑戰VMware Workstation和VirtualBox虛擬機器逃逸。
2018年,長亭科技安全研究實驗室的f1yyy在GeekPwn上演示了VMware ESXi虛擬機器逃逸。VMware ESXi是企業級虛擬化方案的核心繫統,防護級別高於桌面版的VMware Workstation,這是全球範圍內針對ESXi的首次逃逸。此次逃逸攻擊不僅利用了虛擬網絡卡裝置的多個漏洞,也組合了繞過防護策略的技巧,才得以成功。
2018年,微軟安全工程師Jordan Rabet在BlackHat上首次演示了Hyper-V逃逸。廠商的員工對自家產品做公開的攻擊演示,是非常少見的情形,很好地證明了微軟對待安全的積極和開放態度。微軟也為虛擬機器逃逸漏洞單獨設立了豐厚的漏洞獎勵計劃,開出了最高一個漏洞25萬美元的獎勵。在這樣的激勵下,全球的研究人員為HyperV貢獻了不少研究成果。
以上列舉了過去十年裡具有代表性的虛擬機器逃逸攻擊案例。可以看到,在攻防對抗的研究浪潮裡,主流的虛擬化軟體KVM、Xen、VMware、VirtualBox、HyperV無一倖免。事實上,除了這些案例,其他被發現和修復的虛擬機器逃逸漏洞還有很多很多,數不勝數。
虛擬裝置已成重災區
虛擬化技術包含了CPU虛擬化、記憶體虛擬化、I/O虛擬化等技術。回顧過去十年出現的虛擬機器逃逸漏洞,I/O虛擬化技術中的虛擬裝置是大部分漏洞產生的根源。
虛擬裝置通常解決的是物理裝置複用的問題,即如何將有限的硬體外設,例如網絡卡,抽象成多個網絡卡,來給不同的虛擬機器使用。因此虛擬裝置就應當有能力模擬出真實裝置的完整功能,要能夠為虛擬機器提供所有真實裝置本應支援的介面,並維護和記錄自身狀態。遇到需要真實硬體完成的功能時,再由虛擬裝置進行傳遞和呼叫。
完整模擬硬體裝置的功能並非易事,開發者需要遵循相關裝置的功能說明書,以實現完整介面,供虛擬機器使用。這些功能說明書動輒百頁,程式碼實現複雜度較高。再加上虛擬裝置種類繁多,出現編碼問題的可能性就更大了。
在VMware多年的安全公告中,虛擬裝置漏洞的整體數量佔比超過了50%;在2016年的統計中,虛擬裝置漏洞比例甚至達到了70%。多年來,Qemu專案中虛擬裝置的漏洞數量達到了數百個,同時影響到了基於KVM和Xen的虛擬機器。VirtualBox甚至公開警告使用者謹慎使用一些虛擬裝置,聲稱其中可能存在較大的安全風險。
所幸大量的研究人員已經將這一問題公開出來,一方面大量的虛擬裝置漏洞得到發現和修復,另一方面也給虛擬化技術廠商和社群敲響了警鐘。面對虛擬裝置這一重災區,未來是否有行之有效的解決方案?
虛擬機器逃逸防護的未來
安全的本質是攻防,這句話在幾十年的記憶體漏洞攻防戰中得到了完美體現。從1972年美國空軍的研究報告中提出“棧溢位”這個概念開始,關於記憶體破壞型別漏洞的攻防博弈就一直沒有停下腳步。攻擊者會探索無數精妙的技巧,用千變萬化的方式觸發漏洞,繞過層層阻礙,實現精巧的記憶體佈局,最終獲得程式執行的控制權。而防護者則會思考一些通用方法,在假設漏洞存在的情況下,想盡一切辦法阻撓攻擊者利用漏洞實現程式控制。這種通用的防禦方法我們稱為“緩解措施(Mitigation)”。
“棧不可執行”的緩解措施掐斷了跳轉Shellcode的漏洞利用思路,而倒在了ROP利用技術面前。過去的幾十年裡,新的緩解措施在不斷被提出和應用,增加了攻擊者利用漏洞的難度,但是針對性地繞過這些緩解措施的技巧同樣也在不斷誕生。在這種攻防博弈的過程當中,漏洞利用的難度在不斷變大,軟體的安全性也得到了不斷提升。相比於作業系統剛誕生的年代,如今的攻擊者需要越過多重緩解措施的屏障,才能利用漏洞獲得程式執行的自由。iOS是利用緩解措施來防止越獄的最佳典範,2018年年末蘋果引入的PAC機制將防護級別又一次提升到了頂峰。
虛擬機器逃逸同樣也是記憶體破壞漏洞防護和利用的重要戰場之一。當前主流的虛擬化技術方案,大多為了效能的考慮,尚未重視緩解措施的使用,例如地址隨機性不夠、存在可寫可執行許可權記憶體等問題依然可以在某些虛擬技術的實現中找到。來自微軟的安全工程師Jordan Rabet在2018年的BlackHat大會上也提出了多種利用緩解措施保護Hyper-V的思路。我們相信,在未來,緩解措施必能在虛擬機器逃逸防護中發揮積極作用。
軟體安全領域,另一種大獲成功的防護思路是沙箱。如今,幾乎每個瀏覽器都會啟用沙箱機制,便是一個最好的佐證。在引入沙箱之前,任何一個能夠控制瀏覽器執行程式碼的漏洞都可以一劍封喉,為所欲為——直接獲取系統許可權。而沙箱,就好比一個牢籠,將攻擊者束縛在有限的一片天地,任憑攻擊者在牢籠中肆虐,也無礙廣闊天地的寧靜祥和。本質來說,沙箱機制的基本思路是將被保護物件的許可權降到最低,只給保護物件所需的最小許可權集合。這種思路能夠全面降低保護物件被攻陷後造成的風險,讓攻擊者即便成功利用了漏洞,能力也是受限的,不足以施展惡意行為。
在沙箱機制的使用上,VMware的ESXi產品走在了前列,VMware將執行虛擬裝置的程序通過沙箱保護了起來。長亭科技安全研究實驗室在GeekPwn中演示的虛擬機器逃逸,額外使用了一個沙箱繞過的漏洞,才得以衝破牢籠,完成逃逸,可見沙箱機制的使用極大地增加了攻擊者的難度。微軟的Hyper-V目前也啟用了沙箱技術保護Worker程序。總的來說,沙箱機制的引入,能夠讓防守層次化。攻擊者只有突破了每一層,才能完成整個攻擊;反過來說,任何一個層面缺乏突破手段,完整攻擊就無法進行。
基於軟體和硬體相結合的緩解措施,以及層層隔離的沙箱機制,或許是虛擬機器逃逸防護的未來。
生長有速 萬物有度
謹以《2018 那些漏洞講述的事 | 長亭安全漏洞觀察年度報告》
獻給守護網路安全的Super Heroes
2019,長亭將繼續與您同行!
點選下方連結 下載報告,一起把握網路安全變化的脈搏。