- 作者:Kha Dinh Duy, Jaeyoon Kim, Hajeong Lim, Hojoon Lee
- 論文連結:https://www.computer.org/csdl/proceedings-article/sp/2025/223600d860/26hiVMUi1MI
- 期刊會議:2025 IEEE Symposium on Security and Privacy (SP)
簡介
近年來,儘管硬體支援的 TEE (Trusted Execution Environment) 技術興起,並出現了許多相關的攻擊與修補方法,但針對需求日益增加的 CVM (Confidential VM) 相關修補卻相對稀少,使得 CVM 容易遭受旁通道攻擊。IncognitOS 參考了針對 Intel SGX 的修補方案,並在 Unikraft 系統上強化了 AMD SEV 的防護,從而有效提升 CVM 抵禦攻擊的能力。
Trusted Execution Environment
TEE 是一種與作業系統隔離的運行環境。在其中執行的程式具有隔離性和機密性,能有效防止來自作業系統的攻擊者竊取內部資料。常見的技術如 Intel SGX 與 ARM TrustZone 都提供了 TEE 硬體支援,然而這些技術主要用於單一行程,至於針對整個虛擬機的 TEE 硬體支援則包括 Intel TDX、AMD SEV 以及 ARM CCA。
針對 AMD SEV 的旁通道攻擊
有些旁通道攻擊利用 NPT(Nested Page Table)來窺探 TEE 內部在做的事,由於 NPT 是由 host 上的 hypervisor 所管理,因此 hypervisor 可以刻意將 NPT 的其中一個分頁標記為不可用,當 guest 在 TEE 中存取該分頁時就會產生 NPF(Nested Page Fault),CPU 請 hypervisor 處理 NPF 時 hypervisor 就知道 guest 存取了哪個分頁。
另一種稱為 Single-Stepping 的攻擊,則是如 debugger 般在 guest 執行數個指令後,透過發送中斷來仔細觀察 guest 的狀態。由於 AMD SEV 虛擬機目前只能仰賴 hypervisor 發送中斷,因此這類攻擊難以避免。
IncognitOS
雖然針對 CVM 旁通道攻擊的修補不多,但是 IncognitOS 參考針對 Intel SGX 旁通道攻擊的修補。第一種是偵測 enclave exit 的頻率,如果發現這個頻率太高就立刻停止行程。另一種是定期將記憶體內容打亂,讓攻擊者之前得到的資訊無效。但是這兩種修補都有其限制,前者可能會錯殺 I/O 頻率較高的行程或是沒抓到 exit 頻率低的旁通道攻擊,後者則是會造成過高的效能負擔。
IncognitOS 結合上述兩種設計,根據 VMExit 頻率來調整打亂記憶體的頻率。
計算 VMExit 頻率
IncognitOS 使用自定義的軟體時鐘而不是硬體時鐘,軟體時鐘使用執行的指令數作為時間,這樣可以避免 hypervisor 故意延遲將控制權交還給 guest,讓 guest 計算出的頻率比實際低;同時,頻率計算時也採用滑動窗口,可以避免 I/O 產生的高頻 VMExit 被誤判為旁通道攻擊。
打亂記憶體
IncognitOS 用 ORAM 管理所有分頁,需要用到分頁的時候將其從 ORAM 移動到工作區中。需要打亂記憶體時便將所有分頁放回 ORAM,這樣分頁重新取出時就會移動到工作區中的新位置。另外為了避免被 hypervisor 知道取出哪個分頁,IncognitOS 會將目標分頁連帶其他隨機分頁一起取出,讓 hypervisor 不知道 guest 實際想要的分頁是哪一個。
效能
IncognitOS 在一般沒有旁通道攻擊的情況下執行時間約為 Unikraft 的 2.5 倍,旁通道攻擊下的執行時間則可能到 40 倍以上。
想法
新知識
- TEE 硬體支援可分為行程用與虛擬機用,前者包括 Intel SGX 和 Arm TrustZone,後者則包括 Intel TDX、AMD SEV 與 Arm CCA。
- Obfuscation 如打亂記憶體可以用來防禦旁通道攻擊,但是會有巨大效能損失,因為需要移動資料。
- Unikraft 不分使用者與核心空間,所以 IncognitOS 可以有更低的效能損失,因為 page-in 與 page-out 不需要切換到核心空間。
- GVA 轉換為 GPA 的過程和 HVA 轉換到 HPA 的過程相同,都是由 MMU 透過 guest 或 host 的分頁表轉換,但 GPA 轉換到 HPA 則是使用 hypervisor 管理的 NPT 由硬體轉換,硬體會看目前的執行權限來得知現在是不是虛擬機在執行、是否需要轉換。
動態演算法的前瞻性
IncognitOS 用動態的角度結合兩種針對 Intel SGX 的修補,這有點像我之前修課時做的動態 Zram,記憶體壓力低時使用速度快的演算法,壓力高時使用壓縮率好的演算法,在速度與壓縮率間取捨,IncognitOS 則是在速度與安全性間取捨。我想未來的研究是否可以朝這方面前進,為系統取得更高的彈性?
關於資訊熵的使用
只能說分佈平均,但不能說沒有規則可循
作者分析在 hypervisor 角度看 guest 分頁存取的隨機性時使用了資訊熵,雖然亂度非常接近理論極限,但是我認為這是誤用資訊熵。因為資訊熵不考慮多次事件的因果關係,但是我認為分頁存取應該考慮存取模式,例如我按照順序存取所有分頁並重複多次,這樣所有分頁的存取次數是相同的且有最高的資訊熵,但是從 hypervisor 看來一點都不亂。