您的位置:首頁 > 菜鳥學(xué)院 > DRAM芯片內(nèi)核提權(quán)漏洞解析

DRAM芯片內(nèi)核提權(quán)漏洞解析

來源:互聯(lián)網(wǎng) | 時(shí)間:2015-03-13 09:58:11 | 閱讀:76 |  標(biāo)簽: 漏洞   | 分享到:

在Yoongu Kim et al的論文中談到了關(guān)鍵的原理:

code1a:

  mov (X), %eax  // Read from address X   mov (Y), %ebx  // Read from address Y   clflush (X)  // Flush cache for address X   clflush (Y)  // Flush cache for address Y   jmp code1a

兩個(gè)因素導(dǎo)致位的變化

1,地址選擇:地址X和地址Y必須印射到內(nèi)存的不同row但是又是在同一bank上。

每個(gè)DRAM芯片包含了很多行(row)的單元。訪問一個(gè)byte在內(nèi)存中涉及到將數(shù)據(jù)從row傳輸?shù)叫酒?row buffer"中(放電操作),當(dāng)讀取或者寫入row buffer的內(nèi)容后,再把row buffer內(nèi)容傳輸?shù)皆瓉淼膔ow單元里(充電操作)。這種”激活“一個(gè)row的操作(放電和充電)可以干擾到臨近的row。如果這樣做足夠多的次數(shù),臨近row的自動(dòng)刷新操作(一般是每64ms)可能會(huì)讓臨近row的位產(chǎn)生變化。row buffer作為緩存,如果地址X和Y指向相同的row,那code1a將會(huì)從row buffer中讀取信息而不用任何”激活“操作。

每個(gè)DRAM的bank都有自己的"當(dāng)前已激活的row",所以如果地址X和地址Y指向不同的bank,code1a將會(huì)從那些bank的row buffer中讀取信息而不用反復(fù)的激活row。所以,如果地址X和地址Y指向同一bank上不同的row,code1a會(huì)導(dǎo)致X和Y不斷的被激活,這被稱為ROWHAMMERING。

2,繞過緩存:沒有了code1a中的CLFLUSH指令的話,內(nèi)存讀操作(mov)只會(huì)操作CPU的緩存。CLFLUSH刷新緩存的操作強(qiáng)制讓內(nèi)存的訪問直接指向DRAM,而這會(huì)導(dǎo)致不斷有row被重復(fù)的激活。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)