神奇的數字“3”:一次翻轉3個位元即可實現Rowhammer攻擊
來自荷蘭的一組研究人員已經證實,可以避開糾錯碼(ECC)保護機制來執行Rowhammer記憶體操縱攻擊。
什麼是Rowhammer?
早在2015年,谷歌的Project Zero團隊就曾發現,可以反覆對相鄰行中的儲存單元進行充電和放電,來改變單個儲存單元的值。如果攻擊者準確地知道要攻擊的位置,他們就可以更改特定位置,將指令或命令注入記憶體中,或是授予訪問許可權以訪問包含敏感資訊的受限制部分。
ECC保護機制在Rowhammer出現之前就已經開發出來了,ECC代表糾錯碼,是一種記憶體儲存,包含作為具有高階RAM的控制機制,通常部署在昂貴的或者關鍵任務型系統中。ECC記憶體的工作原理是通過檢測並校正單個位元值的變化,來防止位元翻轉的情況,就像Rowhammer攻擊造成的那樣。
近日,阿姆斯特丹自由大學(The Vrije Universiteit Amsterdam)的一組研究人員表示,他們已經開發出了一種切實可行的方法,來精確地改變伺服器RAM記憶體晶片中的位元,而不會觸發ECC的校正機制。這就使得他們能夠篡改資料,注入惡意程式碼和命令,並更改訪問許可權,以便可以竊取密碼、金鑰和其他祕密資訊。
這一研究發現可謂意義非凡,因為雖然ECC曾被認為是阻止Rowhammer式攻擊的可靠方法,但有人認為從理論上可以繞過這種防禦機制。現在這種想法已經得到了證實。
結果是,惡意行為者可以利用該團隊提出來的避開伺服器上ECC的技術,使用Rowhammer手段從這些高價值目標中提取資訊。當然,這些惡意行為者必須先進入他們可以在易受攻擊的機器上翻轉位元的位置,為了實現這一步,他們可能會使用裝置上已有的惡意軟體。
神奇的數字“3”
阿姆斯特丹自由大學的研究團隊證實,ECC校驗錯誤的方式存在一個可利用的漏洞:當一個位元被改變時,ECC系統會糾正該錯誤。而當發現兩個位元被改變時,ECC就會使程式崩潰。
但如果三個位元可以同時被改變,ECC就無法捕獲到這種改動行為。這一點是眾所周知的,不過這裡的關鍵是可以證明,它能夠讓Rowhammer攻擊有機可乘。
至關重要的是,研究人員發現了一種類似競爭條件(race condition,即兩個或多個程序讀寫某些共享資料,而最後的結果取決於程序執行的精確時序)的情況,這讓他們確信可以利用3位元翻轉技術有效地操縱RAM地址。
研究人員認為,相比從不需要校正的地址讀取內容,從需要糾正位元翻轉的記憶體位置讀取內容所花的時間通常來得更長。因此,實驗過程中他們依次嘗試每個位元,直到找到這樣一個可以翻轉三個易受攻擊的位元的word。最後一步是讓兩個位置的所有三個位元都不相同,並實施最後一擊,一次性翻轉所有三個位元:任務完成。
研究人員表示,他們能夠在四種不同的伺服器系統上測試和重建漏洞:三個系統執行英特爾晶片,另一個系統使用AMD。他們拒絕透露任何特定的記憶體品牌。
幸運的是,雖然攻擊很難防止,但在實際環境下也很難實現。阿姆斯特丹自由大學的研究團隊梳理了眾多地址以找到易受攻擊的地址,然後實際執行Rowhammer攻擊。他們表示,在有繁雜的系統中,攻擊可能需要長達一週的時間才能順利實現攻擊。
研究人員表示,他們的研究結果不應被視為對ECC的譴責。相反地,它應該向系統管理員和安全專業人員展示ECC只是他們應該與其他安全機制(比如優化的硬體配置和認真仔細的記錄及監測等)結合使用的幾道保護層之一。
ECC無法阻止針對各種硬體組合的Rowhammer攻擊。如果位元翻轉的數字足夠大,ECC只會減慢攻擊速度。