AMD CacheWarp, la vulnerabilidad que afecta a las CPU EPYC rompiendo la virtualización cifrada segura (SEV)

Intel sufrió una vulnerabilidad del mismo calado el año pasado con SGX y TEE mediante xAPIC, la cual rompió la seguridad de los chips enfocados a la privacidad de los azules. Prácticamente 12 meses después es AMD la que ve rota su seguridad usando métodos parecidos a los que se usaron en xAPIC, en lo que se ha catalogado ya oficialmente como la vulnerabilidad AMD CacheWarp, la cual ataca a la tecnología Secure Encrypted Virtualization, o SEV, por su acrónimo en inglés. ¿Cómo es de grave y a cuántas familias de procesadores afecta?

La Virtualización cifrada segura de AMD contiene cuatro apartados que van interconectados entre sí, a saber: la propia SEV, el cifrado de memoria seguro (SME), la virtualización cifrada segura mediante paginación anidada segura (SEV-SNP) y el estado cifrado de virtualización cifrada segura (SEV-ES). Pues bien, esta nueva vulnerabilidad afecta a todas ellas porque acata su base y deja en problemas a los procesadores de servidor.

AMD CacheWarp, la vulnerabilidad que pone en jaque a SEV para máquinas virtuales cifradas

AMD-SEV-EPYC

En redes es totalmente normal usar máquinas virtuales cifradas, en el caso de AMD, con SEV. Es el día a día de un ingeniero o técnico de sistemas, pero lo que no se esperaba es que cualquier amenaza podría llegar desde la seguridad que AMD implementa a estas.

CacheWarp permite a un atacante infiltrarse sin ser detectado en máquinas virtuales cifradas en procesadores EPYC hasta el punto de que puede escalar en privilegios y hacerse con cualquier dato del sistema no virtualizado, o incluso de la máquina virtual. La vulnerabilidad está nombrada como CVE-2023-20592 y ha sido descubierta por investigadores del Centro CISPA Helmholtz desde la Universidad de Graz y afecta a casi toda CPU AMD EPYC que admite cualquiera de las cuatro variantes de SEV, por lo que el problema es realmente grave.

Usan dos primitivas: Timewarp y Dropforge

AMD-EPYC-SME-SEV-soporte

Los investigadores atacan la base de flotación de AMD con SEV, la cual se define por la propia empresa como "una tecnología diseñada para aislar las máquinas virtuales del hipervisor cifrando el contenido de la memoria de la máquina virtual con una clave única.

La idea, en pocas palabras, es proteger la VM (Virtual Machine) de la posibilidad de que el hipervisor (es decir, el monitor de la máquina virtual) pueda ser malicioso y, por lo tanto, no se pueda confiar en él de forma predeterminada. SEV-SNP, que incorpora Secure Nested Paging (SNP), agrega "una fuerte protección de la integridad de la memoria para ayudar a prevenir ataques maliciosos basados ​​en hipervisores como reproducción de datos, reasignación de memoria y más para crear un entorno de ejecución aislado"

El problema es que CacheWarp rompe con todo esto gracias a lo que se aprendió de la vulnerabilidad de Intel, puesto que fue la base para encontrar la manera de romper la seguridad de los AMD EPYC, como bien describen sus descubridores:

La instrucción `INVD` coloca todo el contenido modificado en el caché sin volver a escribirlo en la memoria. Por lo tanto, el atacante puede descartar cualquier escritura de las máquinas virtuales invitadas y la máquina virtual continúa con datos arquitectónicamente obsoletos. En el artículo, lo demostramos mediante dos primitivas, "Timewarp" y "Dropforge".

¿Qué logra hacer Timewarp dentro de AMD CacheWarp?

Los investigadores ofrecen una versión breve de lo que consiguen con cada primitiva y cómo funciona el ataque:

Para el Timewarp, podemos restablecer lo que el ordenador ha memorizado como el siguiente paso. Esto hace que la computadora ejecute código que ejecutó antes porque lee de la memoria una llamada dirección de retorno obsoleta.

De este modo, el ordenador retrocede en el tiempo. Sin embargo, el código antiguo se ejecuta con datos nuevos (el valor de retorno de otra función), lo que produce efectos inesperados. Usamos este método para evitar la autenticación OpenSSH, iniciando sesión sin conocer la contraseña.

¿Y Dropforge?

El otro método para conseguir el ataque y romper SEV se cita así:

Otro método, llamado "Dropforge", permite al atacante restablecer los cambios realizados en los datos de las máquinas virtuales invitadas. Con una o varias drops, el atacante puede manipular el flujo lógico de ejecución del invitado de forma explotable. 

Tome el binario `sudo` como ejemplo, un valor de retorno se almacena en la memoria (pila) para que el atacante pueda restablecerlo a un valor inicial. Sin embargo, el valor inicial “0” nos otorga privilegios de administrador incluso cuando no lo seamos.

Con esta combinación tenemos acceso ilimitado a la máquina virtual.

En otras palabras, el atacante coge el control de la máquina virtual mediante el flujo de control de los datos de un programa y vuelve al estado anterior del mismo, lo cual facilita el hacerse con la VM.

AMD lanza un comunicado oficial a modo de boletín

AMD-EPYC-Servidor

Los de Lisa Su tildan la vulnerabilidad como Media y ofrecen un resumen bastante escueto de lo que van a hacer y el alcance de esta AMD CacheWarp diciendo lo siguiente:

Investigadores externos informaron una vulnerabilidad potencial con la instrucción INVD que puede provocar una pérdida de integridad de la memoria de la máquina virtual invitada (VM) SEV-ES y SEV-SNP.

El comportamiento inadecuado o inesperado de la instrucción INVD en algunas CPU AMD puede permitir que un atacante con un hipervisor malicioso afecte el comportamiento de reescritura de la línea de caché de la CPU, lo que provocará una posible pérdida de la integridad de la memoria de la máquina virtual invitada (VM).

Dicho esto, pone en relieve los procesadores afectados, los cuales son:

  • AMD EPYC de 1.ª generación (SEV y SEV-ES)
  • AMD EPYC de 2.ª generación (SEV y SEV-ES)
  • AMD EPYC de 3.ª generación (SEV, SEV-ES, SEV-SNP)

El problema es que la primera generación y la segunda generación no van a tener mitigación, como bien informa la propia AMD, quedando así expuestos sin remedio.

No todas las CPU pueden ser parcheadas para AMD CacheWarp

AMD-EPYC-CacheWarp-mitigación

El comunicado de mitigación es preocupante como poco y va a dejar a miles de empresas vendidas ante posibles ataques con AMD CacheWarp, como bien informa la compañía:

No hay mitigación disponible para la primera o segunda generación de procesadores EPYC (“Zen 1”, anteriormente con el nombre en código “Naples”, “Zen 2”, anteriormente con el nombre en código “Rome”) ya que las funciones SEV y SEV-ES no están diseñadas para proteger la integridad de la memoria de la máquina virtual invitada y SEV-SNP no está disponible.

Como mitigación de la posible vulnerabilidad, AMD ha proporcionado un parche de microcódigo que se puede cargar en caliente y ha actualizado la imagen del firmware para los procesadores AMD EPYC de tercera generación (microarquitectura “Zen 3”, anteriormente con nombre en código “Milan”) para los clientes con AMD Secure Encrypted con la función de virtualización y paginación anidada segura (SEV-SNP) habilitada. No se espera ningún impacto en el rendimiento por parte del parche.

No se ha descubierto que este problema afecte a los procesadores EPYC™ “Genoa” de AMD de cuarta generación (microarquitectura “Zen 4”).

Por lo tanto, calificar la vulnerabilidad de media, cuando dos de sus tres generaciones de procesadores no pueden ser parcheadas suena muy optimista como poco. Veremos si desde el SO Microsoft y Linux pueden sacarse algún as de la manga para mitigar, aunque sea perdiendo rendimiento, esta vulnerabilidad AMD CacheWarp.