22.5. Permettre l'IMA et l'EVM
Vous pouvez activer et configurer l'architecture de mesure de l'intégrité (IMA) et le module de vérification étendu (EVM) pour améliorer la sécurité du système d'exploitation.
Conditions préalables
Secure Boot est temporairement désactivé.
NoteLorsque l'option Secure Boot est activée, le paramètre de ligne de commande
ima_appraise=fix
kernel ne fonctionne pas.Le système de fichiers
securityfs
est monté sur le répertoire/sys/kernel/security/
et le répertoire/sys/kernel/security/integrity/ima/
existe. Vous pouvez vérifier oùsecurityfs
est monté en utilisant la commandemount
:# mount ... securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) ...
Le gestionnaire de services
systemd
est corrigé pour prendre en charge l'IMA et l'EVM au démarrage. Vous pouvez le vérifier en utilisant la commande suivante :# dmesg | grep -i -e EVM -e IMA [ 0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-1.el9.x86_64 root=/dev/mapper/rhel-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet [ 0.000000] kvm-clock: cpu 0, msr 23601001, primary cpu clock [ 0.000000] Using crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M, the size chosen is a best effort estimation. [ 0.000000] Kernel command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-1.el9.x86_64 root=/dev/mapper/rhel-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet [ 0.911527] ima: No TPM chip found, activating TPM-bypass! [ 0.911538] ima: Allocated hash algorithm: sha1 [ 0.911580] evm: Initialising EVM extended attributes: [ 0.911581] evm: security.selinux [ 0.911581] evm: security.ima [ 0.911582] evm: security.capability [ 0.911582] evm: HMAC attrs: 0x1 [ 1.715151] systemd[1]: systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy) [ 3.824198] fbcon: qxldrmfb (fb0) is primary device [ 4.673457] PM: Image not found (code -22) [ 6.549966] systemd[1]: systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy)
Procédure
Activez l'IMA et l'EVM dans le mode fix pour l'entrée de démarrage actuelle et permettez aux utilisateurs de recueillir et de mettre à jour les mesures IMA en ajoutant les paramètres de ligne de commande du noyau suivants :
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"
La commande active l'IMA et l'EVM dans le mode fix pour l'entrée de démarrage actuelle et permet aux utilisateurs de rassembler et de mettre à jour les mesures IMA.
Le paramètre de ligne de commande du noyau
ima_policy=appraise_tcb
garantit que le noyau utilise la politique de mesure par défaut de la Trusted Computing Base (TCB) et l'étape d'évaluation. L'étape d'évaluation interdit l'accès aux fichiers dont les mesures antérieures et actuelles ne correspondent pas.- Redémarrez pour que les modifications soient prises en compte.
Facultatif : Vérifiez que les paramètres ont été ajoutés à la ligne de commande du noyau :
# cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-1.el9.x86_64 root=/dev/mapper/rhel-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ima_policy=appraise_tcb ima_appraise=fix evm=fix
Créer une clé maître du noyau pour protéger la clé EVM :
# keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u 748544121
L'adresse
kmk
est entièrement conservée dans la mémoire du noyau. La valeur de 32 octets dekmk
est générée à partir d'octets aléatoires du fichier/dev/urandom
et placée dans le trousseau de l'utilisateur (@u
). Le numéro de série de la clé se trouve sur la première ligne de la sortie précédente.Créer une clé EVM cryptée sur la base du site
kmk
:# keyctl add encrypted evm-key "new user:kmk 64" @u 641780271
La commande utilise le site
kmk
pour générer et crypter une clé d'utilisateur de 64 octets (nomméeevm-key
) et la placer dans le trousseau de l'utilisateur (@u
). Le numéro de série de la clé se trouve sur la première ligne de la sortie précédente.ImportantIl est nécessaire de nommer la clé utilisateur evm-key car c'est le nom que le sous-système EVM attend et avec lequel il travaille.
Créer un répertoire pour les clés exportées.
# mkdir -p /etc/keys/
Recherchez le site
kmk
et exportez sa valeur en clair dans le nouveau répertoire.# keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmk
Recherchez le site
evm-key
et exportez sa valeur cryptée dans le nouveau répertoire.# keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-key
Le site
evm-key
a été crypté précédemment par la clé principale du noyau.Optionnel : Affichez les clés nouvellement créées.
# keyctl show Session Keyring 974575405 --alswrv 0 0 keyring: ses 299489774 --alswrv 0 65534 \ keyring: uid.0 748544121 --alswrv 0 0 \ user: kmk 641780271 --alswrv 0 0 \_ encrypted: evm-key # ls -l /etc/keys/ total 8 -rw-r--r--. 1 root root 246 Jun 24 12:44 evm-key -rw-r--r--. 1 root root 32 Jun 24 12:43 kmk
Facultatif : si les clés ont été supprimées du trousseau, par exemple après un redémarrage du système, vous pouvez importer les clés déjà exportées
kmk
etevm-key
au lieu d'en créer de nouvelles.Importer le site
kmk
.# keyctl add user kmk "$(cat /etc/keys/kmk)" @u 451342217
Importer le site
evm-key
.# keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u 924537557
Activer l'EVM.
# echo 1 > /sys/kernel/security/evm
Réétiqueter l'ensemble du système.
# find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;
AvertissementL'activation de l'IMA et de l'EVM sans réétiquetage du système peut rendre la majorité des fichiers du système inaccessibles.
Vérification
Vérifiez que l'EVM a été initialisé.
# dmesg | tail -1 […] evm: key initialized
Ressources supplémentaires