Fusión (vulnerabilidad)

Meltdown es una vulnerabilidad de fuga de canal lateral de  hardware que se encuentra en varios microprocesadores, en particular los fabricados por Intel y la arquitectura ARM . Meltdown usa un error de implementación de ejecución de comando especulativoen algunos procesadores Intel y ARM (pero no en AMD [1] [2] ), lo que hace que el procesador ignore los permisos de página cuando ejecuta especulativamente instrucciones de lectura de memoria.

La vulnerabilidad permite que un atacante local (al iniciar un programa especial) obtenga acceso de lectura no autorizado a la memoria privilegiada ( memoria utilizada por el kernel del sistema operativo). [3] [4] [5] .

Al ataque se le asignó el ID de vulnerabilidad CVE CVE-2017-5754 [6] .

Historia

El ataque Meltdown fue descubierto de forma independiente por investigadores de Google Project Zero , Cyberus Technology y la Universidad Tecnológica de Graz a mediados de 2017 y ha estado bajo discusión cerrada y parcheado durante varios meses. La publicación de detalles y correcciones estaba programada para el 9 de enero de 2018, pero los detalles de la vulnerabilidad se hicieron públicos el 4 de enero de 2018 al mismo tiempo que el ataque de Spectre , debido a publicaciones de The Register [7] periodistas que se enteraron de las correcciones KAISER/KPTI de la lista de correo del kernel de Linux [8] .

Breve descripción

La capacidad de ataque es generada por tres mecanismos que le permiten acelerar el procesador, y cada uno de estos mecanismos individualmente no crea una vulnerabilidad:

Los microprocesadores modernos de alto rendimiento tienen la capacidad de ejecutar código nuevo sin esperar a que se completen las acciones anteriores. Por ejemplo, si una instrucción de bifurcación está esperando recibir datos de la memoria principal para tomar una decisión, un procesador inactivo puede estar ocupado ejecutando una de las direcciones de bifurcación (y en algunas arquitecturas, incluso ambas bifurcaciones) con la esperanza de obtener el resultado de el cálculo listo para cuando se conoce el resultado de la bifurcación. Esta técnica se llama ejecución especulativa. Si la conjetura tiene éxito, el código ejecutado especulativamente cambia los valores visibles de los registros (estado arquitectónico) y la ejecución continúa. Si la rama de ejecución se asumió incorrectamente, las instrucciones que contiene no cambian el estado visible del procesador y la ejecución real volverá al punto de bifurcación.

Debido a las peculiaridades de algunas implementaciones, durante la ejecución especulativa, el acceso a la memoria se realiza independientemente de los derechos de acceso del proceso de ejecución a esta memoria; esto permite ejecutar comandos sin esperar una respuesta del controlador de memoria . Si esta rama de ejecución especulativa más tarde resulta ser correcta, se lanzará una excepción de acceso a memoria errónea. Si la rama se descarta como errónea, no se lanzará ninguna excepción; pero las variables cargadas en el caché durante la ejecución de la bifurcación permanecerán en el caché. Por ello, los autores del ataque propusieron un método de análisis de la presencia de datos en la caché (basado en el tiempo de acceso a los mismos), que, si el ataque está bien construido, puede dar una idea de lo ocurrido en los descartados. rama de ejecución especulativa y el contenido de la memoria más privilegiada.

Mecanismo

El ataque se puede llevar a cabo aproximadamente de la siguiente manera. [9]

Para leer el bit 0 del área de memoria protegida A p , el atacante:

  1. Borra la caché de las direcciones A0 u y A1 u (del espacio de direcciones de lectura/escritura del atacante)
  2. Ramas según una condición conocida por el atacante
  3. En una rama de código que, por convención, nunca debe ejecutarse (pero se ejecutará en ejecución especulativa):
  4. Lee el valor V(A p ) del área de memoria protegida en la dirección A p
  5. Realizando una operación bit a bit sobre el valor V(A p ) se obtiene la dirección A0 u o A1 u
  6. Lee la memoria en la dirección dada (A0 u o A1 u )

Durante la ejecución normal, el paso 4 provoca un error de seguridad, pero durante la ejecución especulativa en arquitecturas vulnerables, este error se ignora temporalmente y continúa con los pasos 5 y 6. Como resultado, uno de los valores se carga en el caché, desde el dirección A0 u o A1 u . Habiendo descubierto la condición de bifurcación, el procesador cancela todos los resultados de los pasos 4, 5 y 6, pero el estado del caché permanece sin cambios.

Después de eso, basta con que el atacante lea "sus" direcciones A0u y A1u , midiendo el tiempo de acceso a las mismas. Y en base a las medidas, determine qué bit (0 o 1) se leyó del área de memoria protegida A p .

Repitiendo este algoritmo para otros bits del valor V(A p ), puede obtener todo el contenido del área de memoria protegida como un todo.

Influencia

Según los investigadores, "cualquier microprocesador Intel que implemente una ejecución fuera de orden es potencialmente susceptible de sufrir ataques, es decir, cualquier procesador desde 1995 (con la excepción de Intel Itanium e Intel Atom lanzados antes de 2013)". [diez]

Se espera que la vulnerabilidad afecte a los proveedores de nube más grandes del mundo , en particular, Amazon Web Services (AWS) [11] , Google Cloud Platform , Microsoft Azure . Los proveedores de la nube permiten que diferentes usuarios ejecuten sus aplicaciones en servidores físicos compartidos. Debido a que los programas pueden procesar datos confidenciales del usuario, las medidas de seguridad y aislamiento proporcionadas por el procesador se utilizan para evitar el acceso no autorizado a la memoria privilegiada (utilizada por el kernel del sistema operativo). El ataque Meltdown, cuando se usa en sistemas que no implementan protección de software (parches), le permite eludir algunas medidas de aislamiento de memoria y obtener acceso de lectura a la memoria del sistema operativo.

Uno de los autores de la publicación de vulnerabilidad indica que los sistemas de paravirtualización ( Xen ) y los sistemas de contenedores ( Docker , LXC , Openvz , etc.) también son susceptibles de ataque [12] . Los sistemas totalmente virtualizados permiten que las aplicaciones de los usuarios lean solo la memoria del kernel invitado, no la memoria del sistema host.

Correcciones de software

Existe una forma de software confiable para combatir el ataque, en la que la tabla de páginas de los procesos de usuario no muestra las páginas de memoria del kernel del sistema operativo (con la excepción de una pequeña cantidad de áreas de servicio de memoria del kernel), la tecnología de aislamiento de la tabla de páginas del kernel (KPTI) . Al mismo tiempo, las llamadas con un cambio en el nivel de privilegio (en particular, las llamadas al sistema) se ralentizan un poco, ya que tienen que cambiar adicionalmente a otra tabla de páginas que describe toda la memoria del kernel del sistema operativo.

En algunos casos, la solución puede reducir el rendimiento de ciertas funciones, como las aplicaciones que realizan llamadas al sistema con mucha frecuencia. Al mismo tiempo, las pruebas de Phoronix no muestran ralentizaciones en los juegos que se ejecutan en Linux con el parche KPTI [17] [18] .

Véase también

Notas

  1. Gleixner, Thomas x86/cpu, x86/pti: No habilitar PTI en procesadores AMD (3 de enero de 2018). Consultado el 4 de enero de 2018. Archivado desde el original el 28 de junio de 2020.
  2. Lendacky, Tom [consejo:x86/pti x86/cpu, x86/pti: No habilitar PTI en procesadores AMD] . lkml.org . Consultado el 3 de enero de 2018. Archivado desde el original el 3 de agosto de 2020.
  3. Metz, Cadé . Los investigadores descubren dos fallas importantes en las computadoras del mundo  (inglés) , The New York Times  (2018). Archivado desde el original el 3 de enero de 2018. Consultado el 4 de enero de 2018.
  4. Los procesadores de Intel tienen un error de seguridad y la solución podría ralentizar las PC , The Verge . Archivado desde el original el 3 de enero de 2018. Consultado el 4 de enero de 2018.
  5. El rendimiento de los juegos de Linux no parece verse afectado por el trabajo de PTI x86:  Phoronix . www.phoronix.com . Consultado el 3 de enero de 2018. Archivado desde el original el 20 de febrero de 2021.
  6. CVE-2017-5754 Los sistemas con microprocesadores que utilizan ejecución especulativa y predicción de bifurcación indirecta pueden permitir la divulgación no autorizada de información a un atacante con acceso de usuario local a través de un análisis de canal lateral de la memoria caché de datos. (enlace no disponible) . Consultado el 6 de enero de 2018. Archivado desde el original el 6 de enero de 2018. 
  7. Copia archivada . Consultado el 4 de enero de 2018. Archivado desde el original el 7 de abril de 2018.
  8. Comprensión de Meltdown & Spectre: Qué saber sobre los nuevos exploits que afectan a prácticamente todas las CPU . Consultado el 6 de enero de 2018. Archivado desde el original el 6 de enero de 2018.
  9. Fusión (PDF). Meltdown y Spectre 8 seg. 5.1. Fecha de acceso: 4 de enero de 2018. Archivado desde el original el 4 de enero de 2018.
  10. Meltdown y Spectre: ¿Qué sistemas se ven afectados por Meltdown?  (Inglés) . meltdownattack.com . Consultado el 3 de enero de 2018. Archivado desde el original el 3 de enero de 2018.
  11. Divulgación de investigación de ejecución especulativa del procesador  . Amazon Web Services Inc. . Consultado el 3 de enero de 2018. Archivado desde el original el 4 de enero de 2018.
  12. Blog de tecnología Cyberus - Meltdown . Fecha de acceso: 4 de enero de 2018. Archivado desde el original el 4 de enero de 2018.
  13. Warren, Tom Microsoft emite una actualización de emergencia de Windows para errores de seguridad del procesador . El Borde . Vox Media, Inc. Consultado el 3 de enero de 2018. Archivado desde el original el 3 de enero de 2018.
  14. La falla en el diseño del procesador Intel con pérdida de memoria del kernel obliga a Linux, al rediseño de Windows  , The Register . Archivado desde el original el 7 de abril de 2018. Consultado el 4 de enero de 2018.
  15. Corbet, Jonathon KAISER: ocultar el núcleo del espacio del usuario . LWN (15 de noviembre de 2017). Consultado el 3 de enero de 2018. Archivado desde el original el 8 de diciembre de 2020.
  16. Corbet, Jonathon El estado actual del aislamiento de la tabla de páginas del núcleo . LWN (20 de diciembre de 2017). Consultado el 3 de enero de 2018. Archivado desde el original el 4 de enero de 2018.
  17. Rendimiento de juegos NVIDIA mínimamente afectado por los parches KPTI - Phoronix
  18. Pruebas de KPTI de Linux usando Linux 4.14 vs. 4,9 frente a 4.4 - Foronix

Enlaces