Retbleed é un novo ataque ao mecanismo de execución especulativa das CPU Intel e AMD

Un grupo de investigadores da ETH Zurich identificou un novo ataque ao mecanismo de execución especulativa de transicións indirectas na CPU, que permite extraer información da memoria do núcleo ou organizar un ataque ao sistema host desde máquinas virtuais. As vulnerabilidades reciben o nome en clave Retbleed (CVE-2022-29900, CVE-2022-29901) e son de natureza próxima aos ataques Spectre-v2. A diferenza radica na organización da execución especulativa de código arbitrario ao procesar a instrución "ret" (retorno), que obtén o enderezo para saltar da pila, en lugar dun salto indirecto usando a instrución "jmp", cargando o enderezo desde memoria ou un rexistro da CPU.

Un atacante pode crear condicións para unha predición de transición incorrecta e organizar unha transición específica e especulativa a un bloque de código que non está previsto pola lóxica de execución do programa. En definitiva, o procesador determinará que a predición da rama non estaba xustificada e retrotraerá a operación ao seu estado orixinal, pero os datos procesados ​​durante a execución especulativa acabarán na memoria caché e no búfer microarquitectónico. Se un bloque executado erroneamente accede á memoria, entón a súa execución especulativa levará a que os datos lidos da memoria se depositen na caché compartida.

Para determinar os datos que quedan na caché despois de operacións especulativas, un atacante pode utilizar técnicas de canle lateral para determinar os datos residuais, como analizar os cambios nos tempos de acceso aos datos cachés e non. Para extraer información a propósito de áreas doutro nivel de privilexios (por exemplo, da memoria do núcleo), utilízanse "gadgets": secuencias de comandos presentes no núcleo que son axeitadas para ler de forma especulativa datos da memoria dependendo das condicións externas que poden ser influenciadas por o atacante.

Para protexerse contra ataques clásicos da clase Spectre que usan instrucións de salto condicionais e indirectos, a maioría dos sistemas operativos usan a técnica "retpoline", que se basea en substituír as operacións de salto indirecto pola instrución "ret", para a que os procesadores usan unha unidade de predición de estado de pila separada. Non se utiliza un bloque de predición de ramas. Cando se introduciu retpoline en 2018, críase que as manipulacións de enderezos tipo Specter non eran prácticas para a ramificación especulativa usando a instrución "ret".

Os investigadores que desenvolveron o método de ataque Retbleed demostraron a posibilidade de crear condicións microarquitectónicas para iniciar unha transición especulativa usando a instrución "ret" e publicaron ferramentas preparadas para identificar secuencias de instrucións (gadgets) adecuadas para explotar a vulnerabilidade do núcleo de Linux. no que se manifestan tales condicións.

Durante a investigación, preparouse un exploit de traballo que permite, en sistemas con CPU Intel, extraer datos arbitrarios da memoria do núcleo dun proceso sen privilexios no espazo do usuario a unha velocidade de 219 bytes por segundo e un 98 % de precisión. Nos procesadores AMD, a eficiencia do exploit é moito maior: a taxa de fuga é de 3.9 KB por segundo. Como exemplo práctico, mostramos como usar o exploit proposto para determinar o contido do ficheiro /etc/shadow. Nos sistemas con CPU Intel, o ataque para determinar o hash do contrasinal do usuario root levouse a cabo en 28 minutos, e nos sistemas con CPU AMD - en 6 minutos.

O ataque foi confirmado para as xeracións 6-8 de procesadores Intel que se lanzaron antes do 3º trimestre de 2019 (incluíndo Skylake) e os procesadores AMD baseados en microarquitecturas Zen 1, Zen 1+ e Zen 2 que se lanzaron antes do segundo trimestre de 2021. Nos modelos de procesadores máis novos como AMD Zen3 e Intel Alder Lake, así como nos procesadores ARM, o problema está bloqueado polos mecanismos de protección existentes. Por exemplo, usar instrucións IBRS (Indirect Branch Restricted Speculation) axuda a protexer contra ataques.

Preparouse un conxunto de cambios para o núcleo de Linux e o hipervisor Xen, que bloquearán o problema no software en CPUs máis antigas. O parche proposto para o núcleo de Linux cambia 68 ficheiros, engade 1783 liñas e elimina 387 liñas. Desafortunadamente, a protección leva a importantes custos xerais: nos textos realizados sobre procesadores AMD e Intel, a diminución do rendemento estímase do 14% ao 39%. É máis preferible utilizar a protección baseada en instrucións IBRS, dispoñible nas novas xeracións de CPU Intel e compatible a partir do núcleo de Linux 4.19.

Nos procesadores Intel, a substitución de enderezos por un salto indirecto especulativo lévase a cabo grazas a unha función que aparece cando se produce un desbordamento a través do límite inferior (underflow) no Return Stack Buffer. Cando se producen tales condicións, a instrución "ret" comeza a aplicar unha lóxica de selección de enderezos semellante á utilizada para saltos indirectos normais. Atopáronse máis de mil lugares no núcleo de Linux que crean condicións para iniciar tal refluxo e son accesibles mediante chamadas ao sistema.

Nos procesadores AMD, a execución especulativa da instrución "ret" lévase a cabo sen facer referencia a un búfer específico da pila (Return Address Stack) e a unidade de predición de ramas considera a instrución "ret" non como un retorno de control, senón como unha rama indirecta. , e, en consecuencia, utiliza os datos para predicir transicións indirectas. Nestas condicións, pódese explotar practicamente calquera operación "ret" accesible mediante unha chamada ao sistema.

Ademais, tamén se identificou outro problema nas CPU AMD (CVE-2022-23825, Branch Type Confusion) relacionado coa implementación de ramas ficticias: as condicións para a predición de ramas poden ocorrer aínda sen as instrucións de rama necesarias, o que permite influír no búfer de predición de ramas. sen a instrución "ret". Esta característica complica significativamente a implementación da protección e require unha limpeza máis activa do búfer de predición de ramas. Espérase que engadir unha protección total ao núcleo aumente a sobrecarga nun 209%.

Fonte: opennet.ru

Engadir un comentario