可信執行環境之AMD內存加密技術概述
一. 引言
可信執行環境(Trusted Execution Environment,下稱TEE)是目前主流隱私計算技術之一,其通過軟硬件方法在中央處理器中構建一個安全的區域,保證其內部加載的程序和數據在機密性和完整性上得到保護[1]。基于硬件的TEE使用硬件支持的技術為代碼的執行和環境中數據的保護提供了更好的安全性保證。目前主流TEE方案有x86架構的Intel SGX技術、Intel TDX技術、AMD SEV技術及ARM架構的TrustZone技術等[2]。
本文將簡單介紹包含AMD SEV所采用的內存加密技術[3],包含安全內存加密(Secure Memory Encryption, SME)和安全加密虛擬化(Secure Encrypted Virtualization, SEV)兩個部分。
二. 安全內存加密(SME)
簡單來說,SME主要通過一個加密引擎對進出內存的數據進行加解密來實現。AMD在其芯片中配有內存控制器,控制器內包含高性能的AES加解密引擎。如圖1所示,向內存中寫入數據時,該引擎執行加密,而在從內存中讀取數據時,該引擎執行解密。AES所使用的密鑰會在每次系統重置時隨機生成,存儲在專用的硬件寄存器中并由AMD安全處理器(AMD-SP)進行管理,不會被CPU上的任何軟件所訪問也不會暴露在CPU芯片之外。

圖1 內存加解密示意圖
內存頁加密的控制是由操作系統或虛擬機管理器的負責頁表管理的軟件進行控制。其使用物理地址中的第47位,也稱C-bit來標記是否加密該頁。如圖2所示,當C-bit置為1時,表示應加密該頁,則對該內存的訪問由AES引擎自動進行加密與解密。反之則不進行加解密。

圖2 加解密控制示意圖
對于SME的使用,可分為全內存加密與部分內存加密兩種。對于全內存加密,即設置所有內存的頁表項C-bit為1,便可實現全內存加密,此時可以防止攻擊者直接拿走內存模塊后提取其內容,同時也可以防止冷啟動、內存接口窺探等攻擊。對于部分內存加密,其可以選擇只加密部分內存區域而不是全部,可以只對敏感數據提供加密保護,相比于全內存加密而言靈活性更高,并且可以為加密與非加密的工作負載提供隔離,降低性能影響。
此外,針對操作系統或虛擬機管理器不支持的情況,SME還支持一種特殊的更簡單的模式Transparent SME(TSME)。在此模式下,無論C-bit如何設置,所有內存都是加密的。但是在使用TSME模式時,其他內存加密特性均不可用。
以上便是對安全內存加密技術原理的簡單介紹,下面我們將重點介紹安全加密虛擬化技術。
三. 安全加密虛擬化(SEV)
3.1
技術架構
SEV是AMD-V技術的擴展,其支持使用一個虛擬機管理器控制并運行多臺虛擬機。SEV硬件通過ASID標記虛擬機的代碼與數據。在虛擬機的整個運行周期中,ASID在內存中保持不變,保證了虛擬機數據能被正確識別并且不會被系統中其他軟件訪問。當數據寫入或讀出內存時,則由AES加密引擎使用ASID所關聯的密鑰對數據進行加解密。如圖3所示,每個虛擬機都通過ASID僅與自己的加密密鑰相關聯,其他虛擬機或虛擬機管理器只能訪問加密后的數據,使得虛擬機之間、虛擬機與虛擬機管理器之間具有強隔離性。

圖3 SEV架構
3.2
內存加密
與SME一樣,SEV也是通過標記C-bit來控制頁表是否被加密。但在SEV中,虛擬機可以選擇其想要私有的數據內存頁并通過標準CPU頁表完成。對于虛擬機想要保密的內存數據,使用虛擬機的密鑰進行加密;而對于與其他虛擬機或虛擬機控制器的共享內存中的共享數據,則使用虛擬機管理器的密鑰加密。此時SEV虛擬機通過共享內存進行通信,而將其他內存使用密鑰進行加密,保障其機密性。
3.3
密鑰管理
從上面的介紹中可以看出,SEV的安全性依賴于密鑰的安全性,若密鑰泄露則虛擬機中的加密數據不再安全。為保護密鑰安全,AMD-SP中運行的SEV固件提供了一個安全的密鑰管理接口來實現。虛擬機管理器使用這個接口來啟動虛擬機,并執行正常的虛擬機活動。
為保護虛擬機的安全性,SEV固件需要保證平臺的真實性、虛擬機啟動的認證和虛擬機數據的保密性。對于平臺的認證,可通過其身份密鑰來證明。該證明由AMD和平臺所有者共同簽署。啟動認證則是向虛擬機所有者證明啟動過程時安全的,SEV固件向虛擬機所有者提供與SEV相關的虛擬機狀態的簽名,以驗證虛擬機是否處于預期狀態。詳細認證過程如圖4所示,用戶向云系統提供虛擬機鏡像,SEV固件啟動虛擬機,并返回固件、內核等的度量值。用戶驗證度量正確后,向虛擬機提供機密信息來允許虛擬機繼續啟動。

圖4 認證過程示例
虛擬機的機密性則是通過內存加密密鑰的機密性來保證,SEV密鑰管理接口不允許內存加密密鑰以及其他任何SEV相關狀態在未正確認證的情況下從固件中導出,可以防止虛擬機管理器獲取密鑰并竊取虛擬機中的數據。
四. SEV應用場景
4.1
云上應用場景
隨著云計算的發展,各行各業對云的使用率不斷提高,對云的需求不斷增加。然而云基礎設施或人員并不總是可信的,多個用戶之間的共享硬件同樣可能會帶來安全問題。而使用SEV則會為云上虛擬機提供更好的安全隔離,且加密內存可以防止云服務商中的惡意分子竊取數據。
4.2
安全沙盒
SEV是圍繞安全沙盒環境的理念構建的,沙盒像虛擬機一樣擁有自己的磁盤和操作系統,在沙盒內運行的軟件不受系統上其他軟件。因此SEV可以用于創建安全的沙盒執行環境,目前比較典型的應用便是將SEV與Kata容器相結合成為機密容器。由于Kata是通過虛擬化技術實現輕量級沙盒為容器提供隔離性,將其沙盒與SEV相結合便可使容器運行在TEE中,為容器運行提供更高的安全性。
五. 總結
SEV代表了一種新的虛擬化安全范例,與傳統計算系統相比,不同級別上執行的代碼是隔離的,任何一方都不能訪問另一方的資源,為低權限代碼提供了安全性。加密虛擬機不僅可以讓虛擬機免受物理威脅,還可以免受其他虛擬機甚至是虛擬機管理器本身,適用于不需要完全信任主機的虛擬機管理器和管理員場景。未來我們將繼續關注相關技術的研究,我們將在下一篇介紹其他TEE方案。