国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Rowhammer 漏洞研究進(jìn)展*

2020-10-12 07:06肖超恩王建新
關(guān)鍵詞:攻擊者漏洞頁(yè)面

肖超恩 黃 松 王建新 張 磊

北京電子科技學(xué)院,北京市 100070

引言

隨著信息技術(shù)的快速發(fā)展,信息安全問(wèn)題愈發(fā)突出,信息安全涉及到防范個(gè)人信息、商業(yè)秘密、國(guó)家機(jī)密泄露等問(wèn)題。 卡內(nèi)基梅隆大學(xué)和英特爾實(shí)驗(yàn)室的合作論文中首次提出一個(gè)名為Rowhammer[1]的漏洞,隨后Google Project Zero安全團(tuán)隊(duì)復(fù)現(xiàn)了利用比特位翻轉(zhuǎn)攻擊DDR DRAM 內(nèi)存來(lái)獲取目標(biāo)系統(tǒng)內(nèi)核特權(quán)的實(shí)驗(yàn)[2]。

內(nèi)存是計(jì)算機(jī)系統(tǒng)的關(guān)鍵組成部分,決定著系統(tǒng)的整體性能、能效和可靠性。 由于內(nèi)存中存儲(chǔ)比特位的電容器體積越來(lái)越小、排列越來(lái)越緊密,每個(gè)單元中存儲(chǔ)的電荷量越來(lái)越少,從而降低了存儲(chǔ)的可靠性,使得存儲(chǔ)單元更容易受到各種故障影響。 通過(guò)快速、重復(fù)讀取存儲(chǔ)器上攻擊目標(biāo)相鄰行上的數(shù)據(jù),觸發(fā)存儲(chǔ)單元電路中的電容不斷充放電,產(chǎn)生一個(gè)電場(chǎng),改變臨近內(nèi)存單元中的數(shù)值,使其發(fā)生由0 到1 或者由1 到0 的位翻轉(zhuǎn),攻擊者可以利用這種硬件漏洞,通過(guò)軟件觸發(fā)的方式來(lái)提升權(quán)限。 本文就Rowhammer的研究現(xiàn)狀、攻擊方法以及安全防護(hù)措施等展開(kāi)分析研究。

1 Rowhammer 漏洞產(chǎn)生機(jī)理

1.1 動(dòng)態(tài)隨機(jī)訪問(wèn)內(nèi)存架構(gòu)

內(nèi)存由SRAM(靜態(tài)隨機(jī)訪問(wèn)內(nèi)存) 和DRAM(動(dòng)態(tài)隨機(jī)訪問(wèn)內(nèi)存)組成。 其中,DRAM

的組成及內(nèi)部結(jié)構(gòu)如圖1 所示。

該內(nèi)存條是一塊大小為2GB 的雙通道內(nèi)存Dual Inline Memory Module(簡(jiǎn)稱DIMM)。 內(nèi)存條分正反兩面rank1 和rank2,rank1 和rank2 各有8 個(gè)128MB 內(nèi)存顆粒(Chip)共16 個(gè),即:16×128MB =2GB。 每個(gè)顆粒內(nèi)包含8 個(gè)bank(獨(dú)立內(nèi)存陣列),所有的bank 共享一個(gè)輸入輸出存儲(chǔ)控制器(memory I/O controller),在每個(gè)bank 讀寫時(shí)并行執(zhí)行。 bank 內(nèi)部包含行與列地址解碼器、數(shù)據(jù)緩沖區(qū)、傳感放大器以及DRAM 內(nèi)存陣列。 陣列中每個(gè)行與列的交點(diǎn)就是內(nèi)存讀寫的最小單位(Cell),由一個(gè)電容和一個(gè)晶體管構(gòu)成,電容可存儲(chǔ)1 比特?cái)?shù)據(jù),電容的電勢(shì)高低分別對(duì)應(yīng)二進(jìn)制數(shù)據(jù)0 和1。 每次訪問(wèn)時(shí),行都是通過(guò)將其內(nèi)存單元的內(nèi)容復(fù)制到行緩沖區(qū),然后將內(nèi)容復(fù)制回內(nèi)存單元(從而充電) 來(lái)“激活”的。

DRAM 保存數(shù)據(jù)具有時(shí)限特性,隨著時(shí)間的推移,電容的電荷會(huì)流失從而導(dǎo)致數(shù)據(jù)丟失,需要周期性按行刷新。 DDR3 標(biāo)準(zhǔn)[3]指定每一行的電荷必須至少每64 毫秒刷新一次。 這種內(nèi)存刷新間隔是在內(nèi)存完整性、能量消耗和系統(tǒng)性能之間做出的權(quán)衡。 在內(nèi)存刷新期間,特定的區(qū)域不可用,所以更頻繁地刷新不僅會(huì)消耗更多的能量,而且可能會(huì)與合法的內(nèi)存訪問(wèn)競(jìng)爭(zhēng)[4]。

1.2 硬件漏洞

通常,在DRAM 內(nèi)部只要彼此隔離的兩個(gè)電路組件(如電容器、晶體管、導(dǎo)線)之間有足夠強(qiáng)的相互作用,就會(huì)發(fā)生干擾錯(cuò)誤。 市場(chǎng)上流行的DDR3 以及部分DDR4[5]內(nèi)存在設(shè)計(jì)時(shí)都存在這種硬件缺陷,當(dāng)內(nèi)存中的一行基本存儲(chǔ)單元被快速重復(fù)地讀取,電容會(huì)不斷充電和放電,在此過(guò)程中會(huì)有一定的概率泄露部分電子給相鄰的內(nèi)存單元,相鄰行的內(nèi)存單元在短時(shí)間內(nèi)積累足夠多的電量則會(huì)受到非預(yù)期的影響從而使存儲(chǔ)的數(shù)據(jù)發(fā)生0、1 跳變。

2 國(guó)內(nèi)外研究現(xiàn)狀

2.1 漏洞攻擊

2.1.1 基于x86 的攻擊

2014 年,Y. Kim[1]等人首次提出動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)中的Rowhammer 問(wèn)題。 隨著工藝提升,存儲(chǔ)芯片中的晶體管密度的增加,每次訪問(wèn)內(nèi)存的過(guò)程中,電荷有一定概率泄漏到相鄰存儲(chǔ)單元,容易出現(xiàn)干擾錯(cuò)誤(Disturbance Error)。 通過(guò)反復(fù)訪問(wèn),即hammer(錘擊)一個(gè)給定的物理內(nèi)存行,攻擊者可以在相鄰行中造成足夠大的干擾,導(dǎo)致比特位發(fā)生翻轉(zhuǎn)。

2015 年,GoogleProject Zero 團(tuán)隊(duì)的兩位研究人員M. Seaborn 和T. Dullien[2]提出了Rowhammer 的兩種攻擊方法。 第一種使用雙面錘擊來(lái)避開(kāi)NaCl 沙盒(Native Client Sand box),由于NaCl 在運(yùn)行代碼之前會(huì)先對(duì)其進(jìn)行靜態(tài)驗(yàn)證,因此攻擊者可以通過(guò)修改安全指令來(lái)達(dá)到攻擊目的。 第二種功能更強(qiáng)大,它可以在Linux 上作為普通的x86-64 進(jìn)程運(yùn)行,攻擊者對(duì)頁(yè)面表?xiàng)l目(PTE)進(jìn)行錘擊,將PTE 更改為指向攻擊進(jìn)程的頁(yè)表,獲取完全讀寫訪問(wèn)權(quán)限,從而對(duì)所有物理內(nèi)存進(jìn)行完全讀寫訪問(wèn),進(jìn)而接管整個(gè)系統(tǒng)。

2018 年,D. Gruss[6]等人針對(duì)當(dāng)前防御技術(shù),提出了單點(diǎn)錘擊、操作碼翻轉(zhuǎn)和memory waylaying 等新型攻擊方法,并證明了該攻擊可以使系統(tǒng)的防御對(duì)策失效。

2019 年,L. Xu[7]等人提出了Memway 算法,該算法在I/O 開(kāi)銷和速度方面都對(duì)memory waylaying 進(jìn)行了改進(jìn)。 通過(guò)使用Linux tmpfs 和內(nèi)存交換來(lái)管理收回文件,運(yùn)行時(shí)間和磁盤I/O 開(kāi)銷減少了90%。 此外,通過(guò)結(jié)合使用Memway 和非特權(quán)posix fadvise API,二進(jìn)制重定位步驟的速度提高了100 倍,大大縮短了攻擊消耗的時(shí)間。

2.1.2 基于ARM 的攻擊

2015 年,D. Gruss[8]等人通過(guò)JavaScript 代碼實(shí)現(xiàn)了對(duì)易受到Rowhammer 攻擊的服務(wù)器的遠(yuǎn)程接管。 由于JavaScript 幾乎存在于所有瀏覽器并默認(rèn)啟用,Rowhammer 攻擊可以由網(wǎng)站發(fā)起,并且能夠在訪問(wèn)該網(wǎng)站的系統(tǒng)上獲得root權(quán)限。

2016 年,V. van der Veen[9]等人提出了一種使用操作系統(tǒng)提供的功能進(jìn)行確定性Rowhammer 開(kāi)發(fā)的通用技術(shù)(稱之為“風(fēng)水”),使用這種技術(shù)可以可靠地控制物理內(nèi)存,將安全敏感數(shù)據(jù)(例如頁(yè)表)放在易受攻擊的物理內(nèi)存位置,并且在移動(dòng)設(shè)備上實(shí)現(xiàn)了一種使用不需要權(quán)限的用戶級(jí)應(yīng)用程序進(jìn)行Rowhammer 攻擊,表明了Rowhammer 攻擊在移動(dòng)平臺(tái)上的有效性。

2018 年,P. Frigo[10]等人通過(guò)使用移動(dòng)GPU上的WebGL 接口觸發(fā)Rowhammer 漏洞來(lái)接管移動(dòng)系統(tǒng)。

2018 年,A.Tatar[11]等人通過(guò)Remote Direct Memory Access(RDMA)協(xié)議觸發(fā)Rowhammer 來(lái)接管遠(yuǎn)程系統(tǒng),這種以網(wǎng)卡發(fā)起的攻擊方法稱作Throwhammer,也是第一個(gè)基于網(wǎng)絡(luò)的遠(yuǎn)程Rowhammer 攻擊方式。

2018 年,M. Lipp[12]等人提出了一種名為Nethammer 的新的攻擊方法,在處理網(wǎng)絡(luò)請(qǐng)求時(shí)通過(guò)內(nèi)存或flush 指令來(lái)攻擊系統(tǒng)。

2.1.3 基于虛擬機(jī)的攻擊

2016 年, Xiao[13]等 人 濫 用 Xen 頁(yè) 表Hypercall 界面將頁(yè)目錄表(PDT)復(fù)制到錯(cuò)誤頁(yè),然后通過(guò)翻轉(zhuǎn)某個(gè)頁(yè)目錄項(xiàng),使用偽造的頁(yè)表執(zhí)行虛擬機(jī)轉(zhuǎn)義并獲得無(wú)限的內(nèi)存訪問(wèn)。 實(shí)現(xiàn)了在跨vm 的條件下打破Xen 半虛擬化內(nèi)存隔離。

2016 年,K. Razavid[14]等人利用頁(yè)面重復(fù)數(shù)據(jù)刪除技術(shù)翻轉(zhuǎn)相鄰VM(虛擬機(jī))中的密鑰。在同一系統(tǒng)上運(yùn)行的VM 能夠接管被攻擊的VM,攻擊VM 在易受Rowhammer 攻擊的內(nèi)存位置處寫入一個(gè)已知存在于被攻擊VM 中的內(nèi)存頁(yè)面,內(nèi)存重復(fù)數(shù)據(jù)刪除功能會(huì)將被攻擊VM 和攻擊VM 的重復(fù)頁(yè)面合并到攻擊VM 頁(yè)面的位置,攻擊者就能觸發(fā)Rowhammer 漏洞實(shí)現(xiàn)修改攻擊目標(biāo)的內(nèi)存地址。 重復(fù)數(shù)據(jù)刪除引擎不會(huì)檢測(cè)到對(duì)內(nèi)存的修改,并且被攻擊者VM 會(huì)使用錯(cuò)誤頁(yè)面而不是其原始頁(yè)面。

2.1.4 基于服務(wù)器的攻擊

2020 年,L. Cojocar[15]等人提出了一種確定云服務(wù)器是否容易受到Rowhammer 攻擊的端到端方法,通過(guò)生成最高速率的DRAM 行激活命令和利用逆向工程找到在DRAM 設(shè)備內(nèi)部物理相鄰的行來(lái)評(píng)估Rowhammer 漏洞對(duì)云服務(wù)器的威脅。

2020 年,A. Kwong[16]等人演示了一種基于Rowhammer 的攻擊,該攻擊使用用戶級(jí)別權(quán)限從OpenSSH 服務(wù)器恢復(fù)RSA 2048 位簽名密鑰。通過(guò)讀取自己的私有內(nèi)存,不涉及對(duì)目標(biāo)數(shù)據(jù)、代碼或地址空間的任何訪問(wèn)或修改就能獲取機(jī)密信息,這種方法稱作RAMBleed。

2.2 防護(hù)方法

蘋果在針對(duì)Rowhammer 漏洞問(wèn)題時(shí)提到,由于“Y. Kim 等人的原始研究”,他們提高了內(nèi)存的刷新率并更新了行業(yè)標(biāo)準(zhǔn)Memtest86 程序,該程序用于測(cè)試已部署的內(nèi)存芯片是否存在錯(cuò)誤,其中包括了對(duì)Rowhammer 的檢測(cè)。

抵抗Rowhammer 攻擊的一種折中方案是合理分配內(nèi)存單元和物理隔離頁(yè)面,使Rowhammer不會(huì)影響重要頁(yè)面[17,18]。 F. Brasser[17]等人擴(kuò)展了操作系統(tǒng)的物理內(nèi)存分配器,以隔離不同內(nèi)存頁(yè)面。 V. van der Veen[19]等人通過(guò)將DMA緩沖區(qū)與其他非存儲(chǔ)數(shù)據(jù)的緩沖區(qū)行(即保護(hù)行)隔離,確保任何基于DMA 的攻擊只能在保護(hù)行中引起Rowhammer 翻轉(zhuǎn),而不會(huì)影響其他包含重要數(shù)據(jù)的行。

抵抗Rowhammer 的另一種方法是靜態(tài)分析,用這種方法來(lái)識(shí)別可能是Rowhammer 攻擊的代碼段,并在執(zhí)行之前阻止可疑代碼執(zhí)行[20]。ZebRAM[21]將奇數(shù)行作為安全行,偶數(shù)行作為不安全行,不安全行作為交換空間,部分安全行作為不安全行交換空間中數(shù)據(jù)的緩存。 每當(dāng)不安全行中的數(shù)據(jù)遷移到安全行時(shí),ZebRAM 都會(huì)執(zhí)行軟件完整性檢查和錯(cuò)誤糾正。

2017 年,石培濤等人提出了一套軟件防御機(jī)制——RDXA(Rowhammer Defense on Xen Allocator) 系統(tǒng)。 該系統(tǒng)是在虛擬機(jī)上進(jìn)行Rowhammer 感知的內(nèi)存分配機(jī)制,保證不同的虛擬機(jī)的內(nèi)存相互隔離實(shí)現(xiàn)針對(duì)虛擬機(jī)的Rowhammer 攻擊防護(hù)[22]。

2018 年,Gruss[6]等人將現(xiàn)有的防護(hù)方法分為五類,分別是:靜態(tài)分析[23]、性能計(jì)數(shù)器監(jiān)控[21]、內(nèi)存訪問(wèn)模式監(jiān)控[24]、內(nèi)存足跡[7]和物理隔離[17]。

2019 年,M.Kim[25]等人提出了一種不同的防護(hù)方法來(lái)抵抗rowhammer 漏洞,利用Rowhammer 誤差的分布,通過(guò)數(shù)學(xué)方法得出有效的重新映射矩陣并導(dǎo)出,通過(guò)兩個(gè)步驟重新映射整個(gè)DRAM 地址,可將錯(cuò)誤有效地分布在不同的行和列上,以使攻擊單元不會(huì)集中在特定的行和列上。 這種重新映射方案減少了單個(gè)詞中出現(xiàn)多個(gè)錯(cuò)誤的可能性,因而減少了在單個(gè)錯(cuò)誤或單個(gè)符號(hào)校正ECC 下出現(xiàn)的不可校正錯(cuò)誤。

2020 年,I. Kang[32]等人提出了CAT-TWO,這是現(xiàn)有的基于計(jì)數(shù)器的自適應(yīng)樹(shù)(CAT)方案的時(shí)間窗口優(yōu)化版本,用于抵抗Rowhammer 攻擊。 該方法在DDR4 DRAM 設(shè)備上產(chǎn)生的能源開(kāi)銷不到0.7%,并且在最壞的情況下生成不到0.03%的額外激活來(lái)刷新目標(biāo)行,這幾乎不會(huì)影響系統(tǒng)性能。

3 Rowhammer 攻擊方法

3.1 緩存刷新技術(shù)

緩存刷新(cache flush)技術(shù)主要是通過(guò)x86架構(gòu)中的clflush 指令來(lái)刷新緩存,使得訪問(wèn)內(nèi)存的操作繞開(kāi)緩存,從而讓內(nèi)存訪問(wèn)直接指向DRAM。

每個(gè)DRAM 中都含有許多行(row),訪問(wèn)內(nèi)存中數(shù)據(jù)的過(guò)程涉及到充放電。 將數(shù)據(jù)從行傳到芯片的行緩沖區(qū)叫作放電;把行緩沖區(qū)中被讀取或者寫入的內(nèi)容重新傳回到原來(lái)的行單元叫作充電。 這樣一個(gè)充放電操作會(huì)對(duì)相鄰行產(chǎn)生干擾,在進(jìn)行多次“激活”的情況下,自動(dòng)刷新可能會(huì)使相鄰行的某一位發(fā)生翻轉(zhuǎn)。 通常bank 都存在著當(dāng)前已激活的行,當(dāng)?shù)刂稾 和地址Y 位于不同行時(shí),Code Flush 將不會(huì)觸發(fā)激活操作,優(yōu)先從行緩沖區(qū)中讀取數(shù)據(jù)。 如果缺少clflush指令,讀取操作(mov)只會(huì)作用于CPU 中的Cache。 只有當(dāng)?shù)刂稾 和地址Y 指向同一bank上的不同行時(shí),Code Flush 調(diào)用clflush 指令移出緩存數(shù)據(jù)才會(huì)重復(fù)激活X 和Y。

谷歌安全團(tuán)隊(duì)已經(jīng)在x86 平臺(tái)上通過(guò)使用clflush 指令,成功地觸發(fā)Rowhammer 漏洞,利用頁(yè)表上發(fā)生的變化獲取內(nèi)核權(quán)限。

3.2 內(nèi)存重復(fù)數(shù)據(jù)刪除技術(shù)

內(nèi)存重復(fù)數(shù)據(jù)刪除技術(shù)[27,28]是一種目前非常流行的通過(guò)合并優(yōu)化來(lái)減少內(nèi)存使用量的存儲(chǔ)技術(shù)。 為了追求更高的性能,當(dāng)相同的內(nèi)容存在于多個(gè)內(nèi)存頁(yè)面時(shí),管理程序會(huì)將這些內(nèi)存頁(yè)面進(jìn)行合并,刪除多余的頁(yè)面,只保留一份,從而消除冗余數(shù)據(jù),釋放內(nèi)存。 保留的頁(yè)面被修改時(shí)會(huì)觸發(fā)缺頁(yè)中斷,計(jì)算機(jī)此時(shí)會(huì)將此頁(yè)面“寫時(shí)復(fù)制”,然后在新分配的物理頁(yè)上進(jìn)行寫入。 然而這種熱門技術(shù)并不安全,攻擊者在同一主機(jī)中同時(shí)運(yùn)行兩個(gè)虛擬機(jī),一個(gè)是攻擊者虛擬機(jī)一個(gè)是目標(biāo)虛擬機(jī),結(jié)合二者在內(nèi)存中的相同部分,放在物理內(nèi)存中的某個(gè)位置上,通過(guò)反復(fù)“錘擊”,攻擊者可以獲取其相鄰的虛擬機(jī)內(nèi)存信息。

3.3 雙面錘擊

隨著DRAM 刷新速率翻倍(從每64ms 到每32ms),攻擊者將有一半的時(shí)間來(lái)釋放相鄰行的位。 最初的Rowhammer 攻擊只是單面攻擊,重復(fù)訪問(wèn)目標(biāo)行旁邊的一個(gè)相鄰行。 隨后有研究人員發(fā)現(xiàn),通過(guò)錘擊與目標(biāo)行相鄰的兩行,也就是錘擊目標(biāo)行物理位置上的前一行和后一行可以提高攻擊的效率。 該技術(shù)被稱為雙面錘擊[2]。 與單面攻擊相比,雙面Rowhammmer 攻擊通常只需不到一半的訪問(wèn)次數(shù)即可翻轉(zhuǎn)。 雙面攻擊已被證明可以克服兩倍和四倍(16ms)刷新率[24]的緩解策略。

3.4 英特爾SGX

英特爾SGX(SoftwareGuard Extensions)是一種x86 指令集擴(kuò)展,新增了一組指令集和內(nèi)存訪問(wèn)機(jī)制,這些擴(kuò)展允許創(chuàng)建一個(gè)安全環(huán)境enclave,在應(yīng)用程序的地址空間中劃分出一塊被保護(hù)的安全區(qū)域,在不受信任的環(huán)境中能保證enclave 內(nèi)運(yùn)行數(shù)據(jù)的完整性和機(jī)密性,以免遭受惡意軟件的攻擊。

研究者在英特爾軟件保護(hù)擴(kuò)展(SGX)受保護(hù)區(qū)(enclave)內(nèi)部進(jìn)行攻擊,enclaves 中的代碼無(wú)法讀取或檢查,因?yàn)樘幚砥髯柚沽藢?duì)enclaves內(nèi)存的所有訪問(wèn)。 由于代碼加密后只有啟動(dòng)enclaves 才能對(duì)其進(jìn)行解密,開(kāi)發(fā)人員可以隱藏enclaves 內(nèi)的任意代碼。 因此,MASCAT 無(wú)法檢測(cè)到攻擊者在enclaves 內(nèi)進(jìn)行的任何微架構(gòu)或Rowhammer 攻擊。 處理器在用于特定進(jìn)程的性能計(jì)數(shù)器檢測(cè)中不包括SGX 活動(dòng),因此性能計(jì)數(shù)器也無(wú)法檢測(cè)到這種攻擊。 此外還可以利用SGX 針對(duì)云服務(wù)器進(jìn)行拒絕服務(wù)型攻擊。

3.5 操作碼翻轉(zhuǎn)技術(shù)

在x86 指令集中,操作碼中的比特位翻轉(zhuǎn)可產(chǎn)生其他有效操作碼。 在指令中只需一個(gè)目標(biāo)比特位翻轉(zhuǎn),就可以改變二進(jìn)制文件,由此提供具有root 權(quán)限的非特權(quán)進(jìn)程,例如sudo。 這些操作碼與原始操作碼非常相似,但具有不同的甚至相反的語(yǔ)義。 以x86 操作碼JE =0x74 中的單個(gè)位翻轉(zhuǎn)為例,該操作碼中的單個(gè)位翻轉(zhuǎn)可以產(chǎn)生操作碼有:JNE =0x75、JBE =0x76、JO =0x70、JL =0x7C、PUSHQ =0x54、XORB =0x34(xor 字節(jié))、HLT=0xF4 等等。 類似地,可以在條件跳轉(zhuǎn)之前的TEST 指令中實(shí)現(xiàn)位翻轉(zhuǎn)以達(dá)到影響密碼驗(yàn)證位置的測(cè)試或條件跳轉(zhuǎn)的效果[6]。 成功攻擊條件跳轉(zhuǎn)會(huì)更改條件,以便將錯(cuò)誤的密碼視為正確密碼。

3.6 頁(yè)表噴射技術(shù)

以前的Rowhammer 攻擊技術(shù)大都具有隨機(jī)性,通過(guò)觸發(fā)漏洞來(lái)翻轉(zhuǎn)頁(yè)表?xiàng)l目中的某些位進(jìn)而實(shí)現(xiàn)權(quán)限提升。 而頁(yè)表噴射技術(shù)與此不同,這種技術(shù)則具有一定的概率性,首先通過(guò)在內(nèi)存中部署大量的頁(yè)表頁(yè),使得至少有一個(gè)目標(biāo)能夠位于脆弱的物理頁(yè)上。 然后攻擊該位置產(chǎn)生位翻轉(zhuǎn),從而使被攻擊的目標(biāo)頁(yè)表指向一個(gè)任意物理內(nèi)存位置。

3.7 內(nèi)存伏擊技術(shù)

通過(guò)頁(yè)表噴射,攻擊者用生成的頁(yè)表副本填充整個(gè)內(nèi)存,達(dá)到將頁(yè)表放置在已知位翻轉(zhuǎn)的物理內(nèi)存位置,這種方法的弊端是會(huì)耗盡整個(gè)內(nèi)存,通過(guò)監(jiān)視內(nèi)存消耗可以輕松檢測(cè)到。

內(nèi)存伏擊的優(yōu)點(diǎn)在于不會(huì)耗盡內(nèi)存,采用優(yōu)化的觸發(fā)驅(qū)逐的方式,頁(yè)面緩存中確定性地逐出文件頁(yè)面,再重新映射到新的隨機(jī)物理位置。 通過(guò)不斷驅(qū)逐,頁(yè)面最終被放置在易受攻擊的物理位置上。

圖3(a)表示剛初始的內(nèi)存情況,空白方框?yàn)槲唇?jīng)使用的空閑頁(yè)面,藍(lán)色方格則表示正被使用的頁(yè)面,圖3(b)表示填充所有空閑頁(yè)面,同時(shí)從內(nèi)存中驅(qū)逐目標(biāo)頁(yè)X,圖3(c)表示將X 重新加載到內(nèi)存中的另外一個(gè)位置,經(jīng)過(guò)多次訪問(wèn)和驅(qū)逐操作,最終讓X 被加載到易受攻擊的位置A上。 2017 年, Gruss 和Lipp 等人首次提出了內(nèi)存伏擊技術(shù)[6],該技術(shù)能夠?qū)崿F(xiàn)云端的DDoS 攻擊和本地的提升特權(quán)攻擊。

3.8 Memway 算法

利用Linux tmpfs 來(lái)保存逐出的文件,消除了原始Waylaying 算法的大部分磁盤I / O 開(kāi)銷,從而更快地執(zhí)行頁(yè)面緩存逐出[7]。 通過(guò)對(duì)Linux 頁(yè)面緩存接口進(jìn)行詳細(xì)分析,將Memway與posix fadvise API 結(jié)合在一起,posix fadvise 是linux 上對(duì)文件進(jìn)行預(yù)取的系統(tǒng)調(diào)用,使用posix fadvise 快速重新定位目標(biāo)二進(jìn)制文件,并重復(fù)進(jìn)行直到多次連續(xù)運(yùn)行都無(wú)法生成新地址為止。然后執(zhí)行Memway 算法,重新排列整個(gè)頁(yè)面緩存,頁(yè)緩存由此被修改,目標(biāo)被迫移到新地址,隨后的posix fadvise 調(diào)用可以再次生成新地址。 使用這種方法可以進(jìn)行高效的二進(jìn)制重定位,從而成倍數(shù)地縮短總運(yùn)行時(shí)間。

3.9 ECC ploit

宇宙射線和其他外部事件可通過(guò)改變電容[29,30]中的電荷水平導(dǎo)致DRAM 單元損壞,為了解決此問(wèn)題,ECC 內(nèi)存在數(shù)據(jù)位旁增加了了額外的奇偶校驗(yàn)位(也稱為控制位)來(lái)對(duì)數(shù)據(jù)進(jìn)行錯(cuò)誤檢查和糾正。 這是一種新的Rowhammer攻擊方法[31],Vrije 大學(xué)團(tuán)隊(duì)通過(guò)故障注入和冷啟動(dòng)攻擊,對(duì)部分內(nèi)存上的ECC 功能進(jìn)行逆向工程,發(fā)現(xiàn)這部分ECC 內(nèi)存只能在它監(jiān)視的內(nèi)存段中進(jìn)檢測(cè)并糾正一個(gè)位的翻轉(zhuǎn)。 當(dāng)在同一內(nèi)存段中發(fā)生兩個(gè)位翻轉(zhuǎn)時(shí),ECC 內(nèi)存底層應(yīng)用程序會(huì)崩潰以避免數(shù)據(jù)損壞或安全性受損。而當(dāng)一次Rowhammer 攻擊導(dǎo)致了三個(gè)位同時(shí)翻轉(zhuǎn),ECC 則是不會(huì)有任何反應(yīng)。 雖然ECC 功能一度被看作對(duì)rowhammer 攻擊免疫,但ECC ploit通過(guò)在基于ECC 的系統(tǒng)上重現(xiàn)現(xiàn)有漏洞,證實(shí)了在ECC 內(nèi)存上也可以進(jìn)行特權(quán)升級(jí)攻擊。

3.10 攻擊方法對(duì)比

現(xiàn)有的攻擊方法雖然種類繁多,但總的來(lái)說(shuō)都實(shí)現(xiàn)了以下幾個(gè)方面:第一方面是快速重復(fù)訪問(wèn)內(nèi)存,觸發(fā)Rowhammer 漏洞的先決條件就是要快速多次訪問(wèn)內(nèi)存單元導(dǎo)致足夠多的電荷泄露,由于緩存的存在,攻擊者采用了不同的手段來(lái)繞開(kāi)緩存或者使其無(wú)效,例如使用clflush 指令。 第二方面是獲取物理內(nèi)存相鄰關(guān)系,為了更精準(zhǔn)有效地進(jìn)行攻擊,獲取獲取目標(biāo)行與其相鄰行的物理地址是十分重要的一環(huán),通常對(duì)內(nèi)存做逆向工程來(lái)獲取邏輯地址與物理地址之間的映射關(guān)系。 第三方面是將敏感信息放在易受影響的位置上,頁(yè)表噴射、內(nèi)存伏擊等方法都是為了實(shí)現(xiàn)該目標(biāo),從而更加有針對(duì)性地進(jìn)行攻擊。 表1 對(duì)幾種攻擊方法做了詳細(xì)對(duì)比。

表1 Rowhammer 攻擊技術(shù)對(duì)比

4 Rowhammer 防御技術(shù)

4.1 基于檢測(cè)Rowhammer 漏洞的防御技術(shù)

4.1.1 靜態(tài)分析

基于靜態(tài)分析可以訪問(wèn)攻擊(二進(jìn)制)代碼,在將軟件添加到應(yīng)用商店之前,如果檢測(cè)有效,則用戶不再受到攻擊。 Irazoqui 等人使用一種自動(dòng)靜態(tài)代碼分析工具M(jìn)ASCAT 來(lái)做靜態(tài)分析,用于大規(guī)模檢測(cè)微架構(gòu)攻擊。

4.1.2 性能計(jì)數(shù)器監(jiān)控

性能計(jì)數(shù)器可用來(lái)監(jiān)控包括攻擊者程序的操作,Rowhammer 檢測(cè)的典型參數(shù)是緩存命中數(shù)和緩存失效數(shù)。 使用性能計(jì)數(shù)器監(jiān)視進(jìn)程的可疑緩存活動(dòng),然后在指令指針附近搜索clflush指令來(lái)檢測(cè)攻擊。 Rowhammer 的底層Flush +Reload 循環(huán)也被緩存攻擊防御技術(shù)檢測(cè)到。

4.2 基于抵抗Rowhammer 漏洞的防御技術(shù)

4.2.1 G-CATT

由于Rowhammer 攻擊需要翻轉(zhuǎn)頁(yè)表或其他內(nèi)核頁(yè)面中的比特位來(lái)接管系統(tǒng),內(nèi)存分配器可以防止用戶頁(yè)面和內(nèi)核頁(yè)面的物理接近。 GCATT 是一種替代內(nèi)存分配器,通過(guò)在物理內(nèi)存中留下間隙來(lái)隔離物理內(nèi)存中的用戶和內(nèi)核空間。 如果隔離有效,則用戶無(wú)法再接管內(nèi)核和系統(tǒng),確保攻擊者無(wú)法利用內(nèi)核內(nèi)存中的位翻轉(zhuǎn)來(lái)升級(jí)特權(quán)。

4.2.2 禁用內(nèi)存重復(fù)數(shù)據(jù)刪除技術(shù)

內(nèi)存重復(fù)數(shù)據(jù)刪除技術(shù)雖然可以減少磁盤占用,優(yōu)化存儲(chǔ),但也容易被攻擊者利用,進(jìn)行Rowhammer 攻擊。 通過(guò)禁止使用內(nèi)存重復(fù)數(shù)據(jù)刪除,防止Rowhammer 攻擊利用這些功能,有效抵抗Rowhammer 漏洞攻擊。

4.2.4 DRAM 地址重映射

將行錯(cuò)誤分布在不同的DRAM 行和列中,以使攻擊單元不會(huì)集中在特定的行和列上。通過(guò)利用Rowhammer 誤差的分布,可以通過(guò)數(shù)學(xué)方法得出有效的重新映射矩陣。 使用導(dǎo)出的矩陣,通過(guò)兩個(gè)步驟重新映射整個(gè)DRAM 地址。 實(shí)驗(yàn)結(jié)果表明,導(dǎo)出的矩陣可以有效地分配Rowhammer 誤差,大大降低錯(cuò)誤發(fā)生的概率。

4.2.5 PARA 機(jī)制

PARA[32](概率性相鄰行激活)是一種識(shí)別Rowhammer 攻擊并刷新其相鄰行的低性能開(kāi)銷機(jī)制,原理是每次訪問(wèn)內(nèi)存中的一行時(shí),它的相鄰行也會(huì)以一個(gè)較小概率p 刷新。 如果某一行受到攻擊被反復(fù)讀取,那么從統(tǒng)計(jì)學(xué)上可以確定,該行的相鄰行最終也會(huì)被刷新。 該方法省去了計(jì)算某行被訪問(wèn)的次數(shù)或被攻擊者的地址的昂貴開(kāi)銷,對(duì)性能影響微乎其微,能夠有效抵御Rowhammer 攻擊。

4.3 基于消除Rowhammer 漏洞的防御技術(shù)

4.3.1 提高刷新速率

芯片通過(guò)BIOS 更新使得刷新速率提高了一倍,由于Rowhammer 攻擊必須在兩次內(nèi)存刷新的時(shí)間間隔內(nèi)發(fā)生,所以可以提高Rowhammer攻擊的門檻,但這不足以防止所有針對(duì)DRAM的攻擊。 由于DRAM 刷新已經(jīng)成為能耗、性能和服務(wù)質(zhì)量的重要負(fù)擔(dān),如果再次提升內(nèi)存刷新速率,會(huì)對(duì)系統(tǒng)性能造成顯著的影響。 但是,提高刷新率可能是Rowhammer 漏洞最實(shí)用的即時(shí)解決方案,它不需要對(duì)系統(tǒng)進(jìn)行任何重大的更改。

4.3.2 禁止使用cache 相關(guān)指令

快速激活DRAM 中每個(gè)bank 中的行以觸發(fā)rowhammer 漏洞,需要用到基于x86 的處理器上的clflush 指令來(lái)繞過(guò)設(shè)備中的高速緩存機(jī)制。 谷歌的沙箱等系統(tǒng)已經(jīng)禁止用戶級(jí)別訪問(wèn)x86 clflush 緩存刷新指令,這對(duì)抵御許多針對(duì)x86 架構(gòu)的攻擊是非常有效的。

4.3.3 ECC(error corrected code)技術(shù)

ECC[1],即錯(cuò)誤糾正碼,這是一種基于硬件的防御技術(shù),利用差錯(cuò)檢測(cè)和修正算法來(lái)檢驗(yàn)和糾正數(shù)據(jù)翻轉(zhuǎn)錯(cuò)誤,相比奇偶校驗(yàn),ECC 功能更強(qiáng)、設(shè) 計(jì) 更 精 巧。 由 于 使 用 ECC 來(lái) 糾 正Rowhammer 錯(cuò)誤的會(huì)增加能量、成本和DRAM容量開(kāi)銷,通常在服務(wù)器上才使用該功能。 而且ECC 能夠快速地糾正1 位的錯(cuò)誤和檢測(cè)2 位錯(cuò)誤,但無(wú)法糾正超過(guò)1 位的錯(cuò)誤也不能檢測(cè)高于2 位的錯(cuò)誤,有一定的局限性。

4.3.4 內(nèi)存訪問(wèn)模式監(jiān)控

由于Rowhammer 攻擊需要在一個(gè)內(nèi)存行上存在大量緩存失效,并且在同一DRAM bank中的其他行上需要大量的訪問(wèn)。 ANVIL[24]通過(guò)使用現(xiàn)有的硬件性能計(jì)數(shù)器跟蹤DRAM 訪問(wèn)的位置來(lái)檢測(cè)行錘攻擊,檢測(cè)分為兩個(gè)階段檢: 首先,它監(jiān)視最后一級(jí)緩存失效率。 接下來(lái),如果緩存失效率超過(guò)閾值,ANVIL 使用Intel PEBS 監(jiān)視緩存失效的地址, 并將Rowhammer 攻擊與正常工作負(fù)載區(qū)分開(kāi)。 對(duì)于每個(gè)候選行,檢查“來(lái)自同一DRAM bank 的其他行訪問(wèn)樣本”。 只有當(dāng)對(duì)同一個(gè)bank 的其他行有足夠多的訪問(wèn)時(shí),才會(huì)檢測(cè)到攻擊并刷新被攻擊的行。

4.4 防御技術(shù)對(duì)比

基于Rowhammer 漏洞的防御技術(shù)要么不實(shí)用,要么需要改變硬件,想要應(yīng)用于實(shí)際有極大的限制,防御技術(shù)具體優(yōu)缺點(diǎn)如表2 所示。 相比較而言,基于檢測(cè)Rowhammer 漏洞的防御技術(shù)和基于抵抗Rowhammer 漏洞的防御技術(shù)更加的實(shí)用,并且兩種類型的防御技術(shù)可以結(jié)合使用來(lái)升級(jí)防御手段,提高攻擊門檻,獲得更好的防御效果。 有許多防御技術(shù)需要犧牲性能或存在諸多限制,攻擊者在不斷更新攻擊手段,現(xiàn)有的一些防御技術(shù)也在被證實(shí)并不安全,例如之前認(rèn)為ECC 內(nèi)存和手機(jī)內(nèi)存都不受此漏洞影響,然而研究證明通過(guò)改進(jìn)的攻擊技術(shù)能夠成功進(jìn)行攻擊。

表2 Rowhammer 防御技術(shù)對(duì)比

5 結(jié)語(yǔ)

隨著工藝提升,內(nèi)存的體積越來(lái)越小,由設(shè)計(jì)缺陷引起的Rowhammer 漏洞無(wú)法通過(guò)簡(jiǎn)單的方法徹底消除,而內(nèi)存在每一臺(tái)計(jì)算機(jī)中都是重要的組成部分,所以對(duì)于Rowhammer 漏洞研究有著十分重要的現(xiàn)實(shí)意義。 隨著系統(tǒng)安全研究人員對(duì)Rowhammer 的了解更多,并且由于技術(shù)擴(kuò)展問(wèn)題而使Rowhammer 繼續(xù)從根本上影響存儲(chǔ)芯片,研究人員和從業(yè)人員將開(kāi)發(fā)各種類型的攻擊,以在各種情況下以多種創(chuàng)新方式利用Rowhammer。 同時(shí)隨著Rowhammer 漏洞的深入挖掘,更多的研究人員也會(huì)專注于研發(fā)新的防御手段,以最大程度地減少暴露給軟件(以及公眾)的此類硬件故障。 當(dāng)前針對(duì)Rowhammer 攻擊,研究的主要方向是如何提高攻擊的穩(wěn)定性、成功率和降低時(shí)間消耗,使得攻擊者能夠更好的定向地攻擊內(nèi)存中某個(gè)特定位置。 而防御技術(shù)的發(fā)展分為兩個(gè)方面,第一是短期的緩解措施,能夠應(yīng)對(duì)當(dāng)前的攻擊手段,包括增加限制條件、提高攻擊的不穩(wěn)定性和增加時(shí)間消耗等;第二是研究長(zhǎng)期的解決方案,旨在消除硬件漏洞,受實(shí)際情況和現(xiàn)有技術(shù)限制,該方向的研究還有很長(zhǎng)的路要走。 隨著存儲(chǔ)器技術(shù)向更高密度的擴(kuò)展,密度越高受此漏洞影響越大,其他類型的存儲(chǔ)器(例如NAND 閃存或相變存儲(chǔ)器)中也可能潛藏著類似的漏洞,這些漏洞可能會(huì)威脅到安全系統(tǒng)的基礎(chǔ)[32],對(duì)于Rowhammer 漏洞的深入研究對(duì)防范以后可能出現(xiàn)的此類漏洞有著深遠(yuǎn)意義。我國(guó)對(duì)于Rowhammer 漏洞的研究還處于起步階段,針對(duì)如何利用該漏洞和防護(hù)以及對(duì)于發(fā)現(xiàn)和解決由于技術(shù)擴(kuò)展和硬件設(shè)計(jì)而可能增加的其他潛在漏洞還有很大的研究空間,對(duì)可靠和安全的存儲(chǔ)系統(tǒng)進(jìn)行研究有著光明的前景。

猜你喜歡
攻擊者漏洞頁(yè)面
漏洞
刷新生活的頁(yè)面
基于貝葉斯博弈的防御資源調(diào)配模型研究
答案
讓W(xué)ord同時(shí)擁有橫向頁(yè)和縱向頁(yè)
基于selenium的SQL注入漏洞檢測(cè)方法
正面迎接批判
正面迎接批判
偵探推理游戲(二)
漏洞在哪兒
集贤县| 罗山县| 丽江市| 镇宁| 边坝县| 乳山市| 孙吴县| 郁南县| 晋州市| 封丘县| 达尔| 徐汇区| 孝感市| 华蓥市| 拉萨市| 兰西县| 大冶市| 和田县| 陇西县| 丹棱县| 济源市| 鸡西市| 商都县| 滦南县| 会东县| 华容县| 五台县| 巫溪县| 黎城县| 花垣县| 肃北| 红安县| 古浪县| 许昌市| 禄劝| 阿城市| 保靖县| 六盘水市| 正镶白旗| 泰来县| 晋中市|