CPU-Sicherheitslücke Spectre V2: Neuer Dreh betrifft AMDs Ryzen und Epyc

Viele AMD-Prozessoren mit Zen-Architektur zeigen ein ungewolltes Verhalten bei verzweigten Instruktionen, was zu auslesbaren Bytes führt.

In Pocket speichern vorlesen Druckansicht 35 Kommentare lesen
AMD Ryzen übertakten

(Bild: c't)

Lesezeit: 2 Min.

Eine neue Art der Branch Target Injection (BTI) alias Spectre V2 umgeht AMDs bisherige Versuche, Sicherheitslücken dieses Typs zu schließen. Der Entdecker Pawel Wieczorkiewicz nutzt dabei eine Eigenheit von AMD-Prozessoren der Architekturgenerationen Zen 1 und Zen 2 aus, deren Sprungvorhersageeinheiten nach einem bedingungslosen Sprungbefehl wie JMP weiterspekulieren, statt den Instruktionszweig zu beenden.

Die Herangehensweise ist vor allem wegen des Funktionsprinzips interessant, das bisherige Schutzmaßnahmen umgeht. Große Gefahr geht nach jetzigem Stand jedoch nicht von der Sicherheitslücke aus: SuSE stuft die CVE-2021-26401 mit einem CVSS-Score von 5.6 als "moderat gefährlich" ein.

Grund für die Einstufung ist wohl auch, dass die richtigen Bedingungen zum Ausnutzen dieser Sicherheitslücke nur selten anzutreffen sind, wenn man sie nicht fahrlässig selbst schafft. Und selbst dann lassen sich im Zeitraum von 0,5 bis einigen Sekunden nur eine Handvoll Bytes auslesen, wie Wieczorkiewicz im Blog schreibt.

Das grundlegende Problem war in Form der Straight-Line Speculation (SLS) schon bei ARM-Prozessoren bekannt, betrifft nun aber auch AMDs x86-CPUs, darunter die Desktop-Modelle Ryzen 1000 bis Ryzen 3000, die Notebook-Ableger Ryzen 2000 bis teils Ryzen 5000 (alle "Lucienne"-CPUs mit Zen-2-Architektur) sowie Epyc 7001 und Epyc 7002. Zudem nennt AMD noch einige ältere Bulldozer-Prozessoren wie den Athlon A12-9800.

Ab Zen 3 verwenden AMDs Prozessoren eine verbesserte Sprungvorhersage, welche diese Eigenheit nicht aufzeigt. Bei Intel sind keinerlei Core-i- oder Xeon-CPUs betroffen.

Der Sicherheitsforscher Wieczorkiewicz entdeckte die neue Herangehensweise im Zuge von Speicheroptimierungen, um den Cache effizienter zu nutzen. Die AMD-Prozessoren verspekulierten sich dabei so stark, dass sie Code ausführten, der im Linux-Kernel zwar noch vorhanden, aber eigentlich längst begraben ist.

Im Falle von RET- und JMP-Befehlen lässt sich das Problem durch eine INT3-Instruktion nach einer verzweigten Sprungvorhersage simpel beheben. Bei CALLs kann das Setzen einer LFENCE-Instruktion hingegen spürbar Performance kosten. Diese Herangehensweisen empfiehlt AMD in seiner Sicherheitsübersicht.

(mma)