Forcer un kernel panic sur les MCE non corrigées
Exige le paramètre de démarrage noyau mce=0 afin qu'une Machine Check Exception non corrigée déclenche un kernel panic immédiat au lieu d'un SIGBUS récupérable.
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.
Pavois vérifie la configuration effective, l’état résolu et réellement appliqué, pas un fichier. Les scanners basés fichier (OVAL/SCAP, Lynis) ratent les Include, drop-ins et défauts runtime ; ce check voit ce qui est réellement en vigueur.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
Une Machine Check Exception (MCE) non corrigée signale une corruption mémoire ou CPU. Par défaut, le noyau tolère ces erreurs en envoyant un SIGBUS au processus concerné puis poursuit son exécution. Laisser le système en vie après une corruption permet à un attaquant de rejouer une attaque par injection de faute matérielle (telle que Rowhammer) jusqu'à ce qu'un bit-flip atteigne un emplacement utile. Forcer un kernel panic sur les MCE non corrigées (mce=0) transforme chaque corruption en arrêt brutal, supprimant la capacité de l'attaquant à itérer.
Ce que vérifie Pavois
Pavois lit la ligne de commande noyau active depuis /proc/cmdline et vérifie la présence de mce=0. /proc/cmdline est la ligne de boot effective réellement analysée par le noyau en cours, et non /etc/default/grub ou un drop-in dans /etc/default/grub.d/, qui peut avoir été modifié sans régénérer la configuration du bootloader. Lire le fichier rapporterait une valeur pas encore en vigueur ; lire /proc/cmdline ne peut être trompé.
describe command('cat /proc/cmdline') do
its('stdout') { should match(/(^| )mce=0( |$)/) }
end
describe command("grep -hwsF 'mce=0' /etc/default/grub /etc/kernel/cmdline /boot/grub/grub.cfg /boot/grub2/grub.cfg /boot/efi/EFI/*/grub.cfg 2>/dev/null") do
its('stdout') { should match(/\S/) }
endComment vérifier qu’elle est appliquée
Lancez cat /proc/cmdline et confirmez que la sortie contient le jeton autonome mce=0, par exemple :
BOOT_IMAGE=/vmlinuz ... mce=0 ...
Inspecter et investiguer
Les évènements Machine Check sont journalisés par le noyau, inspectez dmesg | grep -i mce ou journalctl -k | grep -i mce. Avec mce=0, une erreur non corrigée apparaît comme un panic dans le ring buffer noyau juste avant l'arrêt du système.
Remédiation
pavois harden apply utilise la ressource kernel_cmdline pour ajouter le paramètre mce=0 à la configuration du bootloader (GRUB) et la régénérer, afin que l'option soit présente au prochain démarrage. S'agissant d'un paramètre de boot, un redémarrage est requis pour qu'il prenne effet.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| param | mce=0 |
|---|---|
| reboot_required | true |
| resource | kernel_cmdline |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Avec mce=0, toute erreur matérielle non corrigée devient un arrêt brutal du système au lieu d'un évènement récupérable. Sur du matériel défaillant ou vieillissant, cela peut transformer des anomalies mémoire isolées en indisponibilités imprévues. Précautions :
- À éviter sur les hôtes à RAM/CPU marginaux connus ; remplacez d'abord le matériel.
- Validez sur un nœud non critique et assurez-vous d'avoir une supervision/redémarrage automatique avant un déploiement de masse.
- Conservez un accès console série ou hors-bande pour que le panic soit visible sur les machines sans écran.
- Le changement ne s'applique qu'après redémarrage ; planifiez une fenêtre de maintenance.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R8 | direct | 2.0 | haute |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.