Configurer le noyau pour remettre la mémoire à zéro avant allocation
Garantit que le noyau a démarré avec init_on_alloc=1, qui remplit de zéros les allocations de pages et de slabs afin que la mémoire fraîchement allouée ne contienne jamais de données résiduelles.
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
Avec init_on_alloc=1, toute la mémoire de l'allocateur de pages et de l'allocateur de slabs est remise à zéro à l'allocation. Cela élimine toute une classe de bugs de "mémoire de tas non initialisée" où des tampons fraîchement alloués exposent des données résiduelles d'un propriétaire précédent, un vecteur courant de divulgation d'information (fuite de secrets, de clés ou de pointeurs contournant l'ASLR) et de transformation de bugs de mémoire non initialisée en conditions exploitables.
Ce que vérifie Pavois
Pavois lit /proc/cmdline, la ligne avec laquelle le noyau en cours a démarré, et vérifie la présence de init_on_alloc=1. C'est plus fiable que lire /etc/default/grub : le fichier de config indique ce qui devrait démarrer, tandis que /proc/cmdline prouve que la mitigation est active dans le noyau en cours. Remarque : certaines distributions compilent le noyau avec CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y, auquel cas le comportement est actif même sans le paramètre, mais le drapeau explicite le garantit.
describe command('cat /proc/cmdline') do
its('stdout') { should match(/(^| )init_on_alloc=1( |$)/) }
end
describe command("grep -hwsF 'init_on_alloc=1' /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
Exécutez cat /proc/cmdline et confirmez qu'elle contient init_on_alloc=1. Vous pouvez vérifier la valeur par défaut de compilation avec zcat /proc/config.gz | grep INIT_ON_ALLOC si disponible. Le drapeau n'apparaît qu'après un redémarrage suivant un changement de configuration.
Inspecter et investiguer
Aucun journal d'exécution dédié ; il s'agit d'une politique mémoire fixée à la compilation/au démarrage. Confirmez via cat /proc/cmdline ; les messages de sécurité/mitigation du noyau apparaissent dans dmesg.
Remédiation
Aucune remédiation automatique n'est câblée pour cette règle (remediation est vide), elle doit donc être appliquée manuellement : ajoutez init_on_alloc=1 à la ligne de commande du noyau via le chargeur d'amorçage (p. ex. GRUB_CMDLINE_LINUX dans /etc/default/grub, puis grub2-mkconfig) et redémarrez. Confirmez avec cat /proc/cmdline.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| param | init_on_alloc=1 |
|---|---|
| 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
Coût de performance léger, généralement négligeable, lié à la remise à zéro de chaque allocation (plus perceptible sur les charges intensives en allocation). Précautions : comme RHEL 9 peut déjà l'activer par défaut à la compilation, ajouter le drapeau est inoffensif et idempotent. Le changement nécessite un redémarrage ; vérifiez que le chargeur d'amorçage s'est régénéré proprement afin de ne pas démarrer une ligne de noyau imprévue.