机密虚拟机的威胁模型

本文将介绍近年兴起的机密虚拟机(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.mzph.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…