Retbleed: un nuevo ataque de ejecución especulativa que afecta a Intel y AMD
Hace poco se dio a conocer la noticia de que un grupo de investigadores de ETH Zurich ha identificado un nuevo ataque al mecanismo de ejecución especulativa de saltos indirectos 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 recibieron el nombre en código Retbleed (ya catalogadas bajo CVE-2022-29900, CVE-2022-29901) y son de naturaleza similar a los ataques de 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 saltar indirectamente usando la instrucción «jmp», cargando la dirección desde la memoria o un registro de la CPU.
Sobre el nuevo ataque se menciona que un atacante puede crear condiciones para una predicción de bifurcación incorrecta y organizar un salto especulativo intencionado a un bloque de código que no está previsto por la lógica de ejecución del programa.
En última instancia, el procesador determinará que la predicción de bifurcación no estaba justificada y revertirá la operación a su estado original, pero los datos procesados durante la ejecución especulativa se asentarán en el caché y los búferes de microarquitectura. Si un bloque ejecutado erróneamente realiza un acceso a la memoria, entonces su ejecución especulativa conducirá a la instalación en el caché general y la lectura de datos de la memoria.
Para determinar los datos que quedan en el caché después de la ejecución especulativa de operaciones, el atacante puede usar métodos para determinar los datos residuales a través de canales de terceros, por ejemplo, analizar cambios en el tiempo de acceso a datos en caché y no en caché.
Para la extracción intencional de información de áreas en un nivel de privilegio diferente (por ejemplo, de la memoria del núcleo), se utilizan «dispositivos»: secuencias de comandos presentes en el núcleo, adecuados para la lectura especulativa de datos de la memoria, dependiendo de las condiciones externas que pueden ser influenciado por un atacante.
Para protegerse contra los ataques clásicos de la clase Spectre, que usan instrucciones de bifurcación condicional e indirecta, la mayoría de los sistemas operativos usan la técnica «retpoline», que se basa en reemplazar las operaciones de bifurcación indirecta con la instrucción «ret», para la cual se requiere una predicción de estado de pila separada unit se usa en procesadores, no usa un bloque de predicción de bifurcación.
En la introducción de retpoline en 2018, se creía que la manipulación de direcciones similar a Spectre no era práctica para la bifurcación especulativa con 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 un conjunto de herramientas listo para identificar secuencias de instrucciones (gadgets) adecuadas para explotar la vulnerabilidad en el kernel de Linux en que aparecen tales condiciones.
En el transcurso del estudio, se preparó un exploit funcional que permite, en sistemas con CPU Intel, desde un proceso sin privilegios en el espacio del usuario extraer datos arbitrarios de la memoria del kernel a una velocidad de 219 bytes por segundo y con un 98 % de precisión.
En los procesadores AMD, la eficiencia del exploit es mucho mayor, ya que la tasa de fuga es de 3,9 KB por segundo. Como ejemplo práctico, se muestra cómo utilizar el exploit propuesto para determinar el contenido del archivo /etc/shadow. En sistemas con CPU Intel, se realizó un ataque para determinar el hash de la contraseña de root en 28 minutos, y en sistemas con CPU AMD, en 6 minutos.
El ataque se confirmó para 6-8 generaciones de procesadores Intel que se lanzaron antes del tercer trimestre de 2019 (incluido Skylake) y procesadores AMD basados en microarquitecturas Zen 1, Zen 1+ y Zen 2 que se lanzaron antes del segundo trimestre de 2021. En los modelos de procesadores más nuevos, como AMD Zen3 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 proteger contra un ataque.
Se preparó un conjunto de cambios para el kernel de Linux y el hipervisor Xen, que bloquean el problema mediante programación en 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 costos generales significativos: en los textos realizados en procesadores AMD e Intel, la degradación del rendimiento se estima entre un 14 % y un 39 %. Es más preferible utilizar protección basada en instrucciones IBRS, disponible en las nuevas generaciones de CPUs Intel y soportada desde el kernel Linux 4.19.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.