用SVID接口對英特爾TEE實施故障攻擊
無需專業故障注入設備的故障攻擊
背景介紹
Intel Software Guard eXtensions (SGX) 是現代Intel處理器的一個特征,允許應用創建Enclave。SGX通過從可信計算基(Trusted computing base)中移除特權代碼來增強應用的安全性。Enclave是CPU的處理內存中硬件隔離的一個區域,應用可以在此允許處理極度機密的細節,比如加密密鑰、密碼、用戶數據等。使用SGX,開發人員可以創建一個可信執行環境,保護他們的數據和代碼免受臨時的威脅。
故障攻擊通過改變芯片的物理操作環境(例如過電壓和欠電壓、超頻、暴露于高溫或低溫或激光),在目標處理器中引發計算故障,例如跳過指令,這種攻擊方式不依賴于軟件漏洞的存在或任何代碼執行權限。
基于以上信息,英國伯明翰大學的Zitai Chen、Georgios Vasilakis、Kit Murdock等人在USENIX security 2021上討論了一種基于注入SVID數據包的故障注入攻擊方式,利用SVID電壓縮放接口改變CPU的核心電壓,實現了對Intel SGX Enclaves的基于硬件的故障注入攻擊。
已有工作
學術界針對可信執行環境的故障注入攻擊已提出以下方法:
1、利用ARM處理器上的軟件控制超頻功能,從可信區域提取加密信息并繞過簽名,從而在可信區域內執行代碼;
2、通過特權軟件控制CPU的核心電壓。
2019年12月10日,英特爾發布安全更新,披露“VoltJockey”安全漏洞(INTEL-SA-00289),該漏洞便是利用特權軟件控制CPU的核心電壓獲得敏感信息。
CPU的布局與電壓變壓器的連接如下圖1所示,SGX對應CPU中安全的Enclaves,內存映射寄存器MSR 0x150是可以控制CPU電壓的特權軟件。攻擊者可以在不受信任的環境下寫入MSR 0x150寄存器,使Enclave在執行期間發生欠壓,從而在某些操作(例如乘法、向量指令和加密操作)中觸發位翻轉,實現了針對SGX Enclaves的故障注入攻擊。

圖1 CPU的布局與電壓變壓器的連接
實驗內容
英特爾針對上述漏洞發布更新,禁用上述軟件接口。然而,在CPU和穩壓器之間仍然存在物理連接,該物理連接為本次實驗的關注點。
在現代計算機中,通常有一個或多個電壓變壓器連接到主板上的CPU。它們通過更改提供給CPU的核心電壓(和其他電壓)來管理系統的性能和功耗。當CPU以較低頻率運行或處于空閑模式時,它向電壓變壓器發送命令以降低電壓;反之,當CPU在重載或高頻下工作時,它會請求電壓變壓器增加電壓。
x86系統上電源的總體架構如下圖2所示,電壓變壓器存在兩個主要接口可用于改變CPU電壓,從而進行欠壓攻擊,即SVID接口和SMBus接口。

圖2 x86系統上電源的總體架構
首先要在電路板中找到攻擊者感興趣的接口位置。根據相關學者的經驗,電壓變壓器通常放置在靠近CPU和大型開關晶體管和電感器的位置,一般通過目視檢查和示波器探測會更易于識別。相關學者通過大量探測和逆向工程,檢查電壓調節器周圍的所有電阻,找到圖2中的正確信號和SVID總線的兩個引腳,結果如下圖3所示。

圖3 電壓變壓器位置與SVID Bus
借助于邏輯分析儀的截圖和若干測試,相關學者首先對SVID協議進行了逆向工程。同時,相關學者開發了VoltPillager,它是基于Teensy 4.0微控制器開發板的SVID命令注入定制設備,與總線并聯,如下圖4所示。基于逆向工程恢復出SVID協議,VoltPillager可以根據配置向目標電壓變壓器發送準備好的SVID包,改變CPU的核心電壓,實現基于硬件的欠壓攻擊。

圖4 VoltPillager命令注入
實驗結果
4.1 通過基于硬件的欠壓向SGX Enclave注入故障
在軟件控制接口(MSR 0x150)已被禁用的情況下,相關學者使用VoltPillager將故障注入CPU,復現“VoltJockey”安全漏洞實驗:主要關注它們的兩個POC,即錯誤整數乘法(在用戶空間中)和CRT-RSA解密/簽名(在SGX enclave中運行)。
故障乘法實驗在所有測試系統上獲得了相同的錯誤結果;RSA簽名/解密(SGX)實驗成功地獲得了錯誤簽名,并確認這些錯誤值可用于計算RSA模數并使用Lenstra攻擊恢復私鑰。禁用軟件欠壓接口時,此攻擊也成功;此外,端到端攻擊實驗使用mbed TLS庫上開發了端到端攻擊,單字節故障注入第八輪AES,然后執行差分故障分析(DFA)提取完整密鑰。
4.2 通過欠壓的延遲寫入故障攻擊
相關學者還描述了一類以前的研究中沒有報道過的新的欠壓引起的故障,即欠壓似乎會短暫延遲對緩存的內存寫入,因此相鄰的指令仍會讀取以前的值,出現的兩種故障如下圖5所示,其中故障1為越界下溢,由于故障影響了負責遞減和直接比較循環計數器的代碼;故障2為越界上溢,由于故障影響了上限的初始化。

圖5 欠壓延遲寫入引起的越界
結論
本論文實現了直接違反SGX完整性保證的基于硬件的攻擊,介紹了一種用于注入SVID數據包的開源硬件設備VoltPillager,證實了英特爾針對CVE2019-11157的對策并不能阻止具有物理訪問權限的對手的故障注入攻擊,這挑戰了廣泛接受的觀點,即SGX可以保護Enclave完整性免受惡意云提供商的攻擊。此外,還展示了通過基于硬件的欠壓發現的新故障效應——短暫延遲內存寫入。
參考資料
[1] Zitai Chen, Georgios Vasilakis, Kit Murdock, Edward Dean, David Oswald, Flavio D. Garcia. VoltPillager: Hardware-based fault injection attacks against Intel SGX Enclaves using the SVID voltage scaling interface[C]//30th USENIX Security Symposium (USENIX Security 21). 2021.