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