1. 程式人生 > >Speculative register leakage from lazy FPU context switching(CVE-2018-3665)

Speculative register leakage from lazy FPU context switching(CVE-2018-3665)

有段時間沒寫技術總結了,今天寫點吧。最近還在給公司的XEN發行版打安全補丁,基本上都是猜測執行引起的後遺症。感覺有些安全問題維護者有點大驚小怪了,比如今天說的這個,浮點上下文,就算洩露了又能咋地!

標題翻譯過來就是浮點上下文延遲切換與處理器猜測執行引起的暫存器洩露。我們知道程序切換的時候會儲存舊的執行環境就包括所有的暫存器並匯入新程序的暫存器上下文,但是對於有浮點操作的程序並不會立即匯入新程序的浮點上下文而是設定CR0.ts,因為大部分程序不會有浮點操作的需求,而且浮點相關的暫存器太多了(x87/mmx/sse/avx/avx-512)。當某個程序有浮點指令時,系統會觸發#NM異常,在異常處理程式中作業系統會清除CR0.ts,並匯入當前程序的浮點上下文。只在有必要的時候匯入,是不是很優化?

但就是這種軟體層面的優化,加上處理器無時無刻不在想方設法的猜測執行,#NM異常處理程式中如果有浮點load指令被猜測執行的話會在cache中留下印記,使得cache旁路攻擊成為可能。僅僅是可能,想找到一個gadget觸發旁路攻擊談何容易!

這個問題只有intel Nehalem以上的處理器有,AMD倖免於難。

XEN的解決方案是增加一個引數`eager-fpu=`,可以強制禁止浮點延遲切換,或者讓XEN根據處理器型號自動決定如何操作。