15.6. Configuración de IBM Secure Execution en IBM Z
Si utiliza hardware IBM Z para ejecutar un host RHEL 8, puede mejorar la seguridad de sus máquinas virtuales (VM) configurando IBM Secure Execution para las VM.
IBM Secure Execution, también conocida como Virtualización Protegida, impide que el sistema anfitrión acceda al estado y al contenido de la memoria de una máquina virtual. Como resultado, incluso si el host está comprometido, no puede ser utilizado como un vector para atacar el sistema operativo invitado. Además, la Ejecución Segura puede utilizarse para evitar que los hosts no confiables obtengan información sensible de la VM.
El siguiente procedimiento describe cómo convertir una VM existente en un host IBM Z en una VM segura.
Requisitos previos
El hardware del sistema es uno de los siguientes:
- IBM z15 o posterior
- IBM LinuxONE III o posterior
La función de ejecución segura está activada en su sistema. Para comprobarlo, utilice:
# grep facilities /proc/cpuinfo | grep 158
Si este comando muestra alguna salida, su CPU es compatible con la ejecución segura.
El kernel incluye soporte para la Ejecución Segura. Para confirmarlo, utilice:
# ls /sys/firmware | grep uv
Si el comando genera alguna salida, su kernel soporta la Ejecución Segura.
El modelo de CPU del host contiene la función
unpack
. Para confirmarlo, utilice:# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>
Si el comando genera la salida anterior, su modelo de CPU es compatible con la ejecución segura.
El modo de CPU de la VM está configurado en
host-model
. Para confirmarlo, utilice lo siguiente y sustituyavm-name
por el nombre de su VM.# virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"
Si el comando genera alguna salida, el modo de CPU de la VM está configurado correctamente.
- Ha obtenido y verificado el documento de clave de host de IBM Z. Para obtener instrucciones para hacerlo, consulte Verificación del documento de clave de host en la documentación de IBM.
Procedimiento
Añade el parámetro del kernel
prot_virt=1
a la configuración de arranque del host.# # grubby --update-kernel=ALL --args="prot_virt=1"
Cree un archivo de parámetros para la máquina virtual que desea proteger. Por ejemplo:
# touch ~/secure-parameters
En el directorio
/boot/loader/entries
del host, identifique la entrada del gestor de arranque con la última versión:# ls /boot/loader/entries -l [...] -rw-r--r--. 1 root root 281 Oct 9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
Recupera la línea de opciones del kernel de la entrada del gestor de arranque:
# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options options root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
Añade el contenido de la línea de opciones y
swiotlb=262144
al archivo de parámetros creado.# echo "root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
Generar una imagen de IBM Secure Execution para la VM seleccionada.
Por ejemplo, lo siguiente crea una imagen segura
/boot/secure-image
basada en la imagen/boot/vmlinuz-4.18.0-240.el8.s390x
, utilizando el archivosecure-parameters
, el archivo de disco RAM inicial/boot/initramfs-4.18.0-240.el8.s390x.img
y el documento de clave de hostHKD-8651-000201C048.crt
.# genprotimg -i /boot/vmlinuz-4.18.0-240.el8.s390x -r /boot/initramfs-4.18.0-240.el8.s390x.img -p ~/secure-parameters -k HKD-8651-00020089A8.crt -o /boot/secure-image
Utilizando la utilidad
genprotimg
se crea la imagen segura, que contiene los parámetros del kernel, el disco RAM inicial y la imagen de arranque.En el sistema operativo invitado de la VM, actualice el menú de arranque de la VM para arrancar desde la imagen segura. Además, elimine las líneas que comienzan con
initrd
yoptions
, ya que no son necesarias.Por ejemplo, en una VM RHEL 8.3, el menú de arranque se puede editar en el directorio
/boot/loader/entries/
:# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf title Red Hat Enterprise Linux 8.3 version 4.18.0-240.el8.s390x linux /boot/secure-image [...]
Habilita los dispositivos virtio para que utilicen buffers compartidos. Para ello, utilice
virsh edit
para modificar la configuración XML de la VM, y añadaiommu='on'
a la línea<driver>
de todos los dispositivos que lo tengan. Por ejemplo:<interface type='network'> <source network='default'/> <model type='virtio'/> <driver name='vhost' iommu='on'/> </interface>
Si la configuración de un dispositivo no contiene ninguna línea
<driver>
, añada en su lugar<driver iommu='on'\>
.Desactivar el memory ballooning en la VM, ya que esta característica no es compatible con la Ejecución Segura. Para ello, añada la siguiente línea a la configuración XML de la máquina virtual.
<memballoon model='none'/>
Crear la imagen de disco de arranque
# zipl -V
Eliminar de forma segura los archivos originales no protegidos. Por ejemplo:
# shred /boot/vmlinuz-4.18.0-240.el8.s390x # shred /boot/initramfs-4.18.0-240.el8.s390x.img # shred secure-parameters
La imagen de arranque original, la imagen de RAM inicial y el archivo de parámetros del kernel están desprotegidos y, si no se eliminan, las máquinas virtuales con la ejecución segura activada pueden seguir siendo vulnerables a los intentos de piratería o a la extracción de datos sensibles.
Verificación
En el host, utilice la utilidad
virsh dumpxml
para confirmar la configuración XML de la máquina virtual protegida. La configuración debe incluir los elementos<driver iommu='on'/>
y<memballoon model='none'/>
.# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native' iommu='on'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <driver iommu='on'/> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> </domain>
Recursos adicionales
- Para obtener instrucciones adicionales sobre cómo modificar la configuración de arranque del host, consulte Configuración de los parámetros de la línea de comandos del kernel.
-
Para más información sobre la utilidad
genprotimg
, consulte la documentación de IBM.