Beim klassischen Spectre-v2-Seitenkanalangriff wird die CPU dazu verleitet, kurzzeitig Instruktionen an einem falsch vorhergesagten Sprungziel auszuführen; die dabei berührten Daten lassen sich anschließend über den CPU-Cache ablesen. Die Variante BTR erreicht dies laut dem technischen Papier der Forscher dadurch, dass eine alte Vorhersage weiterverwendet wird, nachdem der Code an der betreffenden Adresse längst ersetzt wurde.

Der Angriff setzt an der Lücke zwischen JIT-kompiliertem Code und der Sprungvorhersage an: Gibt eine JIT-Engine Code frei und legt neuen Code an dieselbe Adresse, kann sich der Prozessor weiterhin an ein indirektes Sprungziel aus dem alten Code erinnern. Bei einem späteren Sprung führt er dann spekulativ kurz den neuen Code an diesem veralteten Ziel aus, obwohl die reguläre Ausführung anderswo hinführen würde.

In ihren Linux-Tests nutzten die Forscher unprivilegierte klassische BPF-Programme, um die Vorhersage zu trainieren, gaben das ursprüngliche Programm frei und platzierten ein anderes im wiederverwendeten Speicher. Das veraltete Sprungziel brachte die CPU dazu, vom Angreifer präparierte Instruktionen an einem versetzten Offset auszuführen. Der dabei entstehende Datenzugriff hinterließ eine messbare Cache-Spur, aus der sich die Daten Byte für Byte rekonstruieren ließen.

Anzeige

Anschließend spürten die Forscher einen laufenden ‘su’-Prozess auf und lasen aus dessen Speicher den Root-Passwort-Hash mit acht Byte pro Sekunde aus. “Wir haben den vollständigen Exploit sowohl auf Raptor Cove als auch auf Lion Cove ausgewertet und das Passwort im Mittel innerhalb von 3 beziehungsweise 5 Minuten ausgelesen”, schreiben sie.

Das Papier zeigt zwei durchgängige Exploits gegen Linux-cBPF: einen in der Standardkonfiguration und einen bei aktivierter Härtungsoption Constant Blinding. Im zweiten Fall kodiert der Exploit die angreiferkontrollierten Instruktionen in Sprung-Offsets und gelangt ebenfalls binnen fünf Minuten an den Hash. Ein ausgelesener Hash ist allerdings nicht dasselbe wie ein Klartextpasswort — er lässt sich offline oder mit Cloud-Ressourcen knacken, wobei Erfolg vom Hash-Algorithmus und der Passwortstärke abhängt.

Bei den übrigen untersuchten JIT-Engines blieb es bei Teilerfolgen. In Firefox’ SpiderMonkey belegte der Proof-of-Concept zwar, dass veraltete Vorhersagen die Code-Wiederverwendung überdauern, ein vollständiger Browser-Exploit gelang jedoch nicht. In GraalVM fanden die Forscher einen Weg, eine Sandbox-Prüfung spekulativ zu überspringen; die Aktivität der Engine löschte die Vorhersagen in den Experimenten aber, bevor der Angriff abgeschlossen werden konnte.

Die Reichweite des Problems ist nach Einschätzung der Forscher groß: “Indirekte Sprungvorhersage ist modernen CPUs inhärent, und BTR nutzt die Desynchronisierung zwischen Sprungvorhersage und dem tatsächlichen Zustand des Codes aus”, erklärt VUSec. “Keine aktuelle CPU verfügt über einen Mechanismus, um beides synchron zu halten — solange die Hersteller keinen nachrüsten, ist Ihre CPU verwundbar.” Das Verhalten sei auf jeder getesteten CPU bestätigt worden, darunter Prozessoren von Intel, AMD und Arm.

Empfohlen werden Betriebssystem- und Firmware-Updates; Linux-Anwender sollten auf die aktuelle Kernel-Version wechseln. Frühere VUSec-Arbeiten zu spekulativer Ausführung und mikroarchitektonischen Angriffen umfassen unter anderem RIDL, BHI und SLAM.