diff --git "a/content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" "b/content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" index 9626b4e460a7c35d0cdffa0164f84529251dc2e6..0bd0ddc0252b5bb58bf8501820a7f844ca923d7b 100644 --- "a/content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" +++ "b/content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" @@ -13,6 +13,7 @@ - [Libvirt鉴权](#Libvirt鉴权) - [qemu-ga](#qemu-ga) - [sVirt保护](#sVirt保护) + - [虚拟机可信启动](#虚拟机可信启动) @@ -434,3 +435,191 @@ system_u:system_r:svirt_t:s0:c200,c947 11359 ? 00:03:59 qemu-kvm system_u:system_r:svirt_t:s0:c427,c670 13790 ? 19:02:07 qemu-kvm ``` +### 虚拟机可信启动 + +#### 概述 + +可信启动包含度量启动和远程证明。其中虚拟化组件主要提供度量启动功能,远程证明由用户自己在虚拟机中安装相关软件(RA client)及搭建远程证明服务器(RA server)进行使能。 + +度量启动的两个基本要素是信任根和信任链,其基本思想是首先在计算机系统中建立一个信任根,信任根的可信性由物理安全、技术安全和管理安全共同确保,即CRTM(Core Root of Trust for Measurement)。然后建立一条信任链,从信任根开始到BIOS/BootLoader、操作系统、再到应用,一级度量认证一级,一级信任一级,最终把这种信任扩展到整个系统。上述过程看起来如同一根链条一样环环相扣,因此称之为“信任链”。 + +CRTM是度量启动的根,是系统启动的首个组件,没有其它代码来检查CRTM本身的完整性。所以,作为信任链的起点,必须保证它是绝对可信的信任源。因此,技术上需要将CRTM设计成一段只读或更新严格受限的代码,抵御BIOS攻击,防止远程注入恶意代码或在操作系统上层修改启动代码。通常物理主机中由CPU中的微码作为CRTM,在虚拟化环境中,一般选择vBIOS的sec部分为CRTM。 + +启动过程中,前一个部件度量(计算HASH值)后一个部件,然后把度量值扩展入可信存储区例如TPM的PCR中。CRTM度量BootLoader把度量值扩展到PCR中,BootLoader度量OS把度量值扩展到PCR中。 + + +<<<<<<< HEAD +======= + >![](tpm芯片与可信启动) **说明:** + >更多关于tpm芯片及可信启动的的资料可以参见[https://trustedcomputinggroup.org/work-groups/regional-forums/greater-china/#](https://trustedcomputinggroup.org/work-groups/regional-forums/greater-china/#)。 + +>>>>>>> e70a31c520d9c280e9d6c2817d146ab8b1a77a54 +#### 配置vTPM设备,使能度量启动 + +**一、安装swtpm和libtpms软件** + +<<<<<<< HEAD +1. 登录主机。 +2. 安装swtpm和libtpms。 + 可以采用源码直接安装,也可以采用rpm包安装 + swtpm: https://github.com/stefanberger/swtpm + libtpms:https://github.com/stefanberger/libtpms + + +**二、虚拟机配置vTPM设备** + +1. Aarch64虚拟机配置文件中添加如下配置: + + ``` + + + +======= +swtpm提供了一个可集成到虚拟化环境中的TPM仿真器(TPM1.2和TPM2.0)。到目前为止,他已经集成到了QEMU中,同时也作为RunC中的原型系统。swtpm是利用libtpms来提供TPM1.2和TPM2.0的模拟功能。 +swtpm和libtpms可以采用源码直接安装,也可以采用rpm包安装。 + +1. 源码安装 + +swtpm: https://github.com/stefanberger/swtpm + +libtpms: https://github.com/stefanberger/libtpms + +可以根据github仓库中的wiki提示步骤进行编译安装。 + +2. rpm包安装 + +openEuler20.09版本中提供了libtpms和swtpm的源,可以直接使用yum命令安装。 + +``` +# yum install libtpms swtpm + +``` + + +**二、虚拟机配置vTPM设备** + +1. AArch64虚拟机配置文件中添加如下配置: + + ``` + + ... + + + + ... + +>>>>>>> e70a31c520d9c280e9d6c2817d146ab8b1a77a54 + ``` + + x86虚拟机配置文件中添加如下配置: + + ``` +<<<<<<< HEAD + + + +======= + + ... + + + + ... + +>>>>>>> e70a31c520d9c280e9d6c2817d146ab8b1a77a54 + ``` + +2. 创建虚拟机。 + + ``` + # virsh define MeasuredBoot.xml + ``` +<<<<<<< HEAD +======= +3. 启动虚拟机 + + 启动虚拟机前需要将/var/lib/swtpm-localca/赋予权限,否则libvirt无法拉起swtpm。 + ``` + # chmod -R 777 /var/lib/swtpm-localca/ + ``` + ``` + # virsh start MeasuredbootVM + ``` +>>>>>>> e70a31c520d9c280e9d6c2817d146ab8b1a77a54 + + +**三、确认度量启动使能成功** + +<<<<<<< HEAD +虚拟机中的确认安装了tpm2_tools工具。使用tpm2_pcrlist命令列出所有的pcr值。 +======= +度量启动功能使能与否由vBIOS决定,目前openEuler20.09版本中的vBIOS已经具备了度量启动的能力。若宿主机采用其他版本的edk2组件,请确认其是否支持度量启动功能。 + +使用root用户登陆虚拟机,确认虚拟机中是否安装了tpm驱动,tpm_tss协议栈及tpm2_tools工具。 +openEuler20.09版本中默认安装了tpm驱动(tpm_tis.ko),tpm_tss协议栈和tpm2_tools工具。若使用其他操作系统,可以使用如下命令检查是否安装了驱动和相关工具。 + + +``` +# lsmod |grep tpm + tpm_tis 16384 0 +# +# yum list installed | grep tpm2_tss +# +# yum install tpm2_tss tpm2_tools +``` +可以使用tpm2_pcrread(低版本tpm2_tools中使用tpm2_pcrlist)命令列出所有的pcr值。 +>>>>>>> e70a31c520d9c280e9d6c2817d146ab8b1a77a54 + +``` +# tpm2_pcrlist +sha1 : + 0 : fffdcae7cef57d93c5f64d1f9b7f1879275cff55 + 1 : 5387ba1d17bba5fdadb77621376250c2396c5413 + 2 : b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 + 3 : b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 + 4 : e5d40ace8bb38eb170c61682eb36a3020226d2c0 + 5 : 367f6ea79688062a6df5f4737ac17b69cd37fd61 + 6 : b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 + 7 : 518bd167271fbb64589c61e43d8c0165861431d8 + 8 : af65222affd33ff779780c51fa8077485aca46d9 + 9 : 5905ec9fb508b0f30b2abf8787093f16ca608a5a + 10 : 0000000000000000000000000000000000000000 + 11 : 0000000000000000000000000000000000000000 + 12 : 0000000000000000000000000000000000000000 + 13 : 0000000000000000000000000000000000000000 + 14 : 0000000000000000000000000000000000000000 + 15 : 0000000000000000000000000000000000000000 + 16 : 0000000000000000000000000000000000000000 + 17 : ffffffffffffffffffffffffffffffffffffffff + 18 : ffffffffffffffffffffffffffffffffffffffff + 19 : ffffffffffffffffffffffffffffffffffffffff + 20 : ffffffffffffffffffffffffffffffffffffffff + 21 : ffffffffffffffffffffffffffffffffffffffff + 22 : ffffffffffffffffffffffffffffffffffffffff + 23 : 0000000000000000000000000000000000000000 +sha256 : + 0 : d020873038268904688cfe5b8ccf8b8d84c1a2892fc866847355f86f8066ea2d + 1 : 13cebccdb194dd916f2c0c41ec6832dfb15b41a9eb5229d33a25acb5ebc3f016 + 2 : 3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969 + 3 : 3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969 + 4 : 07f9074ccd4513ef1cafd7660f9afede422b679fd8ad99d25c0659eba07cc045 + 5 : ba34c80668f84407cd7f498e310cc4ac12ec6ec43ea8c93cebb2a688cf226aff + 6 : 3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969 + 7 : 65caf8dd1e0ea7a6347b635d2b379c93b9a1351edc2afc3ecda700e534eb3068 + 8 : f440af381b644231e7322babfd393808e8ebb3a692af57c0b3a5d162a6e2c118 + 9 : 54c08c8ba4706273f53f90085592f7b2e4eaafb8d433295b66b78d9754145cfc + 10 : 0000000000000000000000000000000000000000000000000000000000000000 + 11 : 0000000000000000000000000000000000000000000000000000000000000000 + 12 : 0000000000000000000000000000000000000000000000000000000000000000 + 13 : 0000000000000000000000000000000000000000000000000000000000000000 + 14 : 0000000000000000000000000000000000000000000000000000000000000000 + 15 : 0000000000000000000000000000000000000000000000000000000000000000 + 16 : 0000000000000000000000000000000000000000000000000000000000000000 + 17 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 18 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 19 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 20 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 21 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 22 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 23 : 0000000000000000000000000000000000000000000000000000000000000000 +```