19.7. Configuration d'IBM Secure Execution sur IBM Z
Lorsque vous utilisez du matériel IBM Z pour exécuter un hôte RHEL 9, vous pouvez améliorer la sécurité de vos machines virtuelles (VM) en configurant IBM Secure Execution pour les VM.
IBM Secure Execution, également connu sous le nom de Protected Virtualization, empêche le système hôte d'accéder à l'état et au contenu de la mémoire d'une VM. Par conséquent, même si l'hôte est compromis, il ne peut pas être utilisé comme vecteur d'attaque du système d'exploitation invité. En outre, Secure Execution peut être utilisé pour empêcher les hôtes non fiables d'obtenir des informations sensibles de la VM.
La procédure suivante décrit comment convertir une VM existante sur un hôte IBM Z en une VM sécurisée.
Conditions préalables
Le matériel du système est l'un des suivants :
- IBM z15 ou ultérieur
- IBM LinuxONE III ou version ultérieure
La fonction d'exécution sécurisée est activée pour votre système. Pour le vérifier, utilisez :
# grep facilities /proc/cpuinfo | grep 158
Si cette commande affiche une sortie, votre unité centrale est compatible avec Secure Execution.
Le noyau prend en charge l'exécution sécurisée. Pour confirmer, utilisez :
# ls /sys/firmware | grep uv
Si la commande génère une sortie, votre noyau prend en charge l'exécution sécurisée.
Le modèle de l'unité centrale hôte contient la fonction
unpack
. Pour confirmer, utilisez :# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>
Si la commande génère le résultat ci-dessus, votre modèle d'hôte CPU est compatible avec Secure Execution.
Le mode CPU de la VM est défini sur
host-model
. Pour le confirmer, utilisez la procédure suivante et remplacezvm-name
par le nom de votre VM.# virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"
Si la commande génère une sortie, le mode CPU de la VM est correctement défini.
Le paquetage genprotimg doit être installé sur l'hôte.
# dnf install genprotimg
- Vous avez obtenu et vérifié le document de la clé hôte IBM Z. Pour obtenir des instructions à ce sujet, reportez-vous à la section Vérification du document de clé hôte dans la documentation IBM.
Procédure
Effectuez les étapes suivantes on your host:
Ajoutez le paramètre
prot_virt=1
kernel à la configuration de démarrage de l'hôte.# grubby --update-kernel=ALL --args="prot_virt=1"
Mettre à jour le menu de démarrage :
# zipl
-
Utilisez
virsh edit
pour modifier la configuration XML de la VM que vous souhaitez sécuriser. Ajoutez
<launchSecurity type="s390-pv"/>
sous la ligne</devices>
. Par exemple :[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>
-
Si la section
<devices>
de la configuration comprend un dispositifvirtio-rng
(<rng model="virtio">
), supprimez toutes les lignes du bloc<rng> </rng>
. Optional: Si la VM que vous souhaitez sécuriser utilise 32 GiB de RAM ou plus, ajoutez la ligne
<async-teardown enabled='yes'/>
à la section<features></features>
de sa configuration XML.Cela améliore la performance du redémarrage ou de l'arrêt de ces hôtes de Secure Execution.
Effectuez les étapes suivantes in the guest operating system de la VM que vous souhaitez sécuriser.
Créer un fichier de paramètres. Par exemple :
# touch ~/secure-parameters
Dans le répertoire
/boot/loader/entries
, identifiez l'entrée du chargeur de démarrage avec la dernière version :# ls /boot/loader/entries -l [...] -rw-r--r--. 1 root root 281 Oct 9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
Récupère la ligne d'options du noyau de l'entrée du chargeur de démarrage :
# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options options root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
Ajoutez le contenu de la ligne d'options et
swiotlb=262144
au fichier de paramètres créé.# echo "root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
Générer une image IBM Secure Execution.
Par exemple, la procédure suivante crée une image sécurisée
/boot/secure-image
basée sur l'image/boot/vmlinuz-4.18.0-240.el8.s390x
, en utilisant le fichiersecure-parameters
, le fichier de disque RAM initial/boot/initramfs-4.18.0-240.el8.s390x.img
et le document de clé d'hôteHKD-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
L'utilitaire
genprotimg
permet de créer l'image sécurisée, qui contient les paramètres du noyau, le disque RAM initial et l'image de démarrage.Mettez à jour le menu de démarrage de la VM pour démarrer à partir de l'image sécurisée. En outre, supprimez les lignes commençant par
initrd
etoptions
, car elles ne sont pas nécessaires.Par exemple, dans une VM RHEL 8.3, le menu de démarrage peut être édité dans le répertoire
/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 [...]
Créer l'image disque amorçable :
# zipl -V
Supprimer en toute sécurité les fichiers originaux non protégés. Par exemple :
# shred /boot/vmlinuz-4.18.0-240.el8.s390x # shred /boot/initramfs-4.18.0-240.el8.s390x.img # shred secure-parameters
L'image de démarrage originale, l'image RAM initiale et le fichier de paramètres du noyau ne sont pas protégés et, s'ils ne sont pas supprimés, les machines virtuelles dont l'exécution sécurisée est activée peuvent toujours être vulnérables aux tentatives de piratage ou à l'extraction de données sensibles.
Vérification
Sur l'hôte, utilisez l'utilitaire
virsh dumpxml
pour confirmer la configuration XML de la VM sécurisée. La configuration doit inclure l'élément<launchSecurity type="s390-pv"/>
et aucune ligne <rng model="virtio">.# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> <launchSecurity type="s390-pv"/> </domain>