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