Red Hat Training

A Red Hat training course is available for RHEL 8

15.6. Configurando o IBM Secure Execution no IBM Z

Ao utilizar o hardware IBM Z para executar um host RHEL 8, você pode melhorar a segurança de suas máquinas virtuais (VMs) configurando o IBM Secure Execution para as VMs.

A IBM Secure Execution, também conhecida como Virtualização Protegida, impede que o sistema host acesse o estado e o conteúdo da memória de uma VM. Como resultado, mesmo que o host esteja comprometido, ele não pode ser usado como um vetor para atacar o sistema operacional convidado. Além disso, o Secure Execution pode ser usado para evitar que hospedeiros não confiáveis obtenham informações sensíveis da VM.

O procedimento seguinte descreve como converter uma VM existente em um host IBM Z em uma VM segura.

Pré-requisitos

  • O hardware do sistema é um dos seguintes:

    • IBM z15 ou posterior
    • IBM LinuxONE III ou posterior
  • O recurso de Execução Segura está habilitado para seu sistema. Para verificar, use:

    # grep facilities /proc/cpuinfo | grep 158

    Se este comando exibir qualquer saída, sua CPU é compatível com o Secure Execution.

  • O núcleo inclui suporte para Execução Segura. Para confirmar, use:

    # ls /sys/firmware | grep uv

    Se o comando gerar alguma saída, seu kernel suporta Execução Segura.

  • O modelo de CPU host contém a facilidade unpack. Para confirmar, use:

    # virsh domcapabilities | grep unpack
    <feature policy='require' name='unpack'/>

    Se o comando gerar a saída acima, seu modelo de host de CPU é compatível com o Secure Execution.

  • O modo CPU da VM está configurado para host-model. Para confirmar isso, use o seguinte e substitua vm-name pelo nome de sua VM.

    # virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"

    Se o comando gerar alguma saída, o modo CPU da VM é configurado corretamente.

Procedimento

  1. Adicione o parâmetro do kernel prot_virt=1 à configuração de inicialização do host.

    # # grubby --update-kernel=ALL --args="prot_virt=1"
  2. Crie um arquivo de parâmetros para a VM que você deseja proteger. Por exemplo:

    # touch ~/secure-parameters
  3. No diretório /boot/loader/entries do host, identifique a entrada do carregador de inicialização com a versão mais recente:

    # 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. Recuperar a linha de opções do kernel da entrada do carregador de inicialização:

    # 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. Adicione o conteúdo da linha de opções e swiotlb=262144 ao arquivo de parâmetros criado.

    # echo "root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
  6. Gerar uma imagem IBM Secure Execution para a VM selecionada.

    Por exemplo, o seguinte cria uma imagem protegida /boot/secure-image baseada na imagem /boot/vmlinuz-4.18.0-240.el8.s390x, usando o arquivo secure-parameters, o arquivo de disco RAM inicial /boot/initramfs-4.18.0-240.el8.s390x.img, e o documento chave do 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

    Usando o utilitário genprotimg, cria-se a imagem segura, que contém os parâmetros do kernel, o disco RAM inicial e a imagem de inicialização.

  7. No sistema operacional convidado da VM, atualize o menu de inicialização da VM para inicializar a partir da imagem segura. Além disso, remova as linhas começando com initrd e options, pois elas não são necessárias.

    Por exemplo, em um RHEL 8.3 VM, o menu de inicialização pode ser editado no diretório /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. Habilitar dispositivos de virtio para usar buffers compartilhados. Para isso, use virsh edit para modificar a configuração XML da VM, e adicione iommu='on' à linha <driver> de todos os dispositivos que possuem um. Por exemplo:

    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' iommu='on'/>
    </interface>

    Se uma configuração de dispositivo não contiver nenhuma linha <driver>, adicione <driver iommu='on'\> em seu lugar.

  9. Desativar o balonamento de memória na VM, pois o recurso não é compatível com o Secure Execution. Para fazer isso, adicione a seguinte linha à configuração XML da VM.

    <memballoon model='none'/>
  10. Criar a imagem de disco inicializável

    # zipl -V
  11. Remover com segurança os arquivos originais desprotegidos. Por exemplo, os arquivos originais desprotegidos:

    # shred /boot/vmlinuz-4.18.0-240.el8.s390x
    # shred /boot/initramfs-4.18.0-240.el8.s390x.img
    # shred secure-parameters

    A imagem de inicialização original, a imagem RAM inicial e o arquivo de parâmetros do kernel estão desprotegidos e, se não forem removidos, as VMs com Execução Segura ativadas ainda podem ser vulneráveis a tentativas de hacking ou mineração de dados sensíveis.

Verificação

  • No host, use o utilitário virsh dumpxml para confirmar a configuração XML da VM protegida. A configuração deve incluir os elementos <driver iommu='on'/> e <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 adicionais