Activer la randomisation de l'allocateur de pages
Exige le paramètre de démarrage noyau page_alloc.shuffle=1 pour randomiser l'ordre de distribution de la mémoire libre par l'allocateur de pages.
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
Les listes de pages libres du noyau sont sinon distribuées dans un ordre prévisible. Si un attaquant peut faire planter le système (ou provoquer un redémarrage) et connaît l'ordre d'allocation déterministe, il peut prédire où atterriront les données sensibles en mémoire physique et façonner une attaque de heap-grooming ou de divulgation mémoire. page_alloc.shuffle=1 randomise l'ordre de distribution des pages libres (fonctionnalité initialement ajoutée pour améliorer l'utilisation du cache direct-mapped), rendant les allocations imprévisibles d'un démarrage à l'autre, quelle que soit l'architecture de cache.
Ce que vérifie Pavois
Pavois lit la ligne de commande noyau active depuis /proc/cmdline et vérifie la présence de page_alloc.shuffle=1. C'est la ligne de boot analysée par le noyau, et non un fichier GRUB éventuellement modifié mais non régénéré. Vous pouvez confirmer que la fonctionnalité est réellement active à l'exécution via /sys/module/page_alloc/parameters/shuffle.
describe command('cat /proc/cmdline') do
its('stdout') { should match(/(^| )page_alloc\.shuffle=1( |$)/) }
end
describe command("grep -hwsF 'page_alloc\.shuffle=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
Lancez cat /proc/cmdline et confirmez la présence de page_alloc.shuffle=1. Recoupez l'état d'exécution avec :
cat /sys/module/page_alloc/parameters/shuffle
La sortie attendue est Y.
Inspecter et investiguer
L'état d'exécution est exposé dans /sys/module/page_alloc/parameters/shuffle. Il n'y a pas de journal dédié ; la ligne de boot elle-même (dmesg | grep -i command montre le /proc/cmdline analysé) constitue la trace faisant autorité.
Remédiation
pavois harden apply utilise la ressource kernel_cmdline pour ajouter page_alloc.shuffle=1 à la configuration du bootloader et la régénérer, afin que l'option soit présente au prochain démarrage. 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 | page_alloc.shuffle=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
Ce paramètre est à faible risque : le shuffling de l'allocateur de pages a un impact négligeable sur les performances et améliore même légèrement l'utilisation du cache sur de nombreuses plateformes. Seule réserve pratique :
- Il s'applique après un redémarrage ; planifiez le changement avec une fenêtre de maintenance.
- Aucun souci de compatibilité applicative ; c'est une pure randomisation d'agencement mémoire sans changement de comportement fonctionnel.
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.