
Ejemplo de uso del exploit revelado "Spectre" (CVE-2017-5753 y CVE-2017-5715)
Ejemplo de uso del exploit "Spectre" revelado el 2 de enero de 2018 (CVE-2017-5753 y CVE-2017-5715)
Spectre rompe el aislamiento entre diferentes aplicaciones. Permite a un atacante engañar a programas sin errores, que siguen las mejores prácticas, para que revelen sus secretos. De hecho, las comprobaciones de seguridad de dichas mejores prácticas aumentan la superficie de ataque y pueden hacer que las aplicaciones sean más susceptibles a Spectre.
C, usa librerías:
Colocamos el texto "The Magic Words are Squeamish Ossifrage." en la memoria y luego intentamos leerlo usando el exploit. Si el sistema es vulnerable, verás el mismo texto en la salida, leído desde la memoria.
En este código, si las instrucciones compiladas en victim_function() se ejecutaran en estricto orden de programa, la función solo leería desde array1[0..15], ya que el tamaño de array1 es 16. Sin embargo, cuando se ejecuta de forma especulativa, son posibles lecturas fuera de los límites. La función readMemoryByte() realiza varias llamadas de entrenamiento a victim_function() para que el predictor de saltos espere valores válidos para x; después la llama con una x fuera de los límites. El salto condicional se predice incorrectamente y la ejecución especulativa resultante lee un byte secreto usando la x fuera de límites. El código especulativo lee entonces de array2[array1[x] * 512], filtrando el valor de array1[x] en el estado de la caché. Para completar el ataque, se utiliza un simple flush+probe para identificar qué línea de caché de array2 se cargó, revelando el contenido de la memoria. El ataque se repite varias veces, de modo que incluso si el byte objetivo no estaba inicialmente en caché, la primera iteración lo traerá a la caché.
El código sin optimizar lee aproximadamente 10KB/segundo en un i7 Surface Pro 3.