
Beispiel für die Nutzung des aufgedeckten "Spectre"-Exploits (CVE-2017-5753 und CVE-2017-5715)
Beispiel für die Nutzung des aufgedeckten "Spectre"-Exploits vom 2. Januar 2018 (CVE-2017-5753 und CVE-2017-5715)
Spectre durchbricht die Isolierung zwischen verschiedenen Anwendungen. Es erlaubt einem Angreifer, fehlerfreie Programme, die Best Practices befolgen, dazu zu bringen, ihre Geheimnisse preiszugeben. Tatsächlich erhöhen die Sicherheitsüberprüfungen dieser Best Practices die Angriffsfläche und können Anwendungen anfälliger für Spectre machen.
C, verwendet Bibliotheken:
Wir legen den Text "The Magic Words are Squeamish Ossifrage." im Speicher ab und versuchen dann, ihn mit dem Exploit auszulesen. Wenn das System anfällig ist, sehen Sie denselben Text in der Ausgabe, aus dem Speicher gelesen.
In diesem Code, wenn die kompilierten Anweisungen in victim_function() in strikter Programmreihenfolge ausgeführt würden, würde die Funktion nur aus array1[0..15] lesen, da array1 Größe = 16. Bei spekulativer Ausführung sind jedoch Lesevorgänge außerhalb der Grenzen möglich. Die Funktion führt mehrere Trainingsaufrufe von durch, um den Branch Predictor zu veranlassen, gültige Werte für x zu erwarten, und ruft dann mit einem x außerhalb der Grenzen auf. Der bedingte Sprung wird fehlvorhergesagt, und die nachfolgende spekulative Ausführung liest ein geheimes Byte mit dem x außerhalb der Grenzen. Der spekulative Code liest dann aus , wodurch der Wert von in den Cache-Zustand gelangt. Um den Angriff abzuschließen, wird ein einfaches Flush+Probe verwendet, um zu identifizieren, welche Cache-Zeile in geladen wurde, und so die Speicherinhalte preiszugeben. Der Angriff wird mehrmals wiederholt, sodass selbst wenn das Zielbyte zunächst nicht im Cache war, es durch die erste Iteration in den Cache gelangt.
readMemoryByte()victim_function()array2[array1[x] * 512]array1[x]array2Der nicht optimierte Code liest etwa 10 KB/s auf einem i7 Surface Pro 3.