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.
Для защиты от классических атак класса Spectre, в которых используются инструкции условного и косвенного перехода, в большинстве операционных систем применяется техника «retpoline», основанная на замене операций косвенного перехода на инструкцию «ret», для которой в процессорах применяется отдельный блок предсказания состояния стека, не использующий блок предсказания переходов. При внедрении retpoline в 2018 году считалось, что похожие на Spectre манипуляции с адресами неприменимы на практике для спекулятивного перехода при помощи инструкции «ret».
Исследователи, разработавшие метод атаки Retbleed, продемонстрировали возможность создания микроархитектурных условий для инициирования спекулятивного перехода при помощи инструкции «ret» и опубликовали готовый инструментарий для выявления в ядре Linux подходящих для эксплуатации уязвимости последовательностей инструкций (гаджетов), в которых проявляются подобные условия.
В ходе исследования подготовлен рабочий эксплоит, позволяющий на системах c CPU Intel из непривилегированного процесса в пространстве пользователя извлекать произвольные данные из памяти ядра со скоростью 219 байт в секунду и точностью 98%. На процессорах AMD эффективность работы эксплоита гораздо выше — скорость утечки составляет 3.9 КБ в секунду. В качестве практического примера показано, как при помощи предложенного эксплоита определить содержимое файла /etc/shadow. На системах с CPU Intel атака для определения хэша пароля пользователя root была проведена за 28 минут, а на системах с CPU AMD — за 6 минут.

Возможность совершения атаки подтверждена для 6-8 поколений процессоров Intel, которые выпускались до 3 квартала 2019 года (включая Skylake), и процессоров AMD на базе микроархитектур Zen 1, Zen 1+ и Zen 2, которые выпускались до второго квартала 2021 года. В более новых моделях процессоров, таких как AMD Zen3 и Intel Alder Lake, а также в процессорах ARM, проблема блокируется имеющимися механизмами защиты. Например, применение инструкций IBRS (Indirect Branch Restricted Speculation) помогает защититься от атаки.
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
