Aller au contenu

Mesures d’atténuation des vulnérabilités du processeur

Ditana active par défaut les mesures d’atténuation des vulnérabilités du processeur en mode High Security. Le programme d’installation détecte les mesures d’atténuation dont votre processeur a besoin en lisant /sys/devices/system/cpu/vulnerabilities/, puis les propose chacune sous forme de case à cocher activable individuellement dans la boîte de dialogue Expert Settings → CPU Vulnerability Mitigation Options. Cette page documente chaque option en détail.

Paramètres par défaut du noyau face aux mesures d’atténuation de Ditana

Section intitulée « Paramètres par défaut du noyau face aux mesures d’atténuation de Ditana »

Les valeurs par défaut de Linux, fixées en amont, mettent en balance sécurité et performances, et laissent certaines vulnérabilités sans atténuation, sauf activation explicite. Ditana choisit par défaut de les atténuer – pour la plupart des charges de travail, le coût est négligeable, alors que le gain en sécurité est substantiel. Vous pouvez annuler individuellement chaque mesure d’atténuation dans le programme d’installation si l’une de vos charges de travail en tire un bénéfice démontrable.

La logique des mesures d’atténuation dépend du matériel. Seules les vulnérabilités que présente réellement votre processeur sont configurées ; tout le reste conserve la valeur par défaut du noyau.

Plusieurs mesures d’atténuation impliquent de désactiver, en solution de repli, le Simultaneous Multi-Threading (SMT, également appelé Hyper-Threading). L’en-tête de terminal personnalisé de Ditana indique quelles mesures d’atténuation sont actives et si le SMT est activé ou désactivé.

Vous pouvez aussi vérifier avec :

Fenêtre de terminal
lscpu

Pour comparer les performances avec et sans une mesure d’atténuation donnée, modifiez la ligne de commande du noyau pour un seul démarrage et supprimez le paramètre associé à la mesure d’atténuation que vous voulez tester. Sur une installation ZFS (c’est ce que produit le profil Standard), cela se fait avec l’éditeur d’environnements de démarrage de ZFSBootMenu ; sur un système qui démarre avec GRUB, appuyez sur e dans le menu. Les paramètres sont indiqués ci-dessous sous « Paramètre du noyau appliqué » pour chaque entrée. Redémarrez et exécutez votre charge de travail réelle – les tests de performance synthétiques reflètent rarement l’impact réel.

Pour rendre une modification permanente sur une installation ZFS, définissez la ligne de commande dans l’environnement de démarrage :

Fenêtre de terminal
sudo zfs set org.zfsbootmenu:commandline="rw <options>" ditana-root/ROOT
zfs get org.zfsbootmenu:commandline ditana-root/ROOT

Pour la rendre permanente sur un système qui démarre via GRUB, modifiez /etc/default/grub, repérez la ligne GRUB_CMDLINE_LINUX_DEFAULT (enregistrez d’abord une sauvegarde), supprimez le paramètre, puis exécutez :

Fenêtre de terminal
sudo grub-mkconfig -o /boot/grub/grub.cfg

Si une modification empêche le démarrage, modifiez la ligne de commande du noyau dans le menu GRUB pour récupérer le système, puis refaites la modification et exécutez de nouveau grub-mkconfig.

Mesures d’atténuation que Ditana active par défaut

Section intitulée « Mesures d’atténuation que Ditana active par défaut »

Exploit d’exécution spéculative permettant à des attaquants de lire des données sensibles au moyen de prédicteurs de branchements indirects mal entraînés. Ditana applique la mesure d’atténuation complète (Indirect Branch Prediction Barrier toujours active plutôt que conditionnelle).

Toutes les mesures d’atténuation de Spectre variante 2 peuvent être forcées au démarrage pour tous les programmes. Cela ajoutera un surcoût, car les spéculations de branchements indirects de tous les programmes seront restreintes.

kernel.org : Spectre

Identifiant lscpu Spectre v2
Nom du paramètre Enforce Spectre Variant 2 Mitigation
Paramètre du noyau appliqué spectre_v2=on

Touche les processeurs Intel et permet un accès non autorisé aux données du cache L1. Ditana impose l’atténuation complète avec un vidage agressif du cache.

Par défaut, le noyau n’impose pas la désactivation du SMT, ce qui laisse les systèmes SMT vulnérables lorsqu’ils exécutent des systèmes invités non fiables avec EPT activé.

kernel.org : L1TF

Identifiant lscpu L1tf
Nom du paramètre Enforce L1 Terminal Fault Mitigation
Paramètre du noyau appliqué l1tf=full,force

Permet à des attaquants d’échantillonner des données dans les tampons du processeur. L’atténuation complète peut désactiver le SMT si nécessaire.

Par défaut, le noyau n’impose pas la désactivation du SMT, ce qui laisse les systèmes SMT vulnérables lorsqu’ils exécutent du code non fiable.

kernel.org : MDS

Identifiant lscpu Mds
Nom du paramètre Enforce MDS Mitigation
Paramètre du noyau appliqué mds=full,nosmt

Touche les processeurs dotés des Transactional Synchronization Extensions. L’atténuation complète peut désactiver le SMT si besoin.

TSX peut être désactivé si le microcode fournit un MSR de contrôle de TSX. Dans ce cas, le système n’est pas vulnérable.

kernel.org : TAA

Identifiant lscpu Tsx async abort
Nom du paramètre Enforce TSX Async Abort Mitigation
Paramètre du noyau appliqué tsx_async_abort=full,nosmt

Exploit d’exécution spéculative permettant de lire la mémoire du noyau depuis l’espace utilisateur. Ditana force le vidage du cache de données L1.

La ligne de commande du noyau permet de contrôler au démarrage les mesures d’atténuation par vidage du L1D avec l’option l1d_flush=. Par défaut, le mécanisme est désactivé.

kernel.org : vidage du L1D

Identifiant lscpu Meltdown
Nom du paramètre Enforce Meltdown Mitigation
Paramètre du noyau appliqué l1d_flush=on

Fuite de données provenant d’entrées-sorties mappées en mémoire. L’atténuation complète peut désactiver le SMT.

full,nosmt – Comme full, avec le SMT désactivé sur les processeurs vulnérables. C’est l’atténuation complète.

kernel.org : MMIO stale data

Identifiant lscpu Mmio stale data
Nom du paramètre Enforce MMIO Stale Data Mitigation
Paramètre du noyau appliqué mmio_stale_data=full,nosmt

Attaque par exécution spéculative qui divulgue des adresses de retour. La mesure d’atténuation sélectionnée automatiquement peut désactiver le SMT.

auto,nosmt – sélectionne automatiquement une mesure d’atténuation, en désactivant le SMT si nécessaire pour l’atténuation complète.

kernel.org : paramètres du noyau

Identifiant lscpu Retbleed
Nom du paramètre Enforce Retbleed Mitigation
Paramètre du noyau appliqué retbleed=auto,nosmt

Consultez aussi kernel.org : Cross-Thread Return Address Predictions.

Attaques spéculatives via le tampon de la pile de retour. Combine des barrières IBPB avec le mode strict spectre_v2-user.

Mitigation: IBPB : protection semblable à « safe RET », mais qui emploie une barrière IBPB lors des passages entre domaines de privilèges (utilisateur→noyau, invité→hôte).

kernel.org : SRSO

Identifiant lscpu Spec rstack overflow
Nom du paramètre Enforce SRSO Mitigation
Paramètre du noyau appliqué spec_rstack_overflow=ibpb spectre_v2_user=on

Touche les instructions AVX. Impose l’atténuation par microcode, ou désactive AVX lorsque le microcode n’est pas disponible.

Indiquer gather_data_sampling=force utilisera l’atténuation par microcode lorsqu’elle est disponible, ou désactivera AVX sur les systèmes concernés dont le microcode n’a pas été mis à jour pour inclure l’atténuation.

kernel.org : Gather Data Sampling

Identifiant lscpu Gather data sampling
Nom du paramètre Enforce Gather Data Sampling Mitigation
Paramètre du noyau appliqué gather_data_sampling=force

Permet d’échantillonner des données dans les registres du processeur.

Ce paramètre remplace la valeur par défaut définie à la compilation par CONFIG_MITIGATION_RFDS.

kernel.org : paramètres du noyau

Identifiant lscpu Reg file data sampling
Nom du paramètre Enforce RFDS Mitigation
Paramètre du noyau appliqué reg_file_data_sampling=on

Consultez aussi kernel.org : RFDS.

Vulnérabilités non proposées dans le programme d’installation

Section intitulée « Vulnérabilités non proposées dans le programme d’installation »

Pour celles-ci, le noyau applique par défaut l’atténuation maximale – Ditana n’a rien à y ajouter.

Cinq autres sont signalées par le noyau sans être nommées nulle part ci-dessus, car Ditana n’y ajoute rien non plus : Ghostwrite, Indirect Target Selection, old microcode, TSA et VMSCAPE. Le noyau décide de ce dont chacune a besoin en fonction du processeur qu’il trouve et laisse le résultat là où lscpu et /sys/devices/system/cpu/vulnerabilities/ l’affichent.

Rien ne garantit que tous les vecteurs d’attaque possibles de Spectre variante 1 soient couverts.

kernel.org : Spectre

Identifiant lscpu : Spectre v1

Identifiant lscpu : Itlb multihit. Consultez kernel.org : iTLB multihit.

Identifiant lscpu : Srbds. Consultez kernel.org : SRBDS.

Le noyau fournit des mesures d’atténuation pour ces vulnérabilités sous diverses formes.

kernel.org : spec_ctrl

Identifiant lscpu : Spec store bypass.

Réduction des mesures d’atténuation – à vos risques et périls

Section intitulée « Réduction des mesures d’atténuation – à vos risques et périls »

Le programme d’installation propose aussi deux options qui réduisent les mesures d’atténuation. Elles augmentent considérablement votre exposition aux vulnérabilités connues des processeurs. Ne les utilisez que pour une raison claire et justifiée.

Désactiver l’Indirect Branch Tracking d’Intel – ibt=off

Section intitulée « Désactiver l’Indirect Branch Tracking d’Intel – ibt=off »

Désactive l’Indirect Branch Tracking du noyau. IBT est la moitié de la Control-flow Enforcement Technology consacrée aux transferts vers l’avant (forward edge) – le matériel vérifie que chaque saut ou appel indirect aboutit sur une instruction endbr, ce qui rend difficiles la programmation orientée saut et la programmation orientée appel. Il s’agit d’intégrité du flux de contrôle, pas d’une mesure d’atténuation de l’exécution spéculative : Branch Target Injection correspond à Spectre v2, traité plus haut sous spectre_v2=on. Ce paramètre du noyau n’est pas documenté dans la référence officielle des paramètres du noyau, bien qu’il soit couramment activé par défaut sur certaines distributions sans aucune communication explicite.

Le noyau documente l’autre moitié de la CET, la pile fantôme (shadow stack) de l’espace utilisateur, sous shstk ; IBT lui-même n’y a pas de page qui lui soit propre.

Désactiver toutes les mesures d’atténuation – mitigations=off

Section intitulée « Désactiver toutes les mesures d’atténuation – mitigations=off »

C’est plus radical que de décocher chaque mesure d’atténuation individuelle dans la boîte de dialogue. Avec mitigations=off, le noyau ignore toutes les mesures d’atténuation qu’il connaît – y compris celles que Ditana ne propose pas parce qu’elles sont actives par défaut. Le plafond de performances s’élève ; le plancher de sécurité chute, et brutalement.

Utile uniquement pour des tests de performance, des systèmes isolés de tout réseau et sous contrôle physique total, ou des environnements où vous disposez de défenses d’une tout autre nature.

Consultez kernel.org : paramètres du noyau.

Les recommandations de cette page s’appuient sur la documentation officielle des vulnérabilités des processeurs et sur la référence des paramètres de la ligne de commande du noyau. Les différentes branches du noyau s’écartent parfois subtilement de ces valeurs par défaut ; nos tests couvrent les noyaux pris en charge par Ditana, mais des combinaisons matérielles inhabituelles peuvent produire des cas limites.

Si l’une de vos charges de travail bénéficie d’une autre valeur par défaut, ou si vous trouvez un modèle de processeur pour lequel la détection de Ditana est incomplète ou incorrecte : veuillez ouvrir un ticket GitHub ou écrire à [email protected]. La logique de détection est constituée de données, pas de code – les améliorations se résument donc généralement à quelques lignes KDL.

Cette traduction a été réalisée par une machine. Les lecteurs l’améliorent sur Weblate.