Retbleed — ein neuer Angriff auf die Mechanik der spekulativen Ausführung von Intel- und AMD-CPUs

Eine Gruppe von Forschern der ETH Zürich hat eine neue Variante eines Angriffs auf den Mechanismus der spekulativen Ausführung von indirekten Sprüngen in CPUs identifiziert, die es ermöglicht, Informationen aus dem Kernel-Speicher zu extrahieren oder einen Angriff auf das Host-System aus virtuellen Maschinen zu organisieren. Die Schwachstellen tragen den Codenamen Retbleed (CVE-2022-29900, CVE-2022-29901) und sind in ihrer Natur den Angriffen von Spectre-v2 ähnlich. Der Unterschied besteht darin, dass bei der Verarbeitung der Ret-Anweisung (return), die die Adresse für den Sprung aus dem Stack abruft, spekulative Ausführung von willkürlichem Code organisiert wird, anstatt eines indirekten Sprungs mit der jmp-Anweisung, bei dem die Adresse aus dem Speicher oder dem CPU-Register geladen wird.

Der Angreifer kann Bedingungen schaffen, die zu falschen Vorhersagen des Sprunges führen, und einen gezielten spekulativen Sprung auf einen Codeblock durchführen, der nicht in der Programmlogik vorgesehen ist. Letztendlich wird der Prozessor feststellen, dass die Vorhersage der Verzweigung nicht zutraf und die Operation in den ursprünglichen Zustand zurückkehrt, jedoch werden die während der spekulativen Ausführung verarbeiteten Daten im Cache und in mikroarchitektonischen Puffern verbleiben. Sollte der fehlerhaft ausgeführte Block auf den Speicher zugreifen, führt seine spekulative Ausführung zu einem Verweilen in dem gemeinsamen Cache und den aus dem Speicher ausgelesenen Daten.

Um die Daten zu bestimmen, die nach der spekulativen Ausführung von Operationen im Cache verbleiben, kann der Angreifer Methoden zur Identifizierung von Restdaten über Seitenkanäle verwenden, beispielsweise indem er die Zugriffszeiten auf gecachte und nicht gecachte Daten analysiert. Für gezielte Informationsbeschaffung aus Bereichen mit einem anderen Berechtigungslevel (z. B. aus dem Kernspeicher) kommen "Gadgets" zum Einsatz — Befehlsfolgen, die im Kernel vorhanden sind und geeignet sind, spekulativ Daten aus dem Speicher abhängig von äußeren Bedingungen auszulesen, auf die der Angreifer Einfluss nehmen kann.

Zum Schutz vor klassischen Angriffen der Spectre-Klasse, bei denen Anweisungen für bedingte und indirekte Sprünge verwendet werden, wird in den meisten Betriebssystemen die Technik „retpoline“ eingesetzt. Diese basiert auf dem Ersetzen von indirekten Sprungoperationen durch die Anweisung „ret“, für die in den Prozessoren ein separater Block zur Vorhersage des Stack-Zustands verwendet wird, der nicht den Block zur Vorhersage von Sprüngen nutzt. Bei der Einführung von retpoline im Jahr 2018 wurde angenommen, dass Analogien zu Spectre-Manipulationen von Adressen in der Praxis nicht für spekulative Sprünge mit der Anweisung „ret“ anwendbar sind.

Forschende, die die Angriffsmethode Retbleed entwickelt haben, demonstrierten die Möglichkeit, mikroarchitektonische Bedingungen zu schaffen, um spekulative Sprünge mit der Anweisung „ret“ zu initiieren. Sie veröffentlichten ein komplettes Toolkit zur Identifizierung geeigneter für die Ausnutzung von Schwachstellen in der Linux-Kernel-Reihenfolge von Anweisungen (Gadgets), in denen solche Bedingungen auftreten.

Im Rahmen der Studie wurde ein funktionierendes Exploit vorbereitet, das es auf Systemen mit Intel-CPUs ermöglicht, aus einem nicht privilegierten Prozess im Userspace willkürliche Daten aus dem Kernel-Speicher mit einer Geschwindigkeit von 219 Byte pro Sekunde und einer Genauigkeit von 98 % zu extrahieren. Auf AMD-Prozessoren ist die Effizienz des Exploits deutlich höher — die Leckrate beträgt 3,9 KB pro Sekunde. Als praktisches Beispiel wird gezeigt, wie das vorgeschlagene Exploit den Inhalt der Datei /etc/shadow bestimmen kann. Auf Systemen mit Intel-CPUs wurde der Angriff zur Bestimmung des Passwort-Hashs des Root-Benutzers in 28 Minuten durchgeführt, während es auf Systemen mit AMD-CPUs nur 6 Minuten dauerte.

Video abspielen

Die Möglichkeit des Angriffs wurde für die 6. bis 8. Generation der Intel-Prozessoren bestätigt, die bis zum 3. Quartal 2019 hergestellt wurden (einschließlich Skylake), sowie für AMD-Prozessoren auf Basis der Mikroarchitekturen Zen 1, Zen 1+ und Zen 2, die bis zum 2. Quartal 2021 produziert wurden. In neueren Prozessor-Modellen wie AMD Zen3 und Intel Alder Lake sowie in ARM-Prozessoren wird das Problem durch vorhandene Schutzmechanismen blockiert. Beispielsweise hilft die Verwendung von IBRS-Anweisungen (Indirect Branch Restricted Speculation), sich gegen den Angriff zu schützen.

Für den Linux-Kernel und den Hypervisor Xen wurde eine Reihe von Änderungen vorbereitet, die auf älteren CPUs das Problem softwareseitig lösen. Der für den Linux-Kernel vorgeschlagene Patch verändert 68 Dateien, fügt 1783 Zeilen hinzu und entfernt 387 Zeilen. Leider führt die Schutzmaßnahme zu erheblichen Overheads – in durchgeführten Tests auf AMD- und Intel-Prozessoren wird der Rückgang der Leistung auf 14 % bis 39 % geschätzt. Bevorzugt wird es, den Schutz auf der Grundlage der IBRS-Befehle anzuwenden, die in den neuen Generationen von Intel-CPUs verfügbar sind und ab Kernel-Version 4.19 unterstützt werden.

Bei Intel-Prozessoren erfolgt das Einfügen von Adressen für spekulative indirekte Sprünge aufgrund einer Besonderheit, die sich bei einem Unterlauf (underflow) im Rückgabestapel (Return Stack Buffer) bemerkbar macht. Unter solchen Bedingungen wird für den Befehl „ret“ eine Logik zur Adressauswahl angewendet, die derjenigen ähnelt, die bei normalen indirekten Sprüngen verwendet wird. Im Linux-Kernel wurden mehr als tausend Stellen gefunden, die Bedingungen schaffen, die eine solche Rücklaufüberlauf-Initiierung ermöglichen und über Systemaufrufe zugänglich sind.

Bei AMD-Prozessoren erfolgt die spekulative Ausführung des Befehls „ret“ unabhängig von einem speicherstackspezifischen Puffer (Return Address Stack), und der Vorhersagepuffer betrachtet den Befehl „ret“ nicht als Rückgabe der Kontrolle, sondern als indirekten Sprung und verwendet daher bei der Vorhersage die Daten für indirekte Sprünge. Unter diesen Bedingungen kann im Grunde jede „ret“-Operation, die über einen Systemaufruf erreichbar ist, für Exploits verwendet werden.

Zusätzlich wurde in AMD-CPUs ein weiteres Problem (CVE-2022-23825, Branch Type Confusion) identifiziert, das mit der Durchführung von falschen Sprüngen zusammenhängt – Vorhersagebedingungen für Sprünge können sogar ohne die notwendigen Verzweigungsbefehle auftreten, was es ermöglicht, den Vorhersagepuffer ohne den Befehl „ret“ zu beeinflussen. Diese Besonderheit erschwert die Implementierung von Schutzmaßnahmen erheblich und erfordert eine aktiveren Bereinigung des Vorhersagepuffers. Es wird erwartet, dass die vollständige Implementierung des Schutzes im Kernel zu einem Anstieg der Overheads um 209 % führen wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4