首页 > 其他分享 >25 KVM管理虚拟机-虚拟机安全启动

25 KVM管理虚拟机-虚拟机安全启动

时间:2023-05-20 22:01:34浏览次数:48  
标签:25 启动 虚拟机 KVM BIOS 证书 UEFI 安全

25 KVM管理虚拟机-虚拟机安全启动

25.1 总体介绍

25.1.1 概述

安全启动(Secure Boot)就是利用公私钥对启动部件进行签名和验证。启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,验证不通过则启动失败。安全启动的作用是检测设备启动阶段固件(Fireware)以及软件是否被篡改,防止恶意软件侵入和修改。通过安全启动可以保证系统启动过程中各个部件的完整性,防止没有经过认证的部件被加载运行,从而防止对系统及用户数据产生安全威胁。安全启动是在UEFI启动方式上实现的,Legacy启动方式不支持安全启动。根据UEFI规定,主板出厂的时候可以内置一些可靠的公钥。任何想要在这块主板上加载的操作系统或者硬件驱动程序,都必须通过这些公钥的认证。物理机上的安全启动由物理BIOS完成,虚拟机的安全启动通过软件模拟。虚拟机安全启动流程与host安全启动流程一致,都遵循开源UEFI规范。虚拟化平台上的UEFI由edk组件提供,虚拟机启动时qemu将UEFI镜像映射到内存中,为虚拟机模拟固件启动流程,安全启动正是虚拟机启动过程中edk提供的一个安全保护能力,用来保护虚拟机OS内核不被篡改。安全启动验签顺序:UEFI BIOS->shim->grub->vmlinuz(依次验签通过并加载)。

中文 英文 缩略语 中文定义/描述
安全启动 Secure boot Secure boot 安全启动就是启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,验证不通过就停下来。通过安全启动可以保证系统启动过程中各个部件的完整性。
平台密钥 Platform key PK OEM厂商所有,必须为 RSA 2048 或更强,PK为平台拥有者和平台固件之间建立可信关系。平台拥有者将PK的公钥部分PKpub注册到平台固件中,平台拥有者可以使用PK的私有部分PKpriv来改变平台的拥有权或者注册KEK密钥。
密钥交换密钥 Key exchange key KEK KEK为平台固件和OS之间创建可信关系。每一个操作系统和与平台固件通信的第三方应用在平台固件中注册KEK密钥的公共部分KEKpub。
签名数据库 Database white list DB 存储验证shim、grub、vmlinuz等组件的密钥。
签名吊销数据库 Database black list DBx 存储吊销的密钥。

25.1.2 功能说明

本次实现的虚拟机安全启动特性基于edk开源项目。非安全启动模式下,Linux基本流程如下:

图 1 系统启动流程图

image-20230309220859336

安全启动模式下UEFI BIOS启动后加载的首个组件是系统镜像中的shim,shim与UEFI BIOS进行交互获取存储在UEFI BIOS变量db里面的密钥对grub进行验证,加载grub后同样调用密钥和认证接口对kernel进行验证。Linux启动流程如下:

图 2 安全启动流程图

image-20230309221005412

从整体处理流程上来看,安全启动特性包含多个关键场景,根据场景分析和系统分解,安全启动特性涉及以下几个子系统:UEFI BIOS校验shim,shim校验grub,grub校验kernel。UEFI BIOS对shim进行验证,验证通过则启动shim,不通过则提示错误,无法启动。Shim需要在镜像编译制作过程中使用私钥进行签名,公钥证书导入UEFI BIOS变量区DB中。Shim启动后验证启动grub,验证通过则启动grub,不通过则提示错误,无法启动。Grub需要在镜像编译制作过程中进行签名,使用和shim一样的公私钥对。Grub启动后检查调用shim注册在UEFI BIOS的认证接口和密钥对kernel进行验证,通过则启动内核,不通过则提示错误,grub需要在镜像编译制作过程中进行签名,使用和shim一样的公私钥对。

25.1.3 约束限制

  • 在不支持安全启动的UEFI BIOS上运行,对现有功能没有影响,业务无感知。
  • 安全启动特性依赖UEFI BIOS,必须在UEFI支持此功能的条件下才能发挥作用。
  • 在UEFI BIOS开启安全启动的情况下,如果相关部件没有签名或签名不正确,则无法正常启动系统。
  • 在UEFI BIOS关闭安全启动的情况下,启动过程的验证功能都会被关闭。
  • 安全启动验证链后半段,即shim->grub->kernel引导内核启动这部分的验证链由操作系统镜像实现,若操作系统不支持引导内核安全启动过程,则虚拟机安全启动失败。
  • 当前不提供x86架构使用nvram文件配置虚拟机安全启动

25.2 安全启动实践

虚拟机安全启动依赖于UEFI BIOS的实现,UEFI BIOS镜像通过edk rpm包安装,本节以AArch64为例对虚拟机安全启动进行配置。

25.2.1 虚拟机配置

edk rpm包中的组件安装于/usr/share/edk2/aarch64目录下,包括QEMU_EFI-pflash.rawvars-template-pflash.raw。虚拟机启动UEFI BIOS部分xml配置如下:

<os>
    <type arch='aarch64' machine='virt'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw</loader>
    <nvram template='/usr/share/edk2/aarch64/vars-template-pflash.raw'>/path/to/QEMU-VARS.fd</nvram>
</os>

其中/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw为UEFI BIOS镜像路径。/usr/share/edk2/aarch64/vars-template-pflash.raw为nvram镜像模板路径,/path/to/QEMU-VARS.fd为当前虚拟机nvram镜像文件路径,用于保存UEFI BIOS系统中的环境变量。

25.2.2 证书导入

虚拟机安全启动时的证书从BIOS界面导入,在证书导入前需要将证书文件导入到虚拟机中。可以通过挂载磁盘的方式将证书文件所在目录挂载到虚拟机中,例如制作包含证书的镜像,并在虚拟机的配置文件xml中配置挂载该镜像:

制作证书文件镜像

# dd of='/path/to/data.img' if='/dev/zero' bs=1M count=64
# mkfs.vfat -I /path/to/data.img
# mkdir /path/to/mnt
# mount /path/to/data.img /path/to/mnt/
# cp -a /path/to/certificates/* /path/to/mnt/
# umount /path/to/mnt/

其中,/path/to/certificates/为证书文件所在路径,/path/to/data.img为证书文件镜像所在路径,/path/to/mnt/为镜像挂载路径。

在虚拟机xml文件中配置挂载该镜像

<devices>
	<disk type='file' device='disk'>
		<driver name='qemu' type='raw' cache='none' io='native'/>
		<source file='/path/to/data.img'/>
		<target dev='sdc' bus='scsi'/>
		<boot order='2'/>
		<readonly/>
	</disk>
</devices>

启动虚拟机,导入PK证书,流程如下(KEK证书,DB证书导入方式相同):

虚拟机启动后,点击F2进入bios界面

图 1 进入bios界面

image-20230309221319366

图 2 进入Device Manager

image-20230309221358285

图 3 进入Custom Secure Boot Options

image-20230309221445330

图 4 进入PK Options

image-20230309221531815

图 5 Enroll PK

image-20230309221618252

在File Explorer界面可以看到很多磁盘目录,其中包括我们通过磁盘挂载的证书文件目录

图 6 File Explorer

image-20230309221718829

在磁盘目录中选择要导入的PK证书

图 7 进入证书所在磁盘

image-20230309221831824

图 8 选择Commit Changes and Exit保存导入证书

image-20230309222043388

导入证书后,UEFI BIOS将证书信息以及安全启动属性写入nvram配置文件/path/to/QEMU-VARS.fd中,虚拟机下一次启动时会从/path/to/QEMU-VARS.fd文件中读取相关配置并初始化证书信息以及安全启动属性,自动导入证书并开启安全启动。同样,我们可以将/path/to/QEMU-VARS.fd作为其他相同配置虚拟机的UEFI BIOS启动配置模板文件,通过修改nvram template字段使其他虚拟机启动时自动导入证书并开启安全启动选项,虚拟机xml配置修改如下:

<os>
    <type arch='aarch64' machine='virt'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw</loader>
    <nvram template='/path/to/QEMU-VARS.fd'></nvram>
</os>

25.2.3 安全启动观测

正确配置虚拟机并导入PK、KEK、DB证书后,虚拟机将以安全启动的方式运行。可以通过在虚拟机配置文件xml中配置串口日志文件观测虚拟机是否为安全启动,串口日志文件的配置方式如:

<serial type='file'>
	<source path='/path/to/log_file' append='on'/>
</serial>

虚拟机加载系统镜像成功后,当串口日志文件中出现"UEFI Secure Boot is enabled"信息时,表明虚拟机当前为安全启动。

标签:25,启动,虚拟机,KVM,BIOS,证书,UEFI,安全
From: https://blog.51cto.com/u_237826/6318086

相关文章

  • 来谈谈jvm虚拟机
    JVM(JavaVirtualMachine)是Java虚拟机的缩写,它是一种能够在多个平台上运行Java字节码的虚拟计算机。JVM是Java语言跨平台的关键技术之一,它使得Java程序可以在不同操作系统和硬件平台上运行,而无需进行修改或重新编译。在Java编程中,开发人员将Java代码编译成字节码,然后将字节码交给JV......
  • 算法学习day25回溯part02-216、17
    packageLeetCode.backtrackpart02;importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;/***216.组合总和III*找出所有相加之和为n的k个数的组合,且满足下列条件:*只使用数字1到9*每个数字最多使用一次*返回所有可能的有效......
  • 关于VM虚拟机Win7系统不能安装VM Tool的解决事件记录
    感谢CSDN的网友分享,根据其分享经验,我随即去弄,发现可以成功解决Win7系统在VM虚拟机不能安装VMTool的问题。 解决步骤: 1、先检查Win7系统是否为SP1及以上。  不是的话,要去下载Win7SP1系统。下载地址可以去下边这个,也可以自行去微软官网找Win7SP1下载,这两下载的都是......
  • vm虚拟机
    官网:VMware中国–交付面向企业的数字化基础|CN1、介绍wm,virtualmanufacturing是wmware的简称。是一种虚拟机程序。在现有操作系统上运行,可以部署其他操作系统,并进行相关操作,比如联网、访问、安装和使用程序等。2、安装访问https://customerconnect.vmware.com/cn/downl......
  • 物理机和虚拟机上CPU睿频的区别
    物理机和虚拟机上CPU睿频的区别关于睿频睿频是指当启动一个运行程序后,处理器会自动加速到合适的频率,而原来的运行速度会提升10%~20%以保证程序流畅运行的一种技术。一般max的睿频不能超过特别长的时间.他的能耗和TDP的影响都比较大.睿频与很多环境和硬件相关:1.供......
  • 代码随想录算法训练营第十天|232. 用栈实现队列、225. 用队列实现栈
    【参考链接】1.栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。不像是set或者map提供迭代器iterator来遍历所有元素。2.栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使......
  • 虚拟机网络的三种模式
    转:http://news.sohu.com/a/572557343_6578671简介vmware提供了三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)虚拟机在安装时会给宿主机安装三个虚拟网卡,分别是VMnet0,VMnet1,VMnet8,这三种虚拟网卡分别对应虚拟机的三种上网模式,VMne......
  • 关于loongson跳板机-虚拟机的登录总结
    关于loongson跳板机-虚拟机的登录总结目录关于loongson跳板机-虚拟机的登录总结登录部分第一次登录必看:第一次登录总结第一次成功后之后再进虚拟机补充知识存储什么是跳板机?什么是外网?什么是内网?有图有真相登录部分第一次登录必看:1、直接看组办方下发的【2.命令行登录-示例】......
  • 虚拟机linux系统密码忘记了该怎么办?
    当你的linux系统的密码忘记了该怎么办?首先不要慌,重启电脑,开机的时候出现这个页面的时候点击e然后出现这个页面把里面的ro修改为rw修改为rw之后在这一行语句的最后面输入enforcing=0init=/bin/bash,然后ctrl加x进入单机模式,进入单机模式之后,输入修改密码的命令,passwdroot......
  • 25
    #include<iostream>usingnamespacestd;intmain(){intcount=0;for(inti=1;i<5;i++){for(intj=1;j<5;j++){for(intk=1;k<5;k++){if(i!=j&&i!=k&&j!=k){count++;cout<<count<<"";cout<<i<<j<<k&......