x
1

Spectre (vulnerabilidad)



Spectre es una vulnerabilidad que afecta a los microprocesadores modernos que utilizan predicción de saltos.[1][2][3]​ En la mayoría de los procesadores, la ejecución especulativa que surge de un fallo de la predicción puede dejar efectos observables colaterales que pueden revelar información privada a un atacante. Por ejemplo, si el patrón de accesos a la memoria realizados por la mencionada ejecución especulativa depende de datos privados, el estado resultante de la caché de datos constituye un canal lateral mediante el cual un atacante puede ser capaz de obtener información acerca de los datos privados empleando un ataque sincronizado.[4][5][6]

Se han emitido dos ID de Vulnerabilidades y Exposiciones Comunes (siglas en inglés CVE) relacionados con Spectre, CVE-2017-5753 (variante 1, baipás de la comprobación de límites) y CVE-2017-5715 (variante 2, inyección de destino del salto).[7]​ Se ha descubierto que los motores JIT empleados para JavaScript son vulnerables. Un sitio web podría leer información guardada en el navegador que pertenece a otro sitio web, o acceder a información alojada en la memoria que está utilizando el navegador.[8]

Spectre es una vulnerabilidad que permite a los programas alojados en el sistema operativo del usuario acceder a una dirección arbitraria del espacio de memoria de un programa.

En lugar de una única vulnerabilidad de fácil corrección, el documento de Spectre[1]​ describe una clase entera de vulnerabilidades potenciales.[28]​ Todas esas vulnerabilidades se basan en explotar los efectos secundarios de la ejecución especulativa, una técnica empleada comúnmente para combatir la latencia de la memoria y acelerar así la ejecución en los microprocesadores modernos. En particular, Spectre se centra en la predicción de saltos, un caso especial de la ejecución especulativa. A diferencia de la vulnerabilidad Meltdown hecha pública la misma fecha, Spectre no depende de una característica en particular de la gestión de memoria de un procesador en concreto o de cómo proteja el acceso a esa memoria, sino que tiene un enfoque más general.

El punto de partida del documento de Spectre es un ataque sincronizado de canal lateral[29]​ aplicado al sistema de predicción de saltos de un microprocesador moderno que utilice ejecución fuera de orden. Si bien al nivel arquitectónico documentado en las hojas técnicas de los procesadores los resultados de un fallo en la predicción se especifican que quedarán anulados tras darse dicha circunstancia, la ejecución especulativa resultante puede aun así dejar efectos colaterales, como líneas de caché cargadas con determinada información. Estos efectos colaterales pueden posteriormente afectar a los denominados aspectos no funcionales del sistema informático. Si tales efectos colaterales  – incluyendo, entre otros, los tiempos de acceso a la memoria – resultan visibles para un programa malicioso, y puede hacerse que esos efectos dependan de información sensible en posesión del proceso que hace las veces de víctima, entonces estos efectos colatelares pueden hacer que la información sensible resulte deducible. Esto puede ocurrir aunque los sistemas de seguridad formales a nivel de arquitectura funcionen de forma correcta  – lo que sucede es que las optimizaciones en los niveles más bajos a nivel de microarquitectura dirigidas a aceleración la ejecución de código [pueden] revelar información no esencial para la correcta ejecución de un programa.

El documento de Spectre detalla el ataque en cuatro etapas esenciales:

La diferencia básica entre Spectre y Meltdown estriba en que Spectre puede utilizarse para manipular un proceso de tal forma que revele sus datos privados. Por su parte, Meltdown puede utilizarse para leer la memoria protegida del espacio de direcciones de un proceso, algo que ni siquiera el propio proceso sería normalmente capaz de hacer; en ciertos sistemas operativos no protegidos, esto incluye datos pertenecientes al núcleo o a otros procesos.

El documento de Meltdown distingue ambas vulnerabilidades de esta forma: "Meltdown es distinto de los ataques de Spectre de varias maneras, pero la principal diferencia es que Spectre necesita ser adaptado al entorno de software del proceso marcado como víctima, si bien por otro lado sus ataques son viables en una mayor variedad de CPU y no pueden mitigarse con KAISER".[30]

Si bien Spectre es más fácil de explotar con un lenguaje compilado como C o C++ ejecutando de forma local código máquina, también puede explotarse de forma remota empleando código alojado en páginas web maliciosas, por ejemplo con un lenguaje interpretado como es JavaScript, que se ejecuta de forma local al utilizar un navegador web. El programa malicioso dispondría entonces de acceso a toda la memoria mapeada al espacio de direcciones del navegador.[31]

La explotación vía JavaScript ejecutado remotamente sigue un procedimiento similar al de la explotación de código albergado localmente: limpiar caché → entrenamiento defectuoso del predictor de saltos → lecturas sincronizadas (monitorizando los aciertos y fallos de la caché).

La falta de una instrucción clflush (limpieza de línea de caché) en JavaScript exige una técnica alternativa. Hay varias políticas automáticas de desahucio de la caché entre las que la CPU puede elegir, y que pueda usarse la vulnerabilidad depende de que pueda forzarse ese desahucio de datos. Se descubrió que usar un segundo índice en la matriz grande, que se mantenía con datos de varias iteraciones por detrás del primer índice, hacía que se utilizase la política del usado de forma menos reciente. Esto permite que la vulnerabilidad pueda limpiar la caché simplemente haciendo lecturas incrementales sobre un gran conjunto de datos.

El predictor de saltos se entrenaría de forma defectuosa al operar una y otra vez sobre un conjunto muy grande de datos empleando operaciones orientadas a bits para definir el índice con un valor dentro de rango, y entonces usando la dirección fuera de límites para la iteración final.

Entonces se necesitaría un temporizador de alta precisión para poder determinar si un conjunto de lecturas han conducido a un acierto o a un fallo de la caché. Si bien navegadores como Google Chrome, Firefox y Tor (basado en Firefox) han puesto restricciones en la resolución de sus temporizadores (Spectre necesita una alta resolución para determinar si ha habido aciertos o fallos de la caché), en el momento de redactar la documentación de la vulnerabilidad, el autor de Spectre fue capaz de crear un temporizador de alta resolución empleando la función de ejecución de scripts en segundo plano de HTML5.

Fue necesario programar y analizar cuidadosamente el código máquina ejecutado por el compilador JIT para asegurar que las funciones de limpieza de la caché y las lecturas que aprovechaban la vulnerabilidad no fueran eliminadas por algún tipo de optimización.

Desde 2018, casi todos los sistemas informáticos están potencialmente afectados por Spectre, incluidos los equipos de sobremesa, portátiles y dispositivos móviles. Específicamente, se ha demostrado que Spectre funciona en procesadores Intel, AMD, los basados en ARM y los de IBM.[32][33][34]​ Intel respondió a las vulnerabilidades de seguridad reportadas con una declaración oficial.[35]​ En un principio, AMD aseguró que la vulnerabilidad a una de las dos variantes de Spectre no se había demostrado en sus procesadores, afirmando que el riesgo de explotación era «casi nulo» debido a las diferencias en la arquitectura de sus procesadores.[36]​ Sin embargo, posteriormente AMD anunció que sus procesadores estaban afectados por ambas variantes de Spectre.[37][38][39]

Los investigadores han indicado que la vulnerabilidad Spectre puede afectar posiblemente a algunos procesadores Intel, AMD y ARM.[40][41][42][43]​ Concretamente, los procesadores con ejecución especulativa son los afectados por estas vulnerabilidades.[44]

ARM ha informado que la mayoría de sus procesadores no son vulnerables, y ha publicado una lista de los procesadores en concreto que sí están afectados por la vulnerabilidad Spectre: Cortex-R7, Cortex-R8, Cortex-A8, Cortex-A9, Cortex-A15, Cortex-A17, Cortex-A57, Cortex-A72, Cortex-A73 y Cortex-A75.[45]

Spectre tiene el potencial de tener un mayor impacto en los proveedores de la nube que Meltdown. Mientras que Meltdown permite a las aplicaciones no autorizadas leer desde una memoria privilegiada para obtener datos confidenciales de procesos que se ejecutan en el mismo servidor en nube, Spectre puede permitir que programas maliciosos induzcan a un hipervisor a transmitir los datos a un sistema invitado que se ejecute en él,[46]​ como es el caso de una máquina virtual.

Puesto que Spectre representa una clase entera de ataques, lo más probable es que no pueda haber un único parche general para él.[3]​ Aunque ya se está trabajando para abordar casos especiales de la vulnerabilidad, el sitio web original dedicado a Spectre y Meltdown afirma que «dado que [Spectre] no es fácil de arreglar, nos perseguirá durante mucho tiempo».[4]​ Al mismo tiempo, y según Dell: "No se ha tenido constancia hasta la fecha (7 de febrero de 2018) de que estas vulnerabilidades hayan sido puestas en práctica en el mundo real, a pesar de que los investigadores han publicado pruebas de concepto".[47][48]

Se han reportado varios procedimientos a seguir para proteger los ordenadores domésticos y dispositivos relacionados frente a Meltdown y Spectre.[49][50][51][52]​ Se ha informado de que los parches para Spectre degradan el rendimiento de forma significativa, especialmente en los ordenadores más antiguos; en las nuevas plataformas de octava generación se han medido caídas de rendimiento de entre un 2 y un 14 % realizando pruebas de referencia.[5][53][54][55]​ El 18 de enero de 2018 se informó de problemas con reinicios no deseados debidos a los parches para Meltdown y Spectre, incluso en el caso de chips recientes de Intel.[56]

Se ha sugerido[57]​ que el coste de la mitigación puede aliviarse en procesadores que soporten la limpieza selectiva del TLB, una característica también conocida como identificador de contexto de proceso (PCID) en la arquitectura Intel 64, y número de espacio de dirección (ASN) en la arquitectura Alpha. Esto se debe a que la limpieza selectiva hace que el comportamiento del TLB que resulta crucial para la vulnerabilidad se aísle entre procesos, sin estar constantemente limpiando el TLB en su totalidad, principal motivo del coste de la mitigación.

Se han reportado varios procedimientos a seguir para proteger los ordenadores domésticos y dispositivos relacionados frente a Meltdown y Spectre.[49][50][51][52]

Puesto que es posible la explotación a través de Javascript incrustado en los sitios web,[1]Chrome 64 incluirá por defecto mitigaciones contra el ataque, y los usuarios de Chrome 63 pueden mitigar manualmente el ataque activando la función Strict Site Isolation (chrome://flags#enable-site-per-process).[60]

A partir de Firefox 57.0.4, Mozilla está reduciendo la resolución de los temporizadores JavaScript para ayudar a prevenir ataques sincronizados, y está trabajando y planificando técnicas de ofuscación de tiempos para futuras versiones.[18][61]

El 4 de enero de 2018 Google detalló una nueva técnica en su blog de seguridad llamada retpoline —contracción en inglés de return trampoline— que puede detener la vulnerabilidad Spectre añadiendo una sobrecarga insignificante para el procesador, y consiste en dirigir a nivel del compilador las ramas indirectas hacia un destino distinto, de forma que no pueda tener lugar una ejecución especulativa fuera de orden que sea vulnerable.[62][63]​ Aunque se desarrolló para el juego de instrucciones de los procesadores x86, los ingenieros de Google creen que la técnica también es transferible a otros procesadores.[64]

El 25 de enero de 2018 se presentó un informe sobre el estado actual así como de las posibles consideraciones a tomar de cara al futuro con el fin de resolver las vulnerabilidades Meltdown y Spectre.[65]

Después de que Intel anunciase que la mitigación de Spectre puede activarse manualmente como una "medida de seguridad" en lugar de considerarla un fallo, el creador de Linux, Linus Torvalds calificó los parches como "una completa basura".[66]Ingo Molnár sugirió entonces utilizar el sistema de monitorización de funciones integrado en el kernel Linux para corregir la vulnerabilidad Spectre sin soporte desde microcódigo para la especulación restringida de saltos indirectos (IBRS).[67]​ De este modo, solo habría un impacto en el rendimiento en el caso de los procesadores basados en las microarquitecturas Skylake de Intel y otras más recientes.[56][68]



Escribe un comentario o lo que quieras sobre Spectre (vulnerabilidad) (directo, no tienes que registrarte)


Comentarios
(de más nuevos a más antiguos)


Aún no hay comentarios, ¡deja el primero!