Retbleed — ein neuer Angriff auf den Mechanismus der spekulativen Ausführung von Intel- und AMD-Prozessoren

Eine Forschungsgruppe der ETH Zürich hat eine neue Angriffsmethode auf den Mechanismus der spekulativen Ausführung von indirekten Sprüngen im CPU festgestellt. Diese ermöglicht es, Informationen aus dem Kernel-Speicher zu extrahieren oder Angriffe auf das Hosts-System aus virtuellen Maschinen zu organisieren. Die Schwachstellen wurden unter dem Codename Retbleed (CVE-2022-29900, CVE-2022-29901) zusammengefasst und sind in ihrer Natur ähnlich wie die Spectre-v2-Angriffe. Der Unterschied besteht darin, dass die spekulative Ausführung von willkührlichem Code beim Verarbeiten der „ret“-Anweisung (return), die die Adresse für den Sprung aus dem Stack abruft, organisiert wird, anstelle des indirekten Sprungs mittels der „jmp“-Anweisung, bei dem die Adresse aus dem Speicher oder dem CPU-Register geladen wird.

Ein Angreifer kann Bedingungen schaffen, die zu einer falschen Vorhersage des Sprunges führen, und einen gezielten spekulativen Sprung zu einem Codeblock organisieren, der nicht durch die Programmlogik vorgesehen ist. Letztendlich wird der Prozessor feststellen, dass die Vorhersage der Verzweigung nicht korrekt war und die Operation in ihren ursprünglichen Zustand zurücksetzen. Die während der spekulativen Ausführung bearbeiteten Daten werden jedoch im Cache und in mikroarchitektonischen Puffern verbleiben. Wenn der fehlerhaft ausgeführte Block auf den Speicher zugreift, führt dessen spekulative Ausführung zu einer Ablagerung im allgemeinen Cache und zu Daten, die aus dem Speicher gelesen wurden.

Um die im Cache verbliebenen Daten nach spekulativer Ausführung von Operationen zu ermitteln, kann ein Angreifer Methoden zur Bestimmung von Restdaten über externe Kanäle verwenden, zum Beispiel durch die Analyse von Änderungen in der Zugriffszeit auf gecachte und nicht gecachte Daten. Für gezielte Informationsbeschaffung aus Bereichen mit anderen Berechtigungsstufen (zum Beispiel aus dem Kernel-Speicher) werden "Gadgets" eingesetzt – im Kernel vorhandene Befehlsequenzen, die für das spekulative Auslesen von Daten aus dem Speicher unter Berücksichtigung externer Bedingungen geeignet sind, die der Angreifer beeinflussen kann.

Zum Schutz vor klassischen Angriffen der Spectre-Klasse, bei denen bedingte und indirekte Sprungbefehle eingesetzt werden, wird in den meisten Betriebssystemen die Technik „retpoline“ verwendet. Diese basiert darauf, indirekte Sprungoperationen durch die „ret“-Anweisung zu ersetzen, für die Prozessoren einen separaten Block zur Vorhersage des Stapelstatus nutzen, der keinen Sprungvorhersageblock verwendet. Als 2018 retpoline eingeführt wurde, galt es als allgemein akzeptiert, dass ähnliche manipulative Adressangriffe wie bei Spectre in der Praxis nicht für spekulative Sprünge mittels der „ret“-Anweisung anwendbar sind.

Forscher, die die Retbleed-Angriffsmetode entwickelt haben, demonstrierten die Möglichkeit, mikroarchitektonische Bedingungen zu schaffen, um spekulative Sprünge mithilfe der „ret“-Anweisung auszulösen. Sie veröffentlichten außerdem ein vollständiges Toolkit zur Identifizierung geeigneter für die Ausnutzung anfälliger Befehlsequenzen (Gadgets) im Linux-Kernel, bei denen solche Bedingungen auftreten.

In der Untersuchung wurde ein funktionierender Exploit entwickelt, der es auf Systemen mit Intel-CPUs ermöglicht, aus einem nicht privilegierten Benutzerprozess willkürliche Daten aus dem Kernspeicher mit einer Geschwindigkeit von 219 Byte pro Sekunde und einer Genauigkeit von 98 % zu extrahieren. Bei AMD-Prozessoren ist die Effizienz des Exploits deutlich höher — die Auslesegeschwindigkeit beträgt 3,9 kB pro Sekunde. Als praktisches Beispiel wird gezeigt, wie mit dem vorgeschlagenen Exploit der Inhalt der Datei /etc/shadow bestimmt werden kann. Auf Systemen mit Intel-CPUs wurde der Angriff zur Bestimmung des Passwort-Hashes des Root-Benutzers in 28 Minuten durchgeführt, während dies auf Systemen mit AMD-CPUs in 6 Minuten erfolgte.

Video abspielen

Die Möglichkeit eines Angriffs wurde für die 6. bis 8. Generation von Intel-Prozessoren bestätigt, die bis zum dritten Quartal 2019 (einschließlich Skylake) hergestellt wurden, sowie für AMD-Prozessoren basierend auf den Mikroarchitekturen Zen 1, Zen 1+ und Zen 2, die bis zum zweiten Quartal 2021 produziert wurden. Bei neueren Prozessor-Modellen, wie AMD Zen3 und Intel Alder Lake, sowie bei ARM-Prozessoren, wird das Problem durch vorhandene Schutzmechanismen blockiert. Zum Beispiel hilft die Anwendung von IBRS-Instruktionen (Indirect Branch Restricted Speculation), sich gegen solche Angriffe zu schützen.

Für den Linux-Kernel und den Xen-Hypervisor wurde ein Satz von Änderungen vorbereitet, die auf älteren CPUs das Problem softwareseitig blockieren. Der für den Linux-Kernel vorgeschlagene Patch ändert 68 Dateien, fügt 1783 Zeilen hinzu und entfernt 387 Zeilen. Leider führt der Schutz zu erheblichen Overheads – in durchgeführten Tests auf AMD- und Intel-Prozessoren wird die Leistungseinbuße zwischen 14 % und 39 % geschätzt. Bevorzugt wird der Einsatz von Schutzmaßnahmen basierend auf IBRS-Anweisungen, die in neuen Generationen von Intel-CPUs verfügbar sind und ab Kernel-Version 4.19 unterstützt werden.

Bei Intel-Prozessoren erfolgt die Adressierung für spekulative indirekte Sprünge durch eine Eigenschaft, die sich bei einem Underflow im Return Stack Buffer zeigt. Unter solchen Bedingungen beginnt die Logik zur Adressauswahl für die "ret"-Anweisung zu greifen, ähnlich der Logik, die bei normalen indirekten Sprüngen verwendet wird. Im Linux-Kernel wurden über eintausend Stellen gefunden, die Bedingungen für den Beginn eines solchen Reverse-Underflows schaffen und über Systemaufrufe erreichbar sind.

Bei AMD-Prozessoren erfolgt die spekulative Ausführung der 'ret'-Anweisung unabhängig vom für den Stack spezifischen Return Address Stack. Der Branch Predictor behandelt die 'ret'-Anweisung nicht als Rücksprung, sondern als indirekten Sprung und nutzt folglich für die Vorhersage Daten für indirekte Sprünge. Unter diesen Bedingungen kann faktisch jede 'ret'-Operation, die über einen Systemaufruf erreicht wird, zur Ausnutzung verwendet werden.

Zusätzlich wurde in AMD-CPUs ein weiteres Problem (CVE-2022-23825, Branch Type Confusion) festgestellt, das mit gefälschten Sprüngen verbunden ist – die Bedingungen für die Sprungvorhersage können sogar ohne die erforderlichen Zweigbefehle entstehen, was es ermöglicht, den Branch Predictor-Bufer ohne die 'ret'-Anweisung zu beeinflussen. Diese Eigenschaft erschwert die Implementierung von Schutzmaßnahmen erheblich und erfordert eine aktivere Reinigung des Vorhersagepuffers. Es wird erwartet, dass die Einführung umfassenden Schutzes im Kernel zu einer Erhöhung der Overheadkosten um 209 % führt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster