【问题标题】:In full virtualization context, what happens on guest OS system calls?在完全虚拟化环境中,来宾操作系统系统调用会发生什么?
【发布时间】:2020-11-05 00:39:18
【问题描述】:

对保护环感到困惑,尤其是在虚拟化背景下,有人可以帮助揭开以下神秘面纱:

  1. 我的以下理解是否正确:保护环(或其他非 x86 芯片的类似概念)在硬件(电路?)级别上强制执行,无论其中的指令如何,如果指令的操作需要比当前更高的权限CPU 模式,它会触发中断。
  2. 如果系统调用将特权级别设置为 ring0 以使中断处理程序下的代码运行,那么在完全虚拟化环境下会发生什么?来自来宾操作系统的系统调用是否实际上将特权级别设置为 ring1 并且实际实现是通过进一步的中断进行的?如果是,它是如何实现的,如果不是,VMM 如何确保来宾操作系统的内核在特权较少的模式下运行?

提前致谢!

【问题讨论】:

    标签: x86 virtualization


    【解决方案1】:

    第 1 点是正确的。

    第 2 点通过引入比环 0 略高的新特权级别起作用。在信息安全社区(架构知识是近似的)中,这个新级别称为“环 -1”。 对于 x86 情况,它被称为 VMX 非 root 模式。每次 VMM 启动 VM 时都会进入此模式(使用 Intel CPU 的 vmlaunch 指令)。

    在 VMX 非 root 模式下,每次执行可能更改处理器配置的指令时,CPU 都会生成 VM 退出
    这些在Popek and Goldberg的框架中被称为敏感指令

    请注意,敏感指令不是特权指令,VMM 的主要目标是虚拟化环境,而不是保护来宾内核免受来宾用户空间的影响。 因此,像sgdt 这样的指令在用户空间(环 3)中是合法,会导致 VM 在 VMX 非 root 模式下退出,因为 VMM 必须伪造来宾 GDT。 类似地,in 指令在内核空间(环 0)中合法会导致 VM 退出 VMX 非 root 模式,因为 VMM 必须伪造硬件。

    经验法则是“出口”应尽可能少,但足以防止客人无法正常工作或破坏主机。

    因此,您会发现这种新模式尽管被称为“环 -1”,但并不真正适合环级别。
    相反,它更加正交并基于划分:VMX 非根模式(VM)和 VMX 根模式(VMM,它是一个内核空间程序,位于主机环级别)。
    VMX 非根模式在某种意义上“生成”了自己的环层级:指令由 CPU 直接执行(无论 VM 是多么嵌套),就像主机中的任何其他程序一样,因此受环层级的影响(如任何其他指令),但 VMM 控制哪些指令可以导致 VM 退出,从而可以模拟/伪造/虚拟化它们(保护自身、硬件和主机操作系统)。
    这允许 VMM 指示 CPU 在每次来宾操作系统运行时按照来宾操作系统的需要重置环保护机制(然后将其切换回来)。

    嵌套分页是另一个值得了解的保护机制(由 VMM 设置)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 2016-01-13
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多