Una vulnerabilidad para gobernarlos a todos…

¿Qué son Meltdown y Spectre?

Meldown y Spectre son dos vulnerabilidades vinculadas al hardware de los microprocesadores instalados en casi todos los dispositivos. Los fallos fueron descubiertos por varios equipos entre los que se encuentran expertos de Google Project Zero, de la firma de seguridad Cyberus, o de universidades, como Pensilvania, Maryland y Graz.

El problema tiene como raíz la llamada ejecución especulativa. Cuando un procesador ejecuta código y llega un punto en un algoritmo en el que las instrucciones se bifurcan en dos direcciones distintas dependiendo de los datos de entrada, esas instrucciones ahorran tiempo «especulando» con el camino por el que se seguirá ejecutando el proceso. Básicamente lo que hacen es tratar de adivinar lo que va a pasar, por dónde va a seguir ejecutándose el programa, y adelantarse para ganar terreno y ventaja. Si el procesador se da cuenta de que esa apuesta especulativa era errónea, retrocede en el hilo de ejecución y tira a la basura ese trabajo.

Ocurre cuando, por ejemplo, se hace click en un documento de texto y aparecen varias alternativas: abrir, copiar, eliminar… De este modo, el procesador traza la línea de código necesaria para cada una de ellas con la intención de adelantarse al usuario y funcionar más rápido. ¿El inconveniente? Que a cambio deja un rastro aprovechado por vulnerabilidades como Meltdown y Spectre.

Como indican los analistas, Meltdown tiene la forma de un escudo derretido porque, literalmente, «derrite» los límites de la seguridad establecido por el hardware. Mientras, Spectre es un fantasma porque aprovecha para colarse tras la ejecución especulativa.

En el blog de Eben Upton, fundador de Raspberri Pi -plataforma que no se encontraría afectada al no implementarla-, es posible encontrar una descripción técnica paso a paso de la ejecución especulativa,

¿Cómo funciona cada uno?

Meltdown: El primero abre una puerta a los datos ocultos en la memoria del núcleo, rompiendo el aislamiento entre el «modo kernel» y el «modo usuario». En otras palabras: permite que un proceso con bajos privilegios (cualquier programa descargado) pueda acceder al núcleo y ver los datos privados reservados para este en el sistema (como contraseñas).

Spectre: Mientras, el segundo va más allá y rompe el aislamiento entre diferentes aplicaciones. A veces cuando ejecutamos un programa en realidad iniciamos muchos a la vez, y eso es lo que permite a Spectre usar la ejecución especulativa anteriormente señalada para conocer todos los datos almacenados en la caché de ese mismo proceso. Lo único positivo (si lo hay) es que esta vulnerabilidad es mucho más compleja de explotar.

En Spectre, el ataque consiste en “engañar” a la víctima (p.ej. el kernel) para que ejecute una predicción (concretamente, una predicción de rama) falsa que mueve información sensible a una posición de memoria controlada por el atacante. En la ejecución real, la víctima no realiza realmente ese movimiento, pero la predicción ha dejado un rastro que el atacante puede emplear para determinar el valor de dicha información sensible. En primera instancia, Spectre podría parecer más grave, ya que no se puede evitar con KPTI (antes llamado KAISER) y afecta a todas las arquitecturas probadas (Intel, AMD y ARM), pero lo cierto es que es bastante difícil de explotar en un escenario real, al menos a priori. Spectre requiere que exista código en la víctima susceptible de ser explotado de esta manera, y aunque es probable que así sea, se podría ir parcheando individualmente. Inclusive podrían implementarse técnicas en los compiladores que evitaran generar código susceptible se ser explotado mediante Spectre.

Por su parte, Meltdown utiliza una técnica similar, pero abusando de otro tipo de predicción conocida como ejecución fuera de orden (Out-of-Order Execution), y aprovechándose de un bug específico de ciertos procesadores Intel. Resulta que, algunas CPUs de Intel, el “motor” que ejecuta las predicciones no tiene en cuenta los permisos de acceso a las páginas de memoria, por lo que puede acceder a cualquier región mapeada en el espacio del proceso. Es habitual tener mapeado el kernel en el espacio de todos los procesos, por cuestión de simplicidad y eficiencia. Además, es habitual que el propio mapa del kernel contenga toda o parte de la memoria física, lo cual habilita al atacante a volcar virtualmente cualquier región de la RAM. Al igual que pasaba con Spectre, el resultado de la predicción (en este caso, una lectura de una dirección de memoria virtual de una víctima, como el kernel) se descarta, pero deja un rastro observable por el atacante, que puede utilizar para obtener la información sensible. Para agravar aún más el problema, las extensiones TSX de Intel, introducidas en Haswell, hacen el ataque más eficiente, evitando generar una excepción en cada iteración.

“Meltdown sí que es un problema MUY grave, sobretodo para proveedores de máquinas virtuales y demás servicios en la nube. No es de extrañar que los de Amazon, entre otros, se hayan puesto muy nerviosos. Para que os hagáis una idea, desde una máquina virtual cualquiera, sería posible volcar la memoria completa de un Host, incluida la correspondiente al resto de máquinas virtuales de otros clientes. Meltdown es relativamente fácil de explotar, pero sí que puede mitigarse con KPTI, y no me cabe duda que es la principal motivación de su apresurada introducción. Por el momento no se ha podido reproducir el ataque que el resto de CPUs evaluadas (AMD y ARM), aunque tampoco se puede descartar categóricamente. Intel, por su parte y hasta el momento, tan sólo ha publicado una breve nota de prensa alegando que es “incorrecto” que este problema sea exclusivo de sus CPUs, lo cual sería cierto para Spectre, pero falso (de momento) para Meltdown, como hemos visto.

En resumen: a grandes rasgos, y sin entrar en detalles técnicos,  Meltdown es como si un invitado a una casa (el ordenador) no tuviera reparo en abandonar el salón para entrar en la sala de control (el kernel) donde está el cuadro de luces, la caldera y demás funciones reservadas para el dueño. Por otro lado, Spectre sería como si en una fiesta (un mismo proceso) con varias personas (los programas) alguien pudiera comprobar los bolsillos de todos los demás para ver sus pertenencias privadas.

¿Cuáles son los riesgos y a qué CPUs afecta?

Si nuestro sistema está afectado por el problema el riesgo es grave, ya que un ciberatacante que logre explotar la vulnerabilidad podría ganar permisos de superusuario en estos sistemas para controlarlas remotamente e introducir malware para todo tipo de fines.

Meltdown afecta a todos los procesadores Intel que hagan uso de la ejecución fuera de orden, y eso incluye básicamente a todos los que están funcionando a día de hoy en nuestros equipos, ya que estos procesadores llevan produciéndose desde 1995. Solo los Itanium y los Intel Atom desarrollados antes de 2013 están fuera de peligro. Los investigadores no han podido comprobar de momento si el problema afecta también a los procesadores de ARM y de AMD, y solo indican que «no está claro» si también podrían estar expuestos.

En el caso de Spectre, «prácticamente todos los sistemas» están afectados por esta vulnerabilidad. Así pues, los riesgos son mayores y plantean una amenaza para nuestros ordenadores de sobremesa, portátiles, tabletas, móviles, smartphones y cualquier otro dispositivo que cuente con un diseño de Intel, AMD o ARM.

¿Cómo comprobar si se es vulnerable?

Descargando y ejecutando el siguiente script:

$ cd /tmp/
$ wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh

$ sudo sh spectre-meltdown-checker.sh

¿Parchear a costa de perder rendimiento?

Una solución basada únicamente en software tiene una contrapartida: provoca que el sistema se ralentice entre un 5 y un 30 por ciento (dependiendo de la tarea y el modelo del procesador).

Microsoft ha realizado diversas pruebas de rendimiento en varios ordenadores con sus versiones más recientes de Windows para comprobar cuánto afecta al sistema los nuevos parches de Meltdown y Spectre, sobre todo para procesadores Intel. Las primeras cifras no son nada halagüeñas si tenemos un ordenador de hace más de tres años.

Según afirma Microsoft, los procesadores de 6ª generación (como el i7-6700K) y posteriores “sólo” empeorarán su rendimiento en cifras de un solo dígito (entre 1 y 9%). Esto apenas afectará al uso diario. Sin embargo, si usas un procesador de 4ª generación (por ejemplo, un i7-4770K) o anterior, en rendimiento va a disminuir bastante más (al menos cifras de dos dígitos). Los procesadores más recientes no resultan tan afectados porque, gracias a la arquitectura utilizada, Intel puede modificar las instrucciones para que no supongan una pérdida tan grande.

Fuentes:

Author: Raiden

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.