CacheWarp: una vulnerabilidad que permite evadir el mecanismo de protección SEV en procesadores AMD
Hace poco se dio a conocer la noticia por parte de investigadores del CISPA, sobre un nuevo método de ataque CacheWarp para comprometer el mecanismo de seguridad AMD SEV utilizado en los sistemas de virtualización para proteger las máquinas virtuales de la interferencia del hipervisor o del administrador del sistema host.
Sobre la vulnerabilidad (CacheWarp) los investigadores menciona que se basa en el uso de una vulnerabilidad (catalogada bajo CVE-2023-20592) causada por el funcionamiento incorrecto del caché durante la ejecución de la instrucción del procesador INVD, con la ayuda de la cual es posible lograr una discrepancia de datos en la memoria y el caché y mecanismos de derivación para mantener la integridad de la memoria de la máquina virtual, implementados en base a las extensiones SEV-ES y SEV-SNP.
El método propuesto permite a un atacante con acceso al hipervisor ejecutar código de terceros y escalar privilegios en una máquina virtual protegida mediante AMD SEV. La vulnerabilidad afecta a los procesadores AMD EPYC desde la primera hasta la tercera generación.
La tecnología AMD SEV se utiliza para el aislamiento de máquinas virtuales por parte de proveedores de nube. La protección AMD SEV se implementa mediante cifrado a nivel de hardware de la memoria de la máquina virtual, además, la extensión SEV-ES protege los registros de la CPU. Sólo el sistema invitado actual tiene acceso a los datos descifrados, y cuando otras máquinas virtuales y el hipervisor intentan acceder a esta memoria, reciben un conjunto de datos cifrados.
Sobre el ataque se menciona que se basa en utilizar la instrucción INVD para invalidar bloques en el caché de páginas sin volcar los datos acumulados en el caché a la memoria (escritura regresiva). Por lo tanto, el método le permite desalojar los datos modificados del caché sin cambiar el estado de la memoria.
Para llevar a cabo un ataque, se propone utilizar excepciones de software para interrumpir el funcionamiento de la máquina virtual en dos lugares: en primer lugar, el atacante llama a la instrucción “wbnoinvd” para restablecer todas las operaciones de escritura en memoria acumuladas en el caché, y en segundo lugar llama a la instrucción “invd” para devolver las operaciones de escritura no reflejadas en la memoria al estado anterior.
Para comprobar la vulnerabilidad, se ha publicado un prototipo de exploit que permite insertar una excepción en una máquina virtual protegida mediante AMD SEV y revertir los cambios en la VM que no se han restablecido en la memoria.
La reversión de un cambio se puede utilizar para cambiar el flujo de un programa devolviendo una dirección de retorno anterior en la pila, o para usar los parámetros de inicio de sesión de una sesión anterior que fue autenticada previamente devolviendo un valor de atributo de autenticación.
Por ejemplo, los investigadores demostraron la posibilidad de utilizar el método CacheWarp para realizar un ataque Bellcore a la implementación del algoritmo RSA-CRT en la biblioteca ipp-crypto, lo que permitió recuperar la clave privada mediante la sustitución de errores al calcular una clave digital.
Finalmente, se menciona que CacheWarp no afecta de manera general a todos los procesadores AMD, ya que por ejemplo para los procesadores AMD EPYC de tercera generación (Zen 3), el problema se resuelve en la actualización del microcódigo de noviembre publicada por AMD (la solución no produce ninguna degradación del rendimiento).
Mientras que para la primera y segunda generación de AMD EPYC (Zen 1 y Zen 2), no se proporciona protección, ya que estas CPU no son compatibles con la extensión SEV-SNP, que proporciona control de integridad para máquinas virtuales. La cuarta generación de procesadores AMD AMD EPYC «Genoa» basados en la microarquitectura «Zen 4» no es vulnerable.
Ademas de ello, la tercera generación de procesadores AMD EPYC introdujo una extensión adicional, SEV-SNP (Secure Nested Paging), que garantiza el funcionamiento seguro de las tablas de páginas de memoria anidadas. Además del cifrado de memoria general y el aislamiento de registros, SEV-SNP implementa medidas adicionales para proteger la integridad de la memoria al evitar cambios en la VM por parte del hipervisor. Las claves de cifrado se administran en el lado de un procesador PSP (Procesador de seguridad de plataforma) separado integrado en el chip, implementado sobre la base de la arquitectura ARM.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.