英特爾最近有些流年不利,昨天彭博社爆料蘋果將在本月的WWDC大會上宣布PC產品處理器架構全面轉向ARM。如果說合作伙伴跳船只是“外憂”,那么困擾英特爾的處理器安全問題則是更加令人頭疼的“內患”。
過去的兩年中,現代CPU(尤其是英特爾生產的CPU)持續受到一系列無休止的攻擊的困擾,這些攻擊使技術高超的攻擊者能夠從芯片內存中竊取密碼、加密密鑰和其他機密信息。
周二,壞消息再次傳來,兩個獨立的學術團隊披露了兩個新的獨特漏洞(SGAxe和CrossTalk),這些漏洞使英特爾的Software Guard eXtension(SGX)成為迄今為止公司處理器最敏感(脆弱)的部分。
2015年發布的SGX,顧名思義,是對英特爾體系的一個擴展,用于增強軟件的安全性。具體來說是為加密密鑰和其他敏感數據提供類似Fort Knox的保護,即使操作系統或虛擬機被嚴重破壞這些敏感信息也不會泄露。
SGX通過創建受信任的執行環境來工作,以保護敏感代碼及其所用數據免受系統上其他任何事物的監視或篡改。通俗地講,SGX對于軟件的保護并不是識別或者隔離系統中出現的惡意軟件,而是將合法軟件對于敏感數據(如加密密鑰、密碼、用戶數據等)的操作封裝在一個“小黑匣”中,使得惡意軟件無法對這些數據進行訪問。
SGX的安全性和真實性的關鍵是創建所謂的安全區或安全內存塊。安全區內容在離開處理器之前已加密并寫入RAM。它們只有在返回后才被解密。SGX的工作是保護安全區內存,并阻止CPU可信部分以外的任何其他人訪問其內容。
周二的漏洞攻擊并非SGX的首次潰敗。2018年,另外一支研究隊伍利用Meltdown攻擊闖入了堅固的“小黑匣”,通過運行在一個“小黑匣”中的攻擊程序(malware)對其他“小黑匣”的敏感程序實施攻擊,這樣便打破了SGX的安全。因為攻擊程序malware也運行在一個“小黑匣”中,主機上的反病毒軟件很難發現并清除攻擊程序。
Meltdown與Spectre攻擊激發了處理器漏洞利用的迅猛發展。就在今年早些時候,另有一個研究小組也成功攻破了SGX(https://lviattack.eu/)。
英特爾通過引入微代碼更新來緩解了早期的SGX漏洞。但是,這些緩解措施并未持續太久,最近的這兩次攻擊促使英特爾忙不迭地設計了新的防御措施。英特爾周二發布了更新,并計劃在未來幾周內將這些更新提供給最終用戶。根據計算機類型的不同,該修復程序將自動安裝或需要手動干預。英特爾用戶,尤其是那些依賴SGX的用戶,應與設備制造商聯系,并確保盡快安裝更新。
新的SGX攻擊代號SGAxe和CrossTalk。兩者都使用單獨的旁路攻擊闖入強化的CPU區域,這是一種通過測量時序差異、功耗、電磁輻射、聲音或來自存儲它的系統的其他信息來推斷敏感數據的一種黑客技術。兩種攻擊的前提大致相同。攻擊者已經能夠通過破壞系統完整性的軟件漏洞或惡意虛擬機破壞目標計算機的安全性。盡管這種攻擊有著很高的技術門檻,但這也恰恰正是SGX應該防御的情況。
SGAxe能夠竊取大量受SGX保護的數據。一類敏感數據是屬于目標用戶的數據,例如,錢包地址或涉及區塊鏈的金融交易中使用的其他秘密信息。下圖顯示了存儲在安全區域中的圖像文件。右圖顯示了使用SGAxe提取后的同一圖像。
攻擊可以很容易地竊取SGX用于“證明”的加密密鑰,可以向遠程服務器證明該硬件是真正的Intel處理器而不是惡意模擬。遠程服務器在進行金融交易,播放受保護的視頻或執行其他受限制的功能之前,可能需要連接設備提供這些證明密鑰。密歇根大學和澳大利亞阿德萊德大學的研究人員在題為“SGAxe:SGX在實踐中潰敗”的論文(https://sgaxe.com/)中寫道:
由于機器的生產環境證明密鑰受到損害,服務器提供的任何機密信息都可以立即由客戶端的非授信應用程序讀取,而客戶端安全區所產生的所有輸出均無法保障其正確性,這直接導致基于SGX的DRM應用程序失效。最后,我們通過遠程認證的能力還意味著基于SGX的安全遠程計算協議也失去效用。
“撂荒”五個月的漏洞
SGAxe起源于一次更早的攻擊,名為CacheOut,同一攻擊團隊(還有一名參與者)于1月發現了這種攻擊。 而CacheOut又是2019年5月份一次攻擊的變體,該攻擊于2019年5月公開,業內的代號五花八門,包括RIDL、Fallout、ZombieLoad和Microarchitectural Data Sampling等,每個代號均來自一個獨立發現該缺陷的研究團隊。CacheOut和SGAxe都利用了CVE-2020-0549,該漏洞是發現RIDL攻擊的研究人員于1月27日(即CacheOut論文發表的同一天)作為附錄披露的。
RIDL和其他相關攻擊通常使攻擊者能夠讀取CPU與目標共享的數據包。從本質上講,RIDL類似于鑲嵌在墻上的玻璃,一個公寓單元的居民可以聽到相鄰單元的情況。英特爾CPU就是公寓房間,而墻是line fill buffer(行填充緩沖區)——硅片上存儲最近訪問的數據的填充緩沖區。就像墻壁泄漏聲音一樣,緩沖區也會泄漏時鐘數據,攻擊者可以推斷其中包含的數據。
英特爾從未修復芯片中的潛在漏洞。取而代之的是,該公司的工程師發布了一個微代碼更新,該更新使CPU在每次處理器開始新的對安全性敏感的操作時,都用垃圾信息覆蓋緩沖區內容。而CacheOut則找到了一種繞過此緩解措施的方法。
麻煩還在后面
除了繞開英特爾2018年的緩解措施外,CacheOut還引入了一種使漏洞利用更加有效的方法。原始RIDL攻擊的局限性在于,它僅允許攻擊者監視相鄰單元中主動發生的對話,即僅訪問在超線程中處理的數據。如果未在同一CPU內核共享的超線程中對其進行處理,則攻擊者無法訪問數據。但是,使用CacheOut,攻擊者可以克服此限制。更具體地說,在CacheOut中,攻擊者首先從高速緩存中抽取自己選擇的數據,方法是先將數據發送到行填充緩沖區,然后使用RIDL將其提取出來。如果說RIDL就像墻體鑲嵌的玻璃,讓攻擊者可以聽到鄰居間的隊話,那么通過CacheOut,攻擊者可以強迫鄰居們討論任何攻擊者想要知道的話題。
至于SGAxe,這是CacheOut的一種新的更有效的用法。它使用稱為分頁的內存管理方案將安全區數據移到L1高速緩存中,在那里解密內容。然后通過CacheOut將數據移到緩沖區,最后使用RIDL技術將其提取出來。
英特爾發言人說,一旦將微碼修復程序安裝在最終用戶計算機上,將重新分配安全密鑰,以解決舊密鑰泄露的可能性。發言人還說,當證明服務使用英特爾推薦的可鏈接簽名模式來檢測對平臺密鑰的欺詐使用時,可以減輕所有證明密鑰暴露的嚴重性。她還表示,SGAxe和CacheOut在“已應用的虛擬環境中幾乎沒有影響”,2018年發布的緩解措施,可以用于保護名為L1 Terminal Fault的另一種推測性執行漏洞。
但是,密歇根大學研究員,SGAxe和CacheOut論文的合著者之一丹尼爾·金金(Daniel Genkin)表示,可鏈接簽名模式并非總是有效,不能在所有情況下都減輕證明密鑰泄漏的威脅。他還不同意L1 Terminal Fault緩解可以阻止CacheOut和SGAxe攻擊,但Genkin承認這會使攻擊變得更加困難。
等等…還有CrossTalk
值得注意的是,第二次SGX攻擊基于以前未知的副通道,該副通道是由Intel CPU內核使用的未記錄緩沖區創建的。阿姆斯特丹的弗里耶大學和蘇黎世聯邦理工學院的研究人員稱之為“暫存緩沖區”,它保留了先前在所有CPU內核上執行的脫機指令的結果。這是此內核間緩沖區的工作原理圖:
該發現非常重要,原因有若干。首先,當前緩沖區保留了RDRAND和的輸出RDSEED,這是Intel CPU可以執行的最敏感的指令之一,因為它們提供生成加密密鑰時所需的隨機數。下圖顯示了泄漏的工作方式:
獲得隨機數的攻擊者可以使用它們來推斷密鑰。這一發現使研究人員能夠設計出一種推測執行攻擊,該攻擊基于SGX安全區中生成的ECDSA加密算法提取密鑰。
首次跨內核攻擊
同樣重要的是,這個新發現的緩沖區提供的輔助通道使攻擊者能夠發動全球首個跨CPU內核的推測性執行攻擊。此前所有的攻擊都需要攻擊者和目標使用相同的處理器內核,因此許多安全防御者認為將受信任和不受信任的代碼分配給不同的內核可有效緩解投機執行攻擊(又稱瞬態執行攻擊)。作為新漏洞的命名,CrossTalk攻擊將迫使研究人員和工程師重新考慮這一假設。
研究人員在一封電子郵件中寫道:
例如,許多人認為禁用Intel SMT(超線程)足以阻止大多數已知/未來的攻擊,或者,在不同的內核上運行互不信任的代碼就可以緩解迄今為止的所有攻擊。事實上,問題比想象得更加嚴重,基于內核的隔離可能還不夠。
在一份研究論文(vusec.net/projects/crosstalk)中,研究人員總結如下:
通過許多Intel CPU上的此緩沖區,加密的RDRAND和RDSEED指令會將其輸出泄漏給攻擊者,我們已經證明這是一種現實的攻擊。我們還再次證明,利用這些攻擊來破壞英特爾SGX安全區中運行的代碼是輕而易舉的。
更糟糕的是,緩解現有瞬態執行攻擊的方法幾乎沒有效果。當前大多數緩解措施都依賴于邊界上的空間隔離,由于這些攻擊的跨核心性質,這些邊界不再適用。新的微代碼更新將這些指令鎖定在整個內存總線上,可以緩解這些攻擊-但前提是沒有尚未發現的類似問題。
研究人員測試了2015年至2019年發布的Intel CPU,發現證據表明,大多數常規客戶端CPU(包括Xeon E3系列處理器)都容易受到CrossTalk的攻擊。英特爾表示,至強E5 / E7中的服務器微體系結構不容易受到攻擊。研究人員尚未測試今年發布的任何第10代Core CPU,但根據他們從Intel獲得的信息,其中一些會受到攻擊。
治病需去根
英特爾解決此錯誤的微代碼更新會在更新活躍緩沖區之前鎖定整個內存總線,并僅在清除其內容后才將其解鎖。進行此更改的策略是確保沒有信息暴露給其他CPU內核發出的脫機請求。英特爾只更新了幾個對安全性至關重要的指令,包括RDRAND、RDSEED和EGETKEY。研究人員說,這意味著其他指令(例如WRMSR)的輸出仍然會在CPU內核之間泄漏。
對于大多數英特爾CPU用戶來說,最重要的是,接下來的幾周內英特爾需要修復的漏洞可能在未來幾年中都將成為嚴重問題。在不相關的(云計算)客戶之間共享同一CPU的云環境,風險可能更高,但是即使在這些環境中,熟練的工程師也可以做一些事情來減輕攻擊。
本周最新一輪攻擊得出的更大結論是,困擾英特爾的處理器漏洞利用不太可能在短期內緩解。與AMD和ARM處理器相比,英特爾CPU報告的漏洞數量“大幅領先”,因此這家全球最大的芯片制造商有責任重新設計安全的開發生命周期,確保基業長青。