Activer l'empoisonnement sans vérification d'intégrité
Exige que le noyau en cours d'exécution soit compilé avec CONFIG_PAGE_POISONING_NO_SANITY=y afin que les pages libérées soient toujours empoisonnées mais que la vérification coûteuse à l'allocation soit ignorée.
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
L'empoisonnement des pages écrit normalement un motif à la libération et vérifie ce motif lors de l'allocation suivante (la vérification d'intégrité), pour détecter une corruption. Cette lecture de vérification double le coût. CONFIG_PAGE_POISONING_NO_SANITY=y conserve le bénéfice de sécurité, la mémoire libérée est toujours écrasée, donc les secrets sont détruits, tout en supprimant la lecture de vérification, réduisant le surcoût en performance afin que l'empoisonnement reste viable sur les systèmes de production.
Ce que vérifie Pavois
Pavois lit la configuration de compilation du noyau en cours d'exécution via /boot/config-$(uname -r), avec repli sur /proc/config.gz, de sorte que le résultat reflète le noyau démarré. Pavois attend CONFIG_PAGE_POISONING_NO_SANITY=y.
describe command("C=/boot/config-$(uname -r); if [ -r \"$C\" ]; then cat \"$C\"; elif zcat /proc/config.gz 2>/dev/null | head -1 | grep -q .; then zcat /proc/config.gz; else echo PAVOIS_NO_KERNEL_CONFIG; fi | grep -E '^(CONFIG_PAGE_POISONING_NO_SANITY=|PAVOIS_NO_KERNEL_CONFIG)'") do
its('stdout') { should_not match(/PAVOIS_NO_KERNEL_CONFIG/) }
its('stdout') { should match(/^CONFIG_PAGE_POISONING_NO_SANITY=y$/) }
endComment vérifier qu’elle est appliquée
Exécutez grep '^CONFIG_PAGE_POISONING_NO_SANITY=' /boot/config-$(uname -r) (ou zcat /proc/config.gz | grep '^CONFIG_PAGE_POISONING_NO_SANITY='). Sortie attendue : CONFIG_PAGE_POISONING_NO_SANITY=y.
Inspecter et investiguer
Il s'agit d'une sous-option de réglage de l'empoisonnement des pages, sans ligne de journal dédiée. Confirmez que l'empoisonnement est actif via dmesg | grep -i poison, journalctl -k et cat /proc/cmdline (cherchez page_poison=1).
Remédiation
Aucune remédiation automatique : CONFIG_PAGE_POISONING_NO_SANITY est une option de compilation du noyau et ne peut pas être basculée à l'exécution. Elle dépend de l'activation de CONFIG_PAGE_POISONING. Utilisez un noyau de distribution qui la définit, ou recompilez. À appliquer manuellement ; pavois harden apply ne peut pas modifier un paramètre compilé en dur.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| resource | kernel_build |
|---|
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Désactiver la vérification d'intégrité échange un diagnostic de détection de corruption contre de la vitesse ; le bénéfice de sécurité lié à l'écrasement de la mémoire libérée est préservé. Le seul vrai inconvénient est la perte d'un signal d'alerte précoce de corruption mémoire, ce qui importe davantage en débogage qu'en production. Aucun risque de casse à l'exécution ni de blocage d'accès, c'est un drapeau de réglage à la compilation. Notez qu'elle ne prend effet que si CONFIG_PAGE_POISONING est aussi activé.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R17 | 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.