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根據處理器型號自動決定如何操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章