[點晴永久免費OA]RowHammer 攻擊:內存的隱形威脅
看了一篇 IT 之家關于 AMD 處理器受 RowHammer 內存攻擊影響的報道,心血來潮了解了一下 RowHammer 攻擊的原理,把了解到的知識記錄下來。 RowHammer 攻擊是一種相對較新的攻擊方式,它利用了現(xiàn)代動態(tài)隨機存取存儲器(DRAM)的物理缺陷,這種攻擊方式不同于傳統(tǒng)的軟件漏洞利用,它直接針對硬件的弱點。這種攻擊利用了 DRAM 在運行過程中產生的意外電荷泄漏效應,可能導致存儲器單元泄露電荷并造成比特翻轉。這個問題主要是由于現(xiàn)在 DRAM 存儲單元高密度排列造成的。通過在一定模式下的高頻率反復內存訪問,攻擊者可以在其原本無權訪問的內存區(qū)域引發(fā)存儲值的變化。這種攻擊可以導致權限提升、數(shù)據(jù)泄漏和拒絕服務等安全問題。 要理解 RowHammer 攻擊,首先需要了解 DRAM 的工作原理。DRAM 通過存儲電荷在電容中來保存信息,每個電容與一個訪問晶體管相連,共同構成一個存儲單元(Cell,如下圖所示)。電容充滿電,存儲單元就是 1,電容放完電,存儲單元就是 0,晶體管用來控制電容充放電。 這些存儲單元被組織成多行多列,形成一個二維陣列(Bank,如下圖所示)。當讀取或寫入內存數(shù)據(jù)時,一個存儲單元行會被激活,整行的數(shù)據(jù)會被加載到行緩沖器(row-buffer)中,同時存儲單元中的電容放電,在行緩沖器內完成數(shù)據(jù)的讀寫操作。在操作完成后,行緩沖器內的數(shù)據(jù)會寫入原來的存儲單元行之中,同時存儲單元中的電容充電。所以,不論是讀還是寫數(shù)據(jù),存儲單元都會充放電。 在內存如“白菜”價的今天,不改變內存電路板面積大小的前提下,為了能存儲更多的數(shù)據(jù),只能將存儲單元排列的越來越近,密度大幅度增加。雖然芯片的制程有所提升,但每個電容之間的隔離不是完全的。當一個行被頻繁激活時,相鄰行的電容可能會受到電磁干擾,導致存儲的比特從 1 翻轉為 0,或者相反。這種比特翻轉可以被惡意利用,攻擊者可以通過精心設計的內存訪問模式來控制比特翻轉的位置和結果。通過高頻率地讀取 DRAM 中的某一行,可以影響到相鄰行中的數(shù)據(jù),這種現(xiàn)象被稱為 RowHammer,因為它就像用錘子反復敲擊內存行一樣。如下圖所示,第 1、3 行是攻擊行,這兩行中間是被攻擊行,攻擊行不停地充放電,中間行大概率會出現(xiàn)比特翻轉。 即使理解了 RowHammer 攻擊的原理,如果不知道哪些存儲單元里隱藏著關鍵數(shù)據(jù),毫無目的的去攻擊也沒有意義。更何況程序在訪問內存數(shù)據(jù)時,并不會直接使用內存中的真實地址,而是使用虛擬地址映射的方式進行訪問。這使得找到數(shù)據(jù)的真實地址變得更加困難,所以很長時間以來,對于 RowHammer 攻擊的研究只停留在理論階段,解決這個問題的關鍵在于如何實現(xiàn)逆向 DRAM 地址映射。由百度安全所研究設計的逆向工具 DRAMDig 能夠在平均 7 ~ 8 分鐘時間,快速、可靠地逆向出 DRAM 地址映射,解決了這一復雜的問題。感興趣的朋友可以閱讀這篇論文《DRAMDig: A Knowledge-assisted Tool to Uncover DRAM Address Mapping》(DOI: 10.1109/DAC18072.2020.9218599)。 盡管 RowHammer 攻擊非常強大,但也不是無法防御的。從硬件層面,新的 DRAM 芯片中實現(xiàn)了各種緩解措施,如目標行刷新(Target Row Refresh, TRR),或者使用支持 ECC 的 DRAM 內存。軟件層面的解決方案包括增加內存訪問的隨機性,以減少連續(xù)訪問同一行的可能性。 轉自博客園,作者張高興https://www.cnblogs.com/zhanggaoxing/p/18099550 該文章在 2024/3/28 10:18:20 編輯過 |
關鍵字查詢
相關文章
正在查詢... |