攻擊英特爾 SGX 以提取敏感數據或在 enclave 中執行代碼

來自中國人民解放軍國防科技大學、新加坡國立大學和蘇黎世聯邦理工學院的研究人員開發了一種針對孤立的英特爾 SGX(軟件保護擴展)飛地的新攻擊方法。 該攻擊稱為 SmashEx,由英特爾 SGX 運行時組件運行期間處理異常的重入問題引起。 如果可以控制操作系統,則所提出的攻擊方法可以確定位於 enclave 中的機密數據,或者組織將代碼複製到 enclave 的內存中並執行。

已為基於英特爾 SGX SDK (CVE-2021-0186) 和 Microsoft Open Enclave (CVE-2021-33767) 的運行時飛地準備了漏洞利用原型。 在第一種情況下,演示了提取 Web 服務器上用於 HTTPS 的 RSA 密鑰的能力,在第二種情況下,可以確定在 enclave 內運行的 cURL 實用程序獲得的內容。 該漏洞已在英特爾 SGX SDK 2.13 和 Open Enclave 0.17.1 版本中以編程方式修復。 除了Intel SGX SDK和Microsoft Open Enclave,該漏洞還出現在Google Asylo SDK、EdgelessRT、Apache Teaclave、Rust SGX SDK、SGX-LKL、CoSMIX和Veracruz中。

回想一下,SGX(Software Guard Extensions)技術出現在第六代 Intel Core 處理器(Skylake)中,它提供了一系列指令,允許用戶級應用程序分配封閉的內存區域——即使是內核和代碼在 ring0、SMM 和 VMM 模式下執行。 不可能使用傳統的跳轉函數和寄存器和堆棧操作將控制轉移到 enclave 中的代碼——專門創建的新指令 EENTER、EEXIT 和 ERESUME 用於將控制轉移到執行授權檢查的 enclave。 在這種情況下,放置在飛地中的代碼可以使用經典的調用方法來調用飛地內部的函數和調用外部函數的特殊指令。 Enclave 內存加密用於防止 DRAM 連接等硬件攻擊。

攻擊英特爾 SGX 以提取敏感數據或在 enclave 中執行代碼

問題是 SGX 技術允許操作系統通過拋出硬件異常來中斷 enclave 的執行,而 enclave 沒有正確實現原子處理此類異常的原語。 與操作系統內核和普通應用程序不同,enclaves 內的代碼無法訪問用於在處理異步引發的異常期間組織原子操作的原語。 如果沒有指定的原子原語,則 enclave 可以隨時中斷並返回執行,即使在關鍵部分正在 enclave 中執行並且它處於不安全狀態時(例如,當 CPU 寄存器未保存/恢復時) .

攻擊英特爾 SGX 以提取敏感數據或在 enclave 中執行代碼

對於正常操作,SGX 技術允許您使用可配置的硬件異常中斷 enclave 的執行。 此功能允許 enclave 運行時實現 enclave 內異常處理或信號處理,但它也可能引入重入錯誤。 SmashEx 攻擊是基於 SDK 中的缺陷被利用,導致異常處理程序重新調用的情況沒有得到妥善處理。 重要的是,為了利用該漏洞,攻擊者必須能夠中斷 enclave 的執行,即必須控制系統環境的運行。

拋出異常後,攻擊者獲得一個小時間窗口,在此期間可以通過對輸入參數的操作來攔截執行流程。 特別是,如果你可以訪問系統(enclave 外的環境),你可以在執行進入 enclave 的指令(EENTER)後立即創建一個新的異常,這將在堆棧配置的階段將控制權交還給系統對於尚未完成的飛地,其中此編號存儲 CPU 寄存器的狀態。

然後系統可以將控制返回給 enclave,但由於在中斷時 enclave 堆棧未配置,enclave 將使用駐留在系統內存中的堆棧執行,這可用於應用返回導向編程(ROP ) 技術. 面向編程). 當使用 ROP 技術時,攻擊者並不試圖將他的代碼放在內存中,而是對已加載庫中可用的機器指令片段進行操作,以控制返回指令結束(通常,這些是庫的結尾功能)。 漏洞利用的操作歸結為構建對類似塊(“小工具”)的調用鏈以獲得所需的功能。

攻擊英特爾 SGX 以提取敏感數據或在 enclave 中執行代碼
攻擊英特爾 SGX 以提取敏感數據或在 enclave 中執行代碼


來源: opennet.ru

添加評論