Meltdown y Spectre

2018 no comienza bien en cuanto a la ciberseguridad, un importante fallo se extiende en muchos de los procesadores que usamos diariamente y que podría poner en riesgo no solo ordenadores personales, dispositivos móviles, si no servidores,  etc pero es que además ronda por las cabezas de mucha gente que la solución pase por un parche que produzca una perdida de productividad de los procesadores o incluso el reemplazo de los propios procesadores (aunque aparentemente esta perdida a día de hoy supuestamente es mínima).

Principalmente están afectados CPUs Intel y de alguna forma las CPUs AMD, pero también las de arquitectura ARM (lo que toca también a los dispositivos móviles). Esto supone que practicamente dispositivos de cualquier tipo están afectados tanto en PC, móviles, etc. incluyendo dispositivos de Apple: iMACs, MacBooks, iPhones, iPads, etc están afectados.

Sin embargo, en todo esto, hay procesadores que no están afectados como los Intel Atom o los Itanium producidos antes de 2013 (los cuales no serían vulnerables a Meltdown), o los procesadores que utilizan las Raspberry Pi que no utilizan ejecución especulativa.

Ejecución especulativa

Antes de nada vamos a hablar de lo que es la ejecución especulativa. Voy a intentar dar un ejemplo de una manera muy general que permita entenderla a grandes rasgos. Imaginemos el siguiente “pseudocódigo” (¡o ya casi código!):

  x=calcularX();
  if(x==1) {
      b=calcularBForma1();
  }
  else {
      b=calcularBForma2();
  }

En un procesador que haga esta ejecución de forma secuencial, primero llamaría a calcularX(), una vez averiguado el valor de x, si este es igual a 1 realiza el calculo de b usando calcularBForma1(), y si no es igual a 1 lo haría con calcularBForma2(). Sin embargo, en ejecución especulativa, suponiendo que podamos hacer ejecuciones paralelas, lo que haríamos sería ejecutar simultaneamente calcularX(), calcularBForma1() y calcularBForma2(), almacenando los resultados en una caché del procesador. Supongamos que las funciones calcularBForma1() y calcularBForma2() han terminado antes que calcularX(), cuando esta ultima ha terminado, podríamos tener un ahorro importante de tiempo de ejecución puesto que si x=1 simplemente habrá que coger el resultado de b que nos devolvió calcularBForma1() y desechar el resultado de calcularBForma2(), o a la inversa. Es decir, antes de saber el verdadero resultado, estamos especulando de manera paralela las diversas posibilidades para ahorrar trabajo posterior. Es precisamente esta ejecución especulativ,a la que puede tener errores que supongan diversas filtraciones de información. Hay que decir que la caché de una CPU no es legible por parte de un proceso no autorizado, puesto que es interno de la CPU, sin embargo, se ha demostrado que se puede usar un ataque coordinado a la caché: una modalidad de ataque de canal lateral.

Vulnerabilidad Meltdown

Meltdown (vinculado a la vulnerabilidad CVE-2017-5754) es un agujero de seguridad a nivel de hardware que afecta a los procesadores Intel x86 desde 1995 (salvando, como dijimos, los Itanium y los Atom anteriores a 2013) y a algunos procesadores con arquitectura ARM (se piensa a día de hoy que no afecta a procesadores AMD). Esta vulnerabilidad permite que un proceso malicioso pueda realizar lectura de memoria física, del kernel o mapeada a otro proceso, sin que pueda o no acceder. Es decir, podría romper la seguridad entre el usuario y el sistema operativo pudiendo alcanzar a cualquier proceso o incluso al propio sistema operativo desapareciendo el aislamiento entre el espacio destinado al Kernel y el espacio de usuario.  Mucho mas detalle en el paper de Meltdown: https://meltdownattack.com/meltdown.pdf

Captura extraida del paper de Meltdown donde muestra el gestor de contraseñas de Firefox 56 mostrando las claves cuando no debería hacerlo.

Captura extraída del paper de Meltdown donde muestra el gestor de contraseñas de Firefox 56 mostrando las claves cuando no debería hacerlo.

 

Vulnerabilidad Spectre

En teoría Spectre podría llevarse a cabo con éxito en procesadores Intel, pero también AMD y ARM, esto está vinculado a las vulnerabilidades CVE-2017-5753 y CVE-2017-5715. Spectre rompe el aislamiento entre aplicaciones pudiéndose engañar a cualquier aplicación por segura que sea pudiendo forzar al sistema operativo a acceder a una ubicación arbitraria en el espacio de memoria del programa. En la practica, a día de hoy, es mas complejo de poner en práctica que Meltdown. Mas información en el paper de Spectre: https://spectreattack.com/spectre.pdf

 

La diferencia mas importante entre Meltdown y Spectre es que Meltdown se basa en características específicas en los procesadores Intel pudiéndose engañar a las CPUs para que especulen con datos del sistema protegidos y se vean a obligar a manejar con garantías la excepción de seguridad relacionada. Sin embargo, Spectre es mas estadístico.

Impacto y mitigación

La gravedad de estos dos problemas en conjunto es que provoca impacto en estaciones de trabajo, portátiles y ordenadores personales. Pero el impacto mas importante se encuentra en servidores, servidores cloud, sistemas de virtualización, etc. que están continuamente expuestos y que pueden ser incluso críticos.

Visto desde el punto de vista a entornos de virtualización y cloud: mientras que Meltdown permite a aplicaciones no autorizadas a leer datos confidenciales de procesos que se ejecutan en el mismo servidor de nube; Spectre podría permitir que programas maliciosos induzcan al hypervisor a transmitir datos a un sistema huésped que se esté ejecutando en el.

El impacto real de Spectre se complica, aunque puede ser mas difícil de poner en práctica, puede ser mucho mas difícil de defender debido a la generalidad del problema.

La mitigación de Spectre aún está por ver, Google defiende que podría resolverse de una manera bastante eficaz mediante su nueva técnica detallada en el su blog de seguridad usándose una cantidad casi insignificante de sobrecarga a la CPU. Sin embargo, en contra, se ha llegado a especular, que podrían ser necesarios cambios importantes en la arquitectura del procesador para eliminar el problema Spectre de raíz.

Muchos de los parches se centran en Meltdown que es ahora mismo es el problema mas grave, ya que es viable poner en práctica el ataque y debe mitigarse inmediatamente para evitar males mayores.

Demostración de uno de los investigadores de Meltdown, Michael Schwarz, la viabilidad de un robo de contraseñas usando esta vulnerabilidad

 

Intel comenta que la mitigación de Meltdown el representar “cualquier impacto en el rendimiento depende de la carga de trabajo y, para el usuario medio de PC, no debería ser significativo y se mitigará con el tiempo”, aunque en algunos casos no se ha visto una bajada de rendimiento significativo en otras pruebas en bases de datos como PostgreSQL y Redis si se encontró un impacto en el rendimiento.

A nivel de sistema operativo se ha tratado de mitigar con las siguientes actualizaciones:

  • Linux: Existe un parche lanzado, usando KPTI que previene Meltdown. KPTI es una evolución del llamado aislamiento de tablas de páginas del kernel antes llamado Kaiser. KPTI pretende mejorar el aislamiento entre las memorias de espacio de usuario y el espacio del kernel, mejorando la fortaleza en cualquier intento en reventar la aleatoriedad en la disposición del espacio de direcciones del Kernel (KASLR). Una lectura muy interesante, muy recomendable y bien explicado es en Wikipedia.
  • Windows: hay una actualización urgente. En Windows 10 se hará de forma automática (KB4056892). Sin embargo, en Windows 7 (KB4056894) y Windows 8 habrá que hacerla desde Windows Update.
  • MacOS: Existe una actualización parcial en High Sierra 10.13.2  que mitiga los efectos en el navegador Safari.
  • iOS: En teoría Meltdown está solucionado a partir de iOS 11.2 y tvOS 11.2.
  • Android: Estar atentos a las actualizaciones OTA en Nexus y Pixel. En principio se incluye en la actualización de seguridad de enero de 2018. Es cuestión de que los fabricantes reaccionen a tiempo (y estaría bien que todos los fabricantes reaccionen en todos los dispositivos afectados independientemente de su antigüedad ).
  • VMWare ESXi: Revisar el VMSA publicado.

Uno de los riesgos que se comenta es la ejecución de JavaScript en el navegador al visitar distintas páginas y los riesgos que conlleva ejecutar o acceder a zonas no permitidas con procesadores con ejecución especulativa. Por tanto, los parches inmediatos en los navegadores serían:

  • Chrome: La versión 64 pretende resolver las vulnerabilidades y tiene programada su salida para el 23 de enero.
  • Firefox: La versión 57 ya disponible, se han tomado algunas medidas.
  • Safari: En MacOS se ha parcheado, como hemos comentado.

Creo que esta vulnerabilidad puede abrir un amplio debate:

  • La fuerte dependencia de determinadas tecnologías, arquitecturas, etc. que pueden suponer un problema en sistemas cloud,
  • En los smartphones la fragmentación y la fuerte dependencia de los fabricantes para sacar nuevas versiones de Android en sus dispositivos vendidos por encima de los 2 años de edad.
  • La crisis desatada con las prisas en fabricantes y proveedores de software y hardware que pueden poner en peligro la estabilidad de los sistemas : en este caso el ejemplo se da con el parche que cierra la vulnerabilidad Meltdown de Microsoft que aplicado de forma general ha desatado diversos problemas en procesadores AMD Athlon X2 (¡Que no están afectados por Meltdown!) en Windows 7 y Windows 10 provocando cuelgues, etc.  (pero que no hace tanto, con otros problemas distintos pero también muy graves, otros fabricantes con esas prisas también se han resbalado).

El debate está servido. ¿Como ves el alcance de esta vulnerabilidad?

Deja un comentario

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