作者jclin (状态:idle)
看板PC_Shopping
标题Re: [情报] Intel严重漏洞 OS更新将会降低效能
时间Fri Jan 5 15:18:14 2018
※ 引述《s25Ag5d4 (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]
: 在第四行会产生一个例外,但因为 OOOE 与推测执行,造成第
: 七行的读取记忆体行为也执行了,它存取的资料被从记忆体中
: 搬入快取,但因为在第四行产生例外,因此 rbx 并没有真的
: 被写入资料。因为 rbx + rax 上的资料被移到快取了,它的
补充一下细节.
第四行一定会引发 exception,因为 user space application 不可以这样
直读取 kernel data。但是因为 OOOE 跟 superscalar,
line 4 之後的指令也一并被拆解为 micro-ops 充份利用 CPU 上的运算单元
最後等 line 4 和後面的 uOPs 做完 in-order 回到 architecture state,发现
line 4 会有问题才 raise exception,并且把已经 OOOE 多做的资料清掉跟准备
发出 exception。但是这时会有 race condition 产生.
虽然 line 4 不允许被执行,但是後面的因为 uOPs 已经做了,
rbx + rax 指向的资料已被搬进 cache。rbx 是自己程式记忆起头,而 rax * 4096
就是 shift left 12, 避免预先读进相邻的 data 到 cache line
这时再利用以前的 paper 的 flush+reload 技巧把 cache 状态读出来
就可以知道 rcx 这个 byte 的值为何
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 24.6.217.218
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PC_Shopping/M.1515136696.A.3AC.html
※ 编辑: jclin (24.6.217.218), 01/05/2018 15:19:54
1F:→ s25g5d4 : 感谢补充,uop 可以乱序执行,但 retirement 要一个 01/05 15:21
2F:→ s25g5d4 : 一个来,所以 line 7 的 retire 不会执行到,虽然 01/05 15:21
3F:→ s25g5d4 : 它的 uOP 已经跑完,但不会写入 register 01/05 15:21
4F:→ jclin : 所以有写 in order 回到 architecture state 01/05 15:24
5F:推 s25g5d4 : 其实我是想补关键字而已 XD 01/05 15:25
6F:→ jclin : 虽然是mov rbx但是不是这样读,还是要透过cache 01/05 15:25
7F:→ jclin : side-channel attach 来判断是读了哪个资料 01/05 15:25