威廉瑪麗學(xué)院,卡內(nèi)基梅隆大學(xué),加州大學(xué)河濱分校和賓厄姆頓大學(xué)的研究人員已經(jīng)描述了一種安全攻擊,它利用現(xiàn)代處理器的推測執(zhí)行功能來泄漏敏感信息并破壞操作系統(tǒng)和軟件直立的安全邊界 保護(hù)重要數(shù)據(jù)。這可能聽起來很熟悉。
2018年早些時候發(fā)布的Spectre攻擊利用了現(xiàn)代處理器的推測執(zhí)行功能來泄漏敏感信息。 由研究人員命名為BranchScope的新攻擊與Spectre攻擊的變體2有一些相似之處,因為BranchScope和Spectre 2都利用了處理器分支預(yù)測器的行為。
通過推測性執(zhí)行,處理器在程序?qū)嶋H運行之前運行,并且在可以確定這些指令是否真正運行之前嘗試執(zhí)行指令。 例如,如果一個程序測試兩個數(shù)字是否相等,并且如果它們是一樣就做一件事,如果不是,則處理器會猜測結(jié)果并推測執(zhí)行所產(chǎn)生的動作。 如果后來證明處理器猜測錯誤,那么投機(jī)結(jié)果就會被拋棄,至少在抽象意義上,就好像猜測從未發(fā)生過。 處理器從停止的地方開始,執(zhí)行應(yīng)該采取的操作。整體而言,幽靈攻擊事件是由于處理器沒有把事情回復(fù)到原來的樣子。雖然處理器確實恢復(fù)了它的推測性執(zhí)行 – 如果沒有,程序會停止正常工作 – 它并不完美。當(dāng)涉及到處理器的高速緩存時,這一點尤為明顯:推測性執(zhí)行可能導(dǎo)致處理器將數(shù)據(jù)加載到高速緩存中(或者,或者從高速緩存中逐出數(shù)據(jù)),即使進(jìn)行了糟糕的推測,這些高速緩存更改也會持續(xù)存在。仔細(xì)編寫的軟件可以檢測到這些緩存更改并使用它們來推斷機(jī)密信息。
處理器的分支預(yù)測器是其投機(jī)執(zhí)行機(jī)構(gòu)的核心部分之一。雖然最新處理器中的分支預(yù)測器非常復(fù)雜,但從廣義上講,它們的操作方式相似。處理器跟蹤分支指令的地址,分支是否被采用,以及分支是否被采用,應(yīng)該執(zhí)行的下一條指令的地址 – 即分支的目標(biāo)。分支預(yù)測器提供了兩個相關(guān)的預(yù)測:分支是否被采用,以及是否采用,目標(biāo)是什么。
BranchScope和Spectre 2都利用了分支預(yù)測器的不同部分。 Spectre 2依賴于稱為分支目標(biāo)緩沖區(qū)(BTB)的部分 – 處理器內(nèi)用于記錄分支目標(biāo)的數(shù)據(jù)結(jié)構(gòu)。相反,BranchScope使用預(yù)測方向泄漏信息 – 無論是否可能被采用 – 存儲在模式歷史記錄表(PHT)中。
PHT保留最近采取的分支的一種運行得分,以記住這些分支是否被采用。通常情況下,這是一個兩位計數(shù)器,有四種狀態(tài):強(qiáng)力拍攝,弱拍,弱拍不拍,強(qiáng)拍不拍。每次采取分支時,計數(shù)器的值將移向“強(qiáng)烈采取”。每次沒有采取,它都會轉(zhuǎn)向“強(qiáng)烈不被采取”。這種設(shè)計意味著偶然的誤預(yù)測不會改變預(yù)測的結(jié)果:即使偶爾沒有實際采用,幾乎總是采用的分支仍然會預(yù)測為已采用。改變預(yù)測需要兩次背靠背錯誤預(yù)測。這種設(shè)計被證明可以提供比一位計數(shù)器更好的結(jié)果,該計數(shù)器根據(jù)上次發(fā)生的情況簡單預(yù)測分支。
對于Spectre 2,攻擊者啟動BTB,仔細(xì)執(zhí)行分支指令,以便BTB具有目標(biāo)指令的可預(yù)測內(nèi)容,如果推測執(zhí)行該指令,則會以可檢測的方式干擾處理器的高速緩存。 受害者程序然后運行并分支。 然后攻擊者檢查緩存是否受到干擾; 該干擾的測量會泄漏信息。在新的攻擊中,攻擊者啟動PHT并運行分支指令,以便PHT始終假定某個分支被采用或不被采用。 受害者代碼然后運行并形成分支,這可能會擾亂PHT。 然后攻擊者運行更多的分支指令來檢測對PHT的干擾; 攻擊者知道某些分支應(yīng)該按照特定的方向進(jìn)行預(yù)測,并測試受害者的代碼是否改變了該預(yù)測。
研究人員只關(guān)注英特爾處理器,利用這些攻擊泄漏用英特爾SGX(軟件防護(hù)擴(kuò)展)保護(hù)的信息,這是在某些芯片上發(fā)現(xiàn)的一項功能,用于分割小部分的加密代碼和數(shù)據(jù),從而即使是操作系統(tǒng)(或虛擬化軟件 )無法訪問它。 他們還描述了攻擊可用于地址空間布局隨機(jī)化的方式,并推斷加密和圖像庫中的數(shù)據(jù)。Spectre 2引發(fā)了操作系統(tǒng)和硬件的變化,并計劃了更多的硬件修復(fù)。 研究人員表示,BranchScope需要類似的解決方案組合; 一些軟件可以修改以消除分支,并且可以改變硬件來劃分處理器上的推測執(zhí)行數(shù)據(jù)結(jié)構(gòu),以便一個進(jìn)程不會攻擊另一個進(jìn)程。
與Spectre 2一樣,目前還不清楚有多少軟件真的容易受到BranchScope攻擊。 在這兩種情況下,攻擊者都需要能夠在受害者系統(tǒng)上運行代碼,所以這些攻擊永遠(yuǎn)不會用于初始進(jìn)入系統(tǒng)。 然而,他們所做的事情表明,長期以來被認(rèn)為存在的隔離邊界被高性能處理器必不可少的推測性執(zhí)行硬件所滲透。 而且,BranchScope表明,Specter不是通過這種投機(jī)性執(zhí)行可以被利用的唯一途徑。基本上,處理器包含許多推測執(zhí)行可修改的內(nèi)部狀態(tài)(包括寄存器,緩存,分支預(yù)測器,存儲緩沖區(qū)等)。架構(gòu)狀態(tài) – 由處理器發(fā)布的文檔說明直接暴露和操縱的部分 – 由推測硬件正確保存。像Spectre和BranchScope這樣的攻擊存在是因為非體系結(jié)構(gòu)狀態(tài) – 代表處理器的實現(xiàn)細(xì)節(jié)的部分,這些細(xì)節(jié)可能會從家族變?yōu)榧易澹⑶也荒苤苯颖怀绦蛟L問 – 并未完全保留。推測性執(zhí)行(以及它所依賴的非體系結(jié)構(gòu)狀態(tài))旨在無形地發(fā)生,并且沒有跡象表明正在運行的程序正在發(fā)生。
像Spectre 2和BranchScope這樣的攻擊是結(jié)果。研究人員可能需要數(shù)年的時間才能確定以這種方式使用投機(jī)執(zhí)行硬件來泄漏信息的各種方式,而在強(qiáng)大的通用防御措施可用于阻止攻擊之前,這種方法將持續(xù)更長的時間。
報告:BranchScope: A New Side-Channel Attack on Directional Branch Predictor(http://www.cs.ucr.edu/~nael/pubs/asplos18.pdf)
原文:https://arstechnica.com/gadgets/2018/03/its-not-just-spectre-researchers-reveal-more-branch-prediction-attacks/#p3