Un groupe de chercheurs de l'Université libre d'Amsterdam a identifié un nouveau moyen d'attaque « Native BHI » (CVE-2024-2201), permettant sur les systèmes avec des processeurs Intel de déterminer le contenu de la mémoire du noyau Linux lors de l'exécution d'un exploit dans l'espace utilisateur. En cas d'application de l'attaque sur des systèmes de virtualisation, un attaquant depuis un système invité peut déterminer le contenu de la mémoire de l'environnement hôte ou d'autres systèmes invités.
La méthode Native BHI propose une technique différente pour exploiter la vulnérabilité BHI (Branch History Injection, CVE-2022-0001), qui contourne les protections précédemment mises en œuvre. La méthode d'attaque BHI proposée en 2022 impliquait l'exploitation d'une vulnérabilité à un seul niveau de privilège, où l'exploit était basé sur l'exécution d'un programme eBPF chargé par l'utilisateur dans le noyau. Pour bloquer la vulnérabilité, il suffisait de restreindre l'accès à l'exécution de code eBPF pour les utilisateurs ordinaires.
La nouvelle méthode Native BHI ne nécessite pas d'accès à eBPF et permet une attaque par un utilisateur non privilégié depuis l'espace utilisateur. La méthode repose sur l'exécution de gadgets existants dans le code du noyau — des séquences d'instructions conduisant à une exécution spéculative. Un outil spécifique, InSpectre Gadget, a été développé pour rechercher des gadgets dans le noyau, et lors de l'analyse du noyau 6.6-rc4, il a identifié 1511 gadgets Spectre et 2105 gadgets auxiliaires de répartition.

Sur la base des gadgets trouvés, les chercheurs ont préparé un exploit permettant d'extraire des tampons du noyau une chaîne contenant le hachage du mot de passe de l'utilisateur root, chargé depuis le fichier /etc/shadow. La vitesse d'extraction des données de la mémoire du noyau est d'environ 3,5 Ko par seconde.

La méthode BHI représente une variante avancée de l'attaque Spectre-v2, dans laquelle, pour contourner la protection ajoutée (Intel eIBRS et Arm CSV2) et organiser la fuite de données, des substitutions de valeurs dans le buffer de l'historique des transitions (Branch History Buffer) sont utilisées, ce dernier étant appliqué dans les CPU pour améliorer la précision des prédictions de branches en tenant compte de l'historique des transitions passées. Au cours de l'attaque, par des manipulations de l'historique des transitions, des conditions de prédiction incorrecte de transition et d'exécution spéculative des instructions nécessaires sont créées, dont les résultats sont stockés dans le cache.
Les différences avec l'attaque Spectre-v2 se résument à l'utilisation du buffer d'historique des transitions (Branch History Buffer) plutôt que du buffer de prédiction des branches (Branch Target Buffer). Pour extraire des données de la mémoire, l'attaquant doit créer des conditions dans lesquelles, lors de l'exécution d'une opération spéculative, l'adresse sera prise dans la zone à déterminer. Après avoir effectué un saut indirect spéculatif, l'adresse lue de la mémoire reste dans le cache, après quoi l'extraction peut se faire via une méthode d'analyse des variations du temps d'accès aux données mises en cache et non mises en cache.
L'attaque Native BHI n'est pas protégée par l'utilisation des instructions Intel IBT (Indirect Branch Tracking) et par le mécanisme hybride de protection du flux d'exécution des commandes FineIBT, implémenté dans le noyau Linux, qui combine l'utilisation des instructions matérielles IBT et de la protection logicielle kCFI (kernel Control Flow Integrity) pour bloquer les violations de l'ordre normal d'exécution (control flow). FineIBT autorise l'exécution par transition indirecte uniquement en cas de transition vers une instruction ENDBR, qui est placée au tout début de la fonction. De plus, une vérification des hachages est effectuée immédiatement après, garantissant l'invariabilité des pointeurs.
Pour se protéger contre la nouvelle variante d'attaque, un changement a été ajouté au noyau Linux mettant en œuvre un mode de protection supplémentaire, utilisant les moyens de protection matériels (BHI_DIS_S) proposés par Intel ou une protection logicielle alternative, réalisée pour protéger l'hyperviseur. KVM. Les développeurs de l'hyperviseur Xen ont également publié un correctif, basé sur l'utilisation du mode BHI_DIS_S, qui limite les prédictions basées sur l'historique des transitions. Le support de BHI_DIS_S est disponible dans les processeurs à partir d'Intel Alder Lake, ainsi que dans les processeurs serveurs à partir d'Intel Sapphire Rapids. Un mode de protection logicielle est également disponible, basé sur l'utilisation de séquences pour effacer le tampon d'historique des transitions, mais cela entraîne une diminution de performance plus significative.
Source : opennet.ru
