s390 (IBM Z) 受保护的虚拟化转储¶
摘要¶
转储虚拟机是调试虚拟机内部问题的基本工具。当受保护的虚拟机遇到问题时尤其如此,因为在运行时无法从外部访问其内存和寄存器。
但是,在转储受保护的虚拟机时,我们需要保持其机密性,直到转储交给虚拟机所有者,而虚拟机所有者应该是唯一能够分析它的人。
虚拟机转储的机密性由 Ultravisor 确保,后者为 KVM 提供接口,可以通过该接口请求加密的 CPU 和内存数据。加密基于客户通信密钥,该密钥用于以客户能够解密的方式加密虚拟机数据。
转储过程¶
转储分为 3 个步骤
初始化
此步骤初始化转储过程,生成加密种子并提取转储密钥,虚拟机转储数据将使用这些密钥进行加密。
数据收集
目前,可以从虚拟机收集两种类型的数据:内存和 vcpu 状态。
vcpu 状态包含 vcpu 的所有重要寄存器、通用寄存器、浮点寄存器、向量寄存器、控制寄存器和 tod/计时器。如果 vcpu 在使用虚拟机管理程序帮助模拟指令时被转储,则 vcpu 转储可能包含不完整的数据。这由转储数据中的一个标志位指示。出于同样的原因,非常重要的是不仅要写出加密的 vcpu 状态,还要写出虚拟机管理程序中未加密的状态。
内存状态进一步分为加密的内存及其元数据,后者包括加密调整和状态标志。加密的内存可以在导出后简单地读取。导出的时间无关紧要,因为不需要重新加密。已换出并因此导出的内存可以从交换中读取,并写入转储目标,而无需任何特殊操作。
需要从 Ultravisor 请求导出页面的调整/状态标志。
最终化
最终化步骤将提供能够解密 vcpu 和内存数据并结束转储过程所需的数据。当此步骤成功完成时,可以启动新的转储初始化。