s390 (IBM Z) 受保护的虚拟化转储

摘要

转储虚拟机是调试虚拟机内部问题的基本工具。当受保护的虚拟机遇到问题时尤其如此,因为在运行时无法从外部访问其内存和寄存器。

但是,在转储受保护的虚拟机时,我们需要保持其机密性,直到转储交给虚拟机所有者,而虚拟机所有者应该是唯一能够分析它的人。

虚拟机转储的机密性由 Ultravisor 确保,后者为 KVM 提供接口,可以通过该接口请求加密的 CPU 和内存数据。加密基于客户通信密钥,该密钥用于以客户能够解密的方式加密虚拟机数据。

转储过程

转储分为 3 个步骤

初始化

此步骤初始化转储过程,生成加密种子并提取转储密钥,虚拟机转储数据将使用这些密钥进行加密。

数据收集

目前,可以从虚拟机收集两种类型的数据:内存和 vcpu 状态。

vcpu 状态包含 vcpu 的所有重要寄存器、通用寄存器、浮点寄存器、向量寄存器、控制寄存器和 tod/计时器。如果 vcpu 在使用虚拟机管理程序帮助模拟指令时被转储,则 vcpu 转储可能包含不完整的数据。这由转储数据中的一个标志位指示。出于同样的原因,非常重要的是不仅要写出加密的 vcpu 状态,还要写出虚拟机管理程序中未加密的状态。

内存状态进一步分为加密的内存及其元数据,后者包括加密调整和状态标志。加密的内存可以在导出后简单地读取。导出的时间无关紧要,因为不需要重新加密。已换出并因此导出的内存可以从交换中读取,并写入转储目标,而无需任何特殊操作。

需要从 Ultravisor 请求导出页面的调整/状态标志。

最终化

最终化步骤将提供能够解密 vcpu 和内存数据并结束转储过程所需的数据。当此步骤成功完成时,可以启动新的转储初始化。