文档目录架构 · 18 篇

信任边界

NVX 的信任模型:宿主控制面、VMM、客户机代理与不受信任的工作负载之间的边界和验证要求。

译自microsoft/nvx · doc/design/1.4-trust-boundaries.md。技术细节以英文原文为准。

架构文档 > 1. 架构总览

如图 1.3 所示,宿主及其编排器被信任,可以访问客户机内存、镜像内容和挂载策略,而工作负载不受信任。

图 1.3。 宿主、VMM、客户机代理和工作负载的信任边界。

图中结构(自左向右,→ 表示单向授权,↔ 表示双向交互):

源 关系 目标
受信任的宿主控制面(Trusted host control plane) 策略与能力 → VMM 信任边界
宿主资源(Host resources) 已验证的挂载 → VMM 信任边界
VMM 信任边界 有界设备协议 ↔ 客户机代理边界
客户机代理边界 隔离、身份、资源与监管 → 不受信任的工作负载(Untrusted workload)

由于每个微虚拟机只有一个租户,虚拟机边界也就是工作负载之间的边界。工作负载可以在客户机内部使用普通的 Linux 接口,但不会因此获得重新配置虚拟平台或宿主挂载的权限。

在 VMM 看来,客户机物理地址、端口与 MMIO 访问、virtio 描述符、数据包内容、文件系统请求、控制会话记录以及快照请求的时机,都是不受信任的输入。

内核镜像、initramfs 镜像、命令行、快照产物、恢复时的挂载以及宿主控制台客户端同样跨越验证边界。拥有提供某个输入的权限,并不代表该输入的结构有效。因此,OpenVMM 在打开宿主资源之前校验机器配置,在工作线程构造时再次校验,并在任何被恢复的虚拟处理器运行之前校验所有持久化状态。

1.4.1 纵深防御

无效配置会被拒绝,绝不会被静默调整。每一项契约都在没有静默回退的前提下强制执行:无法满足契约的宿主、快照或客户机会被拒绝,或者快速失败(fail fast),并给出稳定的错误。唯一的回退是从自动 CPU 配置文件选择退回到由宿主推导的 CPU 配置文件;每次采用该回退的冷启动都会发出警告。

VMM 使用带检查的地址运算、有界的缓冲区和表、带类型的校验错误、限速的且可由客户机触发的日志,以及可失败的静默与恢复操作。原生 I/O 回调只记录有界状态或入队通知,绝不执行阻塞式的快照或宿主资源工作。格式错误的已保存设备状态会在设备工作线程启动之前被拒绝,部分恢复失败之后也不会有虚拟处理器运行。若在处理器停止开始之后、在快照边界或恢复后确认边界上发生失败,则该失败是终止性的:宿主输入保持关闭状态,虚拟机被拆除,而不是在状态不确定的情况下继续运行。

1.4.2 宿主控制

宿主控制客户端只能通过控制台 broker 到达客户机。该 broker 只接纳一个操作系统身份与 VMM 运行用户相同的本地对端,要求在任何宿主数据到达客户机之前先提供由启动器签发的能力(capability),并对双向的每条记录、每个队列和每个信用窗口设定上界。格式错误、过期或乱序的记录一律失败关闭。能力是进程级权限:它们绝不出现在参数、环境变量、日志、端点名称、快照或挂载身份中。

1.4.3 设备强制执行的策略

宿主设备独立于客户机强制执行策略。只读块角色以只读方式对外公布,在设备内部拒绝写入,并以不具备宿主写权限的方式打开。网络端点对每个发送帧的确切所属副本进行授权。它只接受宿主入站访问所允许的宿主监听器上的入站连接(用于已发布的客户机端口或显式转发),并且只接受该访问所准入的客户端。客户机的通告只决定其哪些端口被发布,绝不决定宿主地址或客户端。宿主文件系统服务器对每个导出在每次请求时应用其访问模式和路径策略,无论该请求来自哪个客户机挂载点或链接。因此,客户机的挂载标志、路由和链接绝不是安全边界。

1.4.4 镜像与快照产物

镜像层是受信任的输入:叠加文件系统会解释存储在下层中的元数据,而从任意一层读取的字节都可能出现在被捕获的内存中。快照通过存储世代(storage generation)标识其数据块,这把对层内容和暂存盘内容的信任转移给存储所有者;VMM 信任宿主中的控制平面来认证该世代。

VMM 信任宿主控制平面不会把同一个可写文件(例如调用方提供的 RAM 后备文件或暂存盘文件)交给多个 VMM。它不通过文件锁来检测这种共享,而它自己创建的 RAM 后备文件对每个 VM 都是新文件。快照产物按设计就是共享的:从快照恢复的每个 VM 都以写时复制方式映射同一份不可变内存产物,因此每个 VM 的变更都保持私有,绝不会写入该产物。捕获总是发布新的文件,被恢复的 VM 不会再次被捕获。

写时复制隔离的是写入,而不是物理页。共享内存产物的干净页可能在映射它的多个 VM 之间通过宿主页缓存继续保持共享,而客户机内核页、客户机代理页以及被缓存的工作负载页都可能源自被捕获的内存。因此,快照的写时复制本身既不是租户授权机制,也不是物理页隔离机制。产物访问控制、共享范围、后备文件放置、保留策略和宿主内存去重仍然属于部署方的责任。

1.4.5 面向宿主的输出

面向宿主的输出是有界的。可选的结果报告在拆除之后写入一个此前并不存在的本地路径。它只记录:模式版本、不透明的实例 ID、后端类别、操作与结果类别及其数值状态、网络策略是否被请求和应用及其模式、规则数量与宿主回环动作,以及逐步拆除的标志。它绝不包含命令、环境值、路径、网络目的地、代理细节、工作负载输出、凭据或自由形式的错误文本,并且 VMM 不会上传它。