Retbleed(CVE-2022-29900和CVE-2022-29901)是利用分支目標注入來泄漏信息的推測執(zhí)行攻擊系列的新成員,我們稱之為 Spectre-BTI。與通過利用間接跳轉(zhuǎn)或調(diào)用觸發(fā)有害分支目標推測的兄弟姐妹不同,Retbleed 利用返回指令。這意味著很多,因為它破壞了我們當(dāng)前的一些 Spectre-BTI 防御。
今天的許多操作系統(tǒng)使用的一種這樣的防御稱為retpoline。Retpolines 通過將間接跳轉(zhuǎn)和調(diào)用替換為返回來工作。早在 2018 年,就發(fā)明了 retpolines,以防止未經(jīng)授權(quán)的攻擊者使用 Spectre-BTI 從系統(tǒng)內(nèi)存中竊取信息。雖然有些人擔(dān)心回報是否也可能受到 Spectre-BTI 攻擊,但回報被認為是不切實際的利用,并且擔(dān)憂被忽略了。主要原因是在正常微架構(gòu)條件下,返回目標預(yù)測不會被預(yù)測為間接分支。
然而事實證明,由于以下兩個見解,Retbleed 確實可以利用:
可以在 AMD 和 Intel CPU 上觸發(fā)微架構(gòu)條件,這會像間接分支一樣強制返回預(yù)測。我們還構(gòu)建了必要的工具來發(fā)現(xiàn) Linux 內(nèi)核中滿足這些條件的位置。
發(fā)現(xiàn)可以注入駐留在內(nèi)核地址空間內(nèi)的分支目標,即使作為非特權(quán)用戶也是如此。即使我們不能訪問內(nèi)核地址空間內(nèi)的分支目標——分支到這樣的目標會導(dǎo)致頁面錯誤——分支預(yù)測單元會在觀察到分支時自我更新并假設(shè)它是合法執(zhí)行的,即使它是到內(nèi)核的地址。
安全研究人員發(fā)現(xiàn)了另一個影響許多舊 AMD 和 Intel 微處理器的漏洞,該漏洞可能繞過當(dāng)前的防御并導(dǎo)致基于 Spectre 的推測執(zhí)行攻擊。
蘇黎世聯(lián)邦理工學(xué)院的研究人員 Johannes Wikner和 Kaveh Razavi 將這些問題稱為Retbleed,這些問題被跟蹤為 CVE-2022-29900 (AMD) 和 CVE-2022-29901 (Intel),芯片制造商發(fā)布 軟件 緩解措施作為協(xié)調(diào)披露過程的一部分。
Retbleed 也是被稱為 Spectre-BTI(CVE-2017-5715 或 Spectre-V2)的Spectre 攻擊的最新成員,該攻擊利用稱為推測執(zhí)行的優(yōu)化技術(shù)的副作用,通過時序側(cè)通道來欺騙程序訪問其內(nèi)存空間中的任意位置并泄漏私人信息。
推測執(zhí)行試圖通過預(yù)測接下來將執(zhí)行哪條指令來填充程序的指令流水線以獲得性能提升,同時如果猜測結(jié)果錯誤,也會撤消執(zhí)行結(jié)果。
像 Spectre 這樣的攻擊利用了這樣一個事實,即這些錯誤執(zhí)行的指令(錯誤預(yù)測的結(jié)果)必然會在緩存中留下執(zhí)行痕跡,從而導(dǎo)致流氓程序可以欺騙處理器執(zhí)行錯誤的代碼路徑和推斷與受害者有關(guān)的秘密數(shù)據(jù)。
換句話說,Spectre 是瞬態(tài)執(zhí)行攻擊的一個實例,它依靠硬件設(shè)計缺陷來“影響”哪些指令序列被推測執(zhí)行,并從受害者的內(nèi)存地址空間中泄露加密密鑰或密碼。
反過來,這是通過微架構(gòu)側(cè)通道(如Flush+Reload )實現(xiàn)的,該通道測量從與受害者共享的緩存中執(zhí)行內(nèi)存讀取所花費的時間,但不是在刷新一些共享內(nèi)存之前,導(dǎo)致快速或慢速讀取取決于受害者在被驅(qū)逐后是否訪問了受監(jiān)控的緩存行。
雖然已經(jīng)設(shè)計了像Retpoline(又名“return trampoline”)這樣的保護措施來防止分支目標注入 (BTI),但 Retbleed 旨在繞過這種對策并實現(xiàn)推測性代碼執(zhí)行。
“ Retpolines通過替換間接跳轉(zhuǎn) [在運行時確定分支目標的分支] 和返回調(diào)用來工作,”研究人員解釋說。
“Retbleed 旨在劫持內(nèi)核中的返回指令,以在內(nèi)核上下文中獲得任意推測性代碼執(zhí)行。通過在受害者返回指令處對寄存器和/或內(nèi)存進行充分控制,攻擊者可以泄漏任意內(nèi)核數(shù)據(jù)?!?/p>
簡而言之,核心思想是將返回指令視為用于推測執(zhí)行的攻擊向量,并強制將返回作為間接分支進行預(yù)測,從而有效地撤消 Retpoline 提供的保護。
作為新的防線,AMD 引入了所謂的Jmp2Ret,而英特爾建議使用增強的間接分支限制推測 ( eIBRS ) 來解決潛在的漏洞,即使 Retpoline 緩解措施到位。
“Windows 操作系統(tǒng)默認使用 IBRS,因此不需要更新,”英特爾在一份公告中表示,并指出它與 Linux 社區(qū)合作,為該缺陷提供可用的軟件更新。