Directive de configuration de l'IOMMU
Garantit que le noyau a démarré avec iommu=force, activant l'unité de gestion de la mémoire d'E/S (IOMMU) afin que le DMA des périphériques soit médiatisé et confiné.
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
Sur les plateformes x86, l'IOMMU médiatise l'accès direct à la mémoire (DMA) des périphériques matériels. Sans elle, un périphérique malveillant ou compromis (carte PCIe, périphérique Thunderbolt/USB4, micrologiciel) peut effectuer des lectures/écritures DMA arbitraires de la RAM système, contournant entièrement les protections mémoire de l'OS, l'attaque DMA classique utilisée pour extraire des clés ou implanter du code. iommu=force impose la traduction IOMMU même lorsque le micrologiciel la laisserait en passthrough, fermant cette surface d'attaque par accès physique (ANSSI BP-028 R7).
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 iommu=force. Inspecter /etc/default/grub ne montrerait que l'intention pour le prochain démarrage ; /proc/cmdline prouve que la directive IOMMU est active dans le noyau en cours, détectant une régénération ratée du chargeur d'amorçage ou un drop-in ayant silencieusement supprimé le paramètre.
only_if('n/a in a virtualized guest: applied only on bare metal') { command('systemd-detect-virt -q').exit_status != 0 }
describe command('cat /proc/cmdline') do
its('stdout') { should match(/(^| )iommu=force( |$)/) }
end
describe command("grep -hwsF 'iommu=force' /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 la présence de iommu=force. Vérifiez que l'IOMMU s'est réellement activée avec dmesg | grep -e DMAR -e IOMMU (lignes d'initialisation Intel VT-d / AMD-Vi). Le drapeau n'apparaît qu'après un redémarrage suivant un changement de configuration.
Inspecter et investiguer
Les messages d'initialisation IOMMU et de faute DMA sont dans le tampon noyau : dmesg | grep -i -e DMAR -e IOMMU -e AMD-Vi. Les fautes persistantes (un périphérique bloqué dans un DMA illégitime) y apparaissent aussi.
Remédiation
pavois harden apply utilise la ressource kernel_cmdline pour ajouter iommu=force à la configuration du chargeur d'amorçage (GRUB) et la régénérer. Il est signalé reboot_required car l'IOMMU est configurée au démarrage, le paramètre n'apparaît dans /proc/cmdline qu'après le redémarrage suivant.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| param | iommu=force |
|---|---|
| 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
Plus risqué que les autres réglages de cmdline : forcer l'IOMMU peut casser des périphériques qui dépendent du passthrough DMA (certains GPU, cartes réseau, configurations de passthrough/virtualisation) et, sur un micrologiciel défaillant, provoquer des blocages au démarrage ou des pannes de périphériques. Précautions : la plateforme doit avoir VT-d/AMD-Vi activé dans le BIOS/UEFI ; testez d'abord sur un hôte hors production, conservez un accès console/hors bande pour la récupération, et vérifiez dmesg pour les fautes DMA après redémarrage. Gardez une entrée GRUB antérieure fonctionnelle en repli.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R7 | 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.