Retbleed ist ein neuer Angriff auf den spekulativen Ausführungsmechanismus von Intel- und AMD-CPUs

Eine Forschergruppe der ETH Zürich hat einen neuen Angriff auf den Mechanismus der spekulativen Ausführung indirekter Übergänge in der CPU identifiziert, der es ermöglicht, Informationen aus dem Kernelspeicher zu extrahieren oder einen Angriff auf das Hostsystem von virtuellen Maschinen aus zu organisieren. Die Schwachstellen tragen den Codenamen Retbleed (CVE-2022-29900, CVE-2022-29901) und ähneln in ihrer Natur Spectre-v2-Angriffen. Der Unterschied liegt in der Organisation der spekulativen Ausführung von beliebigem Code bei der Verarbeitung des Befehls „ret“ (Rückgabe), der die zu springende Adresse vom Stapel abruft, anstelle eines indirekten Sprungs mithilfe des Befehls „jmp“, bei dem die Adresse geladen wird Speicher oder ein CPU-Register.

Ein Angreifer kann Bedingungen für eine falsche Übergangsvorhersage schaffen und einen gezielten, spekulativen Übergang zu einem Codeblock organisieren, der von der Programmausführungslogik nicht vorgesehen ist. Letztendlich stellt der Prozessor fest, dass die Verzweigungsvorhersage nicht gerechtfertigt war, und setzt den Vorgang auf seinen ursprünglichen Zustand zurück. Die während der spekulativen Ausführung verarbeiteten Daten landen jedoch im Cache und in den Puffern der Mikroarchitektur. Wenn ein fehlerhaft ausgeführter Block auf den Speicher zugreift, führt seine spekulative Ausführung dazu, dass aus dem Speicher gelesene Daten im gemeinsam genutzten Cache abgelegt werden.

Um die nach spekulativen Vorgängen im Cache verbleibenden Daten zu ermitteln, kann ein Angreifer Seitenkanaltechniken verwenden, um verbleibende Daten zu ermitteln, z. B. die Analyse von Änderungen in den Zugriffszeiten auf zwischengespeicherte und nicht zwischengespeicherte Daten. Um gezielt Informationen aus Bereichen einer anderen Berechtigungsstufe (z. B. aus dem Kernel-Speicher) zu extrahieren, werden „Gadgets“ verwendet – im Kernel vorhandene Befehlsfolgen, die dazu geeignet sind, abhängig von externen Bedingungen, die durch sie beeinflusst werden können, spekulativ Daten aus dem Speicher auszulesen der Angreifer.

Zum Schutz vor klassischen Angriffen der Spectre-Klasse, die bedingte und indirekte Sprunganweisungen verwenden, verwenden die meisten Betriebssysteme die „Retpoline“-Technik, die auf dem Ersetzen indirekter Sprungoperationen durch die „ret“-Anweisung basiert, für die Prozessoren eine separate Stapelzustandsvorhersageeinheit verwenden . keinen Verzweigungsvorhersageblock verwenden. Als Retpoline im Jahr 2018 eingeführt wurde, glaubte man, dass Spectre-ähnliche Adressmanipulationen für spekulative Verzweigungen mit der „ret“-Anweisung nicht praktikabel seien.

Die Forscher, die die Retbleed-Angriffsmethode entwickelt haben, demonstrierten die Möglichkeit, mikroarchitektonische Bedingungen für die Initiierung eines spekulativen Übergangs mithilfe der „ret“-Anweisung zu schaffen, und veröffentlichten vorgefertigte Tools zur Identifizierung von Befehlssequenzen (Gadgets), die zum Ausnutzen der Schwachstelle im Linux-Kernel geeignet sind. in denen sich solche Zustände manifestieren.

Während der Forschung wurde ein funktionierender Exploit vorbereitet, der es auf Systemen mit Intel-CPUs ermöglicht, beliebige Daten aus dem Kernel-Speicher aus einem unprivilegierten Prozess im Benutzerbereich mit einer Geschwindigkeit von 219 Bytes pro Sekunde und einer Genauigkeit von 98 % zu extrahieren. Auf AMD-Prozessoren ist die Effizienz des Exploits viel höher – die Leckrate beträgt 3.9 KB pro Sekunde. Als praktisches Beispiel zeigen wir, wie Sie mit dem vorgeschlagenen Exploit den Inhalt der Datei /etc/shadow ermitteln können. Auf Systemen mit Intel-CPUs wurde der Angriff zur Ermittlung des Root-Benutzer-Passwort-Hashs in 28 Minuten und auf Systemen mit AMD-CPUs in 6 Minuten durchgeführt.

Der Angriff wurde für die Generationen 6–8 von Intel-Prozessoren bestätigt, die vor dem dritten Quartal 3 veröffentlicht wurden (einschließlich Skylake), sowie für AMD-Prozessoren, die auf den Mikroarchitekturen Zen 2019, Zen 1+ und Zen 1 basieren und vor dem zweiten Quartal 2 veröffentlicht wurden. Bei neueren Prozessormodellen wie AMD Zen2021 und Intel Alder Lake sowie bei ARM-Prozessoren wird das Problem durch bestehende Schutzmechanismen blockiert. Beispielsweise trägt die Verwendung von IBRS-Anweisungen (Indirect Branch Restricted Speculation) zum Schutz vor Angriffen bei.

Für den Linux-Kernel und den Xen-Hypervisor wurde eine Reihe von Änderungen vorbereitet, die das Problem in der Software auf älteren CPUs blockieren. Der vorgeschlagene Patch für den Linux-Kernel ändert 68 Dateien, fügt 1783 Zeilen hinzu und löscht 387 Zeilen. Leider führt der Schutz zu erheblichen Mehrkosten – in den zu AMD- und Intel-Prozessoren durchgeführten Texten wird der Leistungsabfall auf 14 % bis 39 % geschätzt. Es ist vorzuziehen, einen Schutz zu verwenden, der auf IBRS-Anweisungen basiert, die in neuen Generationen von Intel-CPUs verfügbar sind und ab dem Linux-Kernel 4.19 unterstützt werden.

Auf Intel-Prozessoren erfolgt die Adressersetzung für einen spekulativen indirekten Sprung dank einer Funktion, die erscheint, wenn ein Überlauf durch die untere Grenze (Unterlauf) im Return Stack Buffer auftritt. Wenn solche Bedingungen auftreten, beginnt der „ret“-Befehl, eine Adressauswahllogik anzuwenden, die der für normale indirekte Sprünge verwendeten ähnelt. Im Linux-Kernel wurden mehr als tausend Stellen gefunden, die Bedingungen für die Initiierung eines solchen Backflows schaffen und auf die über Systemaufrufe zugegriffen werden kann.

Auf AMD-Prozessoren erfolgt die spekulative Ausführung des „ret“-Befehls ohne Bezug auf einen stapelspezifischen Puffer (Return Address Stack) und die Verzweigungsvorhersageeinheit betrachtet den „ret“-Befehl nicht als Steuerrückgabe, sondern als indirekte Verzweigung und verwendet dementsprechend die Daten zur Vorhersage indirekter Übergänge. Unter diesen Bedingungen kann praktisch jede über einen Systemaufruf erreichbare „ret“-Operation ausgenutzt werden.

Darüber hinaus wurde ein weiteres Problem bei AMD-CPUs (CVE-2022-23825, Branch Type Confusion) im Zusammenhang mit der Implementierung fiktiver Verzweigungen festgestellt: Bedingungen für die Verzweigungsvorhersage können auch ohne die erforderlichen Verzweigungsanweisungen auftreten, was eine Beeinflussung des Verzweigungsvorhersagepuffers ermöglicht ohne die Anweisung „ret“. Diese Funktion verkompliziert die Implementierung des Schutzes erheblich und erfordert eine aktivere Reinigung des Verzweigungsvorhersagepuffers. Es wird erwartet, dass das Hinzufügen von Vollschutz zum Kernel den Overhead um 209 % erhöht.

Source: opennet.ru

Kommentar hinzufügen