Security and Performance in the Delegated User-level Virtualization

论文:Security and Performance in the Delegated User-level Virtualization
Bilibili:IPADS OSDI23论文介绍之DuVisor

当前虚拟化如Linux/KVM基本包括一个内核部分:KVM内核模块和一个每个VM的用户模式辅助程序,如QEMU 。KVM模块与硬件扩展和主机内核进行交互,而用户模式辅助程序负责VM管理和I/O虚拟化。

一、论文主要思想与贡献

论文提出托管式虚拟化技术,构建第一个用户态虚拟机DuVisor,在用户态一对一服务客户虚拟机,无需内核介入,消除所有攻击宿主内核的KVM漏洞,隔离攻击者,开销忽略不计。

在实现中,基于RISC-V Rocket CPU使用FPGA实现了DV-Ext。基于DV-Ext,使用Rust构建DuVisor,还通过添加337 LoC扩展了Linux内核v5.10.26,以与DuVisor协同。

通过软硬件协同设计,暴露给虚拟机(VMs)的内核攻击表面被最小化,任何威胁现有虚拟机监控器的漏洞现在都被限制在DuVisor进程中。在周期精确的FireSim上进行性能评估显示,DuVisor对于架构操作和实际应用只产生可忽略的性能开销。

二、论文设计

HU模式:hypervisor user mode
HK模式:hypervisor kernel mode

在这里插入图片描述

  • DV-Ext使主机内核能够确定是否将硬件虚拟化功能托管给HU模式。如果托管模式启用,硬件虚拟化接口可以由非特权软件在不陷入主机内核的情况下访问。如果未启用,DV-Ext的功能类似于传统的硬件虚拟化,以保持兼容性。
  • HU模式下的DuVisor进程利用由DV-Ext暴露的硬件接口来控制一个虚拟机。DuVisor动态地虚拟化物理资源以处理运行时虚拟机退出。

在本论文中,此工作流被定义为hypervisor plane,并由处于HU模式的DuVisor进程处理。此外,为了支持在HU模式下的内存虚拟化,DuVisor进程为其虚拟机构建了一个二级页表。

  • 与传统的Hypervisor一样,DuVisor为每个vCPU生成不同的用户级线程,称为vthreads。它还支持此虚拟机的PV I/O设备和虚拟中断(包括定时器)。
  • 一个小的dv驱动程序作为hypervisor plane插入到主机内核中,它偶尔参与每个DuVisor的物理资源管理,而不干扰运行时VM退出处理。dv驱动程序使用DV-Ext来启用/禁用托管模式,并为DuVisor分配资源(如物理内存)

假设和威胁模型:

硬件、主机内核和DV-driver可信,用户级别的DuVisor进程被主机内核视为不可信

三、DV-Ext

消除了用户模式无法访问硬件虚拟化扩展的限制
DV-Ext为用户级DuVisor提供硬件接口,用于获取VM信息和控制VM行为。

  • HU模式的寄存器和指令:VM-plane是VM运行时访问的寄存器,可以在HU模式下访问(分为两类,一类记录VM退出的VM信息,一类控制Hypervisor或VM的运行时行为。 )

  • 托管虚拟机退出。DV-Ext提供托管虚拟机退出(DVE),这使得虚拟机可以立即陷入到其处于HU模式的DuVisor进程中。内核模式可以通过修改h_deleg寄存器来配置DVE,其个别位通过特定的虚拟机退出类型的授权来管理。

  • HU模式内存虚拟化

  • 允许管理程序将虚拟中断传递到正在运行的vCPU,而不退出VM

实现

RISC-V,配置了16KB L1 ICache、16KB L1 DCache、512KB共享L2缓存和16GB DRAM。

四、DuVisor

处理虚拟机退出

会导致VM退出的所有异常都将被发送到用户级的DuVisor,而物理中断将继续被主机内核捕获和处理。
在这里插入图片描述
在准备VM执行环境时,后端驱动程序和vthread的I/O线程被调度到不同的CPU上。准备完成后,DuVisor中的vthread执行一条HURET指令进入V模式,并开始运行客户代码,直到出现VM退出。

  • 对于由同步异常引起的VM退出,CPU控制流会直接从VM陷阱转到DuVisor的VM退出处理程序,处理程序通过访问由DV-Ext提供的相应的HU模式寄存器来确定异常类型。处理VM退出后,虚拟线程通过再次执行HURET恢复VM。
  • 物理中断:HK模式下中断处理程序。处理之前DV-driver保存所有与DV-ext相关的寄存器,使用SRET指令直接返回到V模式之前恢复它们。由物理设备产生的物理外部中断引导到与后端驱动程序的I/O线程相同的核心上。

受限内存虚拟化Restricted Memory Virtualization

DuVisor进程处理二级页表故障,在HU模式下提供内存虚拟化,而不涉及内核。

DuVisor在HU模式下使用主机物理地址(HPA)填充二级页表项,请求DV-driver分配具有HPA信息的连续内存区域。每个二级页表故障陷阱到DuVisor,然后通过更新二级页表,将预分配内存区域的空闲物理页面添加到VM的GPA空间中。

如何防止不受信任的DuVisor恶意配置二级页表以访问任意HPA

恶意的DuVisor可以通过直接将攻击者VM的GPA映射到受害者的HPA,允许其VM访问(或改变)另一个VM内存中的敏感数据,或使用此方法来读取和修改主机内核内存。

DuVisor管理一个假的二级页表,调用系统调用来要求DV-driver检查这个表并将其同步到真实的表。

允许DuVisor在HU模式下管理真实的二级页表,不进入内核模式。新兴的硬件机制可以动态地限制对物理内存的访问,利用这种物理内存检查(PMC)机制来限制vm可以访问的物理内存范围。MMU会自动检查虚拟机内存访问的目标hpa是否超过了预先分配的物理内存区域的范围限制。

缺点:限制了主机内核和DuVisor在配置的条目中使用物理地址。

解决:DV-Ext稍微扩展了现有的PMC机制。DV-Ext向每个当前的PMC范围寄存器添加了一个“虚拟化”(V)位。如果设置了位,PMC只根据范围寄存器验证v模式内存访问。

在这里插入图片描述
PMC在访问物理内存之前检查输出的HPA。超出范围会生成异常唤醒DV-driver来处理。

I/O和中断虚拟化

对于每个PV和模拟设备,DuVisor在VM初始化过程中产生专用的I/O线程(s)。

为了实现高效的PV I/O通知,DV-Ext支持通过用户级已发布的中断直接向正在运行的VM注入vEXTs。

DV-Ext中的用户级已发布中断不需要内核参与。具体来说,I/O线程通过将中断向量写入已发布中断寄存器来注入vEXTs。如果目标vCPU正在一个核心上运行,DV-Ext会立即在该核心上触发vEXT。否则,DV-Ext会记录vEXT信息,并在目标vCPU恢复执行之前不进行传递。

在初始化过程中,dv驱动程序为每个DuVisor分配一个唯一的VMID,并在每次调度DuVisor时将此VMID写入每个核心h_vmid寄存器。

在这里插入图片描述
为此,DV-Ext支持V-模式已发布中断,该中断允许发送者和接收者vCPU对不发生vIPI的VM退出。

  • PV(Paravirtualization)是一种虚拟化技术,它允许虚拟机直接访问宿主机的硬件资源,同时提供一套标准化的虚拟机接口,使虚拟机能够与宿主机进行交互。
  • posted interrupt是一种中断类型,其中中断控制器在中断发生时将中断请求发送到处理器,但并不等待处理器响应。相反,中断控制器会将中断请求放入中断队列中,并在稍后的时间点重新发送中断请求。这种中断方式可以提高系统的效率和响应速度,特别是在高负载情况下。
  • IPI是一种特别的中断,在对称多处理器环境下,它可以被任意一个处理器用来对另一个处理器产生中断

五、DV-driver

  • 检测硬件是否支持DV-Ext,并在用户进程请求时启用
  • 设置了h_deleg寄存器来配置dve
  • DV-driver使用Linux的连续内存分配器(CMA)为DuVisor分配连续的物理内存区域,并将物理内存区域固定以确保它们在运行时可用。
  • 配置PMP条目以限制虚拟机的物理内存存取范围。
  • DV-driver为每个DuVisor进程初始化一个VMID,该VMID将被中断虚拟化使用。

六、评估

安全

  • 从客户机到主机内核的攻击:减少了主机内核的攻击面
  • 从客户机到DuVisor的攻击:DuVisor使用RUST开发,DuVisor可以在用户空间中立即打补丁,而无需重新启动主机操作系统。
  • 从DuVisor到主机内核的攻击:可以利用各种现有的技术来抵御这种与DuVisor设计正交的用户级攻击。DuVisor没有增加安全风险

Rust是一门系统编程语言。它专注于安全,尤其是并发安全,并支持函数式和命令式以及泛型等编程范式的多范式语言。

性能

与KVM-OPT相比,DuVisor的设计没有引入性能开销,同时实现了更好的主机内核安全性和可靠性

DuVisor的基于pmp的内存虚拟化可能会导致内存利用率较低。


a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值