研究人員 中國人民解放軍國防科技大學、新加坡國立大學、瑞士蘇黎世技術學院 開發了一種新方法來攻擊 Intel SGX 的隔離飛地 (軟件保護擴展)。
這次攻擊被稱為 SmashEx 是由 Intel SGX 的運行時組件工作期間處理異常時的重入問題引起的。 提出的攻擊方法 如果可以控制操作系統,則可以確定敏感數據 位於飛地, 或者組織 enclave 內存中的代碼副本及其執行。
讓我們記住這項技術 SGX出現在第六代Intel Core處理器中 (SKYLAKE微架構) 並提供一系列說明 允許在 用戶級應用程序被分配私有內存區域、飛地,其中的內容甚至無法被內核讀取或更改,並且代碼在ring0、SMM和VMM模式下執行。
無法使用函數將控制權轉移到 enclave 中的代碼 傳統的寄存器和堆棧轉換和操作; 為了將控制權轉移到飛地,使用新的專門創建的指令 EENTER、EEXIT 和 ERESUME 來執行授權檢查。 同時, 放置在 enclave 中的代碼可以使用調用方法 enclave 內調用函數的經典 以及調用外部函數的特殊指令。 Enclave 內存加密用於防止硬件攻擊,例如連接到 DRAM 模塊。
該問題與SGX技術允許操作系統中斷執行有關 通過拋出硬件異常來處理飛地,並且用於原子處理此類異常的原語未在飛地中正確實現。 與操作系統內核和常規應用程序不同, 飛地內的代碼無法訪問原語 在異步異常處理期間編排原子操作。 如果沒有指定原子原語,Enclave 可以隨時中斷並再次運行,即使在 Enclave 中執行臨界區並且處於不安全狀態時(例如,當 CPU 寄存器未保存/恢復時)。
對於正常操作,該技術 SGX 允許通過硬件異常中斷 enclave 的執行 可配置。 此功能 允許 enclave 運行時實現異常處理 或飛地內的信號處理,但它也可能導致重入錯誤。 SmashEx 攻擊基於 SDK 中的一個缺陷,該缺陷導致重複的異常處理程序調用情況未得到正確處理。 重要的是,為了利用該漏洞,攻擊者必須能夠中斷enclave的執行,即他必須控制系統環境的工作。
拋出異常後,攻擊者有一小段時間窗口 在此期間,可以通過操縱輸入參數來攔截執行流程。 特別是,如果您有權訪問系統(enclave 之外的環境),則可以在執行 EENTER 語句後立即創建一個新的異常,這將導致控制權在進入 enclave 的階段返回到系統。 enclave 的堆棧配置尚未完成,CPU 寄存器的狀態已保存。
然後系統可以將控制權返回給飛地, 但由於 enclave 的堆棧在中斷時尚未配置,因此 enclave 將使用駐留在系統內存中的堆棧運行,這可用於應用面向返回編程 (ROP) 漏洞利用技術。 面向編程)。
當使用 ROP 技術時,攻擊者不會嘗試將其代碼放入內存中,而是對已加載庫中可用的機器指令部分進行操作,以控制返回指令結束(通常,這些指令是庫函數的末尾)。 該漏洞利用的工作被簡化為構建對類似塊(“小工具”)的調用鏈以獲得所需的功能。
漏洞利用原型已準備就緒 飛地的運行時基於 英特爾SGX SDK (CVE-2021-0186) 和 微軟開放飛地 (CVE-2021-3376)。
在第一種情況下,演示了提取 HTTPS Web 服務器中使用的 RSA 密鑰的能力,在第二種情況下,可以確定 enclave 內運行的 cURL 實用程序接收到的內容。
該漏洞已經被修復 Intel SGX SDK 版本 2.13 和 Open Enclave 0.17.1 中的軟件。
來源: https://jasonyu1996.github.io