Los investigadores de seguridad de Google publicaron información sobre una vulnerabilidad (CVE-2024-56161) en los procesadores AMD, que afecta al cargador de microcódigo y permite eludir el mecanismo de verificación de firmas digitales durante las actualizaciones del microcódigo. La carga de un microcódigo modificado puede comprometer el mecanismo AMD SEV (Virtualización Segura Encriptada), utilizado en sistemas de virtualización para proteger las máquinas virtuales de la interferencia por parte del hipervisor o del administrador del sistema anfitrión.
La vulnerabilidad se debe al uso de una función hash insegura en el código que realiza la verificación de la firma digital después de cargar el microcódigo en la CPU. Para llevar a cabo el ataque, se requiere tener derechos de administrador en el sistema local (capacidad para ejecutar código en el nivel de anillo cero (ring0), estando fuera de una máquina virtual).
Durante el ataque, se puede infiltrar en el funcionamiento de sistemas huéspedes protegidos mediante extensiones AMD SEV (Virtualización Segura Encriptada) y SEV-SNP (Paginación Anidada Segura), que proporcionan garantías de integridad de la memoria. máquinas virtuales, aislando los registros del procesador y asegurando un funcionamiento seguro con tablas de páginas de memoria anidadas. El mecanismo AMD SEV fue creado para que el personal de los centros de datos y proveedores de nube no pudiera modificar o analizar el contenido de la memoria de los sistemas huéspedes protegidos, así como distorsionar los cálculos.
Los investigadores prepararon un prototipo de exploit que permite cargar microcódigo arbitrario en la CPU, no autenticado por firma digital. Para demostrar la peligrosidad de la vulnerabilidad, se propuso una actualización del microcódigo que cambia la lógica de la instrucción RDRAND, utilizada como una de las fuentes de entropía en generadores de números pseudorandom, que se usan en el proceso de formación de claves, durante la ejecución de operaciones criptográficas y para la generación de identificadores aleatorios.
La modificación provoca que la instrucción RDRAND devuelva solo el número 4, en lugar de una secuencia aleatoria. Para prevenir ataques reales a sistemas de computación confidencial, el microcódigo modificado restablece la bandera CF (carry flag), es decir, marca el valor emitido como erróneo. Se planea publicar detalles adicionales y herramientas para generar el microcódigo modificado el 5 de marzo, para dar tiempo a los usuarios a instalar la corrección en sus sistemas. Un ejemplo exitoso de ataque se demostró para servidores los procesadores AMD EPYC 7B13 (Milan) y AMD Ryzen 9 7940HS (Phoenix).
En el informe de la compañía AMD se indica que la vulnerabilidad se manifiesta en procesadores AMD basados en 1-4 generaciones de la microarquitectura Zen. La actualización del microcódigo que corrige la vulnerabilidad se lanzó el 13 de diciembre de 2024 para procesadores de las series AMD EPYC 7001, 7002 y 7003 (Naples, Rome, Milan y Milan-X), y el 16 de diciembre para los procesadores de la serie AMD EPYC 9004 (Genoa, Genoa-X y Bergamo/Siena). Para corregir la vulnerabilidad en sistemas que usan la certificación SEV-SNP, se requiere además una actualización del firmware AMD SEV (que se suministra junto con las actualizaciones de BIOS de los fabricantes de hardware).
Además, se informa sobre otra vulnerabilidad en los procesadores AMD, que permite realizar un ataque por canal lateral para extraer información sobre los cálculos en sistemas invitados, protegidos mediante el mecanismo AMD SEV. El problema afecta a 1-4 generaciones de los procesadores AMD EPYC y está relacionado con la posibilidad de extraer datos del caché del procesador que se depositan durante el funcionamiento de sistemas invitados protegidos. Se puede utilizar el método Prime+Probe para analizar el contenido del caché, que implica llenar el caché con un conjunto de valores de referencia y determinar cambios mediante la medición del tiempo de acceso al volver a llenarlo. Se observa que los métodos propuestos anteriormente para protegerse contra ataques de la clase Spectre son adecuados para bloquear el ataque.
Fuente: opennet.ru
