看“風(fēng)水反轉(zhuǎn)”技術(shù)如何危害云安全
針對(duì)管理程序的“風(fēng)水反轉(zhuǎn)”攻擊對(duì)企業(yè)用戶有著短期和長(zhǎng)期的影響。專家Ed Moyle在本文中介紹了這個(gè)漏洞攻擊的工作原理以及應(yīng)應(yīng)對(duì)方法。
在安全領(lǐng)域中的相關(guān)專業(yè)人員都應(yīng)該知道的是,當(dāng)后果和影響足夠嚴(yán)重時(shí), 比較有利的一種做法就是將當(dāng)前環(huán)境保持在趨勢(shì)模型中相對(duì)不會(huì)發(fā)生的場(chǎng)景中。例如,最近荷蘭阿姆斯特丹Vrije大學(xué)學(xué)生所報(bào)告針對(duì)云服務(wù)虛擬機(jī)內(nèi)存的風(fēng)水反轉(zhuǎn)攻擊。
對(duì)于云用戶來說,這項(xiàng)技術(shù)是相當(dāng)危險(xiǎn)的,因?yàn)樗墓舴绞绞浅鋈艘饬锨蚁喈?dāng)聰明的:它主要利用了內(nèi)存管理的功能(特別是重復(fù)數(shù)據(jù)刪除功能)來為Rowhammer帶來最大的影響,它打破了管理程序在過程中的隔離狀態(tài)。換而言之,這是一個(gè)在管理程序環(huán)境中針對(duì)分段模式的攻擊——而這恰恰是眾多企業(yè)組織的云威脅模型中假定絕不會(huì)發(fā)生的情況。
什么是“風(fēng)水反轉(zhuǎn)”?
“風(fēng)水反轉(zhuǎn)”主要涉及跨虛擬邊界找到并反轉(zhuǎn)一個(gè)或多個(gè)單個(gè)比特位。這意味著管理程序上的一臺(tái)虛擬機(jī)(VM)會(huì)對(duì)在同一物理主機(jī)上不同虛擬機(jī)中的比特位進(jìn)行反轉(zhuǎn)。這一攻擊方式能夠奏效的原因有二:內(nèi)存重復(fù)數(shù)據(jù)刪除與Rowhammer。理解這兩個(gè)原因是了解風(fēng)水反轉(zhuǎn)如何在技術(shù)層面上發(fā)揮攻擊作用的關(guān)鍵所在。
首先,讓我們來談?wù)剝?nèi)存重復(fù)數(shù)據(jù)刪除。這是一個(gè)用于在數(shù)據(jù)中心環(huán)境中最大程度實(shí)現(xiàn)系統(tǒng)效率和性能的功能。可以想像一下,一個(gè)管理程序運(yùn)行相同配置的實(shí)例,如Linux(例如運(yùn)行一個(gè)LAMP堆棧的東西)。由于這些實(shí)例都具有相同的配置,那么可以想象這些機(jī)器的存儲(chǔ)和內(nèi)存中存在著多少的冗余——在任意時(shí)間點(diǎn)的相同狀態(tài)下。內(nèi)存重復(fù)數(shù)據(jù)刪除功能可以有助于最大程度地減少此類浪費(fèi):與系統(tǒng)保留多個(gè)完全相同內(nèi)存頁(yè)的做法不同,它只保留一個(gè)頁(yè)面以供在該頁(yè)面可能出現(xiàn)的任意位置所共享。所以,例如兩個(gè)不同的虛擬機(jī)實(shí)例可能指向同一個(gè)內(nèi)存頁(yè)面,該內(nèi)存頁(yè)面也同時(shí)被這兩個(gè)實(shí)例所擁有。
其次,則是Rowhammer。Rowhammer是一個(gè)硬件級(jí)問題,它能夠讓某些有心人有意識(shí)地通過專為引起中斷的手工訪問模式來改變動(dòng)態(tài)RAM(DRAM)中單個(gè)電容的充放電狀態(tài)。因?yàn)镈RAM的充放電狀態(tài)代表了其中所存儲(chǔ)的數(shù)值(無論是打開或是關(guān)閉、充電或放電、1還是0),這些訪問模式可以以一個(gè)帶外方式來改寫其他內(nèi)存空間。
風(fēng)水反轉(zhuǎn)的攻擊方式是通過在有可能發(fā)生比特位反轉(zhuǎn)且正在運(yùn)行的虛擬機(jī)上查找內(nèi)存空間,從而從攻擊者的角度(內(nèi)存模板)獲得所需的便利。這種內(nèi)存部署的方式使攻擊者能夠控制比特反轉(zhuǎn)。最后,攻擊者執(zhí)行比特反轉(zhuǎn),從而使目標(biāo)內(nèi)存被破壞(或當(dāng)作漏洞被利用)。
那么,攻擊者跨虛擬化邊界執(zhí)行比特反轉(zhuǎn)會(huì)帶來什么危害呢?好吧,事實(shí)證明,通過一個(gè)比特位的反轉(zhuǎn),攻擊者可以造成很多的破壞。例如,在SSH公共密鑰中進(jìn)行比特反轉(zhuǎn)就可以輕松實(shí)現(xiàn)密鑰因數(shù)分解(從而破壞認(rèn)證)或者針對(duì)系統(tǒng)更新修改可信任軟件庫(kù)(從而允許在主機(jī)上安裝任意軟件)。所以,從實(shí)質(zhì)上來說,通過對(duì)單個(gè)比特位的反轉(zhuǎn)操作,攻擊者可以在目標(biāo)系統(tǒng)上為所欲為。
補(bǔ)救措施與寶貴教訓(xùn)
從實(shí)踐的角度來看,相關(guān)從業(yè)人員顯然會(huì)希望在短期內(nèi)就采取措施來防止這種類型的攻擊。那么,他們能做些什么呢?風(fēng)水反轉(zhuǎn)一文建議在多租戶環(huán)境中應(yīng)禁用內(nèi)存重復(fù)數(shù)據(jù)刪除功能。
顯而易見,目前并不是每一個(gè)云用戶都擁有控制權(quán),或者甚至知道云供應(yīng)商對(duì)客戶所使用的何種配置狀態(tài)。這意味著,客戶在多租戶環(huán)境中與公有云供應(yīng)商還有著不少的準(zhǔn)備工作要做。具體來說,應(yīng)由客戶來詢問關(guān)于配置狀態(tài)的問題,并根據(jù)風(fēng)險(xiǎn)容限來決定是否采用配置狀態(tài)已知和/或可知的(例如裸機(jī)云)服務(wù)。
但是,就長(zhǎng)期來說,還是有著更廣泛的含義的。具體來說,云客戶可以冒險(xiǎn)忽略隔離攻擊。也就是說,威脅建模場(chǎng)景甚至在它們的風(fēng)險(xiǎn)/對(duì)策演算中都不會(huì)包括隔離攻擊。在面臨諸如“風(fēng)水反轉(zhuǎn)”攻擊時(shí),這就是一個(gè)問題。
雖然隔離攻擊是很罕見的,但那并不是說它們是不存在的,事實(shí)上它們確實(shí)會(huì)不時(shí)地發(fā)生。因此,設(shè)置分層防御并特別地解決風(fēng)險(xiǎn)建模和風(fēng)險(xiǎn)應(yīng)對(duì)方案中的隔離攻擊是非常重要的。




















