Retbleed és un nou atac al mecanisme d'execució especulativa de les CPU Intel i AMD

Un grup d'investigadors de l'ETH Zurich ha identificat un nou atac al mecanisme d'execució especulativa de transicions indirectes a la CPU, que permet extreure informació de la memòria del nucli o organitzar un atac al sistema host des de màquines virtuals. Les vulnerabilitats tenen el nom en codi Retbleed (CVE-2022-29900, CVE-2022-29901) i són de naturalesa propera als atacs Spectre-v2. La diferència es redueix a l'organització de l'execució especulativa de codi arbitrari quan es processa la instrucció "ret" (retorn), que obté l'adreça per saltar de la pila, en lloc d'un salt indirecte utilitzant la instrucció "jmp", carregant l'adreça des de memòria o un registre de la CPU.

Un atacant pot crear condicions per a una predicció de transició incorrecta i organitzar una transició especulativa i dirigida a un bloc de codi que no està previst per la lògica d'execució del programa. En última instància, el processador determinarà que la predicció de la branca no estava justificada i tornarà l'operació al seu estat original, però les dades processades durant l'execució especulativa acabaran a la memòria cau i als buffers microarquitectònics. Si un bloc executat de manera errònia accedeix a la memòria, la seva execució especulativa provocarà que les dades llegides de la memòria es dipositen a la memòria cau compartida.

Per determinar les dades que queden a la memòria cau després d'operacions especulatives, un atacant pot utilitzar tècniques de canal lateral per determinar les dades residuals, com ara l'anàlisi dels canvis en els temps d'accés a les dades emmagatzemades i no a la memòria cau. Per extreure informació intencionadament d'àrees a un altre nivell de privilegis (per exemple, de la memòria del nucli), s'utilitzen "gadgets": seqüències d'ordres presents al nucli que són adequades per llegir de manera especulativa dades de la memòria en funció de les condicions externes que poden ser influenciades per l'atacant.

Per protegir-se dels atacs clàssics de la classe Spectre que utilitzen instruccions de salt condicionals i indirectes, la majoria dels sistemes operatius utilitzen la tècnica "retpoline", que es basa en substituir les operacions de salt indirecte per la instrucció "ret", per a la qual els processadors utilitzen una unitat de predicció d'estat de pila independent. No utilitzant un bloc de predicció de branques. Quan es va introduir retpoline el 2018, es creia que les manipulacions d'adreces semblants a Spectre no eren pràctiques per a la ramificació especulativa mitjançant la instrucció "ret".

Els investigadors que van desenvolupar el mètode d'atac Retbleed van demostrar la possibilitat de crear condicions microarquitectòniques per iniciar una transició especulativa mitjançant la instrucció "ret" i van publicar eines preparades per identificar seqüències d'instruccions (gadgets) adequades per explotar la vulnerabilitat del nucli Linux. en què es manifesten aquestes condicions.

Durant la investigació, es va preparar un exploit de treball que permet, en sistemes amb CPU Intel, extreure dades arbitràries de la memòria del nucli d'un procés sense privilegis a l'espai d'usuari a una velocitat de 219 bytes per segon i una precisió del 98%. Als processadors AMD, l'eficiència de l'explotació és molt més alta: la taxa de filtració és de 3.9 KB per segon. Com a exemple pràctic, mostrem com utilitzar l'explotació proposada per determinar el contingut del fitxer /etc/shadow. En sistemes amb CPU Intel, l'atac per determinar el hash de la contrasenya de l'usuari root es va dur a terme en 28 minuts, i en sistemes amb CPU AMD, en 6 minuts.

L'atac s'ha confirmat per a les generacions 6-8 de processadors Intel que es van llançar abans del tercer trimestre de 3 (inclòs Skylake) i processadors AMD basats en microarquitectures Zen 2019, Zen 1+ i Zen 1 que es van llançar abans del segon trimestre de 2. En els models de processadors més nous com AMD Zen2021 i Intel Alder Lake, així com en els processadors ARM, el problema està bloquejat pels mecanismes de protecció existents. Per exemple, utilitzar instruccions IBRS (Indirect Branch Restricted Speculation) ajuda a protegir-se dels atacs.

S'ha preparat un conjunt de canvis per al nucli de Linux i l'hipervisor Xen, que bloquejaran el problema al programari de les CPU més antigues. El pedaç proposat per al nucli de Linux canvia 68 fitxers, afegeix 1783 línies i suprimeix 387 línies. Malauradament, la protecció comporta importants costos generals: en els textos realitzats sobre processadors AMD i Intel, s'estima que la disminució del rendiment va del 14% al 39%. És més preferible utilitzar la protecció basada en instruccions IBRS, disponible a les noves generacions de CPU Intel i compatible a partir del nucli Linux 4.19.

Als processadors Intel, la substitució d'adreces per a un salt indirecte especulatiu es duu a terme gràcies a una característica que apareix quan es produeix un desbordament a través del límit inferior (subflow) al buffer de la pila de retorn. Quan es produeixen aquestes condicions, la instrucció "ret" comença a aplicar una lògica de selecció d'adreces similar a la que s'utilitza per als salts indirectes normals. S'han trobat més d'un miler de llocs al nucli de Linux que creen les condicions per iniciar aquest flux de retorn i són accessibles mitjançant trucades al sistema.

En els processadors AMD, l'execució especulativa de la instrucció "ret" es porta a terme sense fer referència a un buffer específic de la pila (Pila d'adreces de retorn) i la unitat de predicció de la branca considera la instrucció "ret" no com un retorn de control, sinó com una branca indirecta. , i, en conseqüència, utilitza les dades per predir transicions indirectes. En aquestes condicions, es pot explotar pràcticament qualsevol operació "ret" accessible mitjançant una trucada al sistema.

A més, també s'ha identificat un altre problema a les CPU AMD (CVE-2022-23825, Branch Type Confusion) relacionat amb la implementació de branques fictícias: les condicions per a la predicció de branques es poden produir fins i tot sense les instruccions de branca necessàries, la qual cosa permet influir en el buffer de predicció de branques. sense la instrucció "ret". Aquesta característica complica significativament la implementació de la protecció i requereix una neteja més activa del buffer de predicció de branques. S'espera que afegir una protecció completa al nucli augmenti la sobrecàrrega en un 209%.

Font: opennet.ru

Afegeix comentari