Reptar
(lock.cmpxchg8b.com)Entdeckung eines CPU-Mysteriums
- Wenn du dich für Fehler interessierst, die im Inneren moderner CPUs auftreten können, solltest du weiterlesen.
- Wenn du schon einmal x86-Assembly geschrieben hast, bist du wahrscheinlich mit dem Befehl
rep movsbvertraut, der zum Verschieben von Speicher verwendet wird. - Man setzt Quelle, Ziel, Richtung und Zähler, und der Prozessor kümmert sich um alle Details.
Interpretation von Befehlspräfixen
- Eine der Besonderheiten von x86 ist, dass die Befehlsdekodierung im Allgemeinen sehr flexibel ist.
- Selbst wenn man Präfixe verwendet, die bedeutungslos sind oder mit anderen Präfixen kollidieren, werden sie meist ignoriert.
- Compiler können überflüssige Präfixe verwenden, um die gewünschte Ausrichtungsgrenze zu erreichen.
REX-Präfix
- i386 hatte 8 allgemeine Register, sodass 3 Bit ausreichten, um ein Register anzugeben.
- x86-64 führte 8 zusätzliche allgemeine Register ein, wodurch mehr Bits erforderlich wurden.
- Das REX-Präfix erlaubt es dem folgenden Befehl, sich zusätzliche Bits zu leihen, und ermöglicht so die Kodierung von 16 allgemeinen Registern.
Kodierungsregeln
- Das REX-Präfix vergrößert den verfügbaren Raum zur Kodierung von Operanden.
- Unnötige oder redundante Präfixe werden bei x86 größtenteils ignoriert.
- Der Befehl
rex.rxb rep movsbhat keine Operanden, daher haben die REX-Bits keine Bedeutung, und der Prozessor ignoriert das REX-Präfix.
Fast Short Repeat Move (FSRM)
- FSRM ist ein neues Feature, das mit Ice Lake eingeführt wurde und die Nachteile von ERMS behebt.
- Bei ERMS besteht der schwierige Teil effizienter String-Moves darin, den Puffer auszurichten und den jeweils breitestmöglichen Speicherzugriff zu verwenden.
- FSRM zielt darauf ab, kurze Strings mit bis zu 128 Byte schneller zu verschieben.
Entdeckung
- Mithilfe der Prozessor-Verifikationstechnik Oracle Serialization wurde geprüft, ob zwei Formen zufällig erzeugter Programme denselben Endzustand haben.
- Im August entdeckte die Verifikations-Pipeline einen Fall, in dem das Hinzufügen eines redundanten
rex.r-Präfixes zu einer FSRM-optimiertenrep movs-Operation zu unvorhersehbaren Ergebnissen führte. - Es wurde bestätigt, dass der Prozessor eine Machine-Check-Exception meldet und stoppt, wenn mehrere Kerne denselben Bug auslösen.
Reproduktion
- Die Forschungsergebnisse wurden in einem Sicherheitsforschungs-Repository veröffentlicht.
- Um die Schwachstelle zu reproduzieren, kann das Tool
icebreakverwendet werden. - Auf nicht betroffenen Systemen sollte es keine Ausgabe geben, auf betroffenen Systemen hingegen wird bei jeder erfolgreichen Reproduktion ein
.ausgegeben.
Analyse
- Wie Microcode auf modernen Systemen genau funktioniert, ist geheim, daher sind nur beobachtungsbasierte Theorien möglich.
- Es wird vermutet, dass der Bug dazu führt, dass das Frontend die Größe des
movsb-Befehls falsch berechnet, wodurch nachfolgende Einträge im ROB (Reorder Buffer) mit falschen Adressen verknüpft werden.
Fragen
- Es könnte Fragen dazu geben, was in diesem unerwarteten „Glitch“-Zustand möglich ist.
- Bekannt ist, dass sich der Systemzustand so weit beschädigen lässt, dass ein Machine-Check-Fehler ausgelöst wird, und dass ein Thread die Ausführung seines SMT-Geschwisterprozessors beeinflussen kann.
- Da es keine Möglichkeit gibt, die μop-Ausführung zu debuggen, ist nicht bekannt, ob sich damit eine Privilegieneskalation erreichen lässt.
Lösung
- Intel hat aktualisierten Microcode für alle betroffenen Prozessoren veröffentlicht.
- Möglicherweise stellen Betriebssystem- oder BIOS-Anbieter das Update bereits bereit.
Alternative
- Falls ein Update nicht möglich ist, lassen sich schnelle Strings über das modell-spezifische Register IA32_MISC_ENABLE deaktivieren.
- Dies führt jedoch zu einem erheblichen Leistungsverlust und sollte nur verwendet werden, wenn es unbedingt notwendig ist.
Meinung von GN⁺
Der wichtigste Punkt dieses Artikels ist, dass ein unerwarteter „Glitch“-Zustand in modernen CPUs entdeckt wurde und dass sich daraus Sicherheitslücken ergeben können. Der Beitrag dürfte für Softwareentwickler interessant sein und hilft, das Bewusstsein für die Komplexität von CPUs und die Verwundbarkeit von Systemen zu schärfen. Außerdem erleichtert er das Verständnis dafür, wie solche Entdeckungen zu realen Sicherheitsbedrohungen werden können, und unterstreicht die Bedeutung aktualisierten Microcodes.
1 Kommentare
Hacker-News-Kommentare
Das Team von Konrad Magnusson hat ein Problem im Zusammenhang mit mimalloc entdeckt.
Mehrere Forschungsteams innerhalb von Google haben den Bug unabhängig voneinander entdeckt.
Der Prozessor meldet eine Machine-Check-Exception und stoppt.
Man erkennt, dass das Verständnis von Hardware unzureichend ist.
Es erinnert an die Diagnose, als qemu auf das Problem mit
repz retstieß.repz retdiagnostizierte.Sowohl Intel-Mitarbeiter als auch Google-Mitarbeiter haben das Problem gemeldet.
Viel interessanter als der Artikel von Google.
Zweifel daran, ob es möglich ist, eine CPU zu entwerfen, die nicht der Reihe nach, sondern spekulativ ausgeführt wird, ohne Sicherheitsprobleme.
Erklärung zu Intels Sicherheitsmitteilung.