Spook.js, eine gruselige Gute-Nacht-Geschichte

Wie Spook.js, der erste praktikabel Spectre-basierte Angriff durchgeführt wird.

Der Ablauf eines Phishing-Angriffs ist recht logisch: Man klickt auf einen Link, wird an eine schädliche Webseite weitergeleitet, man gibt einige Daten ein und der Angreifer stiehlt diese Daten. Gruselig wird es, wenn man auf einen Link klickt und die Daten sofort gestohlen werden. Ja, Sie haben richtig gelesen: Heute werden wir uns mit schädlichen Webseiten befassen, die eine elementare CPU-Funktion für Datendiebstahl ausnutzen, bei dem eine Eingabe der Daten seitens des Opfers nicht mehr erforderlich ist. Darüber hinaus ist es sehr schwierig – allerdings nicht unmöglich – die Schwachstelle zu beheben.

2018 bewiesen Forscher, dass dieses Szenario theoretisch möglich ist und enthüllten die ersten zwei Varianten der Spectre-Schwachstelle. Drei Jahre später, im September 2021, führten Forscher den ersten echten Angriff mit Spectre v1 durch. Die Technik, die als Spook.js bezeichnet wird, ist kompliziert, aber wir werden trotzdem versuchen die Angriffsmethode verständlich und detailliert zu erklären.

Hintergrundinformationen zu Spectre v1

Die ersten Angriffe über die Hardware-Schwachstellen Spectre und Meltdown machten 2018 Schlagzeilen. Bei den Angriffen werden die Mechanismen für die Sprungvorhersage ausgenutzt, die zur Beschleunigung der Befehlsausführung dient und in allen modernen Prozessoren (engl. Central Processing Units, CPU) zu finden ist. 

Logo der Spectre-Schwachstelle

Wenn ein Benutzer sich auf einer Webseite einloggen möchte und das richtige Passwort eingibt, wird eine Reihe von Befehlen ausgeführt. Ist das Passwort falsch, wird stattdessen eine andere Reihe von Befehlen ausgeführt. Allerdings – und hier kommt die Sprungvorhersage ins Spiel – beginnt der Prozessor, der zentrale Teil des Computers, der das Rechenwerk und das Steuerwerk enthält, eine Reihe an Befehlen auszuführen, die voraussichtlich erforderlich sein werden.

Gehen wir in unserem Beispiel davon aus, dass das Passwort davor bereits hundertmal richtig eingegeben wurde. In diesem Fall wird der Prozessor annehmen, dass das Passwort auch diesmal richtig eingegeben wird. Ist die Annahme richtig, genießt der Benutzer eine bessere Rechenleistung. Ist die Annahme falsch, werden die spekulativ ausgeführten Befehle verworfen und die andere Reihe an Befehlen ausgeführt.

Bei einem Spectre-Schwachstellen-Angriff wird versucht einen Datenbereich auszulesen, zu dem das Programm keinen Zugriff hat. In der ersten Phase des Angriffs wird mehrmals freier Zugang zu den Datenbereichen angefordert, um das Sprungvorhersagesystem darin zu „schulen“ den verbotenen Lesevorgang auch auszuführen. Mittels der Sprungvorhersage führt der Prozessor den Vorgang im Voraus durch, weil er daran gewöhnt ist, dass das Programm die Anforderung stellt Daten auszulesen, zu denen es berechtigten Zugriff hat. Bei der Überprüfung wird dann festgestellt, dass das Programm keine Erlaubnis für den Zugriff auf diese Daten hat, also werden die spekulativ ausgeführten Befehle verworfen. So weit, so gut – aber die Daten, die vom Prozessor gelesen wurden, werden über einen bestimmten Zeitraum im Cache, dem Zwischenspeicher des Prozessors, gespeichert.

Jetzt kommt der interessante Teil: Da über den bösartigen Vorgang die vertraulichen Daten nicht direkt im Zwischenspeicher des Prozessors ausgelesen werden können, wird ein sogenannter Seitenkanalangriff eingesetzt, um die Daten zu stehlen. Dazu zählt das Messen der Zugriffsgeschwindigkeit auf bestimmte Informationen. Wenn der Wert sehr gering ausfällt, lässt sich daraus schließen, dass die Daten in dem Cache gespeichert sind. Bei größeren Werten werden die Daten direkt über den Direktzugriffsspeicher (engl. Random-Access-Memory, RAM) geladen. Durch eine Abfolge von Leseversuchen kommt es zu einem Leak der geheimen Informationen.

Es handelt sich hier um einen CPU-Fehler, der nur über die vollkommene Deaktivierung der Sprungvorhersage behoben werden kann, was die Rechenleistung stark beeinträchtigen würde. Trotz alledem sind Spectre-Angriffe kein Kinderspiel, denn es gibt viele Einschränkungen:

  • Der Angreifer muss dazu in der Lage sein Programmcode auf dem Computer oder Mobilgerät des Opfers auszuführen.
  • Für den Angriff ist ein spezifischer Programmcode erforderlich, um die Bedingungen für einen erfolgreichen Angriff zu erfüllen.
  • Selbst wenn der Angriff gelingt, ist die Datenextraktion extrem langsam – duzende oder maximal hunderte Bytes pro Sekunde – und es kann auch zu Lesefehlern kommen.
  • Kurz gefasst, für den Diebstahl der gewünschten geheimen Daten wie Passwörter, Verschlüsselungsschlüssel usw. ist eine Kombination von Bedingungen notwendig.

Spook.js – so wird Spectre v1 bei echten Angriffen verwendet

Aus den oben angegebenen Informationen könnte man schließen, dass Spectre eigentlich gar nicht so gefährlich ist. Schließlich wäre es für einen Angreifer, der Code auf dem Computer des Opfers ausführen kann, wesentlich einfacher eine der vielen Schwachstellen des Betriebssystems oder eines der installierten Programme auszunutzen, um eine Rechteausweitung zu erhalten und die Daten zu stehlen.

Das ist natürlich wahr, aber moderne Webseiten enthalten heutzutage oft eine Menge an Programmcode, der über den Browser auf dem Computer des Benutzers ausgeführt wird. Und genau das wird bei den Spook.js-Angriffen per Spectre v1-Schwachstelle ausgenutzt: Eine infizierte Webseite wird geladen, der Browser führt den Code aus und die Cyberkriminellen stehlen die vertraulichen Daten.

Der Autor des Berichts verdeutlicht das anhand einiger Beispielangriffe. Zuerst wurde ein Passwort auf der Blogging-Plattform Tumblr gestohlen. Danach stahlen die Forscher Daten im webbasierten Passwortmanager-Onlinedienst Lastpass. Und bei dem dritten Angriff wurde im privaten Speicherplatz auf einem Google Server ein Bild abgefangen, das von einem Benutzer hochgeladen wurde.

All das ermöglichte eine Funktion des Chrome-Browsers von Google. Seit der Veröffentlichung der Informationen zu Spectre haben die Entwickler von Chrome Schutzmaßnahmen ergriffen, die darauf abzielen die Webseiten voneinander zu isolieren. Da jede Webseite einen eigenen Prozess erstellt, kann der schädliche Code auf einer Seite nicht zum Datendiebstahl auf anderen Ressourcen verwendet werden. Es gibt allerdings eine Ausnahme: Mehrere Seiten von derselben Website oder mit derselben Internetadresse werden in einem gemeinsamen Browser-Prozess gruppiert. Wenn der bösartige Code (der in JavaScript geschrieben wird – dementsprechend ist .js im Namen des Angriffs zu finden) auf einer dieser Seiten ausgeführt wird, können auch die Daten der anderen Seiten gestohlen werden.

Spectre.js-Angriff auf Tumblr

Als kollektiver Blog kann Tumblr schädlichen Code hosten – zumindest in der Theorie. Wenn die schädliche Seite auf einem Tab geöffnet ist und der Benutzer sich auf einem anderen Tab in sein Tumblr-Konto anmeldet, speichert der Browser den Benutzernamen sowie das Passwort und füllt die Daten automatisch aus – die dann über den schädlichen Code gestohlen werden können.

Mit dem Exploit der Spectre-Schwachstelle kann bei einem Angriff flüchtig mit einem anderen Tab derselben Website interagiert und die Daten über indirekte Weise gestohlen werden. Ein erfolgreicher Angriff mit dieser Methode hinterlässt so gut wie keine Spuren.

Spectre.js-Angriff auf LastPass

Der Angriff auf den Password Manager LastPass war anders, weil hier der Code, der mithilfe von Spectre v1 die Daten stehlen sollte, in einer schädlichen Erweiterung von Google Chrome eingebettet wurde. Die LastPass-Erweiterung lief zeitgleich auf dem Browser. In manchen Fällen werden die Erweiterungen auch in einem gewöhnlichen Browser-Prozess ausgeführt, wodurch der Datendiebstahl ermöglicht wird.

Specter.js Angriff auf Google Cloud Storage

Ein weiteres Beispiel ist der Angriff auf Google Cloud Storage: Ein Browser-Tab enthält eine schädliche Webseite, die auf sites.google.com gehostet ist. Über einen anderen Tab können Benutzer Bilder in den privaten Speicherplatz im Google Workspace (ehemals G-Suite) hochladen. In diesem Szenario kann ein Angreifer den schädlichen Code dazu verwenden, um Zugriff auf die Bilder zu erhalten.

Vergleich des Originalbildes und des Bildes, das per Spook.js-Angriff auf Google Cloud Storage gestohlen wurde

Originalbild (links) und das Bild, das per Spook.js-Angriff auf Google Cloud Storage gestohlen wurde. Source

Einschränkungen der Methode

Forscher haben gezeigt, wie die Angriffe auf verschiedenen Prozessoren durchgeführt werden können, einschließlich einiger modernen Versionen von Intel und sogar auf dem Apples ARM-Prozessor M1. Alle Angriffe wurden über Google Chrome durchgeführt. Der Browser verfügt über einige einzigartigen Funktionen, die Spook.js-Angriffe ermöglichen. Auch andere Chromium-basierter Browser, wie Microsoft Edge sind für diese Art von Angriffen anfällig.

Aber es gibt Einschränkungen. Erstens ist die Geschwindigkeit des Datendiebstahls sehr niedrig (400 – 600 Bytes pro Sekunde, je nach Prozessor). Aus diesem Grund ist die Zieldatei des letzten Beispiels sehr klein. Zweitens treten beim Diebstahl der Daten im Zwischenspeicher zahlreiche Fehler auf. Bis zu 4 % der Daten sind fehlerhaft. Deshalb unterscheidet sich das gestohlene Bild vom Originalbild.

Die Angriffe waren weder bei AMD-Prozessoren noch bei Mozilla Firefox möglich, weil deren JavaScript-Engine anders funktioniert. Die Forscher weisen allerdings darauf hin, dass ein erfolgreicher Angriff auf AMD-Chips oder den Firefox-Browser deswegen nicht vollkommen unmöglich ist – um das zu belegen sind weitere Studien erforderlich.

Und drittens ist es für den Angriff erforderlich schädlichen Code auf eine Seite mit derselben Internetadresse hochzuladen, wie bei den Beispielen mit dem kollektiven Blog oder dem Hosting gezeigt wurde. Der Versuch, diese Methode beispielsweise bei einer leeren Website anzuwenden, würde nicht funktionieren.

Kein Grund zur Panik

Die Studie von Spook.js ist wichtig, weil es den Forschern zum ersten Mal gelungen ist, in einem recht realistischen Szenario zu zeigen, wie eine der Schwachstellen von Spectre ausgenutzt werden kann. Trotzdem ist es eher unwahrscheinlich, dass diese Schwachstelle von Cyberverbrechern für Exploits ausgenutzt wird. Erstens haben die Entwickler von Google Chrome, auf die Ergebnisse der Studie reagiert und die Site Isolation erweitert. Zweitens stehen Cyberverbrechern unzählige einfachere Methoden für den Diebstahl von Benutzerdaten zur Verfügung – von herkömmlicher Malware bis hin zu Social Engineering – die nicht so ein großes Know-how erfordern. Für Spook.js-Angriffe ist umfangreiches Wissen über die Funktionsweise von modernen Prozessoren notwendig.

Als wissenschaftliches Projekt besteht der Zweck von Spook.js darin, die Softwarelandschaft zu verändern, indem neue Empfehlungen für Website-Sicherheit gegeben werden. Beispielsweise empfehlen die Forscher, dass Anmeldeseiten grundsätzlich über eine separate Internetadresse verfügen sollten. Bei nachfolgenden Studien werden eventuell leichtere Methoden entdeckt, aber gleichzeitig werden die Ergebnisse höchstwahrscheinlich zu effektiveren Sicherheitsmaßnahmen führen. Selbst für den Fall, dass die Schwachstellen der Spectre-Familie eines Tages für Massengriffe verwendet werden sollten, können auch diese mit demselben Schutz wie für Malware erfolgreich abgewehrt werden. Die IT-Sicherheitsdienstleister würden in diesem Fall einfach die neue Methode auf die Liste der Angriffsarten setzen, die überwacht und vor der Ausführung blockiert werden müssen.

Es ist natürlich auch möglich, dass die Forscher eines Tages über eine Funktion einer Spectre-ähnlichen Schwachstelle stolpern, die eine komplette Überarbeitung des ganzen modernde IT-Ökosystems erfordert. Das ist allerdings eher unwahrscheinlich. Zumal es ganze drei Jahre gedauert hat, um zu belegen, dass die theoretische Schwachstelle tatsächlich in der Praxis ausgenutzt werden kann (aber die Angriffe aufgrund der vielen Einschränkungen sich nicht wirklich lohnen).

Bei gezielten Angriffen mit Spectre sind möglicherweise die Kosten des Angriffes höher als der Gewinn, der mit den gestohlenen Daten erzielt werden kann. Selbst wenn Ihre Organisation von diesen Szenarios betroffen sein könnte, ist es möglich die Angriffe ganz einfach zu vermeiden, indem Sie verschiedene Browser für verschiedene Inhalte verwenden. Öffnen Sie beispielsweise weder Webseiten noch Onlinedienste mit sensiblen Informationen auf demselben Browser, auf dem Sie Seiten mit Online-Entertainment ansehen. Im Idealfall sollten vertrauliche Daten immer in isolierten Umgebungen, in einem virtuellen PC oder einfach auf einem separaten Gerät gespeichert und bearbeitet werden.

Tipps