Linux 中用於 x86 虛擬化的機密計算¶
作者:Elena Reshetova <elena.reshetova@intel.com> 和 Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
動機¶
在 x86 虛擬化環境中進行機密計算的核心開發人員,在 Linux 核心威脅模型方面所依據的假設與傳統觀點不同。 從歷史上看,Linux 威脅模型承認位於使用者空間的攻擊者,以及可以透過各種網路或有限的 HW 特定暴露介面(USB、thunderbolt)與核心互動的有限的外部攻擊者集合。 本文件的目標是解釋在機密計算領域中出現的其他攻擊向量,並討論 Linux 核心的擬議保護機制。
概述和術語¶
機密計算 (CoCo) 是一個廣泛的術語,涵蓋了旨在保護使用中資料(相對於靜態資料或傳輸中的資料)的機密性和完整性的各種安全技術。 其核心是,CoCo 解決方案提供了一個可信執行環境 (TEE),可以在其中執行安全資料處理,因此,它們通常根據計劃在 TEE 中執行的 SW 進一步分類為不同的子型別。 本文件重點關注 CoCo 技術的一個子類,該子類面向虛擬化環境,並允許在 TEE 中執行虛擬機器 (VM)。 從現在開始,本文件將把 CoCo 的這個子類稱為“用於虛擬化環境 (VE) 的機密計算 (CoCo)”。
在虛擬化上下文中,CoCo 指的是一組 HW 和/或 SW 技術,這些技術可以為在 CoCo VM 中執行的 SW 提供更強的安全保證。 也就是說,機密計算允許其使用者確認所有 SW 片段的可信度,以包含在其縮減的可信計算基礎 (TCB) 中,因為它能夠證明這些可信元件的狀態。
雖然具體實現細節因技術而異,但所有可用機制都旨在提高 VM 的客戶機記憶體和執行狀態(vCPU 暫存器)的機密性和完整性,更嚴格地控制客戶機中斷注入,以及一些額外的機制來控制客戶機-主機頁面對映。 有關特定於 x86 的解決方案的更多詳細資訊,請參見 英特爾信任域擴充套件 (TDX) 和 AMD 記憶體加密。
基本的 CoCo 客戶機佈局包括主機、客戶機、用於客戶機和主機通訊的介面、能夠支援 CoCo VM 的平臺以及客戶機 VM 和底層平臺之間的充當安全管理器的可信中介。 主機端虛擬機器監視器 (VMM) 通常由傳統 VMM 功能的一個子集組成,並且仍然負責客戶機的生命週期,即建立或銷燬 CoCo VM、管理其對系統資源的訪問等。 但是,由於它通常不屬於 CoCo VM TCB,因此其訪問受到限制以保護安全目標。
在下圖中,“<--->”行表示 CoCo 安全管理器和其餘元件(客戶機、主機、硬體的資料流)之間的雙向通訊通道或介面
+-------------------+ +-----------------------+
| CoCo guest VM |<---->| |
+-------------------+ | |
| Interfaces | | CoCo security manager |
+-------------------+ | |
| Host VMM |<---->| |
+-------------------+ | |
| |
+--------------------+ | |
| CoCo platform |<--->| |
+--------------------+ +-----------------------+
CoCo 安全管理器的具體細節在各種技術之間差異很大。 例如,在某些情況下,它將在 HW 中實現,而在另一些情況下,它可能是純 SW。
現有 Linux 核心威脅模型¶
當前 Linux 核心威脅模型的總體元件是
+-----------------------+ +-------------------+
| |<---->| Userspace |
| | +-------------------+
| External attack | | Interfaces |
| vectors | +-------------------+
| |<---->| Linux Kernel |
| | +-------------------+
+-----------------------+ +-------------------+
| Bootloader/BIOS |
+-------------------+
+-------------------+
| HW platform |
+-------------------+
在引導過程中,引導載入程式和核心之間也存在通訊,但此圖未明確表示。 “介面”框表示允許核心和使用者空間之間通訊的各種介面。 這包括系統呼叫、核心 API、裝置驅動程式等。
現有的 Linux 核心威脅模型通常假設在可信 HW 平臺上執行,並且所有韌體和引導載入程式都包含在其 TCB 中。 主要攻擊者位於使用者空間中,並且來自那裡的所有資料通常被認為是不受信任的,除非使用者空間具有足夠的特權來執行可信操作。 此外,通常會考慮外部攻擊者,包括那些有權訪問已啟用的外部網路(例如,乙太網、無線、藍牙)、暴露的硬體介面(例如,USB、Thunderbolt)以及離線修改磁碟內容的能力的攻擊者。
關於外部攻擊向量,有趣的是要注意,在大多數情況下,外部攻擊者會首先嚐試利用使用者空間中的漏洞,但是攻擊者有可能直接針對核心; 特別是如果主機具有物理訪問許可權。 直接核心攻擊的示例包括漏洞 CVE-2019-19524、CVE-2022-0435 和 CVE-2020-24490。
機密計算威脅模型及其安全目標¶
機密計算在上述列表中添加了一種新型攻擊者:潛在的惡意主機(也可以包括傳統 VMM 的一部分或全部),由於其較大的 SW 攻擊面,通常位於 CoCo VM TCB 之外。 重要的是要注意,這並不意味著主機或 VMM 是故意惡意的,而是存在具有較小 CoCo VM TCB 的安全價值。 這種新型對手可以被視為更強大的外部攻擊者型別,因為它位於同一物理機上(與遠端網路攻擊者相反),並且可以控制客戶機核心與大多數 HW 的通訊
+------------------------+
| CoCo guest VM |
+-----------------------+ | +-------------------+ |
| |<--->| | Userspace | |
| | | +-------------------+ |
| External attack | | | Interfaces | |
| vectors | | +-------------------+ |
| |<--->| | Linux Kernel | |
| | | +-------------------+ |
+-----------------------+ | +-------------------+ |
| | Bootloader/BIOS | |
+-----------------------+ | +-------------------+ |
| |<--->+------------------------+
| | | Interfaces |
| | +------------------------+
| CoCo security |<--->| Host/Host-side VMM |
| manager | +------------------------+
| | +------------------------+
| |<--->| CoCo platform |
+-----------------------+ +------------------------+
雖然傳統上主機具有對客戶機資料的無限訪問許可權,並且可以利用此訪問許可權來攻擊客戶機,但 CoCo 系統透過新增安全功能(如客戶機資料機密性和完整性保護)來緩解此類攻擊。 此威脅模型假設這些功能可用且完好無損。
Linux 核心 CoCo VM 安全目標可以概括如下
1. 維護 CoCo 客戶機的私有記憶體和暫存器的機密性和完整性。
2. 防止主機特權升級到 CoCo 客戶機 Linux 核心中。 雖然主機(和主機端 VMM)確實需要一定級別的特權才能建立、銷燬或暫停客戶機,但防止特權升級的部分目標是確保這些操作不會為攻擊者提供訪問客戶機核心的途徑。
上述安全目標導致兩個主要的 Linux 核心 CoCo VM 資產
客戶機核心執行上下文。
客戶機核心私有記憶體。
主機保留對 CoCo 客戶機資源的完全控制權,並且可以隨時拒絕訪問這些資源。 資源的示例包括 CPU 時間、客戶機可以消耗的記憶體、網路頻寬等。 因此,主機對 CoCo 客戶機的拒絕服務 (DoS) 攻擊超出了此威脅模型的範圍。
Linux CoCo VM 攻擊面是從 CoCo 客戶機 Linux 核心暴露給不受信任的主機且 CoCo 技術 SW/HW 保護未覆蓋的任何介面。 這包括任何可能的旁路通道以及瞬態執行旁路通道。 顯式(非旁路通道)介面的示例包括對埠 I/O、MMIO 和 DMA 介面的訪問、對 PCI 配置空間的訪問、特定於 VMM 的超級呼叫(對主機端 VMM)、對共享記憶體頁面的訪問、允許主機注入到客戶機核心中的中斷以及 CoCo 技術特定的超級呼叫(如果存在)。 此外,CoCo 系統中的主機通常控制建立 CoCo 客戶機的過程:它有一種方法可以將韌體和引導載入程式映像、核心映像以及核心命令列載入到客戶機中。 在透過證明建立其完整性和真實性之前,所有這些資料也應被視為不受信任。
下表顯示了 CoCo 客戶機 Linux 核心的威脅矩陣,但未討論潛在的緩解策略。 該矩陣是指客戶機、主機和平臺的 CoCo 特定版本。
威脅名稱 |
威脅描述 |
|---|---|
客戶機惡意配置 |
惡意主機修改以下客戶機配置之一
這允許主機破壞在 CoCo 客戶機內執行的程式碼的完整性,並違反 CoCo 安全目標。 |
CoCo 客戶機資料攻擊 |
惡意主機保留對在客戶機和主機管理的物理或虛擬裝置之間傳輸的 CoCo 客戶機資料的完全控制。 這允許針對此類資料的機密性、完整性或新鮮度的任何攻擊。 |
格式錯誤的執行時輸入 |
惡意主機透過客戶機核心程式碼使用的任何通訊介面注入格式錯誤的輸入。 如果程式碼未準備好正確處理此輸入,則這可能會導致主機 --> 客戶機核心特權升級。 這包括傳統的旁路通道和/或瞬態執行攻擊向量。 |
惡意執行時輸入 |
惡意主機透過客戶機核心程式碼使用的任何通訊介面注入特定的輸入值。 與先前的攻擊向量(格式錯誤的執行時輸入)的區別在於,此輸入沒有格式錯誤,但其值經過精心設計以影響客戶機核心安全。 此類輸入的示例包括向客戶機提供惡意時間或向客戶機隨機數生成器提供熵。 此外,如果此類事件導致特定的客戶機核心操作(即,處理主機注入的中斷),則此類事件的計時本身可能就是一個攻擊向量。 防範提供的主機輸入。 |