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