蘇黎世聯邦理工學院、阿姆斯特丹自由大學和高通公司的研究小組發布了一種新的 RowHammer 攻擊方法,可以更改動態隨機存取記憶體 (DRAM) 各位的內容。此次攻擊的代號為“Blacksmith”,標識符為 CVE-2021-42114。此問題影響了許多配備針對已知 RowHammer 類別方法保護功能的 DDR4 晶片。用於測試系統漏洞暴露的工具包已在 GitHub 上發布。
回想一下,RowHammer 攻擊允許透過循環讀取相鄰儲存單元的資料來扭曲單一儲存位的內容。由於 DRAM 記憶體是一個二維單元陣列,每個單元由一個電容器和一個電晶體組成,因此連續讀取記憶體的相同區域會導致電壓波動和異常,從而導致相鄰單元中的少量電荷損失。如果讀取強度較高,相鄰的單元可能會損失相當多的電荷,而下一個再生週期將沒有時間恢復其原始狀態,這將導致單元中儲存的資料的值發生變化。
為了防範 RowHammer,晶片廠商提出了 TRR(Target Row Refresh)機制,可以防止相鄰行的單元損壞,但由於該保護機制基於「模糊性安全」原則,並沒有從根本上解決問題,而只是針對已知的特殊情況進行保護,很容易被繞過。例如,Google在五月提出了 Half-Double 方法,這種方法不受 TRR 保護的影響,因為攻擊影響的是與目標不直接相鄰的單元格。
新的 Blacksmith 方法提供了一種繞過 TRR 保護的不同方法,該方法基於對不同頻率的兩個或多個攻擊者行進行非均勻訪問,從而導致電荷洩漏。為了確定導致電荷洩漏的記憶體存取模式,已經開發出一種特殊的模糊器,它可以自動選擇特定晶片的攻擊參數,改變存取單元的順序、強度和系統性。
這種方法不涉及影響相同的單元,使當前的 TRR 保護方法無效,這些方法以某種形式歸結為計算對單元的重複訪問次數,並在達到某些值時啟動對相鄰單元的充電。在 Blacksmith 中,訪問模式會同時分佈在目標不同側面的多個單元中,從而允許電荷洩漏而不會達到閾值。
事實證明,該方法比以前提出的繞過 TRR 的方法有效得多——研究人員成功地在最近購買的 40 個不同的 DDR4 記憶體晶片中實現了位元失真,這些晶片由三星、美光、SK 海力士和一家未知製造商生產(4 個晶片上未註明製造商)。相較之下,同一研究人員先前提出的 TRRespass 方法僅對當時測試的 13 個晶片中的 42 個有效。
總體而言,Blacksmith 的方法預計可適用於市場上 94% 的 DRAM 晶片,但研究人員表示,有些晶片比其他晶片更容易受到攻擊。使用錯誤校正碼(ECC)和將晶片中的記憶體更新率加倍並不能提供完全的保護,反而會使操作變得複雜。值得注意的是,該問題無法在已經發布的晶片中被阻止,需要在硬體層級實施新的保護,因此這種攻擊在未來許多年內仍將存在。
本文提供如何使用 Blacksmith 修改記憶體頁表項 (PTE) 中的條目內容以取得核心權限、破壞儲存在 OpenSSH 中的 RSA-2048 公鑰(可以將公鑰洩露給其他人)的實際範例。 虛擬機 (對應於攻擊者用於連接受害者虛擬機器的私鑰)並透過修改 sudo 進程的記憶體來繞過權限檢查,從而獲得 root 權限。根據晶片的不同,修改一個目標位元可能需要 3 秒到幾個小時才能完成。

此外,值得注意的是,Antmicro 代表 Google 發布了用於測試針對 RowHammer 攻擊的記憶體保護方法的開放框架 LiteX Row Hammer Tester。該框架基於使用FPGA完全控制直接發送到DRAM晶片的命令,以消除記憶體控制器的影響。提供了一個用於與 FPGA 互動的 Python 工具包。基於 FPGA 的網關包括分組資料模組(定義記憶體存取模式)、有效負載執行器、基於 LiteDRAM 的控制器(處理所有 DRAM 所需的邏輯,包括行啟動和記憶體刷新)和 VexRiscv CPU。該專案的開發是在 Apache 2.0 許可下發布的。支援多種 FPGA 平台,包括 Lattice ECP5、Xilinx 6、7 系列、UltraScale 和 UltraScale+。
來源: opennet.ru
