In AMD-Prozessoren, die auf den Mikroarchitekturen Zen+ und Zen 2 basieren, wurde eine Schwachstelle der Meltdown-Klasse entdeckt

Eine Forschergruppe der Technischen Universität Dresden hat eine Schwachstelle (CVE-2020-12965) in AMD-Prozessoren auf Basis der Zen+- und Zen 2-Mikroarchitekturen identifiziert, die einen Angriff der Meltdown-Klasse ermöglicht. Ursprünglich ging man davon aus, dass AMD Zen+- und Zen 2-Prozessoren nicht anfällig für die Meltdown-Schwachstelle sind, doch Forscher identifizierten eine Funktion, die bei Verwendung nicht-kanonischer virtueller Adressen zu spekulativem Zugriff auf geschützte Speicherbereiche führt.

Die AMD64-Architektur verwendet nur die ersten 48 Bits der virtuellen Adresse und ignoriert die restlichen 16 Bits. Es ist festgelegt, dass die Bits 48 bis 63 immer den Wert von Bit 47 (Vorzeichenbiterweiterung) kopieren müssen. Wird diese Bedingung verletzt und versucht, auf eine Adresse mit beliebigen Werten der oberen Bits zuzugreifen, generiert der Prozessor eine Ausnahme. Durch wiederholtes Füllen der oberen Bits wird der verfügbare Adressraum in zwei Blöcke aufgeteilt – einen unteren (von 0 bis 00007FFFFFFFFFFFFF), in dem die oberen Bits auf 800000000000 gesetzt sind, und einen oberen (von FFFF1 bis FFFFFFFFFFFFFFFF), in dem alle oberen Bits sind auf XNUMX gesetzt.

Adressen, die in die angegebenen Blöcke fallen, werden als kanonisch bezeichnet, und falsche Adressen mit willkürlichen Inhalten der oberen Bits werden als nicht kanonisch bezeichnet. Der untere Bereich kanonischer Adressen wird normalerweise für Prozessdaten zugewiesen, und der obere Bereich wird für Kerneldaten verwendet (der Zugriff auf diese Adressen aus dem Benutzerbereich wird auf der Ebene der Privilegientrennung blockiert).

Die klassische Meltdown-Schwachstelle basiert auf der Tatsache, dass der Prozessor bei der spekulativen Ausführung von Anweisungen auf einen privaten Datenbereich zugreifen und das Ergebnis dann verwerfen kann, da die festgelegten Privilegien einen solchen Zugriff durch den Prozess des Benutzers verbieten. Im Programm ist der spekulativ ausgeführte Block durch einen bedingten Zweig vom Hauptcode getrennt, der unter realen Bedingungen immer ausgelöst wird, aber aufgrund der Tatsache, dass die bedingte Anweisung einen berechneten Wert verwendet, den der Prozessor während der präventiven Ausführung nicht kennt Im Code werden alle Verzweigungsoptionen spekulativ ausgeführt.

Da spekulativ ausgeführte Operationen denselben Cache verwenden wie normal ausgeführte Anweisungen, ist es bei der spekulativen Ausführung möglich, Markierungen im Cache zu setzen, die den Inhalt einzelner Bits in einem privaten Speicherbereich widerspiegeln, und dann im normal ausgeführten Code ihren Wert durch Timing zu bestimmen Analysezugriffe auf zwischengespeicherte und nicht zwischengespeicherte Daten.

Ein Merkmal der neuen Schwachstelle, die AMD Zen+- und Zen 2-Prozessoren betrifft, besteht darin, dass die CPUs spekulative Lese- und Schreibvorgänge zulassen, die über ungültige nicht-kanonische Adressen auf den Speicher zugreifen und dabei einfach die oberen 16 Bits ignorieren. Somit verwendet der Prozessor bei der spekulativen Codeausführung immer nur die unteren 48 Bits und die Gültigkeit der Adresse wird separat überprüft. Wenn beim Übersetzen einer nicht-kanonischen virtuellen Adresse in eine physische Adresse im assoziativen Übersetzungspuffer (TLB) eine Übereinstimmung im kanonischen Teil der Adresse erkannt wird, gibt die spekulative Ladeoperation den Wert zurück, ohne den Inhalt zu berücksichtigen der oberen 16 Bits, wodurch die Speicherfreigabe zwischen Threads umgangen werden kann. Anschließend wird der Vorgang als ungültig betrachtet und verworfen, der Speicherzugriff wird jedoch abgeschlossen und die Daten landen im Cache.

Während des Experiments konnten die Forscher mithilfe der Technik zur Bestimmung des Inhalts des FLUSH+RELOAD-Cache einen Kanal für die versteckte Datenübertragung mit einer Geschwindigkeit von 125 Bytes pro Sekunde organisieren. Das Problem betrifft neben AMD-Chips auch alle Intel-Prozessoren, die für die klassische Meltdown-Schwachstelle anfällig sind. Dieselben Techniken, die helfen, Meltdown-Angriffe zu blockieren, wie z. B. die Verwendung von LFENCE-Anweisungen, können zum Schutz vor dieser neuen Art von Angriff verwendet werden. Wenn beispielsweise ein Intel-Prozessor über einen Hardware-Schutz gegen Meltdown verfügt oder das System über einen aktivierten Software-Schutz verfügt, sind solche Konfigurationen nicht anfällig für die neue Angriffsvariante.

Gleichzeitig stellen die Forscher fest, dass die Architektur von AMD-Prozessoren im Vergleich zu Intel-Prozessoren die Möglichkeit realer Angriffe einschränkt, den Einsatz einer neuen Methode in Kombination mit anderen Mikroarchitektur-Angriffen zur Steigerung ihrer Wirksamkeit jedoch nicht ausschließt. Der vorgeschlagene Angriff ermöglicht es insbesondere nicht, den Inhalt von Speicherbereichen des Kernels und anderer Prozesse zu ermitteln, sondern beschränkt sich auf die Möglichkeit, Zugriff auf andere Threads desselben Programms zu erhalten, die im selben virtuellen Speicherbereich ausgeführt werden.

Da ein Programm ohne Schwachstelle die Möglichkeit hat, auf seine Threads zuzugreifen, ist die Methode aus praktischer Sicht von Interesse, um die Sandbox-Isolation zu umgehen und Eingriffe in die Arbeit anderer Threads in Programmen zu organisieren, die die Ausführung von Drittanbietern ermöglichen Code wie Webbrowser und JIT-Engines. Die Forscher untersuchten die Anfälligkeit der SpiderMonkey-JavaScript-Engine und des Linux-Kernels für Angriffe, fanden jedoch keine anfälligen Codesequenzen, die für einen Angriff verwendet werden könnten. Zusätzlich zum Angriff auf Anwendungen kann die Methode auch dazu verwendet werden, inakzeptable Datenflüsse zwischen mikroarchitektonischen Elementen des Prozessors zu erzwingen und gleichzeitig andere mikroarchitektonische Schwachstellen auszunutzen.

Source: opennet.ru

Kommentar hinzufügen