SWAPGS una nueva vulnerabilidad de ejecución especulativa

SWAPGS-exploit-2

Los investigadores de Bitdefender han identificado una nueva vulnerabilidad en el mecanismo para la ejecución especulativa de instrucciones en procesadores modernos, que recibieron el nombre SWAPGS, que corresponde al nombre de la instrucción del procesador que causa el problema.

La vulnerabilidad permite que un atacante sin privilegios determine el contenido de las áreas de memoria del kernel o de las máquinas virtuales en ejecución. El problema se confirma en los procesadores Intel (x86_64) y afecta parcialmente a los procesadores AMD para los que no aparece el vector de ataque principal.

Los métodos anti-vulnerabilidad Specter y Meltdown implementados previamente no protegen contra los ataques SWAPGS utilizando procesadores Intel, pero ya se han propuesto soluciones para Linux, ChromeOS, Android y Windows.

La vulnerabilidad pertenece a la clase Specter v1 y se basa en la idea de recuperar datos del caché del procesador que queda después de la ejecución especulativa de las instrucciones.

Los bloques de predicción de conversión de las CPU modernas utilizan la ejecución proactiva de algunas instrucciones, que es más probable que se ejecuten, para mejorar el rendimiento, pero sin esperar el cálculo de todos los factores que determinan su ejecución (por ejemplo, cuando las condiciones de transición o los parámetros de acceso aún no se han calculado).

Si no se confirma el pronóstico, el procesador descarta el resultado de la ejecución especulativa, pero los datos procesados durante el mismo se depositan en la memoria caché del procesador y se pueden restaurar utilizando métodos para determinar el contenido de la memoria caché a través de canales de terceros que analizan el cambio en el tiempo de acceso a los datos almacenados en caché y no almacenados en caché.

Sobre SWAPGS

La peculiaridad del nuevo ataque es el uso de una fuga que surge durante la ejecución especulativa de la instrucción SWAPGS, que se utiliza en los sistemas operativos para reemplazar el valor del registro GS cuando el control se transfiere del espacio del usuario al kernel del sistema operativo (el valor GS utilizado en el espacio del usuario se reemplaza por el valor utilizado en las operaciones del kernel).

El kernel de Linux en GS almacena el puntero per_cpu, que se utiliza para acceder a los datos del kernel, y apunta a TLS (Thread Local Storage) en el espacio del usuario.

Para excluir la doble invocación de la instrucción SWAPGS tras el acceso repetido al núcleo desde el espacio del núcleo o cuando se ejecuta un código que no requiere la sustitución del registro GS, se realiza una comprobación y una transición condicional antes de la instrucción.

El mecanismo de ejecución especulativo se adelanta a la ejecución del código con la instrucción SWAPGS, sin esperar el resultado de la verificación, y si la rama seleccionada no se confirma, descarta el resultado.

Por lo tanto, puede surgir una situación cuando una rama que especifica la ejecución de SWAPGS se selecciona especulativamente, pero durante la ejecución especulativa el valor del registro GS será cambiado por la instrucción SWAPGS y se usará en operaciones de memoria dependientes que se depositan en la memoria caché de la CPU.

Los investigadores propusieron dos escenarios de ataque para los cuales se prepararon prototipos de exploits.

  • El primer escenario se basa en la situación en la que la instrucción SWAPGS no se ejecuta especulativamente, aunque se usa en la ejecución real, y el segundo escenario es lo contrario, cuando la instrucción SWAPGS se ejecuta especulativamente, aunque en realidad no debería.
  • Para cada escenario, hay dos opciones operativas: el atacante puede determinar el valor en una dirección específica en el área del núcleo y el atacante puede buscar un valor específico en direcciones aleatorias en el núcleo.

La solución requiere la instalación de una actualización del kernel tanto en el sistema principal como en los entornos invitados, seguido de un reinicio del sistema. Para deshabilitar la protección en Linux, se puede usar la opción «nospectre_v1», que también deshabilita las medidas para bloquear la vulnerabilidad SWAPGS.

La solución está disponible como un parche para el kernel de Linux, que ya está incluido en las versiones 4.19.65 , 5.2.7 , 4.14.137, 4.9.188 y 4.4.188, mientras que para las diferentes distribuciones de Linux las correcciones pertinentes estarán llegando durante el lapso de esta y la siguiente semana.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.