Google demonstriert die Ausnutzung von Spectre-Schwachstellen durch die Ausführung von JavaScript im Browser

Google hat mehrere Exploit-Prototypen veröffentlicht, die die Möglichkeit zeigen, Schwachstellen der Spectre-Klasse auszunutzen, wenn JavaScript-Code in einem Browser ausgeführt wird und zuvor hinzugefügte Schutzmethoden umgangen werden. Mithilfe von Exploits kann auf den Speicher eines Prozesses zugegriffen werden, der Webinhalte im aktuellen Tab verarbeitet. Um die Funktionsweise des Exploits zu testen, wurde die Website „leaky.page“ gestartet und der Code, der die Logik der Arbeit beschreibt, auf GitHub veröffentlicht.

Der vorgeschlagene Prototyp soll Systeme mit Intel Core i7-6500U-Prozessoren in einer Linux- und Chrome 88-Umgebung angreifen. Um den Exploit auf andere Umgebungen anzuwenden, sind Änderungen erforderlich. Die Ausnutzungsmethode ist nicht spezifisch für Intel-Prozessoren – nach entsprechender Anpassung wurde bestätigt, dass der Exploit auch auf Systemen mit CPUs anderer Hersteller funktioniert, darunter dem Apple M1 auf Basis der ARM-Architektur. Nach geringfügigen Anpassungen funktioniert der Exploit auch auf anderen Betriebssystemen und anderen Browsern, die auf der Chromium-Engine basieren.

In einer Umgebung, die auf Standard-Chrome-88- und Intel-Skylake-Prozessoren basierte, wurden Daten mit einer Rate von 1 Kilobyte pro Sekunde aus dem Prozess verloren, der für die Verarbeitung von Webinhalten im aktuellen Chrome-Tab verantwortlich ist (Renderer-Prozess). Darüber hinaus wurden alternative Prototypen entwickelt, beispielsweise ein Exploit, der es ermöglicht, auf Kosten einer verringerten Stabilität die Leakage-Rate auf 8 kB/s zu erhöhen, wenn der performance.now()-Timer mit einer Genauigkeit von 5 Mikrosekunden (0.005 Millisekunden) verwendet wird. . Es wurde auch eine Variante vorbereitet, die mit einer Timergenauigkeit von einer Millisekunde arbeitet und mit der sich der Zugriff auf den Speicher eines anderen Prozesses mit einer Geschwindigkeit von etwa 60 Bytes pro Sekunde organisieren lässt.

Der veröffentlichte Democode besteht aus drei Teilen. Der erste Teil kalibriert den Timer, um die Ausführungszeit der Vorgänge abzuschätzen, die erforderlich sind, um Daten wiederherzustellen, die aufgrund der spekulativen Ausführung von CPU-Anweisungen im Prozessor-Cache verbleiben. Der zweite Teil bestimmt das Speicherlayout, das beim Zuweisen des JavaScript-Arrays verwendet wird.

Der dritte Teil nutzt die Spectre-Sicherheitsanfälligkeit direkt aus, um den Inhalt des Speichers des aktuellen Prozesses zu ermitteln, indem Bedingungen für die spekulative Ausführung bestimmter Vorgänge geschaffen werden, deren Ergebnis vom Prozessor verworfen wird, nachdem festgestellt wurde, dass die Vorhersage nicht erfolgreich war, aber die Ausführung nicht erfolgreich war Spuren werden im allgemeinen Cache abgelegt und können mithilfe von Methoden zur Bestimmung des Cache-Inhalts durch Drittkanäle wiederhergestellt werden, die Änderungen in der Zugriffszeit auf zwischengespeicherte und nicht zwischengespeicherte Daten analysieren.

Die vorgeschlagene Ausnutzungstechnik eliminiert die hochpräzisen Timer, die über die performance.now()-API verfügbar sind, und ohne Unterstützung für den SharedArrayBuffer-Typ, der die Erstellung von Arrays im gemeinsam genutzten Speicher ermöglicht. Der Exploit umfasst das Spectre-Gadget, das eine kontrollierte spekulative Codeausführung ermöglicht, und einen Seitenkanal-Leak-Analysator, der die während der spekulativen Ausführung erhaltenen Daten ermittelt, die in den Cache gelangt sind.

Das Gadget wird mithilfe eines JavaScript-Arrays implementiert, in dem versucht wird, auf einen Bereich außerhalb der Grenzen des Puffers zuzugreifen, was sich aufgrund der vom Compiler (dem Prozessor, mit Blick auf die Zukunft) hinzugefügten Puffergrößenprüfung auf den Status des Verzweigungsvorhersageblocks auswirkt , führt den Zugriff spekulativ durch, setzt den Zustand nach der Prüfung jedoch zurück. Um den Inhalt des Caches unter Bedingungen unzureichender Timer-Genauigkeit zu analysieren, wird eine Methode vorgeschlagen, die die in Prozessoren verwendete Tree-PLRU-Cache-Eviction-Strategie täuscht und es ermöglicht, durch Erhöhung der Anzahl der Zyklen den Zeitunterschied bei der Rückgabe von a deutlich zu erhöhen Wert aus dem Cache und wenn kein Wert im Cache vorhanden ist.

Es wird darauf hingewiesen, dass Google einen Exploit-Prototyp veröffentlicht hat, um den Realismus von Angriffen zu demonstrieren, die Schwachstellen der Spectre-Klasse nutzen, und um Webentwickler zu ermutigen, Techniken zu verwenden, die die Risiken solcher Angriffe minimieren. Gleichzeitig ist Google davon überzeugt, dass es ohne eine wesentliche Überarbeitung des vorgeschlagenen Prototyps unmöglich ist, universelle Exploits zu erstellen, die nicht nur zur Demonstration, sondern auch für den breiten Einsatz bereit sind.

Um das Risiko zu verringern, wird Websitebesitzern empfohlen, die kürzlich implementierten Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request und X-Frame-Options zu verwenden. X-Content-Type-Options und SameSite-Cookies. Diese Mechanismen schützen nicht direkt vor Angriffen, ermöglichen jedoch die Isolierung von Site-Daten vor dem Durchsickern in Prozesse, in denen der JavaScript-Code des Angreifers ausgeführt werden kann (das Durchsickern erfolgt aus dem Speicher des aktuellen Prozesses, in dem sich zusätzlich zum Code des Angreifers Daten befinden). von einer anderen Website, die im selben Tab geöffnet wurde). Die Hauptidee besteht darin, die Ausführung des Site-Codes in verschiedenen Prozessen vom Code Dritter zu trennen, der aus unzuverlässigen Quellen stammt, beispielsweise über einen Iframe eingebunden.



Source: opennet.ru

Kommentar hinzufügen