Configurer la mitigation Microarchitectural Data Sampling (MDS)
Exige le paramètre de démarrage noyau mds=full,nosmt pour mitiger totalement les canaux auxiliaires Microarchitectural Data Sampling, y compris la voie de fuite inter-hyperthread.
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 Microarchitectural Data Sampling (MDS) est une classe de vulnérabilités par canal auxiliaire (Fallout, RIDL, ZombieLoad) qui permet à un attaquant d'échantillonner des données résiduelles dans les buffers internes du CPU (store, fill et load buffers) appartenant à d'autres processus, au noyau, à des VM ou à des enclaves SGX. Comme ces buffers sont partagés entre hyperthreads, une mitigation partielle qui ne désactive pas le SMT peut encore fuiter des données. Définir mds=full,nosmt vide les buffers concernés à chaque changement de contexte et désactive le SMT, fermant entièrement la voie de fuite inter-thread.
Ce que vérifie Pavois
Pavois lit la ligne de commande noyau active depuis /proc/cmdline et vérifie la présence de mds=full,nosmt. C'est la ligne de boot réellement analysée par le noyau, et non /etc/default/grub, un scan basé fichier pourrait passer sur une config GRUB modifiée jamais régénérée, laissant le SMT et les buffers exposés. Vous pouvez recouper le verdict du noyau via /sys/devices/system/cpu/vulnerabilities/mds.
describe command('cat /proc/cmdline') do
its('stdout') { should match(/(^| )mds=full( |$)/) }
end
describe command("grep -hwsF 'mds=full' /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 mds=full,nosmt. Vérifiez que la mitigation est active avec :
cat /sys/devices/system/cpu/vulnerabilities/mds
La sortie attendue indique Mitigation: Clear CPU buffers; SMT disabled.
Inspecter et investiguer
L'état de la mitigation est exposé sous sysfs : cat /sys/devices/system/cpu/vulnerabilities/mds. Le noyau affiche aussi sa décision au démarrage, dmesg | grep -i 'MDS' ou journalctl -k | grep -i mds.
Remédiation
pavois harden apply utilise la ressource kernel_cmdline pour ajouter mds=full,nosmt à 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 | mds=full |
|---|---|
| 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
nosmt désactive l'Hyper-Threading, ce qui peut réduire le débit des charges multi-thread liées au CPU jusqu'à ~30 %. Précautions :
- Mesurez d'abord les charges sensibles à la latence ou à fort nombre de cœurs ; vous perdez des cœurs logiques.
- Sur des hôtes mono-locataire et de confiance, vous pouvez conserver le SMT et accepter le risque résiduel, mais cette règle impose le profil strict
full,nosmt. - Le flush est inoffensif sur les CPU corrigés rapportant déjà Not affected.
- S'applique uniquement après redémarrage, planifiez une fenêtre de maintenance.
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.