Les chercheurs de Bitdefender une nouvelle vulnérabilité () dans le mécanisme d'exécution spéculative des instructions des CPU modernes, qui a reçu le nom de SWAPGS, correspondant au nom de l'instruction processeur à l'origine du problème. La vulnérabilité permet à un attaquant non privilégié de déterminer le contenu des zones mémoire du noyau ou des machines virtuelles en cours d'exécution. Le problème se trouve dans les processeurs Intel (x86_64) et partiellement dans les processeurs AMD, pour lesquels le vecteur d'attaque principal n'est pas exploité. Les méthodes de contournement précédemment mises en œuvre contre les vulnérabilités Spectre et Meltdown ne protègent pas contre l'attaque SWAPGS utilisant des processeurs Intel, mais des correctifs ont déjà été proposés pour Linux, ChromeOS, Android et Windows.
La vulnérabilité appartient à la classe Spectre v1 et repose sur l'idée de récupérer des données à partir du cache processeur, qui restent après l'exécution spéculative des instructions. Les blocs de prédiction de branchement des CPU modernes utilisent l'exécution anticipée de certaines instructions, qui sont susceptibles d'être exécutées, mais sans attendre le calcul de tous les facteurs déterminant leur exécution (par exemple, lorsque les conditions de branchement ou les paramètres d'accès ne sont pas encore calculés). Si la prédiction s'avère incorrecte, le processeur rejette le résultat de l'exécution spéculative, mais les données traitées au cours de cette exécution s'accumulent dans le cache processeur et peuvent être récupérées à l'aide de méthodes d'analyse du contenu du cache par des canaux secondaires, analysant les variations de temps d'accès aux données mises en cache et non mises en cache.
La particularité de cette nouvelle attaque réside dans l'utilisation de la fuite qui se produit lors de l'exécution spéculative de l'instruction SWAPGS, qui est utilisée dans les systèmes d'exploitation pour remplacer la valeur du registre GS lors du passage du contrôle de l'espace utilisateur au noyau OS (la valeur GS utilisée dans l'espace utilisateur est remplacée par la valeur utilisée lors des opérations dans le noyau). Dans le noyau Linux, GS stocke un pointeur per_cpu, utilisé pour accéder aux données du noyau, tandis que dans l'espace utilisateur, il y a des pointeurs vers le TLS (Thread Local Storage).
Pour éviter un double appel de l'instruction SWAPGS lors d'un nouvel accès au noyau depuis l'espace noyau ou lorsque le code exécuté ne nécessite pas le remplacement du registre GS, une vérification et un saut conditionnel sont effectués avant l'instruction. Le mécanisme d'exécution spéculative passe à l'exécution du code contenant l'instruction SWAPGS sans attendre le résultat de la vérification, et si la branche choisie ne se confirme pas, le résultat est abandonné. Ainsi, il peut se produire une situation où la branche choisie de manière spéculative ne prévoit pas l'exécution de SWAPGS, mais au cours de l'exécution spéculative, la valeur du registre GS sera modifiée par l'instruction SWAPGS et utilisée dans des opérations dépendantes de la mémoire, qui sont stockées dans le cache du CPU.
Les chercheurs ont proposé deux scénarios d'attaque pour lesquels des prototypes d'exploits ont été préparés. Le premier scénario repose sur une situation où l'instruction SWAPGS n'est pas exécutée de manière spéculative, bien qu'elle soit utilisée lors de l'exécution réelle, et le second — au contraire, lorsque l'instruction SWAPGS est exécutée de manière spéculative, bien qu'elle ne devrait pas l'être réellement. Pour chaque scénario, deux variantes d'exploitation sont prévues : l'attaquant peut définir une valeur à une adresse donnée dans l'espace noyau et l'attaquant peut rechercher une valeur spécifique à des adresses aléatoires dans le noyau. La réalisation de l'attaque prend beaucoup de temps et l'exécution de l'exploit pendant plusieurs heures peut être nécessaire pour organiser une fuite.

Dans le noyau Linux, le problème réside dans le changement de la logique d'appel de l'instruction SWAPGS (blocage de l'exécution spéculative), semblable à la correction d'autres vulnérabilités de type Spectre v1. Il est supposé que la protection ajoutée aura un impact minimal sur les performances des charges de travail typiques. Un délai intervient lors de la commutation entre l'espace utilisateur et le noyau, ce qui peut entraîner une réduction des performances, par exemple lors de l'exécution intensive d'appels système depuis une application ou la génération fréquente d'interruptions NMI.
La correction nécessite l'installation d'une mise à jour du noyau tant sur le système principal que dans les environnements invités, suivie d'un redémarrage du système. Pour désactiver la protection sous Linux, l'option « nospectre_v1 » peut être utilisée, ce qui désactive également les mesures visant à bloquer la vulnérabilité SWAPGS. La correction est disponible sous forme de pour le noyau Linux, qui est déjà intégré dans les versions , , 4.14.137, 4.9.188 et 4.4.188. Les mises à jour pour les distributions Linux n'ont pas encore été publiées (, , , , , ). Sous Windows, le problème a été résolu discrètement dans . La société Google a corrigé le noyau 4.19, fourni dans ChromeOS et .
Selon les chercheurs de Bitdefender, Intel a été informé du problème dès août de l'année dernière. Le problème a été résolu par un correctif logiciel, pour lequel des développeurs de Microsoft, Google et du noyau Linux ont été impliqués dans l'élaboration coordonnée de la solution. Les anciens processeurs Intel, jusqu'à Ivy Bridge, sont beaucoup plus difficiles à attaquer en raison de l'absence de support pour l'instruction WRGSBASE, utilisée dans l'exploit. Les systèmes ARM, POWER, SPARC, MIPS et RISC-V ne sont pas affectés par le problème car ils ne prennent pas en charge l'instruction SWAPGS.
Le problème menace principalement les utilisateurs de processeurs Intel —
sur les systèmes AMD, seul le deuxième scénario d'attaque a pu être reproduit, se limitant au traitement spéculatif de la valeur de base du registre GS, ce qui peut être utilisé pour rechercher certaines valeurs dans des zones mémoires aléatoires. Pour bloquer ce type d'attaque, il existe des méthodes de protection contre les vulnérabilités Spectre v1.
Source : opennet.ru
