Identificaron un nuevo tipo de ataque que afecta a procesadores Intel y AMD
Un grupo de investigadores de la Universidad de Virginia y California ha presentado un nuevo tipo de ataque a las estructuras de microarquitectura de los procesadores Intel y AMD.
El método de ataque propuesto está asociado con el uso de un caché intermedio de microoperaciones (micro-op cache) en los procesadores, que se puede utilizar para extraer información que se ha asentado en el curso de la ejecución especulativa de instrucciones.
Se observa que el nuevo método supera significativamente al ataque Spectre v1 en términos de rendimiento, dificulta la detección del ataque y no está bloqueado por los métodos existentes de protección contra ataques a través de canales laterales diseñados para bloquear vulnerabilidades causadas por la ejecución especulativa de instrucciones.
Por ejemplo, el uso de la instrucción LFENCE bloquea la fuga en las últimas etapas de la ejecución especulativa, pero no protege contra la fuga a través de estructuras de microarquitectura.
El método afecta a los modelos de procesadores Intel y AMD lanzados desde 2011, incluidas las series Intel Skylake y AMD Zen. Las CPU modernas dividen las complejas instrucciones del procesador en microoperaciones más simples similares a RISC, que se almacenan en caché en una caché separada.
Esta caché es fundamentalmente diferente de las cachés de nivel superior, no es directamente accesible y actúa como un búfer de flujo para acceder rápidamente a los resultados de la decodificación de instrucciones CISC en una microinstrucción RISC.
Sin embargo, los investigadores han encontrado una forma de crear las condiciones que surgen durante un conflicto de acceso al caché y permitir juzgar el contenido del caché de las microoperaciones analizando las diferencias en el tiempo de ejecución de determinadas acciones.
La caché micro-op en los procesadores Intel está segmentada en relación con los subprocesos de la CPU (Hyper-Threading), mientras que los procesadores AMD Zen utilizan una caché compartida, que crea condiciones para la fuga de datos no solo dentro de un subproceso de ejecución, sino también entre diferentes subprocesos en SMT (la fuga de datos es posible entre el código ejecutado en diferentes núcleos lógicos de la CPU).
Los investigadores propusieron un método básico para detectar cambios en el caché de micro-ops y varios escenarios de ataque que permiten crear canales de transmisión de datos encubiertos y usar código vulnerable para filtrar datos confidenciales, tanto dentro de un solo proceso (por ejemplo, para organizar un proceso de datos fuga al ejecutar código de terceros en motores con JIT y en máquinas virtuales) y entre el kernel y los procesos en el espacio de usuario.
Al organizar una variante del ataque Spectre usando el caché micro-op, los investigadores lograron lograr un rendimiento de 965.59 Kbps con una tasa de error de 0.22% y 785.56 Kbps al usar corrección de errores, en caso de una fuga dentro del mismo espacio de direcciones. y nivel de privilegio.
Con una fuga que abarca diferentes niveles de privilegios (entre el kernel y el espacio de usuario), el rendimiento fue de 85,2 Kbps con corrección de errores añadida y 110,96 Kbps con una tasa de error del 4%.
Al atacar procesadores AMD Zen, lo que crea una fuga entre diferentes núcleos lógicos de la CPU, el rendimiento fue de 250 Kbps con una tasa de error del 5,59% y de 168,58 Kbps con corrección de errores. En comparación con el método clásico Spectre v1, el nuevo ataque resultó ser 2,6 veces más rápido.
Se prevé que mitigar un ataque de caché de microoperaciones requeriría más cambios que degradan el rendimiento que cuando se habilitaron las defensas de Spectre.
Como compromiso óptimo, se propone bloquear tales ataques no deshabilitando el almacenamiento en caché, sino a nivel de monitoreo de anomalías y determinando estados de caché típicos de los ataques.
Al igual que en los ataques de Spectre, la organización de una fuga del kernel u otros procesos requiere la ejecución de una determinada secuencia de comandos (gadgets) en el lado de los procesos de la víctima, lo que lleva a la ejecución especulativa de instrucciones.
Se han encontrado alrededor de 100 dispositivos de este tipo en el kernel de Linux, que se eliminarán, pero periódicamente se encuentran soluciones para generarlos, por ejemplo, los asociados con el lanzamiento de programas BPF especialmente diseñados en el kernel.
Finalmente si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.