Intel嚴重漏洞 OS更新將會降低效能 - 3C

Ula avatar
By Ula
at 2018-01-05T15:59

Table of Contents

※ 引述《s25g5d4 (function(){})()》之銘言:
: 1 ; rcx = kernel address
: 2 ; rbx = probe array
: 3 retry:
: 4 mov al, byte [rcx]
: 5 shl rax, 0xc
: 6 jz retry
: 7 mov rbx, qword [rbx + rax]
前文恕刪。
沒想到電蝦版鄉民這麼有志於學,我來更正並補充一些觀念好了
首先,來解釋幾個名詞:
1. speculative execution
例: if (a<b)
c = b+1
else
c = b+2
現代處理器都有分支預測器(branch predictor)去預測接下來程式會往哪走
然後就往那個方向執行下去,以範例來說,如果處理器覺得if會成立
那他不用等到(a<b)算出來,就可以先執行 c = b+1的部分

2. out-of-order exection
例: b = a * 2
c = b + 5
d = a + 10
這個例子中,第1行和第3行並沒有資料相關性(data dependency)
所以1,3行可以一起執行,第2行則需等到第1行 a*2 算出來才可執行
執行順序為(1, 3),然後(2)

3. in order retirement
雖然執行次序可以亂,但是retire指令仍要依序來
以第一個例子來說,如果if指令還沒有retire,那麼暫存器c就不會真正被寫入

回到paper例子,這個例子主要是利用speculative execution
第4行前面其實是有一個很難算出來的branch,比方說indirect jmp
根據某個記憶體內容,來決定要跳到哪,這個記憶體內容可能不在cache裡
所以要從dram那邊讀出來要很久,這個時候分支預測器就跳出來說話了
說接下來可能會從第4行開始執行,所以4,5,6,7行就這麼執行下去了
(註:4,5,7有資料相關性,因此會依序執行)
他們可以執行到前面的branch算出來,發現預測錯誤為止

第4行是把kernel的資料搬一個byte存到暫存器rax裡
由於intel在執行指令的時候沒有檢查權限,而是等到要retire了才檢查
從結果上來看,雖然rax最終都沒有被真正寫入,但是第4行終究被執行了
kernel的資料被搬到了rax的rename register(T1)
然後T1向左移了12個bit(第5行)
最後第7行,從[rbx+T1]這個user位址中讀了一個cache line出來

執行到此,第4行前面的那條指令終於算出來了,發現錯了
把rax, rbx的資料都還原回去,就當作沒有讀過kernel的資料

也有可能他預測對了,終於可以retire,retire完之後
接下來要retire第4行的指令,結果發現他根本沒有權限讀取資料
一樣也把rax, rbx的資料還原回去,當作沒有讀過kernel的資料

可是不管怎樣,第7行的那個cache line還是被搬到了cache裡
而且這個cache line還是user可以合法存取的
所以接下來駭客只需要合法的存取256(2^8)個cache line
看哪一個比較快,就知道kernel資料的那8個bit是什麼了
例如第4個cache line讀起來比較快,那8個bit就是00000100

這裡補充一點,現在學界普遍認為資料預取(data prefetch)不會越過page boundary
由於第5行shift 12個bit的關係,這256個cache line分別位於不同的page
所以存取第一個cache line並不會造成後面的cache line也被cpu預先搬到cache來

由於他們都位於不同page的關係,需要不同的位址轉換(tlb entry)
只有之前讀過的cache line那個page有做過位址轉換,因此tlb hit
其他的通通都tlb miss,要花很長時間做table walk
轉換完位址之後,cache miss又要去記憶體搬資料
因此跟之前第7行讀過的cache line比起來,讀取的執行時間差異又更大了

大概就這樣
至於白話文解釋和解法,去看我之前的回文吧#1QJRc-vL

--
Tags: 3C

All Comments

Dora avatar
By Dora
at 2018-01-08T18:34
有白話給個推
Jacob avatar
By Jacob
at 2018-01-09T10:34
簡單說就是micro-architecute跟uOPs沒有檢查權限
Audriana avatar
By Audriana
at 2018-01-09T13:26
所以讀進[rcx],做了乘法,又prefetch[rbx+rax]
因為要盡量塞滿CPU執行單元,記憶體會盡量滿足要求
Irma avatar
By Irma
at 2018-01-10T18:41
讓資料一ready就可以讓這些uOPs去計算
Suhail Hany avatar
By Suhail Hany
at 2018-01-12T07:20
沒檢查權限又塞進cache,最後就能被side-channel
Jake avatar
By Jake
at 2018-01-12T13:29
所以說 怎麼會設計成不先確認權限再開始算R 484偷吃
步過頭了?
Puput avatar
By Puput
at 2018-01-17T08:46
基本上rax,rbx資料不用還原,因為是在uOPs內做
只是到最後發現白做,就 flush 不用存回 rax/rbx
George avatar
By George
at 2018-01-17T18:59
推熱心
Faithe avatar
By Faithe
at 2018-01-17T21:35
還原就白話說法嘛,實際上當然是flush掉相關的
physical register(rename register)
Hedda avatar
By Hedda
at 2018-01-19T09:47
所以 porbe array 要對齊 page 的原因是這樣,我還
以為是要讀整個 page 進 cache
當初看的時候也搞不清楚為什麼 cache line 查到的大
Jacob avatar
By Jacob
at 2018-01-20T02:56
小都是 64 bytes, 卻要做 shift 12
Kyle avatar
By Kyle
at 2018-01-24T22:46
是要讓256個可能的cache line分別在不同的page
David avatar
By David
at 2018-01-26T01:25
看完這篇再跟白話解釋對照就大致明白了
Ina avatar
By Ina
at 2018-01-26T12:34
所以這根本有可能是為了效能故意這樣設計的?
Wallis avatar
By Wallis
at 2018-01-30T01:48
推專業文。PTT清流
Steve avatar
By Steve
at 2018-01-30T07:08
Meltdown 的部分應該是吧
Ina avatar
By Ina
at 2018-02-01T11:14
理論上來說,在tlb做位址轉換時就可以順便檢查權限
可能他們檢查權限太慢,無法meet timing,所以等到
Iris avatar
By Iris
at 2018-02-03T11:38
之後retire再慢慢做,也可能是貪圖方便,在retire時
由ROB一併處理各種exception
Zenobia avatar
By Zenobia
at 2018-02-03T19:39
meltdown是這樣,spectre是更generalized.只靠分支預
測,不需要記憶體保護機制,但更難實作與成功,卻也更
難防
Sarah avatar
By Sarah
at 2018-02-07T13:24
叫 xxlin 都有這麼神嗎
Odelette avatar
By Odelette
at 2018-02-11T18:04
twlin版友 印像是AMD的@@
Elma avatar
By Elma
at 2018-02-15T00:11
又是AMD狂戰士
Connor avatar
By Connor
at 2018-02-17T22:19
不知道有沒有記錯
Megan avatar
By Megan
at 2018-02-21T03:49
jc大是拐著彎稱讚自己嗎XDD
Gary avatar
By Gary
at 2018-02-24T10:27
話說要怎麼寫判斷是不是cache hit的存取時間阿?
Brianna avatar
By Brianna
at 2018-02-27T04:06
原來早在 oversea_job 拜讀過 twlin 大大推文,一時
不察
Doris avatar
By Doris
at 2018-03-02T05:46
cache hit/miss這很早就做出啦. x86有很精準的rdtsc
可以算cycle
Audriana avatar
By Audriana
at 2018-03-05T02:59
的確是酒杯那個比喻比較恰當
Andy avatar
By Andy
at 2018-03-09T20:58
看下來感覺intel沒啥問題 問題終究在那些駭客吧
把駭客抓一抓就好啦
Zora avatar
By Zora
at 2018-03-12T09:29
樓上這個建議不錯..可以提供給intel
Bethany avatar
By Bethany
at 2018-03-15T13:07
推 這篇說得很白話
Mason avatar
By Mason
at 2018-03-20T04:45
推 看到這篇終於懂惹 感謝你
Audriana avatar
By Audriana
at 2018-03-24T01:09
Ingrid avatar
By Ingrid
at 2018-03-24T21:25
看了一些文章後去搜尋一大堆文章好不容易看懂分支和
預測器了 才看到這篇一看就懂QQ

Intel嚴重漏洞 OS更新將會降低效能

Frederic avatar
By Frederic
at 2018-01-05T15:18
※ 引述《s25Ag5d4 (function(){})()》之銘言: : (刪) : 1 ; rcx = kernel address : 2 ; rbx = probe array : 3 retry: : 4 mov al, byte [rcx] : 5 shl rax, 0xc : 6 j ...

Intel嚴重漏洞 OS更新將會降低效能

Lily avatar
By Lily
at 2018-01-05T15:13
挖...講的好複雜 簡單用擬人化來比喻 CPU就像是房東 A要跟房東說:我是A這是鑰匙(帳號密碼) 房東確認過後沒錯是A就給你進來 但是房東應該不知道你鑰匙的形狀 但是出了意外 第一個意外是11月披露的 其實房東有養一個小老婆 其名咪 這小老婆可厲害了 可以直接控制房東 駭客無法控 ...

散熱問題請益

Liam avatar
By Liam
at 2018-01-05T14:19
提問前先附上電腦訊息: CPU:R7 1700X (O.C 3.85G) RAM:幻光戟 3200 C14 8G*2 MB :C6H VGA:ASUS 1080TI 11G CASE:805旗艦版 CPU散熱:X42前進風 機殼散熱:CM PRO 120 RGB下進風*2 :CM PRO 12 ...

10K 吃雞 預算很緊

Ula avatar
By Ula
at 2018-01-05T13:23
已買/未買/已付訂金(元): 預算/用途:只求PUBG可順玩 CPU (中央處理器):i3-4160 MB (主機板):Gigabyte H97 RAM (記憶體):adata 8G VGA (顯示卡):gts450 HDD (硬碟):WD 500G DVD-RW ...

Intel嚴重漏洞 OS更新將會降低效能

Rosalind avatar
By Rosalind
at 2018-01-05T11:42
看了三天的 paper 終於看懂 Meltdown 怎麼做到的 Spectre 太複雜看不懂沒時間懶得看所以不談 首先我預設大家都知道 instruction-level paralleism 指令層級平行, superscalar 超純量, out-of-order execution 亂序執行, sp ...