Un groupe de chercheurs de l'École polytechnique fédérale de Zurich a identifié une nouvelle variante d'attaque sur le mécanisme d'exécution spéculative des sauts indirects dans le CPU, permettant d'extraire des informations de la mémoire noyau ou d'organiser une attaque sur le système hôte depuis des machines virtuelles. Les vulnérabilités ont reçu le nom de code Retbleed (CVE-2022-29900, CVE-2022-29901) et sont proches, par leur nature, des attaques Spectre-v2. La différence réside dans l'organisation de l'exécution spéculative de code arbitraire lors du traitement de l'instruction « ret » (return), qui extrait l'adresse de saut de la pile, au lieu d'un saut indirect utilisant l'instruction « jmp » pour charger l'adresse à partir de la mémoire ou d'un registre du CPU.
Un attaquant peut créer des conditions conduisant à une prédiction erronée du saut et organiser un saut spéculatif ciblé vers un bloc de code non prévu par la logique d'exécution du programme. En fin de compte, le processeur déterminera que la prédiction de branchement était incorrecte et annulera l'opération à son état d'origine, mais les données traitées lors de l'exécution spéculative devront se retrouver dans le cache et les buffers microarchitecturaux. Si le bloc exécuté par erreur accède à la mémoire, son exécution spéculative entraînera des données s'accumulant dans le cache commun et des données lues à partir de la mémoire.
Pour identifier les données restantes dans le cache après l'exécution spéculative des opérations, un attaquant peut utiliser des méthodes de détection des données résiduelles via des canaux auxiliaires, par exemple, en analysant les changements de temps d'accès aux données mises en cache et non mises en cache. Pour extraire des informations ciblées depuis des zones à un autre niveau de privilège (par exemple, depuis la mémoire noyau), des « gadgets » - séquences d'instructions présentes dans le noyau, adaptées à la lecture spéculative de données de la mémoire en fonction des conditions externes sur lesquelles l'attaquant peut agir - sont utilisés.
Pour se protéger contre les attaques classiques de type Spectre, qui utilisent des instructions de saut conditionnel et indirect, la plupart des systèmes d'exploitation emploient une technique appelée « retpoline », qui consiste à remplacer les opérations de saut indirect par l'instruction « ret ». Pour celle-ci, les processeurs utilisent un bloc de prédiction d'état de la pile distinct qui ne fait pas appel au bloc de prédiction de sauts. Lors de l'introduction de retpoline en 2018, il était estimé que les manipulations d'adresses semblables à Spectre n'étaient pas pratiquement exploitables pour le saut spéculatif à l'aide de l'instruction « ret ».
Les chercheurs qui ont développé la méthode d'attaque Retbleed ont démontré la possibilité de créer des conditions microarchitecturales pour initier un saut spéculatif à l'aide de l'instruction « ret » et ont publié des outils prêts à l'emploi pour identifier dans le noyau Linux les séquences d'instructions vulnérables (gadgets) exploitables, permettant la manifestation de ces conditions.
Au cours de l'étude, un exploit fonctionnel a été préparé, permettant, sur les systèmes avec CPU Intel, d'extraire des données arbitraires de la mémoire du noyau à partir d'un processus non privilégié dans l'espace utilisateur, à la vitesse de 219 octets par seconde avec une précision de 98 %. Sur les processeurs AMD, l'efficacité de l'exploit est bien plus élevée — la vitesse de fuite atteint 3,9 Ko par seconde. Comme exemple pratique, il a été montré comment, à l'aide de l'exploit proposé, déterminer le contenu du fichier /etc/shadow. Sur les systèmes avec CPU Intel, l'attaque pour déterminer le hachage du mot de passe de l'utilisateur root a été réalisée en 28 minutes, tandis que sur les systèmes avec CPU AMD, cela a pris 6 minutes.

La possibilité de réaliser l'attaque a été confirmée pour les processeurs Intel de 6e à 8e génération, fabriqués jusqu'au 3ème trimestre 2019 (y compris Skylake), et pour les processeurs AMD basés sur les microarchitectures Zen 1, Zen 1+ et Zen 2, produits jusqu'au 2ème trimestre 2021. Dans les modèles de processeurs plus récents, tels que AMD Zen3 et Intel Alder Lake, ainsi que dans les processeurs ARM, le problème est bloqué par des mécanismes de protection existants. Par exemple, l'utilisation d'instructions IBRS (Indirect Branch Restricted Speculation) aide à se protéger contre l'attaque.
Un ensemble de modifications a été préparé pour le noyau Linux et l'hyperviseur Xen, visant à bloquer le problème sur les anciens CPU par des moyens logiciels. Le patch proposé pour le noyau Linux modifie 68 fichiers, ajoute 1783 lignes et supprime 387 lignes. Malheureusement, cette protection entraîne des coûts de surcharge significatifs — dans les tests effectués sur les processeurs AMD et Intel, la diminution des performances est estimée entre 14 % et 39 %. Il est donc préférable d'appliquer une protection basée sur les instructions IBRS, disponibles dans les nouvelles générations de CPU Intel et prises en charge depuis le noyau Linux 4.19.
Sur les processeurs Intel, l'insertion d'adresses pour les transferts indirects spéculatifs est réalisée grâce à une caractéristique qui se manifeste lors d'un débordement via la limite inférieure (underflow) dans le tampon de prédiction de contenu de pile (Return Stack Buffer). Dans de telles conditions, pour l'instruction «ret», une logique de sélection d'adresse est appliquée, similaire à celle utilisée pour les transferts indirects ordinaires. Plus de mille endroits ont été trouvés dans le noyau Linux pouvant initier de telles situations de débordement inverse accessibles par des appels système.
Sur les processeurs AMD, l'exécution spéculative de l'instruction «ret» se fait sans lien avec le tampon spécifique de pile (Return Address Stack) et le bloc de prédiction de transitions considère l'instruction «ret» non pas comme un retour de contrôle, mais comme un transfert indirect, utilisant donc pour la prédiction les données des transferts indirects. Dans de telles conditions, pratiquement toute opération «ret», accessible via un appel système, peut être exploitée.
De plus, une autre vulnérabilité a également été identifiée dans les CPU AMD (CVE-2022-23825, Branch Type Confusion), liée à la réalisation de transferts fictifs — des conditions de prédiction de transfert peuvent survenir même sans les instructions de branchement requises, ce qui permet d'influencer le tampon de prédiction de transferts sans instruction «ret». Cette caractéristique complique considérablement la mise en œuvre de protections et nécessite un nettoyage plus actif du tampon de prédiction de transferts. L'ajout d'une protection complète dans le noyau devrait entraîner une augmentation des coûts de 209 %.
Source : opennet.ru
