利用硬件漏洞,黑客可從非特權進程訪問受限內存區域以盜取私鑰。OpenSSH 項目新收到的補丁正是為防止黑客通過這種方法偷盜密鑰而來。其他軟件應用程序亦可用相同的方法保護 RAM 中的秘密,直到下一代 SDRAM 芯片和 CPU 解決硬件漏洞問題。
該補丁發布之前,一組研究人員演示了名為 RAMBleed 的攻擊,可利用現代內存模塊的設計從分配給特權進程及內核的內存區域中提取信息。
RAMBleed 采用早前披露的 Rowhammer 軟件技術觸發物理存儲單元內的位翻轉,然后通過邊信道恢復出敏感信息。為證明攻擊有效,研究人員以用戶級權限運行的代碼從 OpenSSH 服務器恢復出了 RSA 2048 位簽名密鑰。
現代操作系統中,分配給內核的虛擬內存與分配給用戶空間應用程序的虛擬內存是隔離開來的。因為內核內存包含敏感數據,比如加密密鑰和密碼,非特權應用程序應不能直接訪問這些數據。
違反此基本原則即是嚴重的安全漏洞,因為攻擊者可以通過多種方式獲取計算機系統上的代碼執行權限,如惡意軟件感染或利用用戶空間應用程序中的漏洞。系統中所有非特權應用程序的攻擊界面遠遠大于內核本身的攻擊界面。
OpenSSH補丁加密私鑰
該新 OpenSSH 補丁由 OpenBSD 開發人員 Damien Miller 提交,旨在 “保護存儲在 RAM 中的私鑰,防止幽靈、熔斷、Rowhammer 和 Rambleed 這樣的預測執行攻擊和內存邊信道攻擊。”
幽靈、熔斷及最近的微架構數據采樣 (MDS) 均為利用現代 CPU 中預測執行功能的邊信道攻擊,而預測執行功能本是為提升計算機性能而設計的。其中一些攻擊可用于讀取受保護的內核內存。
在駐留內存且未與從 16KB 隨機數據導出的另一個對稱密鑰一起使用時,私鑰會被該新 OpenSSH 補丁加密。Miller 在補丁注釋中說道:
攻擊者必須先精準恢復出整個由大隨機數構成的預密鑰,才能嘗試解密被保護的私鑰,但當前攻擊方式應用到整個預密鑰上時,累積的誤碼率會高到無法精準恢復預密鑰,也就無法解密私鑰了。只要實現得當,密鑰就能在加載時處于加密保護狀態,而在用于簽名或被存儲/序列化時又自動、透明地解除加密保護。
新補丁應用廣泛,或可引介至其他軟件
OpenSSH 是最為流行的 SSH (Secure Shell) 協議實現,用于遠程訪問和管理計算機系統及服務器,但也用于自動化機器間通信。OpenSSH 最初是為 OpenBSD 設計的,但今天的大多數 Linux 發行版中都默認使用,Windows 10 中也受支持。
OpenSSH 新補丁使用的方法可以被其他軟件項目復制,以保護自己的密鑰和內存中的秘密。然而,正如補丁說明所言,該技術可降低邊信道攻擊的成功率,卻不能保證杜絕邊信道攻擊成功可能性。
攻擊總是在不斷進化發展,因此未來的 RAMBleed 或 熔斷/幽靈變種可能會攻破該補丁的防護機制。底層設計缺陷將在未來新推出的硬件中得到修復,但目前使用中的 CPU 和 SDRAM 芯片需要很多年才會被逐漸替換掉。
可以想見,此類硬件攻擊將對企業 IT 產生長期影響,因此,開發人員能夠部分緩解漏洞并讓攻擊更難以開展的任何軟件補丁,都極其有用。Miller 在該補丁說明的最后補充道:希望我們在幾年后,在計算機架構變得更為安全的時候,能夠卸載該補丁。
OpenSSH 新補丁: