Rowhammer是針對DRAM的攻擊方法,其新變種Phoenix令它能攻擊DDR記憶體模組,研究人員不但展示了對15個測試模組的有效性,更提出了三個實際應用例子,讀寫記憶體、盜竊私人加密金鑰和繞過Linux的sudo工具防護提升權限。
Rowhammer攻擊的歷史
Rowhammer首先出現在2014年的一份研究論文,當時一家大學和Intel的研究人員展示了重複存取多行記憶單元,會導致相鄰記憶單元的數值變更,這些相鄰單元可能含有重要資料,數值變更也可能造成權限提升等嚴重後果。由於記憶晶片中每個單元本質上都是一個電容器,一種只能短暫保持電荷的簡單元件,也是記憶體容易損失的原因,關閉電腦或伺服器資料便會消失,因此即使沒有存取該記憶區域單元中的電荷也需要時間刷新。
記憶單元並非被隔離,而是以行和列的形式排列,互連的後果是可能造成干擾,存取一行可能影響鄰近的行,例如刷新一行可能損壞另一行的資料。多年來只有記憶體製造都知道這問題,也盡力減輕問題以提高可靠性,但是當記憶單元越來越小,相互間的間距也被縮短,令「Row hammering」能夠在實際攻擊中使用。在展示Rowhammer攻擊之後,記憶體開發商開始推出防禦措施,結果是Target Row Refresh(TRR)硬件技術,理論上TRR很簡單,監察對行的侵略性存取,一旦發現便會強制製新鄰近的行,可惜實際效果並不理想,在2021年研究人員描述了Blacksmith攻擊,使用更複雜的記憶單元存取模式繞過TRR。
為抵禦Rowhammer攻擊,研究人員再把更先進的防護措施加入DDR5記憶體模組,並增強刷新率,為防範新攻擊,製造商避免透露採取的應對手段,令很多人以為DDR5已有效解決Rowhammer問題,直至去年大學的研究人員成功攻擊DDR5記憶模組,即使是在記憶體必需與AMD Zen 2或Zen 3 CPU搭配的特定條件下,而且仍有部份記憶模組不受影響。
新攻擊的功能
研究人員為了開發Phoenix對TRR機制進行了逆向工程,分析不同記憶體對行的存取模式,和檢查鄰行有否觸發保護,結果發現TRR明顯更加複雜,以前已知的存取模式不再有效,保護機制現在正確把模式標記為潛在危險然後強制刷新鄰行,結果研究人員發現,128次TRR追蹤的記憶存取後,會因為防護較弱而有64次存取「機會」。這並非保護系統完全失效,而是反應不足以防禦目標記憶單元的數值變更,第二視窗在記憶單元經過2608次刷新間隔後出現。
研究人員之後對弱點進行詳細研究,目標是對記憶單元發動準確的攻擊的同時突破防禦,攻擊原理是惡意程式碼進行一系列的假訪問,使TRR機制以為安全,然後攻擊進入主動階段,最終修改目標單元的數值,結果團隊確定能夠可靠地攻擊市場領導製造商,SK Hynix所生產的全部15個測試DDR5記憶模組。
三個現實世界攻擊劇本
成功的攻擊必需更改特定記憶體區域的某個數值,這任務相當困難,首先攻擊者需要對目標軟件有深入認識,也需要繞過多重常規保安監控,即使是一兩個元位的錯誤也可能導致系統崩潰而不是成功入侵。研究人員著手證明Phoenix能對現實世界造成傷害,他們評估了三種攻擊劇本,第一種PTE涉及存取頁面表創造任意讀寫RAM資料的條件,第二種RSA目標是從記憶體中盜竊RSA-2048私鑰,第三種sudo涉及繞過標準Linux sudo保護工具,藉此提升權限。
結果部份模組在128個刷新間隔攻擊有效,其他模組則是2608個間隔有效,也有一些實驗中盜竊RSA金鑰和sudo漏洞都未能成功,不過所有模組都能任意讀寫記憶體,此類攻擊的時間相對短,只需5秒至7分鐘之間,足以證明Rowhammer攻擊能構成真實風險,即使適用劇本十分有限。
關聯和應對
Phoenix攻擊顯示Rowhammer形式的攻擊能對DDR5記憶模組有效,與DDR4和DDR3一樣,雖然只測試了單一供應商的模組,研究人員揭示了供應商的TRR演算法的簡單弱點,修復可能也很簡單,但這是記憶模組安全研究向前的重要一步。作者提出了數種應對Rowhammer類型攻擊的措施,首先是降低刷新間隔可顯著妨礙攻擊,缺點是增加功耗和晶片溫度,但是最直接的解決方案。其次是使用具備錯誤校正碼(ECC)的記憶體,令Rowhammer攻擊難度增加,但不能完全杜絕攻擊。
除了以上較明顯的措施,作者還提到另外兩項,首先是採用Fine Granularity Refresh保護方法,此方法已被實施,內建於處理器的記憶體控制器內,它修改記憶單元的刷新行為來抵禦Rowhammer攻擊。其次是研究人員敦促記憶體模組和晶片開發商停止依賴專有安全措施(「隱藏式安全法」),他們建議採用密碼學中常見的方法,公開演算法並接受獨立測試。
資料來源:Kaspersky Blog


