簡單回覆一下這個漏洞是怎麼回事,用手機不想打太多字
這次的漏洞有 Meltdown/Spectre 有諸多相似之處
但是比起這兩者,這次的漏洞更為直接
目前我沒看到有人把 Zenbleed 歸類為 side channel attack
所以就當它不是
關於 Meltdown 可以參考先前文章:
#1QJlGo9y (PC_Shopping)以下用 M/S/Z 分別代表上述三種漏洞
相似的地方在於都是濫用預測執行 (speculative execution)
但 AMD 這次可以說是邏輯錯誤,跟 M/S 不同
因為 M/S 的執行邏輯是正確的,但在安全性檢查上不夠完善
雖然無法「直接」存取受害程式資料,但仍然可以從間接資料推測出原始資料
而 AMD 這次的漏洞則是妥妥的讓攻擊者直接讀取它不該讀到的東西
也就是說,即使不是惡意攻擊,仍然有機會在特定條件下造成執行錯誤
簡述這次的漏洞,就是濫用分支預測與預測執行,
在發生分支預測錯誤而回滾狀態時,讓兩個不同執行緒搶到同一個暫存器
x86 作為 CISC 代表,他的暫存器長度是多變的,
再加上暫存器重命名機制,即使你現在機器碼寫存取第一個暫存器,
實際上 CPU 可能會把它對映到另外一個暫存器上
所以當預測執行錯誤而必須回滾處理器狀態時,
本來已經被釋出的暫存器又被回滾回釋放前的狀態,
但回滾前另外一個執行緒已經拿走這個暫存器去用了
這時兩個執行緒都搶到同一個暫存器,
其中一個是惡意程式,就能直接讀取資料
所以我認為這是一個邏輯錯誤
因為即使不是惡意攻擊,這也是個妥妥的 race condition
目前 AMD 給的解決方法是微碼更新
依照白帽駭客的做法,在公開揭露前都會留時間給廠商修正
所以這次攻擊只要更新到最新的 AGESA 就修正了
**更新:可能尚未修正,見下方補充**對於暫時無法更新微碼的機器,可以透過修改 CPU 執行模式緩解
此緩解辦法可能會造成一定程度的效能減損
目前我沒有看到有人提供效能影響報告就是了
詳細的資訊可以參考發現此漏洞的白帽駭客文章:
https://lock.cmpxchg8b.com/zenbleed.html值得一題的是,這次的漏洞發現並非刻意針對某種系統/機制/邏輯的弱點攻擊,
而是在稱為 fuzzing 的一種產生任意指令/資料,以檢視軟體穩定性的測試中發現
詳細的發現過程是隨機產生一堆指令,再以同樣的順序再執行一次,比對兩者結果
不一樣的是對照組將嚴格遵循循序且不平行處理模式,務求最正確的結果
所以該作者能發現就是執行結果不一樣,
在現實應用中是有機會造成 phantom bug 的
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.39.149 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1690353037.A.4DD.htmloppoR201樓推 有料 07/26 14:38
mrme9452樓懂了(其實沒有 07/26 14:39
a58524andy3樓Push 07/26 14:40
yymeow4樓推 專業 07/26 14:44
asdg625585樓專業 推 07/26 14:50
mayolane6樓 07/26 14:50 liumang7樓跟我想的一樣(完全不懂 07/26 14:50
→ spfy8樓這種比酸一句就跑的強多了 07/26 14:51
E7lijah9樓 07/26 14:53 Fezico10樓這bug看reddit上解釋還要暫存器處於某種特 07/26 15:04
→ Fezico11樓定狀況下才成立的樣子? 07/26 15:04
要有特定指令跟順序觸發才會踩到,受害程式也必須有用到特定指令
但這不是甚麼罕見的指令,反倒是很常見的
avans12樓哇 專業講解,推 07/26 15:07
→ SILee13樓聽起來怪怪的。所以他是還沒commit就把reg 07/26 15:07
→ SILee14樓release出來? 07/26 15:07
對,但 rollback 沒有把資料還原回去,導致惡意程式可以讀到髒資料
jay021515樓薛丁格的兩隻貓搶一個盒子 07/26 15:13
righer16樓所以跑windows update就可以修正cpu的漏洞 07/26 15:21
→ righer17樓嗎? 07/26 15:21
→ yymeow18樓要等新的BIOS 07/26 15:22
comipa19樓推專業文 07/26 15:39
lazioliz20樓跟我想得一樣 07/26 15:50
smallreader21樓這樣有可能造成BSOD嗎 07/26 16:08
AmibaGelos22樓zen有實作checkpoint只留預測時的狀 07/26 16:11
→ AmibaGelos23樓態 其餘物理reg可以複用 我猜corner 07/26 16:11
→ AmibaGelos24樓case回溯的reg map錯了 07/26 16:11
我不是很確定理解正不正確
map 應該沒錯,但是 rollback 只還原 zero bit 而沒有還原資料是錯的
導致惡意程式可以讀到髒資料
sdbb25樓感謝科普 07/26 16:22
→ Chikei26樓這bug是ymm暫存器用vzeroupper指令的時候 07/26 16:33
→ Chikei27樓低位(對,不是高位)位元rollback沒處理好 07/26 16:35
kuninaka28樓phantom bug 07/26 17:16
blueballer29樓推解釋 07/26 17:31
kenphin072930樓推解釋 07/26 17:54
更正一下文內消息
剛剛看到目前只有 EPYC 才有微碼更新 [1]
其他 Zen 2 家族處理器還沒有 patch 好的微碼
準確的來說目前只有修復下列處理器家族:
2nd Gen AMD EPYC™ Processors "Rome" (fixed)
尚未修復:
AMD Ryzen 3000 Series Desktop Processors "Matisse" (Target Dec 2023)
AMD Ryzen 4000 Series Desktop Processors with Radeon Graphics "Renoir" AM4
(Target Dec 2023)
AMD Ryzen Threadripper 3000 Series Processors "Castle Peak" HEDT
(Target Oct 2023)
AMD Ryzen Threadripper PRO 3000WX Series Processors "Castle Peak" WS SP3
(Target Nov 2023/Dec 2023)
AMD Ryzen 5000 Series Mobile Processors with Radeon Graphics "Lucienne"
(Target Dec 2023)
AMD Ryzen 4000 Series Mobile Processors with Radeon Graphics "Renoir"
(Target Nov 2023)
AMD Ryzen 7020 Series Processors "Mendocino" FT6 (Target Dec 2023)
本來沒有要那麼早公開揭露漏洞的
但可惜的是 AMD 錯誤的提前釋出修正微碼,而且只有修復部分產品 [2]
所以只好提早公開揭露了
目前 linux kernel 針對此問題將預設開啟前述緩解方案
如果偵測到尚未包含修正的微碼,會設定對應的 chiken bit 避免漏洞開採 [3]
沒意外的話各大 linux distro 應該已經或很快會上這個 patch
1:
2:
3: