Un nouveau bogue d'exécution spéculatif fuit les données des mémoires tampons internes des puces Intel

Divulguées pour la première fois en janvier 2018, les attaques Meltdown et Specter ont ouvert la voie, conduisant à des recherches approfondies sur le matériel d'exécution spéculatif trouvé dans les processeurs modernes, et plusieurs attaques supplémentaires ont été publiées ces derniers mois.

Nous assistons aujourd’hui à la publication d’un ensemble de failles étroitement liées, nommées RIDL, Fallout, ZombieLoad ou Microarchitectural Data Sampling. Les nombreux noms sont une conséquence des nombreux groupes qui ont découvert les différentes failles. Du département d’informatique de la Vrije Universiteit Amsterdam et du centre Helmholtz pour la sécurité de l’information, nous avons une «charge de données en vol non autorisée». D'une équipe composée de l'Université de technologie de Graz, de l'Université du Michigan, du Worcester Polytechnic Institute et de la KU Leuven, nous avons «Fallout». De l'Université de technologie de Graz, du Worcester Polytechnic Institute et de la KU Leuven, nous avons «ZombieLoad» et de l'Université de technologie de Graz, «Stockage vers fuite».

Intel utilise le nom «Microarchitect Data Sampling» (MDS), et c’est le nom qui donne sans doute le plus clair aperçu du problème. Les problèmes ont été découverts de manière indépendante par Intel et les divers autres groupes, la première notification à la société de puces ayant eu lieu en juin de l’année dernière.

Un récapitulatif: les processeurs en devinent beaucoup

Toutes les attaques suivent un ensemble de principes communs. Chaque processeur a un comportement architectural (le comportement documenté qui décrit le fonctionnement des instructions et sur lequel les programmeurs écrivent pour écrire leurs programmes) et un comportement microarchitectural (le comportement d'une implémentation réelle de l'architecture). Celles-ci peuvent diverger de manière subtile. Par exemple, d'un point de vue architectural, un processeur exécute chaque instruction séquentiellement, une par une, en attendant que tous les opérandes d'une instruction soient connus avant d'exécuter cette instruction. Un programme qui charge une valeur d'une adresse particulière en mémoire attendra que l'adresse soit connue avant de tenter d'effectuer le chargement, puis attendra que le chargement se termine avant d'utiliser la valeur.

Au niveau microarchitectural, toutefois, le processeur peut tenter de deviner l'adresse de manière spéculative de sorte qu'il puisse commencer à charger la valeur à partir de la mémoire (ce qui est lent) ou qu'il puisse deviner que la charge récupérera une valeur particulière. Il utilisera généralement une valeur du cache ou de la mémoire tampon de traduction homologue de la traduction pour former cette estimation. Si le processeur devine mal, il ignorera la valeur estimée et effectuera le chargement à nouveau, cette fois avec l'adresse correcte. Le comportement défini par l’architecture est ainsi préservé, comme si le processeur attendait toujours les valeurs avant de les utiliser.

Mais cette hypothèse erronée perturbera d'autres parties du processeur; L'approche principale consiste à modifier le cache d'une manière qui dépend de la valeur devinée. Cette modification provoque des différences de synchronisation subtiles (car il est plus rapide de lire des données déjà en cache que des données qui ne le sont pas) qu'un attaquant peut mesurer. À partir de ces mesures, l’attaquant peut déduire la valeur estimée, c’est-à-dire qu’il peut déduire la valeur qui était en cache. Cette valeur peut être sensible et de valeur pour l'attaquant.

Mise en mémoire tampon…

MDS est globalement similaire, mais au lieu de fuir les valeurs du cache, elle fuit les valeurs de divers tampons au sein du processeur. Le processeur dispose d'un certain nombre de mémoires tampons spécialisées qu'il utilise pour déplacer les données en interne. Par exemple, les tampons de remplissage de ligne (LFB) sont utilisés pour charger des données dans le cache de niveau 1. Lorsque le processeur lit dans la mémoire principale, il vérifie d’abord le cache de données de niveau 1 pour voir s’il connaît déjà la valeur. Si ce n'est pas le cas, il envoie une requête à la mémoire principale pour récupérer la valeur. Cette valeur est placée dans un LFB avant d'être écrite dans le cache. De même, lors de l'écriture de valeurs dans la mémoire principale, elles sont placées temporairement dans des mémoires tampons. Grâce à un processus appelé transfert magasin à chargement, le tampon de stockage peut également être utilisé pour gérer les lectures en mémoire. Enfin, il existe des structures appelées ports de chargement, qui permettent de copier des données de la mémoire dans un registre.

Les trois mémoires tampons peuvent contenir des données périmées: une mémoire tampon de remplissage de ligne conservera les données d'une extraction précédente de la mémoire principale en attendant la fin de la nouvelle extraction; une mémoire tampon de stockage peut contenir un mélange de données provenant de différentes opérations de magasin (et peut donc transmettre un mélange de données nouvelles et anciennes à un tampon de chargement); De même, un port de chargement peut contenir d’anciennes données en attendant les nouvelles données de la mémoire.

Tout comme les attaques d'exécution spéculatives précédentes utilisaient une valeur obsolète dans le cache, les nouvelles attaques MDS effectuent des spéculations basées sur une valeur obsolète provenant de l'un de ces tampons. Les trois types de tampons peuvent être utilisés dans de telles attaques, le tampon exact dépendant du code d'attaque précis.

Le "sample" dans le nom est dû à la complexité de ce type d’attaque. L'attaquant a très peu de contrôle sur le contenu de ces tampons. La mémoire tampon de stockage, par exemple, peut contenir des données obsolètes issues de différentes opérations de stockage. Ainsi, si certaines d'entre elles peuvent intéresser un attaquant, elles peuvent être mélangées à d'autres données non pertinentes. Pour obtenir des données utilisables, de nombreuses tentatives doivent être faites pour divulguer des informations, elles doivent donc être échantillonnées à plusieurs reprises.

D'autre part, les attaques, comme les attaques Meltdown et Foreshadow, contournent les domaines de sécurité internes du processeur. Par exemple, un processus en mode utilisateur peut voir des données filtrées du noyau ou un processus non sécurisé peut voir des données filtrées de l'intérieur d'une enclave SGX sécurisée. Comme dans le cas d'attaques similaires précédentes, l'utilisation de l'hyperthreading, dans lequel un thread attaquant et un thread victime s'exécutent sur le même noyau physique, peut augmenter la facilité d'exploitation.

Applicabilité limitée

En règle générale, un attaquant a peu ou pas de contrôle sur ces tampons. Il n’existe pas de moyen simple d’obliger les mémoires tampons à contenir des informations sensibles. Par conséquent, rien ne garantit que les données divulguées seront utiles. Les chercheurs de VU Amsterdam ont montré une attaque de validation de principe selon laquelle un navigateur est capable de lire le fichier de mot de passe masqué d'un système Linux. Toutefois, pour que cette attaque fonctionne, le système victime doit exécuter la commande passwd à plusieurs reprises, garantissant ainsi une forte probabilité que le contenu du fichier se trouve dans l'un des tampons. Intel estime donc que les attaques présentent un risque faible ou moyen.

Cela ne signifie pas qu'ils sont devenus non fixés, cependant. Aujourd'hui, une mise à jour du microcode pour Sandy Bridge via les puces de première génération Coffee Lake et Whiskey Lake sera disponible. Conjointement avec un support logiciel approprié, les systèmes d'exploitation pourront vider de force les différents tampons pour s'assurer qu'ils ne contiennent pas de données sensibles. Les processeurs Coffee Lake de première génération et Whiskey Lake sont déjà immunisés contre les SMD utilisant les tampons de remplissage, ce problème ayant été corrigé dans le cadre de la correction des attaques de défaut terminal de niveau 1 et de fusion. De plus, les tout derniers processeurs Coffee Lake, Whiskey Lake et Cascade Lake incluent des correctifs matériels complets pour les trois variantes.

Pour les systèmes dépendant de correctifs du microcode, Intel affirme que les performances en termes de performance sont généralement inférieures à 3% mais que, sous certaines charges de travail défavorables, elles pourraient être légèrement supérieures. La société a également offert une déclaration officielle:

L'échantillonnage de données micro-architecturales (MDS) est déjà abordé au niveau matériel dans nombre de nos processeurs Intel® Core ™ de la 8ème et 9ème génération, ainsi que dans la famille de processeurs évolutifs Intel® Xeon® de 2ème génération. Pour les autres produits concernés, l'atténuation est disponible via les mises à jour du microcode, associées aux mises à jour correspondantes du système d'exploitation et du logiciel d'hyperviseur disponibles à partir d'aujourd'hui. Nous avons fourni plus d'informations sur notre site Web et continuons d'encourager tout le monde à maintenir leurs systèmes à jour, car c'est l'un des meilleurs moyens de rester protégé. Nous souhaitons remercier les chercheurs qui ont collaboré avec nous et nos partenaires de l'industrie pour leur contribution à la divulgation coordonnée de ces questions.

Comme pour Meltdown, ce problème semble être spécifique à Intel. L'utilisation de données obsolètes provenant des mémoires tampons pour effectuer une exécution spéculative se situe entre une amélioration des performances et un problème de facilité d'implémentation, et ni les puces d'AMD ni les conceptions d'ARM ne devraient souffrir du même problème. D'un point de vue architectural, les processeurs Intel agissent correctement - ils capturent et annulent les spéculations erronées, comme ils devraient le faire, comme si les mauvaises données n'avaient jamais été utilisées - mais, comme Meltdown et Specter l'ont clairement indiqué, cela ne suffit pas à garantir le processeur fonctionne en toute sécurité.

Image d'inscription de Marina Minkin