ADVERTISEMENT
半導體製程不斷地微縮和進步,於相同的晶圓面積下可塞入更多的電晶體線路,相對來說就是提升效能,細小的線路適用更低的電壓,耗電量隨之降低。即使不塞入更多的電晶體,縮小製程也可於同一晶圓產出更多的晶粒,有助於提升產能和降低價格。
可惜製程進步也不一定是萬靈丹,譬如快閃記憶體就會受到影響,降低寫入次數。而現今各種運算裝置仰賴的 DRAM 動態隨機存取記憶體,數年前也被找出因製程進步,而出現的 Rowhammer 硬體漏洞,近期則是有研究指出此漏洞已可輕易的從網頁執行。
Rowhammer 運作原理
想要理解這個漏洞是如何出現的,就必須先釐清動態隨機記憶體內部運作方式。在動態記憶體中每個單一位元使用 1 個電容和電晶體所組成,這些記憶單元再透過交錯縱橫的線路連接起來。讀取或是寫入資料時就由這些交錯縱橫的線路來運送資料。
通常一堆記憶單元稱為 1 組 bank,內部橫向線路所連結的記憶單元稱為 row,垂直稱為 column,這堆線路旁邊還會附加 row 解碼器、column 解碼器、用以信號放大和解讀的感測放大器等。而一組數量不等的 bank 就會組合成一顆顆的 chip,如同我們在記憶體模組或是顯示卡上面看到的黑色方形小晶片。
受到製程進步的影響,記憶單元之間的間隔距離變得相當靠近,以至於記憶單元進行存取工作時,也會連帶影響鄰近的記憶單元電荷流失。Rowhammer 就是利用此原理,不斷地以 row 為單位,存取目標旁邊的記憶單元,從而影響目標記憶單元。
▲Rowhammer 的攻擊原理,透過不斷地存取紫色記憶單元,相鄰的黃色記憶單元內部資料將有所變化。(圖片取自維基百科)
這個硬體漏洞早先就有人提出警告,不過當時僅是了解原理,並沒有人能夠進行有意義的實作,直到今年年初 Google 的 Project Zero 團隊才展示如何利用此漏洞,進行攻擊達到 2 種目標,其一為跳出 Google Chrome 網頁瀏覽器的 native-client 沙盒,另一種則是能夠在 Linux 作業系統中提升至 root 權限。
Project Zero 團隊所使用的方式,必須先在目標裝置上植入特殊設計的程式,而近日所研究出的方法,使用 JavaScript 語言撰寫,只要裝置拜訪特定網頁即可執行,大大提升了此漏洞的可用性。目前研究者已在 Intel 的 Sandy Bridge、Ivy Bridge、Haswell 微架構處理器上確認,AMD 處理器或是 ARM 架構是否可如法炮製,則需要近一步的研究。
硬體缺陷難防禦
雖然目前還沒有傳出任何人利用 Rowhammer 漏洞進行攻擊,但以網頁為基礎的攻擊方式變得可行之後,此問題就變得比較棘手,因為硬體漏洞較難事後修補。研究中也指出目前有幾種方式能夠防堵,但對於消費者大眾來說還是有一定的困難度。
首先就是以較高層級的軟體,防止程式存取不屬於它的記憶體空間,或是作業環境虛擬化,將不同的使用者分割開來。硬體部分則可以降低記憶體刷新的時間間隔、改採具有偵錯∕除錯功能的記憶體模組,轉換成 DDR4 似乎也有效果,Project Zero 團隊則是找到 1 家不受影響的 DDR3 模組,但是不願提及名稱。
資料來源
Rowhammer attack exploits shrinking process size in DRAM
Rowhammer: A new JavaScript attack that targets DRAM
Flipping Bits in Memory Without Accessing Them: An Experimental Study of DRAM Disturbance Errors
Rowhammer.js: A Remote Software-Induced Fault Attack in JavaScript
延伸閱讀
圖解 RAM 結構與原理,系統記憶體的 Channel、Chip 與 Bank
大
◢▆▅▄▃-爆╰(〒皿〒)╯發-▃▄▅▆◣
了