Se ha publicado información acerca de una nueva clase de ataques LVI en el mecanismo de ejecución especulativa que afecta a Intel, que puede ser utilizado para la derivación de claves y datos sensibles de los enclaves Intel SGX y otros procesos.
La nueva clase de ataques se basa en manipulaciones con las mismas estructuras microarquitectónicas que en los ataques de MDS, Spectre y Meltdown. Al mismo tiempo, los nuevos ataques no están bloqueados por los métodos existentes de protección contra Meltdown, Spectre, MDS y otros ataques similares.
Sobre LVI
El problema fue identificado en abril del año pasado por el investigador Jo Van Bulck de la Universidad de Lovaina, después de lo cual, con la participación de 9 investigadores de otras universidades, se desarrollaron cinco métodos básicos de ataque, cada uno de los cuales permite la existencia de opciones más específicas.
De todos modos, en febrero de este año, los investigadores de Bitdefender también descubrieron una de las opciones de ataque LVI y lo informaron a Intel.
Las opciones de ataque se distinguen por el uso de varias estructuras microarquitectónicas, como el búfer de almacenamiento (SB, Store Buffer), el búfer de relleno (LFB, Line Fill Buffer), el búfer de cambio de contexto de FPU y el caché de primer nivel (L1D), utilizado previamente en ataques como ZombieLoad, RIDL,Fallout, LazyFP, Foreshadow y Meltdown.
La principal diferencia entre los ataques LVI y MDS es que MDS manipula la determinación del contenido de las estructuras microarquitectónicas que permanecen en la memoria caché después del manejo de errores especulativos o las operaciones de carga y almacenamiento, mientras que los ataques LVI permiten que el atacante sea sustituido en estructuras microarquitectónicas para influir posterior ejecución especulativa del código de la víctima.
Usando estas manipulaciones, un atacante puede extraer el contenido de estructuras de datos cerradas en otros procesos mientras ejecuta cierto código en el núcleo de la CPU de destino.
Para la explotación, se deben encontrar problemas en el código del proceso y enviar secuencias de códigos especiales (gadgets) en las que se carga el valor controlado por el atacante y la carga de este valor provoca excepciones que descartan el resultado y vuelven a ejecutar la instrucción.
Al procesar una excepción, aparece una ventana especulativa durante la cual se filtran los datos procesados en el gadget.
En particular, el procesador comienza a ejecutar en modo especulativo un fragmento de código (un gadget), luego determina que la predicción no se ha justificado y revierte las operaciones, pero los datos procesados durante la ejecución especulativa se depositan en la memoria caché L1D y en las memorias intermedias de microarquitectura y se pueden extraer de ellos con utilizando métodos conocidos para determinar datos residuales de canales de terceros.
La principal dificultad para atacar otros procesos es cómo iniciar la asistencia mediante la manipulación del proceso de la víctima.
Actualmente, no hay formas confiables de hacer esto, pero en el futuro su hallazgo no está excluido. Hasta ahora, la posibilidad de un ataque se ha confirmado solo para enclaves Intel SGX, otros escenarios son teóricos o reproducibles en condiciones sintéticas .
Posibles vectores de ataque
- La fuga de datos de las estructuras del núcleo al proceso a nivel de usuario. La protección del kernel de Linux contra los ataques Specter 1 y el mecanismo de protección SMAP (Supervisor Mode Access Prevention) reducen significativamente la probabilidad de un ataque LVI. La introducción de protección adicional en el núcleo puede ser necesaria al identificar en el futuro métodos más simples para llevar a cabo un ataque LVI.
- Fuga de datos entre diferentes procesos. Un ataque requiere la presencia de ciertos fragmentos de código en la aplicación y la determinación del método para generar una excepción en el proceso de destino.
- Fuga de datos desde el entorno host al sistema invitado. El ataque se clasifica como demasiado complejo, lo que requiere la implementación de varios pasos difíciles de implementar y predicciones de actividad en el sistema.
- Fuga de datos entre procesos en diferentes sistemas invitados. El vector de ataque está cerca de organizar la fuga de datos entre diferentes procesos, pero además requiere manipulaciones complejas para evitar el aislamiento entre los sistemas invitados.
Para proporcionar una protección efectiva contra LVI, se requieren cambios de hardware en la CPU. Al organizar la protección mediante programación, al agregar la instrucción LFENCE del compilador después de cada operación de carga desde la memoria y reemplazar la instrucción RET con POP, LFENCE y JMP, se corrige demasiada sobrecarga; según los investigadores, la protección completa del software conducirá a una degradación del rendimiento de 2 a 19 veces.