Neue Techniken zum Ausnutzen von Spectre-Sicherheitsanfälligkeiten in Chrome

Eine Gruppe von Forschern aus amerikanischen, australischen und israelischen Universitäten hat eine neue Angriffs-Technik über Seitenkanäle vorgeschlagen, um Schwachstellen der Spectre-Klasse in Chrome-basierten Browsern auszunutzen. Der Angriff, der den Codenamen Spook.js trägt, ermöglicht es, durch das Ausführen von JavaScript-Code den Mechanismus der Isolation von Websites zu umgehen und den Inhalt des gesamten Adressraums des aktuellen Prozesses zu lesen, d.h. auf Daten von Seiten zuzugreifen, die in anderen Tabs geöffnet sind, aber in einem Prozess verarbeitet werden.

Da Chrome verschiedene Websites in unterschiedlichen Prozessen ausführt, ist die Möglichkeit, praktische Angriffe durchzuführen, auf Dienste beschränkt, die es verschiedenen Nutzern erlauben, ihre Seiten zu hosten. Die Methode ermöglicht es, von einer Seite aus, auf der der Angreifer seinen JavaScript-Code einbetten kann, das Vorhandensein anderer vom Nutzer geöffneter Seiten derselben Website zu erkennen und vertrauliche Informationen, wie z.B. Anmeldedaten oder Bankverbindungen, die vom Autoausfüllsystem in Web-Formularen eingegeben werden, zu extrahieren. Als Demonstration wird gezeigt, wie man einen fremden Blog auf Tumblr angreifen kann, wenn dessen Besitzer in einem anderen Tab den Blog des Angreifers öffnet, der im selben Dienst gehostet ist.

Video abspielen

Eine andere Anwendungsmöglichkeit der Methode besteht darin, browserbasierte Erweiterungen anzugreifen, die es bei der Installation einer vom Angreifer kontrollierten Erweiterung ermöglichen, Daten aus anderen Erweiterungen zu extrahieren. Als Beispiel wird gezeigt, wie man durch die Installation einer bösartigen Erweiterung vertrauliche Informationen aus dem Passwort-Manager LastPass extrahieren kann.

Video abspielen

Die Forscher haben einen Prototyp eines Exploits veröffentlicht, der in Chrome 89 auf Systemen mit CPU Intel i7-6700K und i7-7600U funktioniert. Bei der Erstellung des Exploits wurden zuvor von Google veröffentlichte Prototypen von JavaScript-Code zur Durchführung von Spectre-Angriffen verwendet. Es wird angemerkt, dass es den Forschern gelungen ist, funktionsfähige Exploits für Systeme auf Basis von Intel- und Apple M1-Prozessoren zu erstellen, mit der Möglichkeit, den Speicher mit einer Geschwindigkeit von 500 Byte pro Sekunde und einer Genauigkeit von 96 % auszulesen. Es wird vermutet, dass die Methode auch für AMD-Prozessoren anwendbar ist, aber ein vollständig funktionierender Exploit konnte nicht erstellt werden.

Der Angriff ist auf alle Browser basierend auf der Chromium-Engine anwendbar, einschließlich Google Chrome, Microsoft Edge und Brave. Forscher glauben auch, dass die Methode an Firefox angepasst werden kann, aber da die Firefox-Engine stark von Chrome abweicht, wurde die Arbeit an der Erstellung eines ähnlichen Exploits auf die Zukunft verschoben.

Zum Schutz vor durch Browser initiierten Angriffen, die mit spekulativer Ausführung von Anweisungen zusammenhängen, hat Chrome eine Adressraum-Segmentierung implementiert — die Sandbox-Isolierung erlaubt es, dass JavaScript nur mit 32-Bit-Zeigern arbeitet und trennt den Speicher von Handlern in nicht überlappenden 4-GB-H heaps. Um den Zugang zu dem gesamten Adressraum des Prozesses und die Umgehung der 32-Bit-Grenze zu ermöglichen, haben Forscher die Technik des Type Confusion eingesetzt, die es ermöglicht, die JavaScript-Engine dazu zu bringen, ein Objekt mit einem falschen Typ zu verarbeiten, was die Bildung eines 64-Bit-Zeigers auf der Basis einer Kombination von zwei 32-Bit-Werten ermöglicht.

Der Kern des Angriffs besteht darin, dass bei der Verarbeitung eines speziell gestalteten schädlichen Objekts in der JavaScript-Engine Bedingungen entstehen, die zu spekulativer Ausführung von Anweisungen führen, die Zugriff auf ein Array gewähren. Das Objekt wird so ausgewählt, dass die vom Angreifer kontrollierten Felder in einem Bereich platziert werden, in dem ein 64-Bit-Zeiger verwendet wird. Da der Typ des schädlichen Objekts nicht mit dem Typ des verarbeiteten Arrays übereinstimmt, werden solche Aktionen unter normalen Bedingungen im Chrome durch den Deoptimierungsmechanismus, der für den Zugriff auf Arrays verwendet wird, blockiert. Um dieses Problem zu lösen, wird der Code für den Type Confusion-Angriff in einen bedingten „if“-Block ausgelagert, der unter normalen Bedingungen nicht aktiviert wird, aber im spekulativen Modus ausgeführt wird, wenn der Prozessor eine falsche Vorhersage für das zukünftige Verzweigen trifft.

Letztendlich spricht der Prozessor spekulativ auf den gebildeten 64-Bit-Zeiger zu und stellt den Zustand nach der Feststellung einer misslungenen Vorhersage wieder her, jedoch bleiben die Ausführungsreste im allgemeinen Cache und können durch Methoden zur Bestimmung des Cache-Inhalts über Seitenkanäle, die die Änderung der Zugriffszeiten auf zwischengespeicherte und nicht zwischengespeicherte Daten analysieren, wiederhergestellt werden. Für die Analyse des Cache-Inhalts unter den Bedingungen einer unzureichenden Genauigkeit des in JavaScript verfügbaren Timers wird die von Google vorgeschlagene Methode verwendet, die die in Prozessoren verwendete Tree-PLRU-Cache-Entfernungstrategien überlistet und es erlaubt, durch die Erhöhung der Zyklen die Zeitunterschiede bei Anwesenheit und Abwesenheit eines Wertes im Cache erheblich zu vergrößern.

Quelle: opennet.ru

60GB SSD 8Gb DDR4