los datos sobre una nueva clase de ataques (Carga de Inyección de Valor, ) al mecanismo de ejecución especulativa en las CPUs de Intel, que pueden ser utilizados para organizar filtraciones de claves y datos secretos desde enclaves de Intel SGX y otros procesos.
La nueva clase de ataques se basa en manipulaciones de las mismas estructuras microarquitectónicas que en los ataques (Muestreo de Datos Microarquitecturales), . Sin embargo, los nuevos ataques no son bloqueados por los métodos de defensa existentes contra Meltdown, Spectre, MDS y otros ataques similares. Para asegurar una protección efectiva contra LVI se requieren cambios de hardware en la CPU. Al implementar la protección a través de software, añadiendo la instrucción LFENCE después de cada operación de carga desde la memoria y sustituyendo la instrucción RET por POP, LFENCE y JMP, se incurren en costos excesivos: se estima que la protección completa mediante software reducirá el rendimiento entre 2 y 19 veces.
Parcialmente, la dificultad de bloquear este problema se compensa con el hecho de que actualmente el ataque tiene un carácter más teórico que práctico (el ataque es teóricamente posible, pero muy difícil de implementar y reproducible solo en pruebas sintéticas).
La empresa Intel un nivel de peligro moderado (5.6 de 10) y una actualización de firmware y SDK para el entorno SGX, en la que intentó bloquear la ejecución del ataque. Los métodos de ataque propuestos son aplicables solo a procesadores Intel por ahora, pero no se descarta la posibilidad de adaptar LVI a otros procesadores susceptibles a ataques de la clase de Meltdown.
El problema fue descubierto 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 para llevar a cabo los ataques, cada uno de los cuales permite la existencia de variantes más específicas . Independientemente, en febrero de este año, investigadores de la empresa Bitdefender también una de las variantes del ataque LVI, que se informó a Intel. Las variantes de ataque se diferencian por el uso de diversas estructuras microarquitectónicas, como el búfer de almacenamiento (SB, Store Buffer), el búfer de llenado de líneas (LFB, Line Fill Buffer), el búfer de cambio de contexto del FPU y la caché de primer nivel (L1D), que anteriormente se habían utilizado en ataques como , , , , y .
La principal LVI de los ataques MDS es que MDS manipula la definición del contenido de las estructuras microarquitectónicas que permanecen en la caché después de un procesamiento especulativo de excepciones (fault) o de operaciones de carga y almacenamiento, mientras que
los ataques LVI permiten que los atacantes inserten datos en las estructuras microarquitectónicas para influir en la posterior ejecución especulativa del código de la víctima. A través de estas manipulaciones, el atacante puede extraer el contenido de estructuras de datos protegidas en otros procesos al ejecutar código específico en el núcleo objetivo del CPU.
Para en el código del proceso víctima secuencias de código especiales (gadgets), en las que se carga un valor controlado por el atacante, y la carga de este valor provoca la aparición de excepciones (fault, abort o assist), que descartan el resultado y vuelven a ejecutar la instrucción. Durante el manejo de la excepción, se genera una ventana especulativa, durante la cual se produce la filtración de los datos procesados en el gadget. En particular, el procesador comienza a ejecutar en modo especulativo un fragmento de código (gadget), luego determina que la predicción no se cumplió y revierte las operaciones a su estado original, pero los datos procesados durante la ejecución especulativa permanecen en la caché L1D y en los búferes microarquitectónicos, y son accesibles para ser extraídos utilizando métodos conocidos de detección de datos residuales por canales laterales.
La excepción «assist», a diferencia de «fault», se maneja dentro del procesador sin la llamada a controladores de software. Assist puede ocurrir, por ejemplo, cuando se requiere actualizar el bit A (Accedido) o D (Sucio) en la tabla de páginas de memoria. La principal dificultad para llevar a cabo un ataque sobre otros procesos radica en cómo iniciar el surgimiento de assist manipulando el proceso víctima. Actualmente, no existen métodos confiables para hacerlo, pero no se descarta que en el futuro se puedan encontrar. La posibilidad de llevar a cabo un ataque ha sido confirmada únicamente para enclaves Intel SGX, mientras que otros escenarios son teóricos o reproducibles en condiciones sintéticas (se requiere la adición de ciertos gadgets al código).
Posibles vectores de ataque:
- Fugas de datos de estructuras del núcleo al proceso en nivel de usuario. La protección existente en el núcleo de Linux contra ataques del tipo Spectre 1, así como el mecanismo de protección SMAP (Prevención de Acceso en Modo Supervisor) reducen significativamente la probabilidad de un ataque LVI. Puede ser necesario agregar protección adicional al núcleo si en el futuro se identifican métodos más simples para llevar a cabo un ataque LVI.
- Fugas de datos entre diferentes procesos. Para el ataque se requiere que haya ciertos fragmentos de código en la aplicación y la determinación del método de generación de excepciones en el proceso objetivo.
- Fugas de datos del entorno host al sistema invitado. Este ataque se clasifica como demasiado complejo, ya que requiere la ejecución de varios pasos difíciles de implementar y la predicción de la actividad en el sistema.
- Fugas de datos entre procesos en diferentes sistemas invitados. El vector de ataque es similar a la organización de fugas de datos entre diferentes procesos, pero requiere realizar manipulaciones complejas adicionales para evitar la isla de aislamiento entre los sistemas invitados.
Investigadores han publicado con una demostración de los principios para llevar a cabo el ataque, pero actualmente no son utilizables para realizar ataques reales. El primer ejemplo permite redirigir la ejecución especulativa de código en el proceso víctima, de manera similar a la programación orientada a retorno (, Return-Oriented Programming). En este ejemplo, el proceso objetivo es un proceso especialmente preparado que contiene los gadgets necesarios (la aplicación del ataque a procesos externos reales es complicada). El segundo ejemplo permite infiltrarse en los cálculos durante el cifrado AES dentro del enclave Intel SGX y organizar una filtración de datos durante la ejecución especulativa de instrucciones para recuperar el valor utilizado para cifrar la clave.

Fuente: opennet.ru
