Una CPU no ejecuta todo el código que le eches, incluso si es compatible, ya que para evitar la ejecución de cierto tipo de código que puede afectar la salud de nuestro ordenador y la privacidad de nuestros datos, toda CPU tiene mecanismos de defensa. No obstante debido a la complejidad de estas siempre existe un hueco que explotar y acaban de encontrar un problema de seguridad en algunos procesadores de AMD que permitiría ejecutar código no autorizado.
Un problema de seguridad en un programa es un problema menor, al fin y al cabo el software es intangible y cambiar el código no cuesta nada. En cambio todo procesador es una compleja pieza física donde cualquier error en su funcionamiento no se puede reparar fácilmente. Cuando se descubre un fallo en un procesador que está a la venta puede que afecte a los nuevos diseños en producción y se tarden varios años en solucionarlo. Intel se había visto afectada por un problema de seguridad que se bautizó como Meltdown en 2018, pues bien, parece ser que ahora las CPU de AMD tienen su propia versión del problema.
Descubren un problema de seguridad tipo Meltdown en CPUs de AMD
Dos investigadores en ciberseguridad de la Universidad Tecnológica de Dresde, Saidgani Musaev and Christof Fetzer, han descubierto una vulnerabilidad de seguridad que afecta a algunas CPU de AMD, en concreto las basadas en la arquitectura Zen+ que corresponden a la serie AMD Ryzen 2000 de escritorio y la arquitectura Zen 2, correspondiente a las series AMD Ryzen 3000, 4000 para escritorio y portátiles. La cual también está implementada en las APU de buena parte de las consolas de nueva generación. Así como algunos modelos de los Threadripper y EPYC utilizando dichas arquitecturas.
El descubrimiento de dicha vulnerabilidad lo han publicado en un Paper titulado Transient Execution of Non-Canonical Acceses. Bajo este nombre tan complejo se hace referencia a la ejecución especulativa. La cual consiste en que la CPU ejecuta instrucciones de antemano y que se supone que no debería ejecutar por depender del funcionamiento del código anterior. Con tal de aprovechar toda la potencia del procesador y no tenerlo parado se ejecutan todas las posibilidades en una rama de ejecución aparte.
¿El problema con estos métodos? Los ataques de seguridad del tipo Meltdown suelen atacar los búferess de datos compartidos tanto en la ejecución normal como en la especulativa. Por ejemplo, Meltdown en su forma clásica realiza su ataque en la caché de datos, pero el problema de seguridad en las CPU de AMD parece afectar una caché distinta.
¿Cómo es el problema de seguridad en las CPU de AMD?
Debido a que tanto Intel como AMD tienen una unidad de control totalmente dispar, aunque decodifique el mismo set de instrucciones. Las CPU de AMD no se ven afectadas por el Meltdown clásico, pero existe un resquicio que puede llevar a la ejecución de código no permitido y este ocurre cuando se carga una instrucción para ser ejecutada durante el ciclo de instrucción. En concreto en los núcleos Zen+ y Zen 2 se realiza una carga sobre la caché TLB.
¿Cómo funciona el exploit? Por lo visto existe una comprobación entre los bits de direccionamiento de la instrucción y el contenido de la línea de caché TLB, lo que ocurre es que solamente comprueba los 48 últimos bits e ignora los 16 distintos. Por lo que se puede enviar para dicha comprobación una dirección que tenga los primeros 16 bits diferentes al que existe en la caché TLB y que pase la comprobación mientras los 48 restantes coincidan.
A esto se le llama violación no canónica del direccionamiento de memoria, hay que tener en cuenta que un direccionamiento de memoria de 48 bits es tener acceso a 256 TB de almacenamiento. Por lo que en teoría estamos hablando de un dato que estaría en dicha dirección de memoria y no dejaría de ser una curiosidad. El problema se agrava si tenemos en cuenta que se suele utilizar el mapa de memoria en espejo. Esto significa que en vez de existir un mapa de memoria para toda la memoria hay varios mapas sucesivos y varias direcciones de memoria virtual apuntan a una dirección de memoria física en concreto.
AMD no actualizará el microcódigo de sus CPU
A través de una nota de prensa en su página web, desde AMD afirman que han estudiado el problema y han declarado lo siguiente:
AMD recomienda a los vendedores de software que analicen su código para cualquier vulnerabilidad potencial relacionada con este tipo de ejecución transitoria. Las potenciales vulnerabilidades pueden ser solucionadas insertando un LFENCE o utilizando técnicas de mitigación de la ejecución especulativa. Como las que se describen en el manual titulado SOFTWARE TECHNIQUES FOR MANAGING SPECULATION ON AMD PROCESSORS
Esto se traduce en que desde AMD no realizarán una actualización masiva del microcódigo de la unidad de control como hizo Intel. Por lo que desde AMD le han pasado la pelota a los creadores de software. Recordemos que los procesadores de Intel tras el parche por Meltdown perdieron buena parte de su rendimiento, motivo por el cual AMD no estaría dispuesta a reducir el rendimiento de sus CPU con un parche en forma de nuevo microcódigo para su unidad de control.