
2. Januar 2018 (CVE-2017-5753 und CVE-2017-5715) "Gespenst" Spectre Exploit
Wir legen den Text „The Magic Words are Squeamish Ossifrage." im Speicher ab und versuchen dann, ihn durch Ausnutzung der Sicherheitslücke zu lesen. Wenn das System anfällig ist, sehen Sie denselben Text in der Standardausgabe.
In diesem Code liest die Funktion victim_function() nur aus array1[0..15], wenn die Compiler-Anweisungen in strikter Programmreihenfolge ausgeführt werden, da array1 size = 16 ist. Es ist jedoch möglich, dass die Ausführungszeit über die Lesezeit hinausgeht. Die Funktion 读取内存 byte() führt mehrere Trainingsaufrufe von victim_function() durch, um den Branch Predictor zu veranlassen, gültige Werte von x zu erwarten, und ruft dann x außerhalb der Grenzen auf. Der bedingte Sprung kann nicht vorhergesagt werden, und die anschließende spekulative Ausführung verwendet ein x außerhalb der Grenzen, um ein unbekanntes Byte zu lesen. Dann liest der vorhersagende Code aus array2[array1[x] * 512] und gibt so den Wert von array1[x] in den Cache preis. Um den Angriff abzuschließen, wird ein einfaches „Flush+Probe" verwendet, um zu identifizieren, in welcher Cache-Zeile sich array2 befindet, und so den Speicherinhalt preiszugeben. Der Angriff wird mehrfach wiederholt, sodass selbst wenn das Zielbyte anfangs nicht zwischengespeichert ist, die erste Iteration es in den Cache bringt. Auf einem i7 Surface Pro 3 erreicht der optimierte Code eine Lesegeschwindigkeit von etwa 10 KB/s.