Empêcher les applications de mapper la portion basse de la mémoire virtuelle
Réserve les 64 Kio bas de la mémoire virtuelle pour empêcher les processus de mmaper près de l'adresse 0, via vm.mmap_min_addr=65536.
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
Le paramètre vm.mmap_min_addr définit l'adresse virtuelle minimale qu'un processus peut mmaper. Laisser le bas de la mémoire virtuelle mappable permet à un attaquant de placer des données contrôlées à l'adresse 0, transformant des bugs anodins de déréférence de pointeur NULL dans le noyau en escalades de privilèges exploitables de manière fiable. Réserver les 64 premiers Kio (65536) supprime cette fenêtre de mapping et neutralise toute une classe d'exploits NULL-deref.
Ce que vérifie Pavois
Pavois lit la valeur noyau en vigueur via kernel_parameter('vm.mmap_min_addr') (équivalent à sysctl vm.mmap_min_addr), pas un fichier .conf. C'est décisif : la valeur d'exécution est la fusion de /etc/sysctl.conf, de chaque drop-in /etc/sysctl.d/*.conf et /run/sysctl.d/*.conf, plus tout override appliqué à chaud par sysctl -w. Un scanner basé sur les fichiers peut être trompé par un drop-in postérieur ou une modification manuelle ; lire le paramètre effectif, non.
describe kernel_parameter('vm.mmap_min_addr') do
its('value') { should cmp 65536 }
end
describe command("grep -hsE '^[[:space:]]*vm.mmap_min_addr[[:space:]]*=[[:space:]]*65536([[: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/) }
endComment vérifier qu’elle est appliquée
Exécutez sysctl vm.mmap_min_addr. Sortie attendue :
vm.mmap_min_addr = 65536
Inspecter et investiguer
Un paramètre noyau n'a pas de journal d'événements ; inspectez son état courant directement avec sysctl vm.mmap_min_addr. Pour tracer son origine, utilisez sysctl --system 2>&1 (chaque drop-in est affiché au moment de son application) ou recherchez les sources avec grep -r mmap_min_addr /etc/sysctl.conf /etc/sysctl.d/ /run/sysctl.d/.
Remédiation
Le plan de durcissement de Pavois utilise la ressource sysctl pour fixer vm.mmap_min_addr à 65536. pavois harden apply écrit la clé dans un drop-in géré par Pavois et l'applique à chaud (aucun redémarrage requis), si bien que la valeur effective correspond immédiatement.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| key | vm.mmap_min_addr |
|---|---|
| resource | sysctl |
| value | 65536 |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque très faible sur des serveurs généralistes : 65536 est la valeur par défaut des distributions modernes et réserver l'espace d'adressage bas est transparent pour les applications normales. Les rares exceptions sont les programmes qui mappent légitimement la page 0 : notamment DOSEMU/dosbox 16 bits, Wine dans certains modes, ou QEMU/KVM avec certaines configurations invitées, qui exigent une valeur plus basse. Avant un déploiement large, vérifiez qu'aucune de ces charges ne tourne sur l'hôte ; le cas échéant, accordez la capability spécifique ou abaissez la valeur uniquement sur cet hôte plutôt que de désactiver la règle sur tout le parc.
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.