看板 PC_Shopping
作者 s25g5d4 (function(){})()
標題 Re: [情報] Intel嚴重漏洞 OS更新將會降低效能
時間 Fri Jan  5 11:42:38 2018


看了三天的 paper 終於看懂 Meltdown 怎麼做到的

Spectre 太複雜看不懂沒時間懶得看所以不談

首先我預設大家都知道
instruction-level paralleism 指令層級平行,
superscalar 超純量,
out-of-order execution 亂序執行,
speculative execution 推測執行

他們之間的關聯為,為了達成 ILP 所以引入 superscalar。
但是資料相依性問題造成 superscalar 不能很好發揮,因此
引入 out-of-order execution 讓 CPU 挑鄰近的可以同時執
行的指令執行。再來 speculative execution 遇到條件分支
conditional branch 時先預測會進某個分支並執行。


除此之外還有 micro op,以下寫作 uop,則是把一個 instr-
cution 拆成好幾個 uop 並把他丟下去跑。CPU 裡有好幾個不
同運算單元,包含算術運算、讀寫單元、分支單元,而且分別
都有複數分身可以同時執行。所以指令拆成 uop 以後先堆到
buffer 裡面,再丟到各個單元去跑。


把以上所有東西合起來就是,先解決資料相依性問題,挑幾個
鄰近的指令進來,拆成 uop,丟到 buffer,開始排程去跑,
並根據分支預測把可能的指令拿過來拆一拆一起下去跑。


接著 Meltdown 攻擊的問題點在於,當 user mode process
存取他不該存取的記憶體資料時,那個指令會產生一個例外

execption, 接著會產生一個中斷 interrupt 丟給 OS 去處理

這個例外。但因為以上幾個東西合在一起,其實指令的執行先
後順序是不一定的,有可能後面的跑一跑並且產生了一些副作
用,結果因為前面的指令產生例外,清空 buffer 與管線,雖
然暫存器 register 與記憶體都沒有寫入,理論上是當作沒發
生,可是卻有副作用發生了。這個副作用就是記憶體存取,會
先載入快取 cache。Layer 幾的快取其實不重要,因為重點是
它被載入快取中,所以存取時花費的時間一定比從記憶體存取
來的快。這個時間的差異就是洩漏出來的資訊。


考慮下面的指令

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]

在第四行會產生一個例外,但因為 OOOE 與推測執行,造成第
七行的讀取記憶體行為也執行了,它存取的資料被從記憶體中
搬入快取,但因為在第四行產生例外,因此 rbx 並沒有真的
被寫入資料。因為 rbx + rax 上的資料被移到快取了,它的
存取速度一定比其他在 probe array 裡的資料來的快,因此
只要掃一次整個 probe array 看看哪個資料存取速度比別的
快,再算出它與 probe array 起始位置的偏移量,就知道在
第四行中從 rcx 讀取到的 kernel data 是甚麼。


所以 KPTI 就是完全分離 kernel address 與 user address
,也就是 kernel space 的所有資料都不在 user space 中,
在 user space 讀資料都讀不到 kernel 資料,相對應的也不
會有例外產生。


--
eggimage:我之前也發生過很多次 yahoo本來就很爛 還外加奇摩12/10 18:52
madeinchina:之前即時通死都不讓我登入 後來我就改用MSN了...12/10 18:53
eggimage:發現MSN也不給你登....12/10 18:53
madeinchina:              就改登PTT了12/10 18:55
eggimage:最近ptt也一直斷....12/10 18:57
freely10469:                只好掀桌出去裸奔了...12/10 19:57

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.40.20
※ 文章代碼(AID): #1QJlGo9y (PC_Shopping)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1515123762.A.27C.html
ivan761016: 恩~跟我想的差不多1F 01/05 11:53
DsLove710: 跟我想的一樣2F 01/05 11:53
Angrboda: 原來是這樣3F 01/05 11:55
henry46277: 我很誠實的講 真的看不太懂  有文組的版本嗎?4F 01/05 11:58

總之就是一種側載攻擊
洪師傅, 不要跟他拼拳, 嘗試切他中路的概念

gg068187: 趕快推才不會被發現看不懂5F 01/05 11:59
aeolus0829: 看到組合語言就飄掉了... 囧>6F 01/05 11:59
Mankind69: 我很認同,跟我看法一樣7F 01/05 12:01
qxxrbull: 微處理機概論、組合語言 頭好痛8F 01/05 12:02
Apache: 就本來要授權的東西 你老闆說先做再來問我比較省事9F 01/05 12:02
doom3: 這是簡介Intel如何偷吃步嗎XD10F 01/05 12:04
ycc1227: 我的答案跟你一樣11F 01/05 12:06
tongigun: 嗯嗯跟我想的一樣12F 01/05 12:08
StarHero: INTEL:我不是教你詐~13F 01/05 12:09
DKPCOFGS: 有人看得懂可以翻譯一下嗎14F 01/05 12:09
iceyang: 所以前面推文說的關閉cache就好是真的?15F 01/05 12:12
s25g5d4: 關不掉,那是硬體設計,而且真的拿掉快取那直接倒退半世紀16F 01/05 12:13
gekidou: 沒錯........完全看不懂18F 01/05 12:14
chrisdar: 不能關閉cache, 但是可以把cache清空19F 01/05 12:15
StarHero: 就像你去郵局存錢 正常流程 你要填單 然後把存款單+20F 01/05 12:16
chrisdar: 甚麼時候清空就是重點了, 清空cache帶來效能拖累21F 01/05 12:16
nn3356: 看到組合語言就豆頁痛22F 01/05 12:16
StarHero: 錢+存款簿 送入櫃台 這樣~  可是櫃台想加快速度23F 01/05 12:17
Shauter: 關掉快取? 這 你的CPU效能要回到20年之前吧24F 01/05 12:17
StarHero: 先拿你的存簿去打好 才收錢跟存單
這時候就產生問題了...不給錢然後存簿又打好給你了~25F 01/05 12:19
jinshun: INTEL -20%27F 01/05 12:21
xxtomnyxx: 簡單的說就是 Intel 的 CPU 為了加快速度,會偷跑後面的指令,所以當發現前面的指令有例外存取時,雖然會清空後面偷跑的指令搬到快取的資料,但在搬到快取到清空的這段期間就可能被其他惡意程序趁機存取到這個高層級的資料。28F 01/05 12:23
vash0319: 嗯 跟我想的一樣......果然看不懂33F 01/05 12:26
kuma660224: 只有intel愛搶快偷吃步。34F 01/05 12:26
iip06112: 看不懂shl這行的意思 可以讀出kernel data嗎35F 01/05 12:26

就是讓 rax 的值乘以 4096, 以對齊 page size

orze04: 看程式碼反而比較好懂 囧36F 01/05 12:26
xxtomnyxx: 呃....應該說,因為資料還是有搬到快取留下的足跡,所以可以去查閱那筆資料37F 01/05 12:27
kira925: 不是只有Intel偷吃步 而是Intel偷得步比較多
不管Meltdown還是Spectre都是抓這種行為
只是Intel偷得更兇 所以額外有Meltdown39F 01/05 12:28
xxtomnyxx: shl 是把暫存器資料往高位元偏移的指令42F 01/05 12:29
orze04: rax rbx那些是暫存器43F 01/05 12:29
KotoriCute: 這些步驟現代高性能都有實作,所以Spectre每家都中44F 01/05 12:32
xxtomnyxx: 我確認一下,rax 和 rbx 是 x64 的暫存器寫法吧?45F 01/05 12:32

x86 一個 word 是 16 bits
al 代表 lower-byte, ah 代表 upper-byte
ax 代表整個 word (2 bytes)
eax 代表兩個 word (4 bytes)
rax 代表四個 word (8 bytes = 64 bits)

Tsai07: 原來如此,寫的真是淺顯易懂46F 01/05 12:32
linph: 淺顯易懂推47F 01/05 12:32
xxtomnyxx: 我學的組合語言是 x86 的,沒印象有 rax、rbx 這個48F 01/05 12:32
KotoriCute: 但Intel的實作方式比其他人更激進,所以Meltdown只49F 01/05 12:32
s08glen: 資工系菜比八表示欣慰,這學期學的課程讓我看得懂50F 01/05 12:32
KotoriCute: Intel有51F 01/05 12:32
qxxrbull: 偷的步多和少是哪邊的差別?52F 01/05 12:33
Bencrie: rax rbx 就 64bits 的 eax ebx53F 01/05 12:34
xxtomnyxx: 我猜是處理例外中斷和處理偷吃步程序的優先順序?54F 01/05 12:35
saito2190: 看得懂推55F 01/05 12:36
Litfal: 這些激進的廢掉,或是另外加防禦,會不會把原本領先的IPC吐回去阿...56F 01/05 12:38
kuma660224: 改硬體,不會像軟體補丁損失這麼大
RYZEN沒有激進到Meldown,效能也不弱58F 01/05 12:39
jk01: 從旁側擊的蓋念60F 01/05 12:41
KotoriCute: Google和Amazon說更新Fix後沒有明顯性能下降,大家可以回家啦61F 01/05 12:41
kuma660224: Spectre看起來風險小到可忽略。各家都中但不一定要63F 01/05 12:41
KotoriCute: Spectre 不是可以忽略,而是要補了話難度更大65F 01/05 12:43
Cubelia: 專業66F 01/05 12:43
cabin2501: 好猛 看不懂但是有一個結論:以後買AMD67F 01/05 12:43
iip06112: 請問為什麼算出偏移量就能知道kernel data 另外 rax+rbx附近(那個block)的資料也會一併被搬到快取中吧68F 01/05 12:43

第四行中從 rcx 中的位址讀入資料 = 84 好了

先把 84 * 4096 來對齊 4K page size

接著讀取 rbx + 84*4096 的資料

此時整個 page 會被載入 cache 中 (4096 byte)

probe_array 要對齊 4K page size,它的起始位置要在 page 開頭

接著每 4K 資料就又是另一個 page

從頭掃一次 probe_array 看看到哪個 page 速度最快

因為第 84 個 page 在上面說的,被載入到 cache 中

所以掃到第 84 個 page 的時候明顯比其他 page 快

這樣就算出偏移量 = 84, 所以 rcx 中的位址的資料就等於 84

KotoriCute: 要解決Spectre,OS和軟體這兩個都要更新
處理起來比Meltdown更麻煩71F 01/05 12:44
kuma660224: Spectre is harder for hackers to take advantage of
but is also harder to fix
就是S很難真正出問題,但難靠軟體解決風險。73F 01/05 12:45
KotoriCute: Google 測試沒有說 Spectre 可以忽略不管77F 01/05 12:46
iceyang: 有沒有人能舉個例子 平時上網駭客如何主動透過這漏洞攻擊並竊取我們本地端的資料78F 01/05 12:47
KotoriCute: 不過 Meltdown 是"馬上""立刻"要解決的問題80F 01/05 12:47
kuma660224: 理論上當然不能不管,但短期也不會出啥問題
Meltdown才是馬上嚴重要立即解決81F 01/05 12:47
KotoriCute: 現在雲端廠已經出來說,更新Meltdown fix 沒有明顯性能下降了
要期待Intel 在Server領域崩盤,看來可能性不大了83F 01/05 12:48
MrDisgrace: 難道要承認效能變慢 買時間的客戶不出來靠北退費86F 01/05 12:52
kira925: 這幾天Phoronix的更新測試是大概差3~5%拉
至於廠商會不會講有差 講有差他要被狗幹當然說沒87F 01/05 12:52
Lansbury: 笑了 解決方案的廠商怎麼敢將自己方案有問題89F 01/05 12:53
ChangWufei: 表面河蟹 私下I皇不知道要割多少肉解決90F 01/05 12:55
kuma660224: 實測若3-5%已蠻嚴重。接近一年份的牙膏。
不過哪家廠商敢出面說嚴重,得罪i皇不是小事91F 01/05 12:55
hl4: probe array是直接對應cache 的位址嗎93F 01/05 12:58

不是... 隨便找個地方塞一個很大的 array 而已
但一定要跟 page 對齊

BusterWu: 嗯嗯 這篇文章是用中文嗎 我怎麼看不懂94F 01/05 12:58
JoyRex: Ryzen真的要飛天了,就算拉到5G打個20%也沒啥優勢95F 01/05 13:00
orze04: al是rax裡的一段 shift rax也會等量shift al96F 01/05 13:00
arrenwu: 如果差5% 其實是還好啦XD97F 01/05 13:01
cka: 完了我看不懂98F 01/05 13:01
※ 編輯: s25g5d4 (36.227.40.20), 01/05/2018 13:04:02
friedpig: Azure也是炒翻天的時候就出來澄清沒事了 少部分
用戶網路會有點影響  但是有我們好棒棒的免費網路加速服務可以幫你把影響抵銷甚至更快喔99F 01/05 13:03
IHD: 爆199F 01/06 01:08
madstorm: 恩200F 01/06 01:49
plokm1221: 我早說了 跟我想的差不多201F 01/06 09:18
kevin811221: ok202F 01/06 12:47
versailles94: 很好,這寫的很棒老師給你100分203F 01/06 13:56

--
作者 s25g5d4 的最新發文:
點此顯示更多發文記錄