Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

Attaque de noyau Side-channel via Speculative Store Bypass - CVE-2018-3639

Public Date: May 21, 2018, 9:00 pm
Updated -
Resolved Status
Important Impact

Red Hat Product Security a été informé d'une vulnérabilité qui se trouve dans les microprocesseurs modernes et qui exige des mises à jour du noyau Linux, des composants liés à la virtualisation, et une mise à jour du microcode. Un attaquant non privilégié peut utiliser cette faille pour contourner des restrictions pour obtenir un accès en lecture à la mémoire privilégiée. Le numéro suivant a été assigné CVE-2018-3639 et la vulnérabilité est également appelée « Variante 4 » ou « Speculative Store Bypass ». Nous savons que ce problème affecte les CPU de diverses microarchitectures : les processeurs AMD, ARM, IBM POWER8, POWER9, SystemZ series, et Intel. Toutes les versions actuellement prises en charge de Red Hat Enterprise Linux, Red Hat OpenShift, Red Hat Virtualization et Red Hat OpenStack Platform sont affectées.

Un utilisateur malveillant non privilégié peut exploiter cette vulnérabilité pour lire la mémoire système privilégiée et/ou la mémoire à l'extérieur d'un environnement sandboxed à la manière d'un navigateur Web ou des temps d'exécution JIT.

Afin d'atténuer les effets de cette vulnérabilité, les administrateurs système doivent appliquer à la fois des mises à jour matérielles "microcode" et des correctifs logiciels qui permettent d'activer de nouvelles fonctionnalités. Actuellement, le microprocesseur microcode sera livré par les fabricants individuels, mais à une date ultérieure, Red Hat publiera les mises à jour testées et signées, au fur et à mesure que nous les recevrons.

Ce problème a été rendu public le 21 mai 2018.

Contexte

CVE-2018-3639 (aka “Speculative Store Bypass”) ouvre une nouvelle voie (comme la misprédiction de branche) qui peut être exploitée par l'intermédiaire d'une exécution spéculative Side Channel basée sur le cache pour contourner les mesures de sécurité et accéder à une mémoire privilégiée. Cette question est semblable à celle de la vulnérabilité CVE-2017-5753 (aka “Spectre v1”), sauf qu'elle tire parti de l'optimisation de la mémoire de contournement par la fonction Speculative Store Bypass à la place de la misprédiction de branche de Spectre v1.

Les processeurs informatiques modernes sont des systèmes très complexes. Ils exécutent une séquence d'instructions (un programme) dans le cœur, et stockent les résultats en mémoire.

Pour maximiser le nombre d'instructions exécutées ou pour améliorer les performances, les processeurs ajoutent plusieurs cœurs d'exécution, une mémoire cache plus rapide et utilisent diverses techniques telles que l'exécution hors commande, la prédiction de branche, l'exécution spéculative, le pré-extraction de données, le ré-ordonnancement de l'accès à la mémoire, la désambiguïsation de mémoire, etc.

Au fur et à mesure que les instructions sont exécutées, le processeur charge (en lecture) et stocke (en écriture) des données depuis / vers la mémoire principale. Avant que les instructions de chargement et de stockage puissent accéder aux données, l'adresse donnée par leur opérande doit être résolue, ex.

mov    [rbx + rcx], 0x0  :  stocke zéro(0) dans l'emplacement mémoire [rbx + rcx]
mov    rax, [rdx + rsi]   :  charge des données de l'emplacement mémoire [rdx + rsi] dans le registre RAX

Dans les deux cas, les adresses [rbx + rcx] et [rdx + rsi] sont résolues dans un emplacement mémoire avant que l'on puisse accéder aux données.

Un programme typique a beaucoup d'instructions d'actions de chargement (en lecture) et de stockage (en écriture) ; et parfois, les deux actions fonctionnent sur la même adresse mémoire. Pour maintenir l'état cohérent de la mémoire, les processeurs utilisent la mémoire tampon load-store-queue pour traiter les instructions de chargement (en écriture) et de stockage (en écriture). Lorsque les instructions de chargement et de stockage sont mises en file d'attente, l'instruction de chargement ne s'exécute pas tant que les adresses de toutes les instructions de stockage de la file d'attente ne sont pas connues.

Saisir Speculative Store Bypass :

Les processeurs modernes peuvent exécuter des instructions de chargement/stockage de façon désordonnée et spéculativement (lorsque les instructions de chargement (lecture) et d'écriture (écriture) sont présentes dans la file d'attente du magasin de chargement).


Le désambiguiseur de mémoire (MD) (Memory Disambiguator) prédit quel chargement ne dépend pas d'une instruction de stockage antérieure. De telles instructions de chargement (lecture) sont ensuite exécutées spéculativement pour charger des données à partir du cache de données L1, même lorsque l'adresse du magasin précédent n'est pas connue, contournant ainsi l'instruction de stockage (Store). Ceci renforce la performance globale en évitant la latence de la charge. Ainsi, si la prédiction était fausse et qu'un conflit entre les instructions de chargement et les instructions d'écriture était détecté, toutes les instructions qui suivront (et y compris) la charge spéculative seront ré-exécutées.

Remerciements

Red Hat souhaite remercier Ken Johnson du Microsoft Security Response Center (MSRC) et Jann Horn de Google Project Zero (GPZ).

Références supplémentaires

Vous avez questions ? Regardez cette vidéo de Red Hat sur SSBD

Red Hat Blog: Tout ce que vous voulez savoir sur Speculative Store Bypass​

Comment patcher mon environnement RHEV contre les attaques de noyau Side-Channel via la méthode Speculative Store Bypass CVE-2018-3639 ?

Le microcode du CPU est-il disponible via le package microcode_ctl ?

Site Google Project Zero Variant 4

Intel Advisory 

Analyse d'Intel de l'Exécution spéculative Side Channels

Mitigation pour l'Exécution spéculative Side Channel


Produits concernés

Red Hat Product Security a évalué l'impact de sécurité de CVE-2018-3639 au niveau Important.

Les versions de produits Red Hat suivants sont affectées :

  • Red Hat Enterprise Linux 5

  • Red Hat Enterprise Linux 6

  • Red Hat Enterprise Linux 7

  • Red Hat Atomic Host

  • Red Hat Enterprise MRG 2

  • Red Hat Virtualization (RHEV-H/RHV-H)

  • Red Hat Enterprise Linux OpenStack Platform 6.0 (Juno)

  • Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) pour RHEL7

  • Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) director pour RHEL7

  • Red Hat OpenStack Platform 8.0 (Liberty)

  • Red Hat OpenStack Platform 8.0 (Liberty) director

  • Red Hat OpenStack Platform 9.0 (Mitaka)

  • Red Hat OpenStack Platform 9.0 (Mitaka) director

  • Red Hat OpenStack Platform 10.0 (Newton)

  • Red Hat OpenStack Platform 11.0 (Ocata)

  • Red Hat OpenStack Platform 12.0 (Pike)

Bien que les conteneurs Linux de Red Hat ne soient pas directement touchés par les problèmes de noyau, leur sécurité dépend de l'intégrité de l'environnement du noyau de l'hôte. Red Hat recommande d'utiliser les versions les plus récentes de vos images de conteneurs. L'index de santé des conteneurs (Container Health Index), qui fait partie du catalogue des Conteneurs Red Hat, peut toujours être utilisé pour vérifier le statut de sécurité des conteneurs Red Hat. Pour protéger l'accès des conteneurs utilisés, vous devrez veiller à ce que l'hôte du conteneur ( comme Red Hat Enterprise Linux ou Atomic Host) ait bien été mis à jour pour éviter la possibilité de ces attaques. Red Hat a créé une mise à jour d'Atomic Host pour ce cas d'utilisation.

Description et impact de l'attaque

À la manière de la variante Spectre-1, le scénario Speculative Store Bypass ouvre un canal latéral (Side Channel). Cela permet à l'instruction de chargement (en lecture) d'accéder à une ancienne valeur à partir d'un emplacement mémoire, où une opération de stockage n'est pas encore validée. Si un attaquant est capable de contrôler l'ancienne valeur à l'emplacement de la mémoire, il peut ainsi lire la mémoire système privilégiée s'il le souhaite. Cela peut également être exploité par des processus exécutant dans des environnements d'exécution sandboxed, comme un navigateur web, JVM ou des moteurs d'exécution qui analysent et compilent le code source juste à temps (JIT) avant son exécution.

Impact sur la performance


Speculative Store Bypass ou Memory Disambiguation (MD) sont des méthodes d'optimisation employées pour améliorer l'efficacité du moteur d'exécution spéculative. Comme cela permet d'exécuter des instructions de chargement (lecture) sans attendre des instructions d'écriture antérieures, la latence de la chargement est ainsi réduite et cela améliore les performances.

En activant la solution de mitigation de la fonction Speculative Store Bypass, vous désactivez donc l'optimisation de la désambiguïsation de la mémoire (MD). Cela peut avoir un impact sur les performances du système. L'impact net sur les performances variera en fonction de la charge de travail du système.

En ce qui concerne les configurations par défaut, la position de Red Hat favorise la sécurité par rapport à la performance, tout en permettant aux utilisateurs d'évaluer leur propre environnement et de faire des compromis appropriés, en activant et désactivant sélectivement les diverses mesures d'atténuation. Red Hat travaille sur d'autres changements afin de réduire l'impact de la solution de mitigation initiale sur le rendement.

Des données supplémentaires sur le rendement seront publiées au fur et à mesure qu'elles seront disponibles.

Diagnostiquer votre vulnérabilité

Déterminer si votre système est vulnérable

Utiliser le script de détection ci-dessous pour déterminer si votre système est actuellement concerné par cette faille de sécurité. Pour vérifier la légitimité du script, vous pouvez télécharger la signature GPG détachée également. La version du script en cours est 1.0.

Action

Nous conseillons à tous les clients de Red Hat exécutant des versions de produits Red Hat affectés de procéder aux mises à jour dès que les correctifs sont disponibles. On conseille aux clients d'appliquer les mises à jour qui conviennent immédiatement. Ces correctifs nécessitent également des mises à jour de micro-code/firmware CPU et il est conseillé aux abonnés de contacter leur fournisseur de matériel OEM pour recevoir le micro-code/firmware approprié pour leur processeur. Une mise à jour du noyau, sans le firmware/microcode approprié mis à jour pour le processeur, est insuffisante pour remédier à cette vulnérabilité.

L'ordre dans lequel les correctifs sont appliqués n'est pas important, mais après la mise à jour du firmware et des hyperviseurs, chaque système/machine virtuelle devra s'éteindre et redémarrer pour reconnaître un nouveau type de matériel.

Mises à jour pour les produits concernés

ProduitPackageAlerte / Mise à jour
Red Hat Enterprise Linux 7 (z-stream)noyauRHSA-2018:1629
Red Hat Enterprise Linux 7kernel-rtRHSA-2018:1630
Red Hat Enterprise Linux 7microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 7libvirtRHSA-2018:1632
Red Hat Enterprise Linux 7qemu-kvmRHSA-2018:1633
Red Hat Enterprise Linux 7openjdk 1.8.0RHSA-2018:1649
Red Hat Enterprise Linux 7openjdk 1.7.0RHSA-2018:1648
Red Hat Enterprise Linux 7.4 Support Mise à jour Prolongé EUS**noyauRHSA-2018:1635
Red Hat Enterprise Linux 7.4 Support Mise à jour Prolongé EUS**microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 7.4 Support Mise à jour Prolongé EUS**libvirtRHSA-2018:1652
Red Hat Enterprise Linux 7.4 Support Mise à jour Prolongé EUS**qemu-kvmRHSA-2018:1663
Red Hat Enterprise Linux 7.3 Support Mise à jour Prolongé EUS**noyauRHSA-2018:1636
Red Hat Enterprise Linux 7.3 Support Mise à jour Prolongé EUS**microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 7.3 Support Mise à jour Prolongé EUS**libvirtRHSA-2018:1653
Red Hat Enterprise Linux 7.3 Support Mise à jour Prolongé EUS**qemu-kvmRHSA-2018:1662
Red Hat Enterprise Linux 7.2 Services de mise à jour de SAP Solutions, & Support Mise à jour Avancé AUS***,****noyauRHSA-2018:1637
Red Hat Enterprise Linux 7.2 Services de mise à jour de SAP Solutions, & Support Mise à jour Avancé AUS***,****microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 7.2 Services de mise à jour de SAP Solutions, & Support Mise à jour Avancé AUS***,****libvirtRHSA-2018:1668
Red Hat Enterprise Linux 7.2 Services de mise à jour de SAP Solutions, & Support Mise à jour Avancé AUS***,****qemu-kvmRHSA-2018:1661
Red Hat Enterprise Linux 6 (z-stream)noyauRHSA-2018:1651
Red Hat Enterprise Linux 6microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 6libvirtRHSA-2018:1669
Red Hat Enterprise Linux 6qemu-kvmRHSA-2018:1660
Red Hat Enterprise Linux 6openjdk 1.8.0RHSA-2018:1650
Red Hat Enterprise Linux 6openjdk 1.7.0RHSA-2018:1647
Red Hat Enterprise Linux 6.7 Support Mise à jour Prolongé EUS**noyauEn cours
Red Hat Enterprise Linux 6.7 Support Mise à jour Prolongé EUS**microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 6.7 Support Mise à jour Prolongé EUS**libvirtRHSA-2018:1667
Red Hat Enterprise Linux 6.7 Support Mise à jour Prolongé EUS**qemu-kvmRHSA-2018:1659
Red Hat Enterprise Linux 6.6 Support Mise à jour Avancé AUS***,****noyauEn cours
Red Hat Enterprise Linux 6.6 Support Mise à jour Avancé AUS***,****microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 6.6 Support Mise à jour Avancé AUS***,****libvirtRHSA-2018:1666
Red Hat Enterprise Linux 6.6 Support Mise à jour Avancé AUS***,****qemu-kvmRHSA-2018:1658
Red Hat Enterprise Linux 6.5 Support Mise à jour Avancé AUS***noyauEn cours
Red Hat Enterprise Linux 6.5 Support Mise à jour Avancé AUS***microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 6.5 Support Mise à jour Avancé AUS***libvirtRHSA-2018:1665
Red Hat Enterprise Linux 6.5 Support Mise à jour Avancé AUS***qemu-kvmRHSA-2018:1657
Red Hat Enterprise Linux 6.4 Support Mise à jour Avancé AUS***noyauEn cours
Red Hat Enterprise Linux 6.4 Support Mise à jour Avancé AUS***
microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 6.4 Support Mise à jour Avancé AUS***
libvirtRHSA-2018:1664
Red Hat Enterprise Linux 6.4 Support Mise à jour Avancé AUS***
qemu-kvmRHSA-2018:1656
Red Hat Enterprise Linux 5 Support Mise à jour Prolongé ELS*
noyauEn cours
Red Hat Enterprise Linux 5 Support Mise à jour Prolongé ELS*
microcode_ctlEn fonction de la disponibilité fabricant
Red Hat Enterprise Linux 5.9 Support Mise à jour Avancé AUS***
noyauEn cours
Red Hat Enterprise Linux 5.9 Support Mise à jour Avancé AUS***
microcode_ctlEn fonction de la disponibilité fabricant
RHEL Atomic Host
noyauRespun 22May2018
Red Hat Enterprise MRG 2
kernel-rtRHSA-2018:1642
Red Hat Virtualization 4
redhat-virtualization-hostRHSA-2018:1696
Red Hat Virtualization 4
rhvm-setup-pluginsRHSA-2018:1674
Red Hat Virtualization 4
qemu-kvm-rhevRHSA-2018:1655
Red Hat Virtualization 4
vdsmRHSA-2018:1675
Red Hat Virtualization 4
ovirt-engineRHSA-2018:1676
Red Hat Virtualization 4
rhevm-setup-pluginsRHSA-2018:1674
Red Hat Virtualization 3 Support Mise à jour Prolongé ELS*
redhat-virtualization-hostRHSA-2018:1710
Red Hat Virtualization 3 Support Mise à jour Prolongé ELS*
rhev-hypervisor7RHSA-2018:1711
Red Hat Virtualization 3 Support Mise à jour Prolongé ELS*
qemu-kvm-rhevRHSA-2018:1654
Red Hat Virtualization 3 Support Mise à jour Prolongé ELS*
vdsmRHSA-2018:1690
Red Hat Virtualization 3 Support Mise à jour Prolongé ELS*
ovirt-engineRHSA-2018:1688
Red Hat Virtualization 3 Support Mise à jour Prolongé ELS*
rhevm-setup-pluginsRHSA-2018:1689
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) pour RHEL7
qemu-kvm-rhevRHSA-2018:1686
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) director pour RHEL7
director imagesEn cours
Red Hat OpenStack Platform 8.0 (Liberty)
qemu-kvm-rhev RHSA-2018:1646
Red Hat OpenStack Platform 8.0 (Liberty)
director imagesEn cours
Red Hat OpenStack Platform 9.0 (Mitaka)qemu-kvm-rhevRHSA-2018:1645
Red Hat OpenStack Platform 9.0 (Mitaka)director imagesEn cours
Red Hat OpenStack Platform 10.0 (Newton)qemu-kvm-rhevRHSA-2018:1644
Red Hat OpenStack Platform 10.0 (Newton)director imagesEn cours
Red Hat OpenStack Platform 11.0 (Ocata)qemu-kvm-rhevEn cours
Red Hat OpenStack Platform 11.0 (Ocata)director imagesEn cours
Red Hat OpenStack Platform 12.0 (Pike)qemu-kvm-rhevRHSA-2018:1643
Red Hat OpenStack Platform 12.0 (Pike)director imagesEn cours
Red Hat OpenStack Platform 12.0 (Pike)ConteneursEn cours


*Un abonnement ELS actif est exigé pour pouvoir accéder à ce correctif. Veuillez contacter l'équipe de vente de Red Hat ou bien, votre représentant commercial particulier pour obtenir plus d'informations si votre compte n'a pas d'abonnement ELS actif.

**Un abonnement EUS actif est requis. Veuillez contacter  l'équipe de ventes de Red Hat ou votre représentant commercial personnel pour plus d'informations si votre compte n'a pas d'abonnement EUS actif en cours actuellement.

Qu'est-ce qu'un abonnement à Red Hat Enterprise Linux Support Mise à jour Prolongé EUS (Extended Update Support) ?

***Un abonnement AUS (Advanced Update Support) actif est exigé pour pouvoir accéder à ce correctif dans RHEL AUS.

Qu'est-ce qu'un abonnement AUS (Advanced Update Support) pour missions critiques ?

***Un abonnement TUS actif est exigé pour pouvoir accéder à ce correctif dans RHEL TUS.

*****Les abonnés doivent contacter leur fournisseurs de matériel OEM afin d'obtenir les versions de microcode / firmware de CPU les plus récents.

Mitigation

Red Hat recommande aux clients d'appliquer la mise à jour du microcode/firmware fournie par votre fournisseur de matériel ou de CPU et d'installer ces noyaux mis à jour dès que possible. Les mises à jour logicielles peuvent être appliquées indépendamment du microcode matériel, mais ne prendront effet que lorsque le firmware du CPU aura été mis à jour.

On conseille à nos clients de prendre une approche basée risque pour résoudre ce problème. Les systèmes qui exigent des niveaux de sécurité et de confiance élevés doivent être réglés en premier, et doivent être isolés des systèmes suspects jusqu'à ce qu'ils puissent être traités afin de réduire le risque d'exploitation.

Les processeurs x86 d'Intel et d'AMD offrent des modèles de registres spécifiques (MSR) (Model Specific Registers) qui peuvent être utilisés pour activer/désactiver la fonction Speculation Store Bypass. En utilisant ces MSR, les nouvelles mises à jour du noyau offrent les paramètres de ligne de commande du noyau suivants :

  • spec_store_bypass_disable=[auto/on/off/prctl]
    default: auto
    • auto : quand vous démarrerez (boot) avec cette option, le noyau détectera si le processeur peut supporter la fonction Speculative Store Bypass (SSB) function, et sélectionnera la solution de mitigation qui convient.
    • on : active la solution de mitigation pour Speculative Store Bypass (ON). Le processeur n'exécutera pas le chargement (en lecture) des instructions, tant que toutes les adresses de stockage (en écriture) ne sont pas résolues.
    • off : désactive la solution de mitigation pour Speculative Store Bypass (OFF). Le processeur utilisera la fonction de désambiguïsation de la mémoire pour exécuter spéculativement le chargement (en lecture) des instructions, avant d'exécuter les instructions de stockage (en écriture) qui précèdent.
    • prctl : active la solution de mitigation pour Speculative Store Bypass sur la base-thread par l'intermédiaire de l'interface prctl(2).
  • nospec_store_bypass_disable :
    désactive toutes les solutions de mitigation pour la vulnérablité Speculative Store Bypass.

La mise à jour du noyau ajoute également un support pour l'interface sysfs qui pourra signaler si le processeur du système est vulnérable à la fonction Speculative Store Bypass, et si les mesures d'atténuation correspondantes sont bien mises en place.

  • # cat /sys/devices/system/cpu/vulnerabilities/spec_store_bypass

Pour les environnements JVM et/ou JIT sandboxed, la mise à jour du noyau introduit une option de contrôle par processus via l'interface prctl(2). Peut être utilisé par ces applications pour activer ou désactiver la fonction Speculative Store Bypass par processus. Une application peut invoquer prctl(2) comme ceci :

  • prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_ENABLE, 0, 0);
    Pour activer la fonction Speculative Store Bypass.
  • prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
    Pour désactiver la fonction Speculative Store Bypass.