Red Hat Training

A Red Hat training course is available for RHEL 8

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 sustituya vm-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

  1. 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"
  2. Cree un archivo de parámetros para la máquina virtual que desea proteger. Por ejemplo:

    # touch ~/secure-parameters
  3. 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
  4. 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
  5. 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
  6. 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 archivo secure-parameters, el archivo de disco RAM inicial /boot/initramfs-4.18.0-240.el8.s390x.img y el documento de clave de host HKD-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.

  7. 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 y options, 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
    [...]
  8. 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ñada iommu='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'\>.

  9. 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'/>
  10. Crear la imagen de disco de arranque

    # zipl -V
  11. 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