PTT評價

Re: [情報] AMD Zen2的CPU漏洞Zenbleed

看板PC_Shopping標題Re: [情報] AMD Zen2的CPU漏洞Zenbleed作者
s25g5d4
(function)
時間推噓43 推:43 噓:0 →:39

簡單回覆一下這個漏洞是怎麼回事,用手機不想打太多字

這次的漏洞有 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 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.39.149 (臺灣)
PTT 網址

oppoR20 07/26 14:38推 有料

mrme945 07/26 14:39懂了(其實沒有

a58524andy 07/26 14:40Push

yymeow 07/26 14:44推 專業

asdg62558 07/26 14:50專業 推

mayolane 07/26 14:50https://i.imgur.com/vtSOIoc.png

liumang 07/26 14:50跟我想的一樣(完全不懂

spfy 07/26 14:51這種比酸一句就跑的強多了

E7lijah 07/26 14:53https://i.imgur.com/fgsSL97.jpg

Fezico 07/26 15:04這bug看reddit上解釋還要暫存器處於某種特

Fezico 07/26 15:04定狀況下才成立的樣子?

要有特定指令跟順序觸發才會踩到,受害程式也必須有用到特定指令 但這不是甚麼罕見的指令,反倒是很常見的

avans 07/26 15:07哇 專業講解,推

SILee 07/26 15:07聽起來怪怪的。所以他是還沒commit就把reg

SILee 07/26 15:07release出來?

對,但 rollback 沒有把資料還原回去,導致惡意程式可以讀到髒資料

jay0215 07/26 15:13薛丁格的兩隻貓搶一個盒子

righer 07/26 15:21所以跑windows update就可以修正cpu的漏洞

righer 07/26 15:21嗎?

yymeow 07/26 15:22要等新的BIOS

comipa 07/26 15:39推專業文

lazioliz 07/26 15:50跟我想得一樣

smallreader 07/26 16:08這樣有可能造成BSOD嗎

AmibaGelos 07/26 16:11zen有實作checkpoint只留預測時的狀

AmibaGelos 07/26 16:11態 其餘物理reg可以複用 我猜corner

AmibaGelos 07/26 16:11case回溯的reg map錯了

我不是很確定理解正不正確 map 應該沒錯,但是 rollback 只還原 zero bit 而沒有還原資料是錯的 導致惡意程式可以讀到髒資料

sdbb 07/26 16:22感謝科普

Chikei 07/26 16:33這bug是ymm暫存器用vzeroupper指令的時候

Chikei 07/26 16:35低位(對,不是高位)位元rollback沒處理好

kuninaka 07/26 17:16phantom bug

blueballer 07/26 17:31推解釋

kenphin0729 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:

https://seclists.org/oss-sec/2023/q3/67

2:

https://github.com/google/security-research/tree/master/pocs/cpus/zenbleed

3:

https://seclists.org/oss-sec/2023/q3/79

freezeyp 07/26 18:08該升級zen3了嗎?

dxzy 07/26 18:11不想打太多字 (手停不下來)

harry886901 07/26 18:12懂了 分支預測對吧 抱歉我大學教授計

harry886901 07/26 18:12算機網路都在亂教

a1234567289 07/26 18:27計算機網絡@@?

atbb 07/26 18:28樓上不是啦,你連內文都沒仔細的看耶..

chicagoparis 07/26 18:30這至少是計算機組織或架構的事情…

bunjie 07/26 18:30不明覺厲啊

roc074 07/26 18:39計算機組織吧XD

wardraw 07/26 18:46推專業

s25g5d4 07/26 18:47大學的計算機組織是不喜歡的教授上的,我

Gsanz 07/26 18:47https://i.imgur.com/EdywNCP.jpg

s25g5d4 07/26 18:47混個及格而已 科科

s25g5d4 07/26 18:48印象中 branch prediction/speculative e

s25g5d4 07/26 18:48xecution/OOE 大學都不會教啦,這些上網

s25g5d4 07/26 18:48啃資料比較實際。至少當年大學我們教 ARM

s25g5d4 07/26 18:48 都沒有這些東西

s25g5d4 07/26 18:49然後啟蒙我了解這些的是 PCADV 的水球大

s25g5d4 07/26 18:49,水球大大你有看到嗎我在這

asd4302asd 07/26 19:01推專業

leung3740250 07/26 19:05大學的ppt不是還在教祖傳5-stage p

leung3740250 07/26 19:05ipeline嗎XD?

TFnight 07/26 19:10

ekgs 07/26 20:12大學計組會教喇 只是教個皮毛爾已

ekgs 07/26 20:15現在的處理器太複雜了 一門計組課上不完的

damnedfish 07/26 20:59

BlackCoal 07/26 21:13推,雖然我完全看不懂

lc85301 07/26 21:33竟然是用 fuzz test 抓到的

lc85301 07/26 21:35應該說現在處理器太複雜,學都是學概念

lc85301 07/26 21:37但其實現在也找得到 riscv 的實作,要從

lc85301 07/26 21:37實作學也不是不行

wahaha99 07/26 21:43推,這算妥妥的Bug了

lc85301 07/26 21:46是說這在攻擊上有實用性嗎?你只能拿到一

lc85301 07/26 21:46個 register 的值

可以,目標是攻擊 strlen 跟 strcmp, 這兩個函式的泛用性可想而知 而且這不是只拿一個 register 值 這是一個針對 SIMD 指令的攻擊,它的單次讀取有效長度達 128 bit 加上每個攻擊循環只有數行指令碼,不需太多 cycle 就能讀 然後,幹你 AMD

https://i.imgur.com/NiygTzB.png

※ 編輯: s25g5d4 (218.164.132.132 臺灣), 07/26/2023 22:12:49

croweva 07/26 23:20Zen3沒這錯誤 是不是AMD早就知道修掉了

s25g5d4 07/26 23:34應該不是,可能是執行策略改了

lc85301 07/27 00:27原來如此

xiaotee 07/27 00:48推一下

HenryLin123 07/27 01:47怎麼聽起來是個DV就要找到的bug?

HenryLin123 07/27 01:49physical register 會亂給別人

hn9480412 07/27 02:17水球現在都在Cool3C發文比較多www

s25g5d4 07/27 02:19哈,我指的是還在紙本電腦王雜誌連載的

s25g5d4 07/27 02:19當然現在線上版的也會看,不過論啟蒙還是

s25g5d4 07/27 02:19靠當年電腦王雜誌

Bf109G6 07/27 04:45QQ

lc85301 07/27 08:52現在 CPU 太複雜了,出現沒驗到的 bug

lc85301 07/27 08:52還算正常吧

niverse 07/27 09:35計組都祭祖惹

v86861062 07/27 12:49推推

moocow 07/27 14:36!!!!!!!

SUCKERKING 07/27 21:35水球20年前常常在連線硬體版打筆戰。

biofish 07/28 01:38推推