Désactiver le chargement d'images noyau (kexec)
Fixe kernel.kexec_load_disabled = 1 afin qu'aucune nouvelle image noyau ne puisse être chargée à chaud via l'appel système kexec.
Vérifié sur l’état résolu en cours d’exécution (ex. sshd -T, sysctl, systemctl show), attrape les drop-ins et Include qu’une lecture de fichier raterait. Réserve : runtime ≠ persistance ; une valeur correcte maintenant peut ne pas survivre à un redémarrage.
Pourquoi cette règle
Désactiver kexec_load renforce le contrôle de la mémoire noyau. Une fois désactivé, il devient impossible de charger une autre image noyau à chaud via kexec. Cela empêche un attaquant ayant obtenu le root de démarrer un noyau malveillant ou piégé à la place du noyau en cours d'exécution sans redémarrage complet, et bloque le contournement de Secure Boot via kexec.
Ce que vérifie Pavois
Pavois lit la valeur noyau en vigueur via kernel_parameter('kernel.kexec_load_disabled') (équivalent à sysctl kernel.kexec_load_disabled), et non le contenu de /etc/sysctl.conf ou /etc/sysctl.d/*.conf. C'est essentiel : une valeur écrite dans un fichier n'est effective qu'après application, et un drop-in ultérieur, une option de démarrage ou un sysctl -w manuel peuvent modifier la valeur réelle. Lire le paramètre effectif est le seul moyen de confirmer ce que le noyau applique réellement. À noter : kexec_load_disabled est un verrou à sens unique, une fois à 1, le noyau refuse de le repasser à 0.
describe kernel_parameter('kernel.kexec_load_disabled') do
its('value') { should cmp 1 }
end
describe command("grep -hsE '^[[:space:]]*kernel.kexec_load_disabled[[:space:]]*=[[:space:]]*1([[:space:]]|$)' /etc/sysctl.conf /etc/sysctl.d/*.conf /run/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf 2>/dev/null") do
its('stdout') { should match(/\S/) }
endComment vérifier qu’elle est appliquée
Exécutez sysctl kernel.kexec_load_disabled (ou cat /proc/sys/kernel/kexec_load_disabled). Sortie attendue :
kernel.kexec_load_disabled = 1
Inspecter et investiguer
Aucune ligne de journal dédiée n'existe pour ce paramètre. Vérifiez l'état en cours via sysctl kernel.kexec_load_disabled. Toute tentative de chargement bloquée se traduit par un appel kexec_load renvoyant EPERM ; si une règle d'audit sur le chargement noyau est en place, le refus apparaît dans /var/log/audit/audit.log.
Remédiation
Le plan de durcissement de Pavois utilise la ressource sysctl pour fixer kernel.kexec_load_disabled = 1, le persiste dans un drop-in géré par Pavois sous /etc/sysctl.d/ et l'applique à chaud, sans redémarrage. Appliquez-le avec pavois harden apply. Comme il s'agit d'un verrou à sens unique, il reste effectif jusqu'au prochain redémarrage, quels que soient les changements ultérieurs.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| key | kernel.kexec_load_disabled |
|---|---|
| resource | sysctl |
| value | 1 |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque si non appliqué : un attaquant disposant du root peut charger un noyau arbitraire via kexec, remplaçant le noyau de confiance par un noyau malveillant et contournant Secure Boot, sans redémarrage visible.
Précautions avant application :
- Cela désactive les redémarrages rapides par
kexecet le relais vers le crash-kernel. Si vous utilisezkdump/kexecpour les dumps mémoire ou les redémarrages rapides, ce contrôle casse ce fonctionnement, désactivez-le sur ces hôtes ou acceptez des redémarrages complets plus lents. - Le réglage est un verrou à sens unique : il ne peut être annulé à chaud, uniquement par un redémarrage complet. Validez d'abord sur un hôte non critique.