很多 Bitdefender研究人員發現了一個新漏洞 在現代處理器中推測性執行指令的機制中, 誰叫SWAPGS, 與導致問題的處理器指令名稱相對應。
脆弱性 允許無特權的攻擊者確定內核內存區域的內容 或運行虛擬機。 該問題已在Intel處理器(x86_64)上得到確認,並且部分影響了沒有出現主要攻擊媒介的AMD處理器。
先前實施的Spectre和Meltdown反漏洞方法無法抵禦SWAPGS攻擊 使用Intel處理器,但是已經提出了針對Linux,ChromeOS,Android和Windows的解決方案。
該漏洞屬於Spectre v1類 並且基於從處理器緩存中檢索數據的想法,這些數據是在推測性執行指令後保留的。
現代CPU的轉換預測塊使用主動執行一些更有可能執行的指令來提高性能,但無需等待確定它們執行的所有因素的計算(例如,當指令轉換條件或訪問參數尚未計算)。
如果未確認預測,則處理器將丟棄推測性運行的結果,但是在運行期間處理的數據將由處理器進行緩存,並可以使用確定跨通道緩存內容的方法進行恢復。更改對緩存和非緩存數據的訪問時間。
關於SWAPGS
新攻擊的特殊性在於使用了SWAPGS指令的推測執行期間發生的洩漏, 當控制權從用戶空間轉移到操作系統內核時,它在操作系統中用於替換GS寄存器值(用戶空間中使用的GS值由內核操作中使用的值替換)。
GS中的Linux內核存儲per_cpu指針,用於訪問內核數據,以及 指向用戶空間中的TLS(線程本地存儲)。
為了在從內核空間重複訪問內核之後或者在執行不需要GS寄存器替換的代碼時排除對SWAPGS指令的兩次調用,在指令之前執行檢查和條件轉換。
推測執行機制在執行代碼之前先使用SWAPGS指令, 無需等待驗證結果,並且如果未確認所選分支,則丟棄結果。
因此, 當推測性地選擇了指定執行SWAPGS的分支時,可能會出現這種情況,但在推測執行期間,GS寄存器的值將由SWAPGS指令更改,並將用於CPU緩存的與內存相關的操作。
研究人員提出了兩種攻擊方案 為此準備了漏洞利用原型。
- 第一種情況是基於SWAPGS指令雖然在實際執行中使用時未以推測方式執行的情況,而第二種情況則是相反,當SWAPGS指令以推測性方式執行時(雖然實際上並未執行)。
- 對於每種情況,都有兩個操作選項:攻擊者可以在核心區域的特定地址中確定值,並且攻擊者可以在核心的隨機地址中搜索特定值。
該解決方案要求在主機和來賓環境上均安裝內核更新,然後重新引導系統。 要在Linux上禁用保護,可以使用“ nospectre_v1”選項,該選項還禁用阻止SWAPGS漏洞的措施。
該解決方案可作為Linux內核的修補程序使用。,已包含在版本4.19.65、5.2.7、4.14.137、4.9.188和4.4.188中,而對於不同的Linux發行版,相關的更正將在本周和下週進行。