Retbleed-Angriff bzw. Spectre schlägt zurück

Am Beispiel einer aktuellen Studie über Hardware-Schwachstellen in Prozessoren betrachten wir, welchen Preis Sicherheit wirklich hat.

Mitte Juli haben Forscher der Eidgenössischen Technischen Hochschule Zürich (ETH) eine Studie veröffentlicht, in der sie einen neuen Angriff beschreiben, der Schwachstellen in modernen Prozessoren ausnutzt. Getauft wurde der Angriff auf den Namen Retbleed, abgeleitet von der Verteidigungsmethode Retpoline, die vor einer bestimmten Art von Spectre-Angriffen schützt. Im Wesentlichen zeigten die Autoren, dass die Programmkompilierungstechnik dieser Methode – die bisher als wirksamer Schutz gegen einen Angriff der so genannten Spectre-Variante 2 galt – entweder nur gelegentlich oder überhaupt nicht funktioniert. Die Studie ist, ebenso wie alle bisherigen Arbeiten zu Hardware-Schwachstellen in Prozessoren, recht komplex. In diesem Artikel werden wir wie üblich versuchen, die Ergebnisse der Studie in einfachen Worten für Sie zusammenzufassen. Beginnen wir mit einigen Hintergrundinformationen.

Was ist Spectre V2? Wir sprechen über die Sprungvorhersage

Vor mehr als vier Jahren, Anfang 2018, wurden zwei Forschungsarbeiten veröffentlicht, in denen die Hardware-Schwachstellen Spectre und Meltdown beschrieben wurden, die basierend auf der Funktionsweise von Prozessoren einen potenziellen Datendiebstahl ermöglichen. Seitdem sind mehrere weitere Varianten von Spectre entdeckt worden und Forscher haben weitere Möglichkeiten gefunden, eine gemeinsame Klasse von Sicherheitslücken anzugreifen, die die Standardfunktion der Sprungvorhersage moderner Prozessoren für ihren Angriff nutzen.

Die Sprungvorhersage und die spekulative Ausführung (speculative execution) von Befehlen tragen zur erheblichen Verbesserung der Prozessorleistung bei. In jedem Programm hängt die Ausführung weiterer Schritte oft vom Ergebnis vorheriger Berechnungen ab. Das einfachste Beispiel ist die Eingabe eines Passworts durch den Nutzer, um auf bestimmte Daten zugreifen zu können. Ist das Kennwort richtig, kann der Nutzer die Daten problemlos einsehen. Ist das Passwort hingegen falsch, wird der Benutzer dazu aufgefordert, es erneut einzugeben. Für die CPU bedeutet das übersetzt, dass die Zugriffsrechte auf bestimmte Daten im RAM überprüft werden: Bei Bestätigung der erforderlichen Rechte, wird der Zugriff auf die Daten gewährt.

Der Prozessor kann Milliarden solcher Operationen pro Sekunde durchführen, und während eine bestimmte Bedingung geprüft wird, befindet er sich oft in einer Art Leerlauf (einfach gesagt, er wartet darauf, dass der Nutzer ein Passwort eingibt oder dass die Zugriffsrechte überprüft werden). Aber was wäre, wenn in dieser Leerlaufzeit die Berechnungen durchgeführt werden, die nach der Prüfung am wahrscheinlichsten sind? Sobald unser hypothetischer Nutzer dann sein hypothetisches Kennwort richtig eingibt, ist das Berechnungsergebnis bereits fertig, und die angeforderten Daten werden demnach schneller angezeigt.

Aber woher weiß man, welcher Teil des Codes am wahrscheinlichsten ausgeführt wird? Anhand von Statistiken, die sich auf frühere Ausführungen ähnlicher Befehle beziehen. Wenn unser Nutzer (bitte bedenken Sie, dass es sich hierbei um ein rein theoretisches und vereinfachtes Beispiel handelt) neun von zehn Mal das richtige Passwort eingibt, können wir die fraglichen Daten, auf die zugegriffen werden soll, im Voraus vorbereiten. Sollte das Kennwort falsch sein, werden die Ergebnisse verworfen und anstelle der Daten wird dann eine Fehlermeldung angezeigt.

Die Verfasser des Papers aus dem Jahr 2018 haben zwei Varianten des Spectre-Angriffs beschrieben. Bei Variante 2 (auch bekannt als Branch Target Injection) wird ein Verzweigungsprädiktor so trainiert, dass er die von uns benötigten Anweisungen ausführt und dabei Daten liest, auf die der Angreifer keinen Zugriff haben sollte. Diese Berechnungen werden dann zwar verworfen, aber ihr Ergebnis (die hochsensiblen Daten) wird vorübergehend im Cache gespeichert, von wo aus sie gestohlen werden können.

Hierbei handelt es sich um einen äußerst komplexen Angriff. Zum einen muss der Angreifer in der Lage sein, ohne die gewünschten Privilegien (d. h. ohne Zugriff auf sensible Daten), Code auf dem angegriffenen System auszuführen. Das erfolgt beispielsweise indem ein Nutzer dazu gebracht wird, eine Webseite mit einem schädlichen Skript in seinem Browser zu öffnen. Zum anderen ist eine Software auf dem Zielsystem notwendig, die einen für den Angriff geeigneten Code enthält. Im Fachjargon der Forscher wird dies als „Gadget“ bezeichnet. Der Angriffscode trainiert das System der Sprungvorhersage darauf, das Gadget spekulativ auszuführen, was dazu führt, dass es auf einen für den Angreifer unzugänglichen Speicherbereich zugreift. Die Daten befinden sich im CPU-Cache, aus dem sie sehr langsam – nicht schneller als zehn Bits pro Sekunde – extrahiert werden können.

Fassen wir es noch einfacher: Das integrierte System zur Sprungvorhersage unterscheidet nicht zwischen Anweisungen verschiedener Programme. Somit kann ein einziges Programm dazu verwendet werden, den Prozessor spekulativ eine Anweisung ausführen zu lassen, die er nicht ausführen sollte. Bislang schien dies kein Problem zu sein, da Software ohnehin nicht direkt auf Daten im Cache des Prozessors zugreifen kann. Aber wie sich herausstellte, können die Daten durch das Lesen von Seitenkanälen (Side-channel Reading), ein sehr komplexer Mechanismus, der die Rekonstruktion von Daten basierend auf der Grundlage von Informationen über die Geschwindigkeit der Antworten auf Leseanfragen ermöglicht, extrahiert werden.

Spectre wurde erstmals 2018 entdeckt. Ist die Schwachstelle bereits gepatcht?

Bei Hardware-Schwachstellen ist dies jedoch nicht ganz so einfach. Zunächst einmal ist selbst aus dieser vereinfachten Beschreibung ersichtlich, dass die Sicherheitslücke zwar definitiv hardwarebasiert ist, aber bestimmte Bedingungen in der Software gegeben sein müssen, damit es zu einem erfolgreichen Exploit kommen kann. Warum kann in diesem Fall nicht einfach die Software gepatcht werden? Immerhin ist dies deutlich einfacher, als die Hardware selbst aufzurüsten. Zudem ist es auch möglich, die Schwachstelle in den Prozessoren durch das Aktualisieren des Mikrocodes teilweise zu fixen. Eine endgültige Lösung des Problems lässt sich jedoch erst mit der Veröffentlichung neuer Prozessoren mit veränderter Hardware finden, während die alten Prozessoren ganz oder teilweise verwundbar bleiben.

Und es stellt sich eine weitere Frage, die im Zusammenhang mit der Retbleed-Studie äußerst wichtig ist. Wie hoch wären die Kosten für einen Software- oder Hardware-Patch? Jede einzelne Methode zur „Schließung“ von Spectre verringert die Prozessorenleistung. Das IBRS-System (Indirect Branch Restricted Speculation) führt während der spekulativen Codeausführung beispielsweise zusätzliche Berechtigungsprüfungen durch und verhindert so, dass Programme mit geringen Rechten auf hochsensible Daten zugreifen können, wodurch ein Spectre-Angriff unmöglich wird. Doch bei Hunderttausenden oder Millionen solcher Überprüfungen wird die CPU-Leistung zwangsläufig beeinträchtigt. Untersuchungen zeigen, dass verschiedene Patches für Spectre in einem System zu einem Leistungsrückgang von bis zu 25% führen können.

Und hier kommt Retpoline, eine relativ einfache Schutzmethode gegen Spectre ins Spiel. Wie die Autoren erläutern, hat das Ersetzen einiger Befehle in typischen Verzweigungssituationen keine Auswirkungen auf die Funktionsfähigkeit der Software, macht aber einen Spectre-Angriff unmöglich. Ein wichtiger Vorteil von Retpoline gegenüber IBRS und anderen Schutzmethoden ist darüber hinaus die nur geringfügige Verschlechterung der Leistung um nicht mehr als 5%.

Was zeigt die Retbleed-Studie?

Im Grunde hat diese kürzlich veröffentlichte Studie gezeigt, dass Retpoline… nicht funktioniert! Die Rückgabeanweisungen, auf die sich die Retpoline-Methode stützt, könnten in einem leicht modifizierten Schema ausgenutzt werden, um die Sprungvorhersage auszutricksen. Um dies zu veranschaulichen, haben die Autoren der Studie sogar ein Video veröffentlicht:

Demo eines Retbleed-Angriffs auf einem Linux-basierten System.

Das Video zeigt, wie ein gehashtes Superuser-Passwort von einem Programm gestohlen wird, das eigentlich keinen Zugriff auf solche Daten hat. Bedenken Sie, dass ein solcher Passwortdiebstahl auf einem Intel-basierten System in Wirklichkeit gut anderthalb Stunden in Anspruch nimmt! Die Ergebnisse sind in der folgenden Tabelle zusammengefasst:

Liste der Prozessoren, die bei aktiviertem Retpoline-Schutz auf die Möglichkeit von Retbleed-Angriffen getestet wurden. Quelle

Liste der Prozessoren, die bei aktiviertem Retpoline-Schutz auf die Möglichkeit von Retbleed-Angriffen getestet wurden. Quelle

Wie die Tabelle zeigt, sind AMD Zen 1 und Zen 2 (2017-2019) und Intels Kaby Lake und Coffee Lake (2016-2017) Prozessoren anfällig für einen Retbleed-Angriff. Bei den moderneren AMD-Zen-3-Prozessoren sowie Intel Alder Lake und den früheren Prozessoren der 9. Generation funktioniert ein Retbleed-Angriff nicht. Dies ist auch auf die Implementierung des erweiterten IBRS-Hardwareschutzes in Intel-Prozessoren zurückzuführen.

Schutz um welchen Preis?

Nun stellt sich folgende Frage: Wenn ein Spectre-Angriff tatsächlich so schwierig durchzuführen ist, warum sollte man sich dann überhaupt davor schützen? Um Spectre in die Realität zu übertragen, müssen viele Bedingungen erfüllt sein: Zum einen, muss die Möglichkeit, Code auf dem angegriffenen System auszuführen, gegeben sein. Zum anderen muss anfällige Software auf dem System installiert sein. Zu guter Letzt, müssen Daten zuverlässig aus dem Cache gezogen werden können. Wir haben bereits in einem älteren Beitrag erwähnt, dass der realistischste aller Angriffe in einem Chrome-Browser simuliert wurde, bei dem ein potenzieller Angreifer beispielsweise gespeicherte Passwörter aus dem RAM extrahieren könnte. Diese Möglichkeit wurde allerdings mit einer einfachen Schutzerweiterung des Browsers selbst behoben.

Es ist wahrscheinlich, dass Fortschritte bei der Analyse von Spectre-ähnlichen Schwachstellen eines Tages unerwartet zu der Möglichkeit eines Massenangriffs auf die Computer und Server von Nutzern führen können.

Das offensichtlichste Szenario ist ein Angriff über Hosting- und verteilte System-Anbieter. Ein typischer virtueller Server, den man für einen angemessenen Betrag bei einem beliebigen Anbieter mieten kann, ist grob gefasst ein Programm, das neben den virtuellen Betriebssystemen anderer Kunden auf demselben Hochleistungsserver läuft. Der Mieter eines virtuellen Servers kann standardmäßig Programme darauf ausführen, hat aber keine Berechtigungen für den Zugriff auf den Server seiner „Nachbarn“ oder den Host selbst, d. h. das kontrollierende Betriebssystem. Die Trennung virtueller Umgebungen und die Unfähigkeit, diesen vorgeschriebenen virtuellen Raum zu verlassen, ist eine wichtige Sicherheitsanforderung für solche Dienstanbieter.

Gleichzeitig sind die Dienstanbieter daran interessiert, dass möglichst viele virtuelle Systeme auf demselben Server laufen, ohne dass sie sich gegenseitig Probleme bereiten. Dies ist der Schlüssel zur schnellstmöglichen Amortisierung teurer Hardware. Darüber hinaus schränken alle Spectre-Patches (die tatsächlich funktionieren) die Leistung und folglich auch die Einnahmen der ISPs ein.

Als Retpoline erstmals publik wurde, griffen viele danach wie nach einem Rettungsanker. Doch im Januar 2018 kamen erste Zweifel in Bezug auf die tatsächliche Zuverlässigkeit dieser Verteidigungsmethode auf. Das Gespräch einer Mailingliste für Linux-Kernel-Entwickler zeigt eine Reihe von Beschwerden über Retpoline. Zur selben Zeit stellte Linus Torvalds, der Schöpfer und die treibende Kraft von Linux, klar, dass Retpoline im Normalfall ausreichend ist.

Die Verfasser von Retbleed heben Torvalds‘ Urteilsfähigkeit hervor, indem sie ihn zu Beginn des Papers zitieren. Darüber hinaus berechneten sie, welcher „Preis“ für den Schutz verwundbarer Prozessoren gezahlt werden muss, die nicht auf Hardware-Ebene behoben werden können. Patches im Linux-Kernel haben zu Leistungseinbußen von bis zu 39% bei Intel-Prozessoren und 14% bei AMD-Prozessoren geführt.

AMD-Prozessoren erwiesen sich auf ihre eigene Weise als anfällig, und die Forscher entdeckten ein Phänomen, das sie „Phantom-JMPs“ nannten. Hierbei ist es unter bestimmten Bedingungen möglich, ein System zur Sprungvorhersage dazu zu bringen, eine beliebige Anweisung auszuführen, auch wenn diese im angegriffenen Code nicht vorhanden ist. Aus diesem Grund mussten die Autoren einen kurzen, einseitigen Nachtrag zu ihrer Studie veröffentlichen. Sie weisen jedoch darauf hin, dass es noch schwieriger ist, diese Schwachstelle auszunutzen, um echten Schaden anzurichten, als dies bei der herkömmlichen Schwachstelle Spectre V2 ohnehin schon der Fall ist.

Was jetzt?

Für normale Nutzer bleibt die Bedrohung durch Spectre-Angriffe rein virtuell. Vorbeugende Patches von für Betriebssysteme reichen aus. In Windows ist übrigens ein wirksamer IBRS-Schutz standardmäßig aktiviert. Neue Patches für den Linux-Kernel werden möglicherweise zu Leistungseinbußen führen, die sich vor allem bei Unternehmenslösungen bemerkbar machen, bei denen die Computerhardware maximal ausgelastet ist.

Das Problem wird durch die Tatsache verstärkt, dass es viele verschiedene Spectre-Varianten gibt. Retbleed könnte auch als eine separate Variante betrachtet werden, die auf Prozessoren verschiedener Hersteller unterschiedlich funktioniert. AMD und Intel haben Retbleed als separate Schwachstelle anerkannt und werden wahrscheinlich eine eigene Hardware-Lösung diesbezüglich entwickeln. Unternehmen werden dann auf die neue Hardware umsteigen, in der die spezifischen Schutzmaßnahmen implementiert sind, um ein Gleichgewicht zwischen Leistung und Sicherheit zu schaffen. Leider haben alle Software-Patches große Auswirkungen auf die Leistung von vergleichsweise alten Prozessoren.

Betrachtet man das Problem aus einer gewissen Distanz, ist all das nichts Neues. Entwickler bieten eine leistungssteigernde Lösung und lassen den Aspekt der Sicherheit dabei außen vor. Früher oder später (in diesem Fall wohl eher später, denn die spekulative Ausführung wurde bereits Mitte der 90er Jahre eingeführt) wird dies für alle Beteiligten zum Verhängnis.

Das wirklich Überraschende in diesem Fall war die Entdeckung des Problems in der Hardware, welches definitiv nicht so leicht zu beheben ist wie ein Softwareproblem. Und es handelt sich nicht um einen einfachen Bug, sondern um einen (aus sicherheitstechnischer Sicht) schlechten Ansatz, den die Branche vor vielen Jahren gewählt hat. Wir können nur hoffen, dass Prozessorentwickler neue Methoden für sichere und leistungsstarke Computer entwickeln, bevor eine Welle besorgniserregender Hardware-Angriffe über uns hineinbricht, die nur durch den Austausch der Hardware gestoppt werden kann.

Tipps

Mehr Sicherheit für Privatanwender

Sicherheitsunternehmen bieten intelligente Technologien – in erster Linie Kameras – an, um dein Zuhause vor Einbruch, Feuer und anderen Zwischenfällen zu schützen. Aber wie wäre es, diese Sicherheitssysteme selbst vor Eindringlingen zu schützen? Das ist eine Lücke, die wir füllen.