← Toutes les règles
SOCLE-CLD-SYS-010// Kernel & network (sysctl)moyenneruntime effectif

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.

Un PASS prouve✓ actif maintenant✓ sur disque✓ survit au rebootle verdict qualifié →
FedoraRHEL 10 / Rocky 10 / AlmaLinux 10RHEL 8 / Rocky 8 / AlmaLinux 8CIS 4.0.0RHEL 9 / Rocky 9 / AlmaLinux 9CIS 2.0.0

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/) }
end

Comment 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 :

keykernel.kexec_load_disabled
resourcesysctl
value1
pavois harden plan local

où 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 kexec et le relais vers le crash-kernel. Si vous utilisez kdump/kexec pour 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.

Sources & références