Los investigadores de Bitdefender una nueva vulnerabilidad () en el mecanismo de ejecución especulativa de instrucciones en CPUs modernas, que ha sido nombrada SWAPGS, en referencia a la instrucción del procesador que causa el problema. La vulnerabilidad permite a un atacante no privilegiado determinar el contenido de las áreas de memoria del núcleo o de las máquinas virtuales en ejecución. El problema en procesadores Intel (x86_64) y parcialmente en procesadores AMD, para los cuales no se manifiesta el vector de ataque principal. Los métodos de mitigación implementados anteriormente para las vulnerabilidades Spectre y Meltdown no protegen contra el ataque SWAPGS en procesadores Intel, pero ya se han propuesto soluciones para Linux, ChromeOS, Android y Windows.
La vulnerabilidad pertenece a la clase Spectre v1 y se basa en la idea de recuperar datos de la caché del procesador que quedan después de la ejecución especulativa de instrucciones. Los bloques de predicción de saltos en los CPUs modernos, para mejorar el rendimiento, aplican la ejecución anticipada de algunas instrucciones que es probable que se ejecuten, pero sin esperar a que se computen todos los factores que determinan su ejecución (por ejemplo, cuando aún no se han calculado las condiciones de salto o los parámetros de acceso). Si la predicción no se confirma, el procesador descarta el resultado de la ejecución especulativa, pero los datos procesados en su curso permanecen en la caché del procesador y pueden ser recuperados utilizando métodos de determinación del contenido de la caché a través de canales laterales que analizan el cambio en el tiempo de acceso a datos en caché y no en caché.
La característica del nuevo ataque radica en la utilización de la fuga que ocurre durante la ejecución especulativa de la instrucción SWAPGS, que se aplica en los sistemas operativos para reemplazar el valor del registro GS al cambiar el control del espacio de usuario al núcleo del sistema operativo (el valor GS usado en el espacio de usuario se reemplaza por el valor utilizado en operaciones en el núcleo). En el núcleo de Linux, GS almacena un puntero per_cpu que se utiliza para acceder a los datos del núcleo, mientras que en el espacio de usuario se encuentran punteros hacia TLS (Almacenamiento Local por Hilo).
Para evitar la llamada doble a la instrucción SWAPGS al acceder nuevamente al núcleo desde el espacio del núcleo o cuando se ejecuta código que no requiere el cambio del registro GS, se lleva a cabo una verificación y un salto condicional antes de la instrucción. El mecanismo de ejecución especulativa adelanta la ejecución del código que contiene la instrucción SWAPGS, sin esperar el resultado de la verificación, y si la rama elegida no se confirma, se descartan los resultados. Así, puede darse la situación en que se elija especulativamente una rama que no prevé la ejecución de SWAPGS, pero durante el proceso de ejecución especulativa, el valor del registro GS se cambia mediante la instrucción SWAPGS y se utiliza en operaciones dependientes de la memoria, que se almacenan en la caché de la CPU.
Los investigadores han propuesto dos escenarios de ataque, para los cuales se han preparado prototipos de exploits. El primer escenario se basa en la situación en la que la instrucción SWAPGS no se ejecuta de manera especulativa, aunque se utiliza en la ejecución real; el segundo, por el contrario, es cuando la instrucción SWAPGS se ejecuta especulativamente, aunque en realidad no debería. Para cada escenario se contemplan dos variantes de explotación: el atacante puede determinar un 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 realización del ataque lleva mucho tiempo y para facilitar la filtración puede ser necesario ejecutar el exploit durante varias horas.

En el núcleo de Linux, el problema se aborda cambiando la lógica de invocación de la instrucción SWAPGS (bloqueo de la ejecución especulativa), similar a la corrección de otras vulnerabilidades de la clase Spectre v1. Se supone que la protección agregada tendrá un impacto mínimo en el rendimiento de las cargas de trabajo típicas. La latencia ocurre en la etapa de cambio entre el espacio de usuario y el núcleo, lo que puede resultar en una reducción del rendimiento, por ejemplo, durante la ejecución intensa de llamadas al sistema desde una aplicación o durante la generación frecuente de NMI e interrupciones.
La corrección requiere la instalación de una actualización del núcleo tanto en el sistema principal como en los entornos invitados, seguida de un reinicio del sistema. Para desactivar la protección en Linux se puede usar la opción «nospectre_v1», que también desactiva las medidas para bloquear la vulnerabilidad SWAPGS. La corrección está disponible en forma de para el núcleo de Linux, que ya está incluido en las versiones , , 4.14.137, 4.9.188 y 4.4.188. Las actualizaciones para las distribuciones de Linux aún no se han lanzado (, , , , , ). En Windows, el problema se resolvió sin mucha publicidad en . La empresa Google una corrección para el núcleo 4.19, que se incluye en ChromeOS y .
Según investigadores de Bitdefender, Intel fue informado del problema ya en agosto del año pasado. Se decidió resolver el problema a través de software, lo que atrajo a los desarrolladores de Microsoft, Google y del núcleo de Linux en la elaboración coordinada de la corrección. Atacar a los antiguos procesadores Intel, anteriores a Ivy Bridge, es mucho más difícil debido a la falta de soporte para la instrucción WRGSBASE, utilizada en el exploit. Los sistemas ARM, POWER, SPARC, MIPS y RISC-V no están afectados por el problema, ya que no admiten la instrucción SWAPGS.
El problema amenaza principalmente a los propietarios de procesadores Intel —
en sistemas AMD solo se pudo reproducir el segundo escenario de ataque, que se limita al procesamiento especulativo del valor base del registro GS, lo que se puede utilizar para buscar ciertos valores en áreas aleatorias de la memoria. Para bloquear esta variante de ataque existen métodos de protección contra las vulnerabilidades Spectre v1.
Fuente: opennet.ru
