新的推測執行漏洞襲擊了AMD,ARM和Intel

微軟安全響應中心Google Project Zero

獨立發現了一個新的攻擊,它使用處理器的推測執行功能洩漏數據,名為Speculative Store Bypass(SSB)。英特爾和AMD的處理器,以及一些使用ARM設計的處理器都受到影響。

自從今年早些時候宣佈崩潰和幽靈瑕疵以來,現代微處理器的推測和預測能力得到了仔細檢查,揭示了幾起新的攻擊。

所有的襲擊都遵循一套共同的原則。每個處理器都有一個架構行為(記錄的行為描述指令如何工作,程序員依賴於編寫他們的程序)以及微架構行為(架構的實際實現方式)。這些可以以微妙的方式發散。

例如,在架構上,從內存中的特定地址加載值的程序將在嘗試執行加載之前等待地址已知。然而,在微架構上,處理器可能試圖猜測地址,以便即使在它絕對確定應該使用哪個地址之前,它可以開始從內存加載該值(這很慢)。

新的推測執行漏洞襲擊了AMD,ARM和Intel

如果處理器猜測錯誤,它將忽略猜測值並再次執行加載,這次使用正確的地址。架構定義的行為因此得以保留。但是這種錯誤的猜測會干擾處理器的其他部分 - 特別是緩存的內容。這些微架構干擾可以被檢測和測量,從而允許惡意程序對存儲器中存儲的值進行推斷。

熔燬和幽靈攻擊都利用了這種差異。SSB也是如此。從微軟撰寫的問題來看,有問題的事件順序如下:

  1. 將值緩慢地存儲在內存位置。

  2. 將該值快速加載到相同的內存位置。

  3. 使用剛剛讀取的值以可檢測的方式干擾緩存。

在這裡,“緩慢”和“快速”是指處理器能夠以多快的速度確定要從中讀取和寫入的存儲器位置。訣竅是讓第一步,商店,取決於先前指示的結果; 這意味著處理器在知道存儲值的位置之前必須等待。第二步,負載,相反,是這樣構建的,即地址可以快速確定,而無需等待。

在這種情況下,處理器的推測性執行將“忽略”或“繞過”存儲器(因為它尚不知道存儲器的實際存儲位置),並假設當前存儲在存儲器位置的數據是有效的。這給攻擊命名:商店被推測繞過,

最終處理器會發現存儲器和負載使用相同的存儲器地址,因此負載拾取了錯誤的值。推測執行被丟棄,並使用正確的值執行正確的計算。因此,架構行為得到妥善保存。但此時處理器的微架構狀態已經發生了變化。可以檢測到這些更改,並且攻擊者可以使用這些更改來確定讀取了哪個值。

新的推測執行漏洞襲擊了AMD,ARM和Intel

好消息和壞消息

與Spectre和Meltdown一樣,SSB要求攻擊者能夠在受害者系統上運行代碼。這使得雲服務提供商(惡意方可能試圖攻擊虛擬機並脫離其虛擬機)以及瀏覽器JavaScript引擎(惡意腳本可能試圖擺脫他們的沙盒)時尤其受到關注,但相反,這意味著在這些情況之外,範圍是有限的。

通常,首先能夠運行任意攻擊代碼的需要意味著一個或多個其他缺陷必須已經存在。同樣,這種攻擊只允許讀取數據。雖然有時候這些數據本身很有用(例如密碼或加密密鑰),但更多的時候它只是提供附加信息(例如內核內存佈局的細節)來幫助執行使用其他缺陷的另一次攻擊。

就風險和可利用性而言,這種攻擊類似於第一個Specter變種。第一個Specter變體,即數組邊界旁路,依次使用了兩個操作的類似模式(對於SSB,一個存儲然後是一個負載;對於Specter v1,一個分支然後是一個負載),其中第一個操作從體系結構上改變負載,但推測執行,就好像它沒有。

這種結構相似性意味著,解決Specter v1相同的應用程序級修改也可解決SSB問題。特別是,有風險的應用程序應該在第一個操作和加載操作之間插入額外的指令,以防止負載被推測性地執行。這不一定是使應用程序安全的唯一方法,但它是一個一致且相對容易應用的方法。

新的推測執行漏洞襲擊了AMD,ARM和Intel

我們也將看到一系列操作系統,微代碼和固件更新,就像我們為第二個Specter變體所做的一樣。最近的AMD處理器包含一項禁用特定類型推測執行的功能,而微軟將發佈允許使用此功能的Windows補丁。英特爾正在發佈微代碼更新,為其處理器提供類似的功能來禁用這種推測。這些最終將作為固件和操作系統更新進行分發。

然而,在這兩種情況下,這些公司都建議用戶不要打開這個系統範圍的選項。性能影響可能相當高 - 英特爾表示SYSmark和SPECint等基準測試降低了兩到八個百分點,因此修改風險應用程序是更好的解決方案。如果不可能的話,整個系統的變化是一個回退。

更多詳情敬請關注:綺風科技


分享到:


相關文章: