機密虛擬機的威脅模型

本文將介紹近年興起的機密虛擬機(Confidential Virtual Machine)技術所旨在抵御的威脅模型,主要關注內存機密性(confidentiality)和內存完整性(integrity)兩個方面。在解釋該威脅可能造成的問題的同時,還將同時介紹現在最主流的機密虛擬機解決方案之一的 AMD SEV-SNP 如何如何應對該威脅。

在正式介紹之前,有必要先明確這樣一個概念,在機密虛擬機的威脅模型中,Hypervisor 被認為是不可信的。惡意的 Hypervisor 可能讀取虛擬機的內存數據,導致虛擬機用戶隱私泄露;或是直接寫入虛擬機內存,導致虛擬機運行產生預期之外的結果。

機密性

虛擬機內存

由于虛擬機的內存是通過第二階段頁表映射(GPA -> HPA)到宿主機內存中,且該頁表由 Hypervisor 進行維護。因此在未引入機密虛擬機技術時,Hypervisor 能夠直接借助該頁表映射,手動進行地址轉換并讀取虛擬機內存數據。

對于虛擬機內存的機密性,AMD 在最早的 SEV 技術(2016 年)中已經解決。解決方法是為每個虛擬機引入一個 AES 加密密鑰,虛擬機指定為私有的頁面在被讀寫時將會自動地進行加解密,這一過程對于虛擬機而言完全無感。當 Hypervisor 嘗試讀取虛擬機的私有內存數據時,只會讀取到被加密過的密文數據,保障了數據的機密性。

在這里插入圖片描述

虛擬機寄存器狀態

虛擬機在 VM Exit 到 Hypervisor 時,需要將此時的 CPU 狀態,即寄存器狀態進行保存(通常保存在一個數據結構中,AMD-V 虛擬機為 VMCB)。而 Hypervisor 就能在重新 VM Entry 到虛擬機前,很輕松地讀取其中的內容。

AMD 在 2017 年引入了 SEV-ES(Encrypted State)特性,在發生 VM Exit 時,虛擬機寄存器內容會被自動加密,并存入加密的 VMSA(Virtual Machine Save Area)中,原有的 VMCB 中的被加密字段存儲著指向被加密數據區域的指針 VMSA_POINTER,Hypervisor 無法讀取到具體內容。

完整性

內存加密只解決了 Hypervisor 惡意讀取虛擬機數據的問題,Hypervisor 仍然可以在不知道數據具體內容的情況下,惡意地對虛擬機內存進行寫入,從而破壞虛擬機內存數據,造成預料之外的結果。

AMD 在 2020 年引入了 SEV-SNP 擴展,引入了對虛擬機完整性保護的支持。核心機制是 只有內存頁面的擁有者才能夠寫入該頁面 。具體實現方式是引入了新的數據結構 RMP(Reverse Map Table),RMP 是一個在整個系統中共享的單一數據結構,它包含了每個虛擬機可能使用的 HPA 頁面的條目。RMP 的作用是為了跟蹤每個內存頁面的擁有者。

RMP 表不能直接被寫入,需要通過 SEV-SNP 引入的新的 CPU 指令來操作。

RMP 檢查在虛擬地址通過 Page Walk 得到 HPA 后進行,無論是 Hypervisor 還是虛擬機都需要進行。對于 Hypervisor 而言,它無需進行兩階段地址翻譯,因此在完成 VA -> PA 后,查看 PA 對應的 RMP 條目,驗證本頁面是否屬于 Hypervisor;對于虛擬機而言,它在完成 GVA -> GPA -> HPA 后, 查看 HPA 對應的 RMP 條目,檢查本次訪存是否合法(具體檢查內容下文詳細討論)。

在這里插入圖片描述

數據重放(Data Replay)

攻擊方式

在引入虛擬機內存加密的情況下,雖然無法直接得知從虛擬機中讀取到的內存數據的內容,但由于寫入操作不受限制,因此惡意的 Hypervisor 可以將從某個內存頁處讀取到的舊數據保存起來,在未來的某個時刻將這些舊數據進行重放。

注意,Hypervisor 由于沒有被分配 AES 密鑰,因此讀取到的數據為密文。此時 Hypervisor 不必知道這段密文內容是什么,只需要知道它可能代表了虛擬機某一時刻的狀態,Hypervisor 可以在未來的某個時刻將這段密文數據覆寫到原來的內存位置,即將虛擬機的某段內存狀態進行回退,從而實施可能的攻擊。

由于 AES 加密為對稱式加密,因此寫入經同一個密鑰加密的密文數據效果就等同于直接寫入明文數據。

防御方式

目標: 只有內存頁面的擁有者才能寫入頁面。

在 RMP Check 時檢查 RMP 條目的 Assigned, ASID, Immutable 字段,驗證本次內存寫入者是否是頁面的擁有者。不同擁有者類型所對應的字段值如下表所示:

OwnerAssignedASIDImmutable
Hypervisor00-
Guest1ASID of the guest-
AMD-SP101

數據污染(Data Corruption)

攻擊方式

惡意 Hypervisor 直接將垃圾數據寫入虛擬機的內存中,可能造成預期外的行為。

防御方式

目標: 同數據重放。

AMD SEV-SNP 實現方式:同數據重放。

內存混疊(Memory Aliasing)

攻擊方式

惡意 Hypervisor 通過直接寫入第二階段頁表,將多個 GPA 映射到同一個 HPA 上。這樣的“內存混疊”現象將很容易導致特定物理內存頁面的數據被污染,造成預期外的行為。

防御方式

目標: 每個 host 內存頁面在同一時間只能被一個 guest 內存頁面映射。

在 AMD SEV-SNP 中,RMP 條目引入了 Guest_Physical_Address 字段,保存了映射到本頁面的 GPA。在執行 RMP 檢查時,驗證發起本次訪存的 GPA 是否等于 Guest_Physical_Address

內存重映射(Memory Re-Mapping)

攻擊方式

惡意 Hypervisor 通過直接寫入第二階段頁表,將一個 GPA 映射到多個 HPA,或者更改它所映射的到的 HPA。這將導致虛擬機看到一個不連續的內存視圖(an inconsistent view of memory)。下面列舉一個可能的場景:

  1. Hypervisor 將虛擬地址 0x1000 映射到物理頁 P1;
  2. 應用程序向 0x1000 寫入敏感數據。
  3. Hypervisor 修改頁表,將 0x1000 映射到物理頁 P2;
  4. 應用程序再次讀取 0x1000,發現數據不見了或變成了其他值;
  5. 程序邏輯因此出錯,可能跳過安全檢查、泄露信息、甚至崩潰。

防御方式

目標: 每個 guest 內存頁面在同一時間只能映射一個 host 內存頁面。

AMD SEV-SNP 在 RMP 條目中引入 Validated 位,表示本頁面是否已經被驗證。每個頁面被創建時為未驗證狀態,必須要經過 PVALIDATE 指令驗證(驗證過程會檢測到是否存在一個 guest 頁面重復驗證的情況)后才能被寫入,頁面在被指令 RMPUPDATE 更新后又會變成未驗證狀態,此時需要重新驗證。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80756.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Rust trait特質】如何在Rust中使用trait特質,全面解析與應用實戰

?? 歡迎大家來到景天科技苑?? 🎈🎈 養成好習慣,先贊后看哦~🎈🎈 🏆 作者簡介:景天科技苑 🏆《頭銜》:大廠架構師,華為云開發者社區專家博主,…

Simulink模型回調

Simulink 模型回調函數是一種特殊的 MATLAB 函數,可在模型生命周期的特定階段自動執行。它們允許用戶自定義模型行為、執行初始化任務、驗證參數或記錄數據。以下是各回調函數的詳細說明: 1. PreLoadFcn 觸發時機:Simulink 模型加載到內存之…

FPGA:Xilinx Kintex 7實現DDR3 SDRAM讀寫

在Xilinx Kintex 7系列FPGA上實現對DDR3 SDRAM的讀寫,主要依賴Xilinx提供的Memory Interface Generator (MIG) IP核,結合Vivado設計流程。以下是詳細步驟和關鍵點: 1. 準備工作 硬件需求: Kintex-7 FPGA(如XC7K325T&…

Python爬蟲實戰:研究進制流數據,實現逆向解密

1. 引言 1.1 研究背景與意義 在現代網絡環境中,數據加密已成為保護信息安全的重要手段。許多網站和應用通過二進制流數據傳輸敏感信息,如視頻、金融交易數據等。這些數據通常經過復雜的加密算法處理,直接分析難度較大。逆向工程進制流數據不僅有助于合法的數據獲取與分析,…

Java Spring Boot項目目錄規范示例

以下是一個典型的 Java Spring Boot 項目目錄結構規范示例,結合了分層架構和模塊化設計的最佳實踐: text 復制 下載 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…

圖像顏色理論與數據挖掘應用的全景解析

文章目錄 一、圖像顏色系統的理論基礎1.1 圖像數字化的本質邏輯1.2 顏色空間的數學框架1.3 量化過程的技術原理 二、主要顏色空間的深度解析2.1 RGB顏色空間的加法原理2.2 HSV顏色空間的感知模型2.3 CMYK顏色空間的減色原理 三、圖像幾何屬性與高級特征3.1 分辨率與像素密度的關…

mysql兩張關聯表批量更新一張表存在數據,而另一張表不存在數據的sql

一、mysql兩張關聯表批量更新一張表存在、另一張表不存在的數據 創建user和user_order表 CREATE TABLE user (id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,id_card varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NU…

PNG轉ico圖標(支持圓角矩形/方形+透明背景)Python腳本 - 隨筆

摘要 在網站開發或應用程序設計中,常需將高品質PNG圖像轉換為ICO格式圖標。本文提供一份基于Pillow庫實現的,能夠完美保留透明背景且支持導出圓角矩形/方形圖標的格式轉換腳本。 源碼示例 圓角方形 from PIL import Image, ImageDraw, ImageOpsdef c…

在線SQL轉ER圖工具

在線SQL轉ER圖網站 在數據庫設計、軟件開發或學術研究中,ER圖(實體-關系圖) 是展示數據庫結構的重要工具。然而,手動繪制ER圖不僅耗時費力,還容易出錯。今天,我將為大家推薦一款非常實用的在線工具——SQL…

繪制時間對應的數據曲線

頭文件#pragma once #include "ChartControl.h" #include <vector> #include "DBOperate.h&

【挑戰項目】 --- 微服務編程測評系統(在線OJ系統)(二)

三十二、Swagger介紹&使用 官網:https://swagger.io/ 什么是swagger Swagger是一個接口文檔生成工具,它可以幫助開發者自動生成接口文檔。當項目的接口發生變更時,Swagger可以實時更新文檔,確保文檔的準確性和時效性。Swagger還內置了測試功能,開發者可以直接在文檔中…

人事管理系統總結

1.Maven 創建 Spring Boot 項目&#xff1a; 主要使用 Maven 創建 Spring Boot 項目、配置 MySQL 數據庫、回顧 Spring Boot 分層架構、使用 MyBatis 逆向工程生成代碼及整合測試項目等內容&#xff0c;具體如下&#xff1a; Maven 創建 Spring Boot 項目 可通過 IDEA 直接創…

SpringBoot--springboot簡述及快速入門

spring Boot是spring提供的一個子項目&#xff0c;用于快速構建spring應用程序 傳統方式&#xff1a; 在眾多子項目中&#xff0c;spring framework項目為核心子項目&#xff0c;提供了核心的功能&#xff0c;其他的子項目都需要依賴于spring framework&#xff0c;在我們實際…

INT202 Complexity of Algroithms 算法的復雜度 Pt.7 NP-Completeness NP完全性

文章目錄 1.P與NP問題1.1 計算上難以解決的問題&#xff08;Hard Computational Problems&#xff09;1.2 決策問題和優化問題&#xff08;Decision/Optimization problems&#xff09;1.3 計算問題的正式定義1.4 復雜性類1.4.1 復雜性類 P P P1.4.2 證明&#xff08;Certifica…

websocketpp 安裝及使用

介紹 WebSocket 是從 HTML5 開始支持的一種網頁端和服務端保持長連接的消息推送機制。 傳統的 web 程序都是屬于 "一問一答" 的形式&#xff0c;即客戶端給服務器發送了一個 HTTP 請求&#xff0c;服務器給客戶端返回一個 HTTP 響應。這種情況下服務器是屬于被動…

Android NDK 高版本交叉編譯:為何無需配置 FLAGS 和 INCLUDES

引言&#xff1a;NDK 交叉編譯的演進 Android NDK&#xff08;Native Development Kit&#xff09;是開發高性能C/C代碼的核心工具鏈&#xff0c;而交叉編譯&#xff08;在x86主機上生成ARM架構代碼&#xff09;一直是NDK的核心功能。過去&#xff0c;開發者需要手動配置大量編…

AI+可視化:數據呈現的未來形態

當AI生成的圖表開始自動“美化”數據&#xff0c;當動態可視化報告能像人類一樣“講故事”&#xff0c;當你的眼球運動直接決定數據呈現方式——數據可視化的未來形態&#xff0c;正在撕裂傳統認知。某車企用AI生成的3D可視化方案&#xff0c;讓設計師集體失業&#xff1b;某醫…

基于Flink的用戶畫像 OLAP 實時數倉統計分析

1.基于Flink的用戶畫像 OLAP 實時數倉統計分析 數據源是來自業務系統的T日數據&#xff0c;利用kakfa進行同步 拼接多個事實表形成大寬表&#xff0c;優化多流Join方式&#xff0c;抽取主鍵和外鍵形成主外鍵前置層&#xff0c;抽取外鍵和其余內容形成融合層&#xff0c;將4次事…

Java游戲服務器開發流水賬(7)網絡通信簡介

在 Java 游戲服務器開發中&#xff0c;網絡通訊是核心組成部分&#xff0c;它主要負責客戶端與服務器之間的數據交換。 一、網絡通訊基礎 1. 網絡模型 C/S 架構&#xff1a;游戲服務器采用客戶端 / 服務器模式&#xff0c;客戶端向服務器發送請求&#xff0c;服務器處理請求…

使用ADB命令操作Android的apk/aab包

keystore文件轉換jks文件 操作步驟&#xff1a; 步驟1&#xff0c;生成P12文件&#xff1a; keytool -importkeystore -srckeystore [文件名].keystore -srcstoretype JKS -deststoretype PKCS12 -destkeystore [文件名].p12 步驟2&#xff0c;生成jks文件&#xff1a; keytool…