Articulo de referencia

Restauración diferida del estado FP

La fuga de estado de la FPU perezosa ( CVE - 2018-3665 ), también conocida como restauración de estado de FP perezosa [ 1 ] o LazyFP , [ 2 ] [ 3 ] es una vulnerabilidad de segur...

La fuga de estado de la FPU perezosa ( CVE - 2018-3665 ), también conocida como restauración de estado de FP perezosa [ 1 ] o LazyFP , [ 2 ] [ 3 ] es una vulnerabilidad de seguridad que afecta a las CPU Intel Core . [ 1 ] [ 4 ] La vulnerabilidad se debe a una combinación de fallos en la tecnología de ejecución especulativa presente en las CPU afectadas [ 1 ] y en cómo ciertos sistemas operativos manejan el cambio de contexto en la unidad de punto flotante (FPU). [ 2 ] Al explotar esta vulnerabilidad, un proceso local puede filtrar el contenido de los registros de la FPU que pertenecen a otro proceso. Esta vulnerabilidad está relacionada con las vulnerabilidades Spectre y Meltdown que se divulgaron públicamente en enero de 2018.

Fue anunciado por Intel el 13 de junio de 2018, después de ser descubierto por empleados de Amazon , Cyberus Technology y SYSGO . [ 1 ] [ a ]

Además de utilizarse para aritmética de punto flotante , los registros de la FPU también se utilizan para otros fines, incluido el almacenamiento de datos criptográficos al utilizar el conjunto de instrucciones AES , presente en muchas CPU de Intel. [ 3 ] Esto significa que esta vulnerabilidad podría permitir que se comprometa el material clave . [ 3 ]

Mecanismo

Los registros de punto flotante y SIMD son grandes y no todos los procesos (o subprocesos) del sistema los utilizan. Para agilizar el cambio de contexto, la mayoría de los microprocesadores admiten el cambio de estado diferido. En lugar de almacenar el estado completo durante un cambio de contexto, el sistema operativo puede simplemente marcar la FPU como "no disponible" con la esperanza de que la tarea a la que se cambia no la necesite. Si el sistema operativo acierta, se ahorra tiempo. Si falla, la primera instrucción de la FPU o SIMD provocará una interrupción en el sistema operativo, que podrá guardar el estado de la tarea anterior y cargar el estado correcto para la tarea actual.

En las CPU con ejecución fuera de orden , la condición de "FPU no disponible" no se detecta inmediatamente. (De hecho, casi nunca se detecta inmediatamente, ya que puede haber varias instrucciones que causan fallos ejecutándose simultáneamente y el procesador debe tomar el primer fallo encontrado para mantener la ilusión de ejecución en orden. La información sobre cuál es el primero no está disponible hasta la etapa de retirada en orden). El procesador ejecuta la instrucción de forma especulativa utilizando el contenido del registro de la tarea anterior y algunas instrucciones subsiguientes, y solo más tarde detecta la condición de FPU no disponible. Aunque todo el estado arquitectónico se revierte al inicio de la instrucción que causó el fallo, es posible utilizar parte del estado de la FPU como dirección en una carga de memoria, lo que desencadena una carga en la caché del procesador. La explotación sigue entonces el mismo patrón que todas las vulnerabilidades de la familia Spectre: como el estado de la caché no es un estado arquitectónico (la caché solo afecta a la velocidad, no a la corrección), la carga de la caché no se deshace y la dirección, incluida parte del estado del registro de la tarea anterior, se puede detectar posteriormente midiendo el tiempo que se tarda en acceder a diferentes direcciones de memoria.

Es posible explotar este fallo sin activar ninguna interrupción del sistema operativo. Al ocultar el acceso a la FPU mediante una predicción errónea de bifurcación forzada (por ejemplo, usando una retpoline ), el procesador seguirá ejecutando el código de forma especulativa, pero retrocederá a la bifurcación predicha erróneamente y nunca ejecutará la interrupción del sistema operativo. Esto permite repetir el ataque rápidamente, obteniendo con celeridad el estado completo de la FPU y los registros SIMD.

Mitigación

Es posible mitigar la vulnerabilidad a nivel del sistema operativo y del hipervisor restaurando siempre el estado de la FPU al cambiar de contexto de proceso. [ 6 ] Con esta solución, no se requiere ninguna actualización de firmware . Algunos sistemas operativos ya no restauraban de forma diferida los registros de la FPU por defecto, protegiendo así a los sistemas operativos en plataformas de hardware afectadas, incluso si existía el problema de hardware subyacente. [ 6 ] En el sistema operativo Linux con kernel 3.7 o superior, es posible forzar al kernel a restaurar de forma inmediata los registros de la FPU mediante el eagerfpu=onparámetro del kernel. [ 3 ] Además, muchos proveedores y proyectos de software de sistema , incluidas las distribuciones de Linux , [ 7 ] OpenBSD , [ 8 ] y Xen [ 4 ] han publicado parches para abordar la vulnerabilidad.

Notas

  1. El proyecto OpenBSD afirma haber descubierto la vulnerabilidad de forma independiente. [ 5 ]

Referencias

  1. 1 2 3 4 "Restauración diferida del estado FP" . Intel . 13 de junio de 2018. Consultado el 18 de junio de 2018 .
  2. 1 2 Stecklina, Julian; Prescher, Thomas (2018-06-19). "LazyFP: Filtración del estado del registro de la FPU mediante canales laterales microarquitectónicos". arXiv : 1806.07480 [ cs.OS ].
  3. 1 2 3 4 Prescher, Thomas; Stecklina, Julian; Galowicz, Jacek. "Vulnerabilidad de Intel LazyFP: Explotación del cambio de estado de la FPU perezosa" . Cyberus Technology. Archivado del original el 09-11-2020 . Recuperado el 18-06-2018 .
  4. 1 2 "Aviso de seguridad de Xen CVE-2018-3665 / XSA-267, versión 3" . 13 de junio de 2018. Consultado el 18 de junio de 2018 .
  5. de Raadt, Theo (14 de junio de 2018). "Inflamación por Bryan Cantrill" . openbsd-tech (Lista de correo) . Recuperado el 18 de junio de 2018 a través de marc.info .
  6. 1 2 "Guardado/restauración FPU perezosa (CVE-2018-3665)" . RedHat . 14-06-2018 . Recuperado el 18-06-2018 .
  7. "CVE-2018-3665" . Debian . Consultado el 17 de junio de 2018 .
  8. "Errata de OpenBSD 6.3" . OpenBSD . Consultado el 18 de junio de 2018 .
  • LazyFP: Filtración del estado del registro de la FPU mediante un canal lateral microarquitectónico, por Julian Stecklina y Thomas Prescher (Artículo de investigación)
  • Vulnerabilidad de Intel LazyFP: Explotación del cambio de estado de la FPU diferida, por Thomas Prescher, Julian Stecklina y Jacek Galowicz (Cyberus Technology). Archivado el 9 de noviembre de 2020 en Wayback Machine.
  • Restauración diferida del estado de punto flotante (Aviso de seguridad de Intel)
  • Theo de Raadt de OpenBSD explica la vulnerabilidad del estado Lazy FPU en YouTube