文/Yuan Xiao Xiaokuan Zhang Yinqian Zhang
學術專欄
跨虛擬機的Row Hammer攻擊和權限提升
文/Yuan XiaoXiaokuan ZhangYinqian Zhang
Row Hammer攻擊是一種針對動態(tài)隨機存取內(nèi)存(DRAM)的攻擊。它利用高密度內(nèi)存中相鄰存儲單元相互間的電磁作用來引發(fā)錯誤。通過在一定模式下的高頻率反復內(nèi)存訪問,攻擊者可以在其原本無權訪問的內(nèi)存區(qū)域引發(fā)存儲值的變化。
軟件系統(tǒng)的安全是建立在正確執(zhí)行的硬件/軟件協(xié)議的基礎上的。違反這些協(xié)議會帶來嚴重的安全漏洞。例如操作系統(tǒng)的安全建立在內(nèi)存中的數(shù)據(jù)和代碼無法在缺乏操作系統(tǒng)授權的情況下被修改的假設上。然而,近來出現(xiàn)的Row Hammer攻擊卻能破壞這種假設,并帶來一系列安全問題。這種攻擊可以在不訪問目標內(nèi)存區(qū)域的前提下使其產(chǎn)生數(shù)據(jù)錯誤。
Row Hammer攻擊利用了內(nèi)存設計中的缺陷?,F(xiàn)代大容量內(nèi)存有著很高的內(nèi)存單元密度。這使得單元間的相互電磁作用變得更為顯著。電磁影響會加速電容電壓的變化,帶來潛在的數(shù)據(jù)丟失威脅。這種被稱作“Disturbance Error”的漏洞多年前就已被發(fā)現(xiàn),但是它直到最近才被發(fā)現(xiàn)能夠被軟件人為觸發(fā)。尤其值得注意的是,快速并且重復地激活同一個內(nèi)存行(DRAM Row)的訪問模式能大大提高相鄰行出現(xiàn)干擾錯誤的可能性。
Row Hammer漏洞被發(fā)現(xiàn)后的短時間內(nèi),利用它進行的安全攻擊就陸續(xù)出現(xiàn),例如,Google的軟件工程師Seaborn展示的兩種權限提升攻擊(Google的NaCl沙盒逃脫以及在Linux中的用戶態(tài)程序獲取內(nèi)核態(tài)內(nèi)存訪問權限)。其他的研究以用高級程序設計語言(如JavaScript)觸發(fā)Row Hammer為目標。這樣一個攻擊者就可以通過網(wǎng)絡中注入的惡意代碼,遠程地引發(fā)內(nèi)存錯誤并實現(xiàn)權限提升。
對于服務器端的攻擊研究要遠少于對客戶端攻擊的研究,而Row Hammer的服務器端攻擊在多用戶的云環(huán)境中尤其值得注意。互不信任的用戶在云中可能共享一臺物理機器,分享一些硬件資源,這就包括內(nèi)存。盡管服務器級的處理器和更昂貴的內(nèi)存對于Row Hammer的防御更好,研究表明即使配備了帶有自動糾錯(ECC)功能的內(nèi)存,服務器仍然可能受到Row Hammer攻擊的影響。
在研究中,我們著重探索了Row Hammer攻擊在跨虛擬機環(huán)境中的應用,并提出了在云環(huán)境中的威脅。我們的目標并不是攻擊云服務器,進而探究其在這種攻擊面前有多脆弱,而是探索在硬件存在這種錯誤的情況下,云系統(tǒng)中基于虛擬化的隔離是否可以被破壞。
在本文中提出了一種高可靠度且高確定性的double-sided Row Hammer攻擊。這種攻擊通過攻擊目標內(nèi)存行的兩個相鄰行來提高攻擊效果。但是這就需要我們了解物理地址是如何被分配到內(nèi)存中的,比如物理地址中的哪些位決定了內(nèi)存的channel、bank、row等。這使得我們可以找到同一個bank中的相鄰行(row)。然而,Intel拒絕公布這些相關信息。另外,即使使用同樣的處理器和同樣的內(nèi)存控制器,這種分配方法還會因為內(nèi)存(DRAM module)的區(qū)別而不同。
為了解決這個問題,我們提出了一種算法來破解物理地址的動態(tài)分配機制。內(nèi)存芯片(chip)中的每個bank都有一個行緩沖器(row buffer)來緩存最近使用的行。因此,如果交替訪問同一個bank中兩個不同的行,由于行緩沖器的沖突,會觀察到一個高延遲。這種訪問延遲的增加形成了一個時延通道(timing channel)??梢酝ㄟ^這個通道來確定兩個物理地址是否被分配到了同一個bank的不同行。通過交替訪問兩個只有特定bit不同的物理地址,可以利用它們是否在同一個bank的不同行中?;谶@個事實,能夠推斷出物理地址中這些特定bit的功能, 例如是否決定了bank,row, column等等。
圖1 基于圖模型的XOR scheme分析算法
在這個時延通道的基礎上,我們提出了一種新的基于圖模型的算法來破解物理地址中存在的XOR scheme。為了提高內(nèi)存性能,物理地址分配時會將某些決定行的bit和一些其他bit進行XOR操作,并用這個XOR的結果決定bank或channel等。在圖模型算法中,每個物理地址的bit是一個節(jié)點,通過內(nèi)存訪問延遲我們可以得到節(jié)點間是否存在XOR關系。如圖1所示就是一個我們的圖模型算法的例子,圖中上半部分是通過測試四個bit(15,16,18和20)所建立的圖模型,而下半部分是則是它對應的XOR scheme 。這種算法能在一到兩分鐘內(nèi)分析出我們的各個測試機器的內(nèi)存分配機制。
在了解物理地址的分配機制后,就可以從Xen虛擬機中進行double-sided Row Hammer攻擊。首先通過實驗分析了哪種Row Hammer攻擊的方法最為有效(例如是否引入mfence指令)。接著,我們通過從虛擬機中攻擊所有可訪問內(nèi)存行的方法找到足夠多的可攻擊bit。它們需要在特定的位置,并且可以被重復觸發(fā)錯誤。由于每個虛擬機僅僅被分配到一小部分物理內(nèi)存,我們也設計了能夠測試多于初始分配內(nèi)存的方法。另外,還設計了一個安全模式來減少可能使得系統(tǒng)崩潰的內(nèi)存錯誤。
以往的研究都寄希望于隨機的Row Hammer攻擊能恰好在page table中產(chǎn)生內(nèi)存錯誤。不同于這些方法,我們設計了一種確定性的攻擊來獲得跨虛擬機環(huán)境下的任意內(nèi)存位置讀寫權限。圖2展示了整個權限提升攻擊的過程。攻擊者是一個沒有特殊權限的普通虛擬機,在發(fā)起攻擊前能對自己的內(nèi)存空間進行讀寫操作。雖然攻擊者所擁有的page table都被維護在攻擊者自己的內(nèi)存空間中,攻擊者并不能直接修改page table。所有的修改必須通過hypercall被hypervisor審核 。在攻擊前,通過Row Hammer攻擊在攻擊者的內(nèi)存空間里找到一個可用的flippable bit,并且它在page中的相對位置需要滿足一定條件。我們要求在將一個page(4K字節(jié))均分成64個64 bit長的段后,flippable bit在這個64 bit段中的位置對應一個page table entry中的page frame number部分。
圖2 頁面表替換攻擊(Page Table Replacement Attack)
首先,找到一個last-level page table(即PT)和一個攻擊者控制的普通page。這兩個page的物理地址只有一個bit不同,并且這個不同bit的位置就是flippable bit所對應的位置。在這個普通page中偽造一個page table。這個偽造的page table中的entry指向任意的攻擊者想要訪問的內(nèi)存物理地址,不論是否受攻擊者的控制。
第二步是將選定的PT所屬的secondlevel page table(即PMD)復制到包含flippable bit的page中。由于沒有修改PMD和PT的內(nèi)容,我們可以直接通過hypercall來把原來的PMD替換成含有flippable bit的page。我們稱這個新的PMD為shadow PMD。需要注意的是,之前所選定的PT在PMD中對應的entry應該包含這個flippable bit。
接下來,通過Row Hammer來在shadow PMD的這個entry中產(chǎn)生bit flip,使得原本指向PT的條目轉(zhuǎn)而指向偽造的PT,證明了這個攻擊方法可以使得一個Xen PV虛擬機對于機器上的任意page擁有讀寫權限。并且此時hypervisor和攻擊者的kernel仍然認為這個偽造的PT是一個普通page,因此攻擊者仍然可以通過直接寫入的方式來修改偽造的PT中的entry。
另外,我們還展示了兩個基于這種攻擊的實例。 一個例子是HTTPS網(wǎng)絡服務器中的私鑰竊取。我們利用對任意物理內(nèi)存的讀權限判斷某一內(nèi)存地址是否儲存的數(shù)據(jù)結構是否符合一個有效密鑰的結構。
第二個例子展示了如何利用Row Hammer攻擊,在不知道目標密碼的情況下登錄一個OpenSSH服務器。被攻擊服務器和攻擊者各是一個虛擬機。它們共享同一臺物理機器。我們的主要目標是通過修改內(nèi)存中SSH服務器進程的代碼來繞過密碼驗證。在進行攻擊前,通過對OpenSSH的匯編和機器代碼的分析,找到跳轉(zhuǎn)到密碼驗證函數(shù)的代碼。首先,利用前面描述的Row Hammer攻擊獲得物理機上的任意讀寫權限。然后在內(nèi)存中搜索這句跳轉(zhuǎn)到密碼驗證函數(shù)的機器代碼。一旦找到了對應代碼,將其改為把驗證通過的返回值直接寫入對應寄存器(如圖3所示)。這樣,一旦有接入請求發(fā)送到服務器,驗證函數(shù)將不會被調(diào)用,而直接通過了驗證。
圖3 通過內(nèi)存修改繞過密碼驗證
攻擊主要以Xen PV虛擬機位目標。需要注意的是,盡管它正逐漸被HVM所取代,目前它仍然被公共云服務提供商廣泛使用。這其中就包括Amazon EC2。這給攻擊者提供了攻擊機會。由于目前已經(jīng)有了很多成功的攻擊能夠在公共云中實現(xiàn)與目標共用物理機器,建議所有云供應商停止對PV的使用。