Retbleed es un nuevo ataque al mecanismo de ejecución especulativa de las CPU Intel y AMD

Un grupo de investigadores de ETH Zurich ha identificado un nuevo ataque al mecanismo de ejecución especulativa de transiciones indirectas en la CPU, que permite extraer información de la memoria del kernel u organizar un ataque al sistema host desde máquinas virtuales. Las vulnerabilidades tienen el nombre en código Retbleed (CVE-2022-29900, CVE-2022-29901) y son de naturaleza similar a los ataques Spectre-v2. La diferencia se reduce a la organización de la ejecución especulativa de código arbitrario al procesar la instrucción "ret" (retorno), que recupera la dirección para saltar de la pila, en lugar de un salto indirecto usando la instrucción "jmp", cargando la dirección desde memoria o un registro de la CPU.

Un atacante puede crear condiciones para una predicción de transición incorrecta y organizar una transición especulativa y dirigida a un bloque de código que no está previsto en la lógica de ejecución del programa. En última instancia, el procesador determinará que la predicción de la rama no estaba justificada y revertirá la operación a su estado original, pero los datos procesados ​​durante la ejecución especulativa terminarán en el caché y en los buffers de microarquitectura. Si un bloque ejecutado erróneamente accede a la memoria, su ejecución especulativa hará que los datos leídos de la memoria se depositen en la caché compartida.

Para determinar los datos que quedan en la memoria caché después de operaciones especulativas, un atacante puede utilizar técnicas de canal lateral para determinar los datos residuales, como analizar cambios en los tiempos de acceso a los datos almacenados en caché y no almacenados en caché. Para extraer información intencionalmente de áreas con otro nivel de privilegio (por ejemplo, de la memoria del kernel), se utilizan "gadgets": secuencias de comandos presentes en el kernel que son adecuados para leer especulativamente datos de la memoria dependiendo de las condiciones externas que pueden verse influenciadas por el atacante.

Para protegerse contra los ataques clásicos de clase Spectre que utilizan instrucciones de salto condicionales e indirectas, la mayoría de los sistemas operativos utilizan la técnica “retpoline”, que se basa en reemplazar las operaciones de salto indirectas con la instrucción “ret”, para lo cual los procesadores usan una unidad de predicción de estado de pila separada. ... no utilizar un bloque de predicción de rama. Cuando se introdujo retpoline en 2018, se creía que las manipulaciones de direcciones similares a las de Spectre no eran prácticas para la ramificación especulativa utilizando la instrucción "ret".

Los investigadores que desarrollaron el método de ataque Retbleed demostraron la posibilidad de crear condiciones de microarquitectura para iniciar una transición especulativa utilizando la instrucción "ret" y publicaron herramientas listas para identificar secuencias de instrucciones (gadgets) adecuadas para explotar la vulnerabilidad en el kernel de Linux. en que tales condiciones se manifiestan.

Durante la investigación, se preparó un exploit funcional que permite, en sistemas con CPU Intel, extraer datos arbitrarios de la memoria del kernel de un proceso sin privilegios en el espacio del usuario a una velocidad de 219 bytes por segundo y una precisión del 98%. En los procesadores AMD, la eficiencia del exploit es mucho mayor: la tasa de fuga es de 3.9 KB por segundo. Como ejemplo práctico, mostramos cómo utilizar el exploit propuesto para determinar el contenido del archivo /etc/shadow. En sistemas con CPU Intel, el ataque para determinar el hash de la contraseña del usuario root se llevó a cabo en 28 minutos, y en sistemas con CPU AMD, en 6 minutos.

El ataque se ha confirmado para las generaciones 6 a 8 de procesadores Intel que se lanzaron antes del tercer trimestre de 3 (incluido Skylake) y procesadores AMD basados ​​en las microarquitecturas Zen 2019, Zen 1+ y Zen 1 que se lanzaron antes del segundo trimestre de 2. En los modelos de procesadores más nuevos, como AMD Zen2021 e Intel Alder Lake, así como en los procesadores ARM, el problema está bloqueado por los mecanismos de protección existentes. Por ejemplo, el uso de instrucciones IBRS (Indirect Branch Restricted Speculation) ayuda a protegerse contra ataques.

Se ha preparado una serie de cambios para el kernel de Linux y el hipervisor Xen, que bloquearán el problema en el software de las CPU más antiguas. El parche propuesto para el kernel de Linux cambia 68 archivos, agrega 1783 líneas y elimina 387 líneas. Desafortunadamente, la protección genera importantes costos generales: en los textos realizados en procesadores AMD e Intel, la disminución del rendimiento se estima entre el 14% y el 39%. Es más preferible utilizar protección basada en instrucciones IBRS, disponible en las nuevas generaciones de CPU Intel y compatible a partir del kernel de Linux 4.19.

En los procesadores Intel, la sustitución de direcciones para un salto indirecto especulativo se lleva a cabo gracias a una característica que aparece cuando se produce un desbordamiento a través del límite inferior (underflow) en el Return Stack Buffer. Cuando ocurren tales condiciones, la instrucción “ret” comienza a aplicar una lógica de selección de dirección similar a la utilizada para los saltos indirectos normales. Se han encontrado más de mil lugares en el kernel de Linux que crean las condiciones para iniciar dicho reflujo y a los que se puede acceder mediante llamadas al sistema.

En los procesadores AMD, la ejecución especulativa de la instrucción "ret" se lleva a cabo sin referencia a un búfer específico de la pila (Return Address Stack) y la unidad de predicción de rama considera la instrucción "ret" no como un retorno de control, sino como una rama indirecta. y, en consecuencia, utiliza los datos para predecir transiciones indirectas. En estas condiciones, se puede explotar prácticamente cualquier operación "ret" a la que se pueda acceder mediante una llamada al sistema.

Además, también se ha identificado otro problema en las CPU AMD (CVE-2022-23825, Branch Type Confusion) relacionado con la implementación de ramas ficticias: las condiciones para la predicción de ramas pueden ocurrir incluso sin las instrucciones de rama necesarias, lo que permite influir en el búfer de predicción de ramas. sin la instrucción "ret". Esta característica complica significativamente la implementación de la protección y requiere una limpieza más activa del búfer de predicción de sucursales. Se espera que agregar protección completa al kernel aumente la sobrecarga en un 209%.

Fuente: opennet.ru

Añadir un comentario