Neue Technik zur Ausnutzung von Spectre-Schwachstellen in Chrome

Eine Gruppe von Forschern amerikanischer, australischer und israelischer Universitäten hat eine neue Seitenkanal-Angriffstechnik vorgeschlagen, um Schwachstellen der Spectre-Klasse in Browsern auszunutzen, die auf der Chromium-Engine basieren. Der Angriff mit dem Codenamen Spook.js ermöglicht es Ihnen, den Website-Isolationsmechanismus zu umgehen, indem Sie JavaScript-Code ausführen und den Inhalt des gesamten Adressraums des aktuellen Prozesses lesen, d. h. Zugriff auf Daten von Seiten, die in anderen Registerkarten ausgeführt, aber im selben Prozess verarbeitet werden.

Da Chrome verschiedene Websites in unterschiedlichen Prozessen ausführt, ist die Möglichkeit praktischer Angriffe auf Dienste beschränkt, die es verschiedenen Benutzern ermöglichen, ihre Seiten zu hosten. Die Methode ermöglicht es, von einer Seite aus, in die der Angreifer die Möglichkeit hat, seinen JavaScript-Code einzubetten, das Vorhandensein anderer Seiten zu ermitteln, die der Benutzer von derselben Website aus geöffnet hat, und daraus vertrauliche Informationen zu extrahieren, beispielsweise Anmeldeinformationen oder ersetzte Bankdaten durch das System der automatischen Ausfüllung von Feldern in Webformularen. Als Demonstration wird gezeigt, wie Sie den Blog einer anderen Person auf dem Tumblr-Dienst angreifen können, wenn der Besitzer einen Blog des Angreifers, der auf demselben Dienst gehostet wird, in einem anderen Tab öffnet.

Eine weitere Einsatzmöglichkeit der Methode ist ein Angriff auf Browser-Add-Ons, der es ermöglicht, bei der Installation eines vom Angreifer kontrollierten Add-Ons Daten aus anderen Add-Ons zu extrahieren. Als Beispiel zeigen wir, wie Sie durch die Installation eines bösartigen Add-ons vertrauliche Informationen aus dem LastPass-Passwort-Manager extrahieren können.

Forscher haben einen Prototyp eines Exploits veröffentlicht, der in Chrome 89 auf Systemen mit einer CPU, Intel i7-6700K und i7-7600U, funktioniert. Bei der Erstellung des Exploits wurden zuvor von Google veröffentlichte Prototypen von JavaScript-Code verwendet, um Angriffe der Spectre-Klasse durchzuführen. Es wird darauf hingewiesen, dass die Forscher funktionierende Exploits für Systeme auf Basis von Intel- und Apple-M1-Prozessoren vorbereiten konnten, die es ermöglichen, das Lesen des Speichers mit einer Geschwindigkeit von 500 Bytes pro Sekunde und einer Genauigkeit von 96 % zu organisieren. Man geht davon aus, dass die Methode auch auf AMD-Prozessoren anwendbar ist, allerdings konnte kein voll funktionsfähiger Exploit vorbereitet werden.

Der Angriff ist auf alle Browser anwendbar, die auf der Chromium-Engine basieren, einschließlich Google Chrome, Microsoft Edge und Brave. Die Forscher glauben auch, dass die Methode für die Arbeit mit Firefox angepasst werden kann. Da sich die Firefox-Engine jedoch stark von Chrome unterscheidet, wird die Arbeit an der Erstellung eines solchen Exploits der Zukunft überlassen.

Zum Schutz vor browserbasierten Angriffen im Zusammenhang mit der spekulativen Ausführung von Anweisungen implementiert Chrome die Segmentierung des Adressraums. Durch die Sandbox-Isolation kann JavaScript nur mit 32-Bit-Zeigern arbeiten und den Speicher von Handlern in disjunkten 4-GB-Heaps teilen. Um Zugriff auf den gesamten Prozessadressraum zu ermöglichen und die 32-Bit-Beschränkung zu umgehen, verwendeten die Forscher eine Technik namens Type Confusion, die die JavaScript-Engine dazu zwingt, ein Objekt mit einem falschen Typ zu verarbeiten, was die Bildung eines 64-Bit-Objekts ermöglicht Zeiger basierend auf einer Kombination aus zwei 32-Bit-Werten.

Der Kern des Angriffs besteht darin, dass bei der Verarbeitung eines speziell entwickelten Schadobjekts in der JavaScript-Engine Bedingungen geschaffen werden, die zur spekulativen Ausführung von Anweisungen führen, die auf das Array zugreifen. Das Objekt wird so ausgewählt, dass die vom Angreifer kontrollierten Felder in dem Bereich platziert werden, in dem der 64-Bit-Zeiger verwendet wird. Da der Typ des Schadobjekts nicht mit dem Typ des verarbeiteten Arrays übereinstimmt, werden solche Aktionen unter normalen Bedingungen in Chrome durch einen Mechanismus zur Deoptimierung des Codes blockiert, der für den Zugriff auf Arrays verwendet wird. Um dieses Problem zu lösen, wird der Code für den Type-Confusion-Angriff in einen bedingten „If“-Block gestellt, der unter normalen Bedingungen nicht aktiviert, sondern im spekulativen Modus ausgeführt wird, wenn der Prozessor eine weitere Verzweigung falsch vorhersagt.

Infolgedessen greift der Prozessor spekulativ auf den generierten 64-Bit-Zeiger zu und setzt den Status zurück, nachdem er eine fehlgeschlagene Vorhersage ermittelt hat. Spuren der Ausführung verbleiben jedoch im gemeinsam genutzten Cache und können mithilfe von Seitenkanal-Cache-Erkennungsmethoden, die Änderungen analysieren, wiederhergestellt werden Zugriffszeiten auf zwischengespeicherte und nicht zwischengespeicherte Daten. Um den Inhalt des Caches bei unzureichender Genauigkeit des in JavaScript verfügbaren Timers zu analysieren, wird eine von Google vorgeschlagene Methode verwendet, die die in Prozessoren verwendete Tree-PLRU-Cache-Eviction-Strategie täuscht und durch Erhöhung der Anzahl der Zyklen ermöglicht Erhöhen Sie den Zeitunterschied zwischen dem Vorhandensein und Fehlen eines Werts im Cache erheblich.

Source: opennet.ru

Kommentar hinzufügen