Émuler Privileged Access Never (PAN)
Garantit que le noyau ARM64 est compilé avec CONFIG_ARM64_SW_TTBR0_PAN=y, fournissant une émulation logicielle de Privileged Access Never (PAN) sur les CPU sans PAN matériel.
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
Privileged Access Never (PAN) est l'équivalent ARM du SMAP x86 : il empêche le noyau de déréférencer accidentellement (ou de façon malveillante, via un exploit) des adresses de l'espace utilisateur lorsqu'il s'exécute en mode privilégié. Sur le matériel ARM64 dépourvu de la fonction PAN matérielle, CONFIG_ARM64_SW_TTBR0_PAN=y l'émule en logiciel en basculant TTBR0. Sans lui, des techniques d'exploitation classiques comme ret2usr, placer du code/des données contrôlés par l'attaquant en mémoire utilisateur et tromper le noyau pour qu'il les utilise, deviennent viables, transformant un bug noyau en compromission totale.
Ce que vérifie Pavois
Pavois lit la config de compilation du noyau en cours d'exécution via /boot/config-$(uname -r) (repli /proc/config.gz) et vérifie CONFIG_ARM64_SW_TTBR0_PAN=y. Lire la config effective du noyau vivant, indexée sur uname -r, est plus fiable que deviner depuis un fichier /boot/config-*, car cela correspond à l'image exacte démarrée par GRUB même si plusieurs noyaux coexistent. Cette option ne s'applique qu'à ARM64 ; sur x86 la ligne est simplement absente (la protection équivalente est SMAP).
only_if('arm64 only') { os.arch.to_s =~ /aarch64|arm/ }
describe command("grep -h '^CONFIG_ARM64_SW_TTBR0_PAN=' /boot/config-$(uname -r) 2>/dev/null; zcat /proc/config.gz 2>/dev/null | grep '^CONFIG_ARM64_SW_TTBR0_PAN='") do
its('stdout') { should match(/^CONFIG_ARM64_SW_TTBR0_PAN=y$/) }
endComment vérifier qu’elle est appliquée
Exécutez grep -h '^CONFIG_ARM64_SW_TTBR0_PAN=' /boot/config-$(uname -r) (ou zcat /proc/config.gz | grep ARM64_SW_TTBR0_PAN). Attendu sur ARM64 : CONFIG_ARM64_SW_TTBR0_PAN=y. Confirmez l'architecture avec uname -m (doit indiquer aarch64).
Inspecter et investiguer
C'est une option de compilation statique du noyau sans journal d'exécution. Inspectez-la avec zcat /proc/config.gz | grep ARM64_SW_TTBR0_PAN ou grep ARM64_SW_TTBR0_PAN /boot/config-$(uname -r). Au démarrage, dmesg | grep -i pan peut indiquer le support PAN du CPU.
Remédiation
Aucune remédiation automatisée n'est fournie : c'est une option de compilation du noyau. Appliquez-la en démarrant un noyau ARM64 compilé avec CONFIG_ARM64_SW_TTBR0_PAN=y, la plupart des noyaux de distribution l'activent déjà, sinon recompilez le noyau. pavois harden apply ne peut pas la modifier.
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
Risque en l'absence : sur les CPU ARM64 sans PAN matériel, le noyau peut être trompé pour lire/exécuter la mémoire utilisateur, permettant une élévation de privilèges de type ret2usr à partir d'un simple bug noyau.
Précautions avant de modifier : l'option n'a de sens que sur ARM64 ; ignorez le constat sur x86. Le PAN logiciel via TTBR0 ajoute un léger surcoût par appel système mais aucun risque fonctionnel. Changer de noyau nécessite un redémarrage, conservez l'entrée du noyau précédent dans GRUB en repli et validez le démarrage sur une console avant de retirer l'ancienne image.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R27 | 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.