Une nouvelle faille de sécurité nommée BranchScope affecte les processeurs modernes
en exploitant l’exécution spéculative de ces derniers

Des chercheurs de William and Mary, de Carnegie Mellon, de l'Université de Californie Riverside et de l'Université de Binghamton ont décrit une attaque de sécurité qui utilise les fonctionnalités d'exécution spéculative des processeurs modernes pour filtrer les informations sensibles. Cela vient mettre à nu une fois de plus les limites de sécurité pour protéger les données importantes des utilisateurs. Cela rappelle probablement un épisode non lointain. En effet, les attaques Specter, qui ont défrayé la chronique plus tôt cette année, tirent elles aussi parti des caractéristiques d'exécution spéculative des processeurs modernes pour divulguer des informations sensibles. La nouvelle attaque, nommée BranchScope par les chercheurs, partage une certaine similitude avec la variante 2 de l'attaque Specter, puisque BranchScope et Specter 2 tirent parti du comportement de prédiction de branche du processeur.

Avec l'exécution spéculative, le processeur se branche en avance sur l'emplacement du programme, et il essaie d'exécuter des instructions avant de pouvoir être certain que ces instructions seront réellement exécutées. Par exemple, si un programme teste si deux nombres sont égaux et fait une chose s'ils le sont et une autre chose s'ils ne le sont pas, le processeur devinera le résultat et exécutera de manière spéculative l'action résultante. S'il s'avère plus tard que le processeur a mal deviné, les résultats spéculatifs sont jetés et, au moins dans un sens abstrait, c'est comme si la mauvaise supposition ne s'était jamais produite. Le processeur reprend là où il s'était arrêté, effectuant l'action qu'il aurait dû prendre à la place.

Les attaques Spectre dans son ensemble se produisent parce que le processeur ne remet pas tout à fait les choses comme il se doit. Alors que le processeur retourne correctement à son exécution spéculative, si ce n'est pas le cas, les programmes cessent tout simplement de fonctionner correctement, ce qui n'est pas tout à fait le cas. Ceci est particulièrement visible quand il s'agit du cache du processeur : l'exécution spéculative peut amener le processeur à charger des données dans le cache (ou, en variante, expulser les données du cache), et ces changements de cache persistent même si une spéculation incorrecte est faite. Un logiciel soigneusement écrit peut détecter ces changements de cache et les utiliser pour déduire des informations secrètes.

Nom : Screen Shot 2018-03-28 at 21.00.16.png
Affichages : 2476
Taille : 377,6 Ko

La prédiction de branche du processeur est l'une de ses pièces maîtresses de la machinerie d'exécution spéculative. Alors que les prédictions de branche dans les processeurs les plus récents sont complexes, ils fonctionnent globalement de la même manière. Le processeur suit l'adresse des instructions de branchement, si la branche a été prise ou non, et si la branche est prise, l'adresse de l'instruction suivante à exécuter, c'est-à-dire la cible de la branche. La prédiction de branche fournit deux prédictions connexes : elle permet de déterminer la cible en fonction que la branche soit prise ou non. BranchScope et Spectre 2 tirent parti des différentes parties de la prédiction de branche. Le spectre 2 reposait sur une partie appelée Buffer Target Buffer (BTB) – la structure de données dans le processeur qui enregistre la cible de branche. BranchScope, au contraire, fuit l'information en utilisant la direction de la prédiction – qu'elle soit susceptible d'être prise ou non – qui est stockée dans la table d'historique des patterns (PHT).

Le PHT conserve une sorte de score courant des branches récemment prises pour se rappeler si ces branches ont été prises ou non. Typiquement, c'est un compteur de deux bits avec quatre états : fortement pris, faiblement pris, faiblement pris, et fortement non pris. Chaque fois qu'une branche est prise, la valeur du compteur est déplacée vers "fortement prise" ; chaque fois qu'il n'est pas pris, il est déplacé vers "fortement non pris". Cette conception signifie qu'un défaut imprévisible occasionnel ne changera pas le résultat de la prédiction : une branche qui est presque toujours prise prédira quand même prise, même si parfois elle n'est pas réellement prise. Changer la prédiction nécessite deux malversations dos à dos. Cette conception est prouvée pour fournir de meilleurs résultats qu'un compteur d'un bit qui prédit simplement une branche en fonction de ce qui s'est passé la dernière fois qu'il a été pris.

Pour le Spectre 2, un attaquant amorce le BTB, exécutant soigneusement les instructions de branchement de sorte que le BTB ait un contenu prévisible avec une instruction cible qui, si elle est exécutée de manière spéculative, perturbe la mémoire cache du processeur d'une manière détectable. Le programme victime s'exécute alors et fait une branche. L'attaquant vérifie ensuite si le cache a été dérangé ; la mesure de cette perturbation laisse échapper des informations. Dans la nouvelle attaque, un attaquant amorce le PHT et exécute des instructions de branchement de sorte que le PHT suppose toujours qu'une branche particulière est prise ou non. Le code de la victime s'exécute alors et crée une branche, ce qui perturbe potentiellement le PHT. L'attaquant exécute alors plus d'instructions de branchement pour détecter cette perturbation du PHT ; l'attaquant sait que certaines branches devraient être prédites dans une direction particulière et teste si le code de la victime a changé cette prédiction.

Les chercheurs ont regardé seulement les processeurs Intel, utilisant les attaques pour fuir les informations protégées en utilisant SGX (Software Guard Extensions) d'Intel, une fonctionnalité trouvée sur certaines puces pour sculpter de petites sections de code crypté et des données telles que même le système d'exploitation (ou logiciel de virtualisation) ) ne peut pas y accéder. Ils ont également décrit les façons dont l'attaque pourrait être utilisée contre la randomisation de la disposition d'espace d'adressage et pour déduire des données dans des bibliothèques de chiffrement et d'images. Specter 2 a provoqué des changements au niveau du système d'exploitation et du matériel, avec plus de corrections matérielles planifiées.

Les chercheurs suggèrent qu'une combinaison similaire de solutions serait nécessaire pour BranchScope ; certains logiciels peuvent être modifiés pour éliminer les branches, et le matériel peut être modifié pour partitionner les structures de données d'exécution spéculatives sur le processeur de sorte qu'un processus ne puisse en attaquer un autre. Comme avec Spectre 2, il n'est pas clair à quel point le logiciel est vraiment vulnérable aux attaques BranchScope. Dans les deux cas, les attaquants doivent avoir la possibilité d'exécuter du code sur un système victime, de sorte que ces attaques ne seront jamais utilisées pour l'entrée initiale dans un système. Ce qu'ils font, cependant, est de démontrer que les limites d'isolation qui ont longtemps été supposées exister sont rendues quelque peu perméables par le matériel d'exécution spéculatif qui est essentiel pour les processeurs haute performance. De plus, BranchScope montre que Spectre n'est pas la seule voie par laquelle cette exécution spéculative peut être exploitée.

Fondamentalement, le processeur contient beaucoup d'états internes (y compris les registres, les caches, les prédictions de branche, les tampons de stockage, etc.) que l'exécution spéculative peut modifier. L'état architectural, les parties directement exposées et manipulées par les instructions documentées et publiées du processeur, est préservé correctement par le matériel spéculatif. Les attaques comme Spectre et BranchScope existent parce que l'état non architectural – les parties qui représentent les détails d'implémentation du processeur qui peuvent changer de famille en famille et qui ne sont pas directement accessibles aux programmes – n'est pas entièrement préservé. L'exécution spéculative (et l'état non architectural dont elle dépend) est conçue pour se produire de manière invisible, sans indication au programme en cours que cela se produit.

Les attaques comme Spectre 2 et BranchScope sont le résultat. Il faudra sans doute des années avant que les chercheurs déterminent toutes les différentes manières dont le matériel d'exécution spéculatif peut être utilisé pour fuir les informations de cette façon, et il faudra encore attendre avant que des défenses robustes et universelles soient disponibles pour arrêter les attaques. Dans une déclaration, Intel annonce qu’ils ont travaillé avec ces chercheurs et nous avons déterminé que la méthode qu'ils décrivent est similaire aux exploits de canaux latéraux déjà connus. Nous prévoyons que les atténuations logicielles existantes pour les exploits de canaux latéraux déjà connus, tels que l'utilisation de la cryptographie résistante aux canaux latéraux, seront également efficaces contre la méthode décrite dans cet article. Nous croyons qu'un partenariat étroit avec le milieu de la recherche est l'un des meilleurs moyens de protéger les clients et leurs données, et nous apprécions le travail de ces chercheurs.

Source : UCR

Et vous ?

Que pensez-vous de cette nouvelle faille de sécurité des processeurs ?

Voir aussi

Meltdown et Spectre : Intel publie un nouveau microcode pour la plateforme SkyLake. Des correctifs pour Broadwell et Haswell sont déjà en tests

Meltdown et Spectre : des prototypes de logiciels malveillants en circulation plus d’une centaine dans le compteur des firmes de sécurité

Vulnérabilités Meltdown et Spectre : Intel devrait livrer ses premiers processeurs dotés de protections intégrées plus tard cette année