Dos de las vulnerabilidades más famosas de la década de 2010 estaban muy relacionadas. Spectre y Meltdown no son vulnerabilidades de software, sino más bien debilidades en el diseño básico de las CPU que dificultan la solución del problema. Los problemas en sí mismos son particularmente graves y permiten que la memoria esté expuesta a otras aplicaciones y al sistema operativo.
visión de conjunto
Las CPU utilizan diseños increíblemente avanzados para obtener el mayor rendimiento, incluidas técnicas como la ejecución especulativa y la predicción de ramas. En la ejecución especulativa, la CPU comienza a ejecutar un proceso antes de saber si es necesario para ahorrar tiempo cuando determina que es necesario. La predicción de rama es un subconjunto de ejecución especulativa que intenta predecir el resultado de un proceso y luego calcula el siguiente paso en función de ese valor predicho, lo que permite a la CPU ejecutar una serie de instrucciones fuera de orden.
La vulnerabilidad Spectre surge de la implementación de estas dos funciones. Permite que una aplicación viole las técnicas de aislamiento de almacenamiento integradas en el software más moderno que permiten la divulgación del almacenamiento, incluidos secretos como contraseñas y claves de cifrado. Uno de los problemas con Spectre es que las aplicaciones que no son vulnerables a la seguridad pueden acceder a los datos, ya que solo se requiere un malware.
La vulnerabilidad Meltdown se basa en algunas técnicas de almacenamiento, así como en el sistema de ejecución especulativa mencionado anteriormente. Utiliza una «condición de carrera» entre la ejecución del proceso y la verificación de autorización y permite que un programa malicioso acceda a la memoria de otras aplicaciones y al sistema operativo.
Sugerencia: Una «condición de carrera» es un problema en el que desea que una tarea dependa de otra, pero no imponga el orden correcto de ejecución. Esto puede resultar en que el «segundo» proceso se ejecute primero y use la memoria no inicializada que debería contener el resultado del «primer» proceso, perdiendo así el contenido anterior de esa memoria. En este caso particular, el proceso no debe ejecutarse hasta que una verificación de autorización haya confirmado que está permitido. Sin embargo, la verificación de autorización puede tener lugar en segundo lugar debido a las optimizaciones de rendimiento.
Efectos
A mediados de 2017, varios equipos descubrieron Meltdown y Spectre de forma independiente y los informaron en privado a los fabricantes de CPU que estaban desarrollando parches. Debido a los parches destinados a optimizar el rendimiento, el rendimiento de la CPU se ha reducido hasta en un 30% en el peor de los casos, y una caída del rendimiento del 2 al 14% es más representativa de la experiencia del usuario.
Las vulnerabilidades afectaron a muchas CPU x86, CPU IBM POWER y algunas CPU basadas en ARM. Meltdown afecta el hardware que normalmente se encuentra en PC y servidores en la nube. Spectre afecta a PC, servidores en la nube y dispositivos móviles. Todas las CPU de Intel desde 1995 hasta mediados de 2018 eran propensas a los problemas (con la excepción de las líneas Itanium y Atom antes de 2013). Las CPU de AMD no se vieron afectadas por Meltdown, pero eran vulnerables a Spectre.
Los proveedores de sistemas operativos desarrollan y publican parches de mitigación de software que resuelven la mayoría de los problemas. Desde mediados de 2018, Intel ha actualizado el diseño de su CPU para incluir soluciones de hardware para los problemas.
Ambos problemas se pueden aprovechar a través de sitios web maliciosos con JavaScript integrado. Por lo tanto, es muy importante asegurarse de que los parches de seguridad estén instalados en todos los sistemas, incluso si la degradación del rendimiento es grave. Desafortunadamente, los problemas no se pueden solucionar con un solo parche porque son problemas extremadamente complejos con una amplia integración con el hardware. Los parches de seguridad continuarán implementándose con el tiempo a medida que se descubran nuevas variantes.