Retbleed 攻擊,或 Spectre 反擊

7 月中旬,蘇黎世瑞士聯邦理工學院的研究人員發表了一項研究,描述了一種利用現代處理器中的漏洞(或者,如果您願意,也可以是功能)的新攻擊。這次攻擊被稱為 Retbleed,它源自Retpoline– 針對某種幽靈攻擊的防禦方法。從本質上講,作者展示了它的程序編譯技術——以前被認為可以有效防止所謂的 Spectre Variant 2 攻擊——要么只是偶爾起作用,要么根本不起作用。與之前所有關於處理器硬件漏洞的研究一樣,這項研究相當複雜。在本文中,我們將像往常一樣,盡量不深入相關科學論文的迷宮,而是用簡單的語言來描述結果。讓我們從一些背景信息開始。
什麼是幽靈 v2?我們來談談分支預測
四年多前,也就是 2018 年初,發表了兩篇描述Spectre 和 Meltdown 漏洞的研究論文。這些是硬體漏洞:處理器的工作方式可能導致潛在的數據盜竊攻擊。從那以後,又發現了幾個Spectre 的變種。研究人員已經找到了更多攻擊一類常見漏洞的方法;也就是說,使用處理器的默認功能(稱為“分支預測”)進行攻擊。
指令的分支預測和推測執行有助於顯著提高處理器性能。在任何程序中,進一步步驟的執行通常取決於先前計算的結果。最簡單的例子是當用戶輸入密碼來訪問一些秘密數據時。如果密碼正確,則向用戶顯示數據。如果密碼錯誤,則提示用戶重試。在 CPU 的簡單指令級別,這大致轉化為檢查 RAM 中某些數據的訪問權限:如果確認了必要的權限,則授予對數據的訪問權限;如果不是 – 拒絕。
處理器每秒可以執行數十億次此類操作,並且在檢查某個條件時,它通常處於空閒狀態(鬆散地說——等待用戶輸入密碼,或等待檢查訪問權限)。但是如果我們讓它利用這個空閒時間來執行在最可能的檢查結果之後發生的計算呢?當我們的假設用戶輸入他們的假設密碼時,計算結果就準備好了,用戶將更快地看到他們的秘密數據。
但是你怎麼知道你的代碼的哪一部分最有可能被執行呢?當然,來自與先前執行類似指令相關的統計數據。如果我們的用戶(請注意,這是一個高度理論化且極其簡化的示例)十次中有九次輸入正確的密碼,我們可以提前準備他們的秘密數據。如果密碼不正確,我們只是丟棄結果並花更多時間顯示錯誤消息。
2018 年論文的作者描述了 Spectre 攻擊的兩種變體,變體 2(也稱為分支目標註入)訓練一個分支預測器,以便它執行我們需要的指令,例如讀取攻擊者不應訪問的數據至。是的,這些計算隨後會被丟棄,但它們的結果(高度敏感的數據)會暫時存儲在緩存中——從中可以竊取。
這是一種極其複雜的攻擊。首先,攻擊者必須能夠在受到攻擊的系統上執行代碼,儘管沒有所需的權限,即無法訪問敏感數據。例如,可以說服用戶在其瀏覽器中打開包含惡意腳本的網頁。其次,攻擊者需要目標系統上包含適合攻擊的代碼的軟件。在研究人員的行話中,這被稱為“小工具”。攻擊代碼訓練分支預測系統推測性地執行這個小工具。這會導致它訪問攻擊者無法訪問的內存區域。秘密數據被放置在 CPU 緩存中,通過旁通道讀取可以非常緩慢地從該緩存中提取 – 不超過每秒數十位。
讓我們試著把它變得更簡單。處理器的內置分支預測系統不會將指令與不同的程序分開,並且可以使用單個程序使處理器推測性地執行它不應該運行的指令。以前,這似乎不是問題,因為軟件無論如何都不能直接訪問處理器緩存中的數據。但是,事實證明,通過讀取側通道(這是一種非常複雜的機制:僅基於有關讀取請求響應速度的信息來重構數據),可以提取數據。
不掛斷。Spectre 於 2018 年被發現。他們現在肯定已經修補了嗎?
硬體漏洞並不是那麼容易。首先,即使從這個簡化的描述中,也可以清楚地看出,該漏洞雖然肯定是基於硬件的,但需要軟件中的某些條件才能被利用。如果是這樣,為什麼不只是修補軟體呢?這比升級硬件要容易得多。也可以通過微碼更新部分修復處理器中的漏洞。但該問題的最終解決方案只能在發布具有修改硬件的新處理器中找到。與此同時,舊的仍然完全或部分脆弱。
在 Retbleed 研究的背景下,還有一個非常重要的問題。軟體或硬體更新的成本是多少?“關閉” Spectre 的每一種方法都會降低性能。例如,相當明顯的間接分支限制推測 (IBRS) 系統在推測代碼執行期間引入了額外的權限檢查,並防止低權限程序訪問高度敏感的數據,從而使 Spectre 攻擊成為不可能。但是隨著數十萬或數百萬次這樣的檢查,CPU 性能必然會下降。多遠?有研究表明,系統中的 Spectre 的不同補丁集導致性能下降高達 25%。
而這裡來了Retpoline,這是一種相對簡單的針對 Spectre 的保護方法,由 Google 工程師提出並在軟件編譯期間使用。正如該方法的作者所建議的那樣,將典型分支情況下的某些指令替換為其他指令不會影響軟體的可操作性,但它確實使 Spectre 攻擊成為不可能。與 IBRS 和其他保護方法相比,Retpoline 的一個重要優勢是性能的輕微下降不超過 5%。
Retbleed 研究表明了什麼?
基本上,這項新的研究表明 Retpoline…… 不起作用!Retpoline 方法所依賴的返回指令也可以在稍微修改的方案中被利用來欺騙(或惡意訓練)分支預測器。作者甚至錄製了一段演示攻擊的影片:
基於 Linux 的系統上的 Retbleed 攻擊演示。
該影片顯示了一個無權訪問此類數據的程序如何竊取散列的超級用戶密碼。請注意,影片是高度加速的:在基於英特爾的系統上,實時密碼盜竊需要一個半小時!結果總結在下表中:

在啟動 Retpoline 保護的情況下測試 Retbleed 攻擊可能性的處理器摘要列表。來源。
如表所示,不是全新的,而是最新的 AMD Zen 1 和 Zen 2(2017-2019)以及英特爾的 Kaby Lake 和 Coffee Lake(2016-2017)處理器容易受到 Retbleed 攻擊。在更現代的 AMD Zen 3 處理器以及 Intel Alder Lake 和更早的第 9代處理器上, Retbleed攻擊不起作用。這也是由於在英特爾處理器中實施了增強型 IBRS 硬體保護。
保護成本
如果幽靈攻擊如此難以執行,為什麼還要防禦呢?事實上,為了使 Spectre 適應現實世界的案例(對受害者造成真正的傷害),需要滿足許多條件:能夠在受攻擊的系統上執行代碼、安裝易受攻擊的軟件以及可靠地提取數據從緩存中(有一定的讀取錯誤的機會)。我們之前曾寫道,最真實的攻擊是在 Chrome 瀏覽器中模擬的,其中潛在的攻擊者可以例如從 RAM 中提取保存的密碼。但這可以通過瀏覽器本身的簡單保護增強來解決,就像任何其他微不足道的錯誤一樣。
有可能有一天,研究 Spectre 類漏洞的漸進式進展會出乎意料地導致對用戶計算機和服務器的大規模攻擊的可能性。但是當涉及到真正敏感的數據時,現在必須考慮到 Spectre。
最明顯的場景是通過託管和分佈式計算提供商的攻擊。您可以從隨機提供商處以合理的價格租用的典型虛擬服務器本質上是在同一台高性能服務器上與其他客戶的虛擬操作系統一起運行的程序。根據定義,虛擬服務器用戶可以在其上運行程序,但無權訪問其鄰居或主機,即控制操作系統。虛擬環境的分離和無法逃離您的虛擬空間是此類服務提供商的關鍵安全要求。
同時,服務提供商有興趣在同一台服務器上運行盡可能多的虛擬系統,而不會相互造成問題。這是儘早收回昂貴硬體的關鍵。也就是說,所有 Spectre 更新(實際工作)都會降低性能,從而減少 ISP 收入。但提供商也不能忽視這個問題,因為成功竊取敏感數據甚至不會留下痕跡!
因此,當 Retpoline 被提出時,許多人將其視為對抗新禍害的生命線。但是,到 2018 年 1 月,人們懷疑這種防禦方法的可靠性。Linux 內核開發人員郵件列表上的討論顯示了許多對 Retpoline 的抱怨(作者也對其他方法不恭維)。同時,Linux 的創建者和主要保管人 Linus Torvalds明確(以他典型的犀利方式)Retpoline 通常就足夠了。
Retbleed 的作者通過將他的明確引述放在論文的開頭來強調 Torvalds 的判斷力。他們還計算了無法在硬件級別修復的易受攻擊的處理器的實際保護“成本”。Linux 內核中的更新導致英特爾處理器性能下降高達 39%,AMD 處理器性能下降 14%。
AMD 處理器以自己的方式被證明是易受攻擊的,研究人員發現了一種他們稱之為“幻影 JMP”的現象。事實證明,在某些條件下,分支預測系統可以執行任意指令,即使它不存在於受到攻擊的代碼中。正因為如此,作者不得不發布一份簡短的一頁研究附錄。然而,他們規定,利用此漏洞進行真正的破壞比使用傳統的 Spectre V2 更加困難。
現在怎麼辦?
對於普通用戶而言,Spectre 攻擊的威脅仍然完全是虛擬的。來自操作系統開發人員的預防性更新就足夠了。順便說一句,在 Windows 中,默認啟用有效的 IBRS 保護。新的 Linux 內核更新可能會導致性能下降,這在計算機硬體被擠壓到極限的商業解決方案中可能最為明顯。
存在許多 Spectre 變體的事實使問題更加複雜。Retbleed 也可以被視為一個單獨的變體,它在不同製造商的處理器上的工作方式不同。AMD 和 Intel 已經承認 Retbleed 是一個單獨的漏洞,並且可能會針對它提出一些硬體解決方案。企業將轉向實施保護措施的新硬體,在性能和安全性之間找到平衡。不幸的是,所有軟體更新對相對較舊的處理器的性能影響最大。隨著時間的推移,軟件不僅要求越來越高,而且對投機執行也有這種“懲罰”。
如果你從鳥瞰的角度來看這個問題,這並不是什麼新鮮事。開發人員在不考慮安全性的情況下提供性能增強解決方案。遲早(在這種情況下是後期:投機執行始於 1990 年代中期),它會再次困擾每個人,安全措施有其成本,但最終會找到新的解決方案,並且高科技產業會繼續前進。
令人驚訝的是在硬體中發現了問題:它不像在軟體中那麼容易修復。這不是一個簡單的錯誤,而是該行業多年前採用的一種糟糕的(從安全角度來看)方法。讓我們希望處理器開發人員在極其危險的硬件攻擊的黑天鵝飛過我們之前,想出安全和強大計算的新方法——這種攻擊威脅到每個人,廣為人知,只能通過完全更換硬體來解決。