Google hat mehrere Prototypen von Exploits veröffentlicht, die die Möglichkeit demonstrieren, Schwachstellen der Spectre-Klasse auszunutzen, indem JavaScript-Code im Browser ausgeführt wird, um dabei zuvor implementierte Schutzmechanismen zu umgehen. Die Exploits können verwendet werden, um auf den Speicher des Prozesses zuzugreifen, der Webinhalt im aktuellen Tab verarbeitet. Zum Testen der Funktionsweise des Exploits wurde die Website leaky.page gestartet, und der Code, der die Logik beschreibt, wurde auf GitHub veröffentlicht.
Der vorgeschlagene Prototyp ist darauf ausgelegt, Angriffe auf Systeme mit Intel Core i7-6500U Prozessoren in einer Umgebung mit Linux und Chrome 88 durchzuführen. Um den Exploit in anderen Umgebungen anzuwenden, sind Änderungen erforderlich. Die Ausnutzungsmethode ist nicht spezifisch für Intel-Prozessoren — nach entsprechender Anpassung wurde die Funktionsfähigkeit des Exploits auf Systemen mit CPUs anderer Hersteller, einschließlich Apple M1 auf ARM-Architektur, bestätigt. Nach geringfügigen Anpassungen funktioniert der Exploit auch in anderen Betriebssystemen und in anderen auf Chromium basierenden Browsern.
In einer Umgebung basierend auf Standard-Chrome 88 und Intel Skylake-Prozessoren gelang es, Daten aus dem Prozess, der für die Verarbeitung von Webinhalten im aktuellen Chrome-Tab zuständig ist (Renderer-Prozess), mit einer Rate von 1 Kilobyte pro Sekunde auszulesen. Zusätzlich wurden alternative Prototypen entwickelt, zum Beispiel ein Exploit, der die Stabilität verringert, aber die Auslesegeschwindigkeit auf bis zu 8 kB/s erhöht, indem der performance.now()-Timer mit einer Genauigkeit von 5 Mikrosekunden (0,005 Millisekunden) verwendet wird. Zudem wurde eine Variante vorbereitet, die mit einem Timer von einer Millisekunde Genauigkeit arbeitet und genutzt werden kann, um den Speicher eines anderen Prozesses mit einer Rate von etwa 60 Byte pro Sekunde auszulesen.
Der veröffentlichte Demonstrationscode besteht aus drei Teilen. Der erste Teil kalibriert den Timer, um die Ausführungszeit der Operationen zu bewerten, die erforderlich sind, um Daten, die im Cache des Prozessors aufgrund spekulativer Ausführung von CPU-Anweisungen verbleiben, wiederherzustellen. Der zweite Teil ermittelt das Speichermapping, das bei der Platzierung des JavaScript-Arrays verwendet wird.
Der dritte Teil nutzt die Spectre-Sicherheitsanfälligkeit, um den Inhalt des Speichers des aktuellen Prozesses zu bestimmen, indem er Bedingungen für die spekulative Ausführung bestimmter Operationen schafft. Die Ergebnisse dieser Operationen werden vom Prozessor nach der Feststellung einer fehlerhaften Prognose verworfen, jedoch bleiben Spuren der Ausführung im gemeinsamen Cache und können durch Methoden zur Bestimmung des Cache-Inhalts über Seitenkanäle rekonstruiert werden, welche die Zugriffszeit auf zwischengespeicherte und nicht zwischengespeicherte Daten analysieren.
Die vorgeschlagene Ausbeutungstechnik erlaubt es, ohne hochpräzise Timer auszukommen, die über die API performance.now() verfügbar sind, und ohne Unterstützung für den Typ SharedArrayBuffer, der die Erstellung von Arrays im shared Memory ermöglicht. Der Exploit umfasst ein Spectre Gadget, das eine kontrollierte spekulative Ausführung von Code auslöst, und einen Seitenkanalanalysator, der die im Cache befindlichen Daten identifiziert, die während der spekulativen Ausführung erlangt wurden.
Das Gadget wird durch ein Array in JavaScript realisiert, das versucht, auf einen Bereich außerhalb der Puffergrenzen zuzugreifen, was den Zustand des Vorhersageblocks für Sprünge beeinflusst, da der Compiler eine Größenüberprüfung des Puffers hinzufügt (der Prozessor führt spekulativ einen Zugriff aus, rollt aber den Zustand nach der Überprüfung zurück). Für die Analyse des Cache-Inhalts unter Bedingungen unzureichender Timer-Genauigkeit wurde eine Methode vorgeschlagen, die die in Prozessoren verwendete Datenverdrängungsstrategie Tree-PLRU umgeht und es ermöglicht, durch die Erhöhung der Zyklen signifikant den Zeitunterschied beim Abrufen eines Wertes aus dem Cache und beim Fehlen eines Wertes im Cache zu vergrößern.
Es wird berichtet, dass Google einen Prototyp eines Exploits veröffentlicht hat, um die Realitätsnähe von Angriffen unter Verwendung von Spectre-ähnlichen Schwachstellen zu demonstrieren und um Webentwickler zu ermutigen, Techniken anzuwenden, die die Risiken solcher Angriffe minimieren. Google ist der Ansicht, dass ohne erhebliche Überarbeitung des vorgeschlagenen Prototyps universelle Exploits, die nicht nur zur Demonstration, sondern auch für den allgemeinen Einsatz bereit sind, nicht erstellt werden können.
Um das Risiko zu verringern, wird Website-Besitzern empfohlen, kürzlich implementierte Header wie Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X-Content-Type-Options und SameSite Cookie zu verwenden. Diese Mechanismen bieten keinen direkten Schutz vor Angriffen, erlauben jedoch, die Daten der Website von einer möglichen Offenlegung in Prozessen zu isolieren, in denen JavaScript-Code von Angreifern ausgeführt werden kann (diese Offenlegung erfolgt aus dem Speicher des aktuellen Prozesses, in dem neben dem Code des Angreifers möglicherweise auch Daten einer anderen Website verarbeitet werden, die im selben Tab geöffnet ist). Die Hauptidee besteht darin, die Ausführung von Website-Code in unterschiedlichen Prozessen vom Code Dritter zu trennen, der aus unsicheren Quellen stammt, beispielsweise von Inhalten, die über iframes eingebunden werden.

Quelle: opennet.ru
