# Meltdown (Sicherheitslücke)

Meltdown ist eine Hardware-Sicherheitslücke in Mikroprozessoren, über die ein unautorisierter Zugriff auf den Speicher fremder Prozesse möglich ist. Die Anfälligkeit für diese Sicherheitslücke wurde für x86-Prozessoren des Herstellers Intel (alle Prozessoren seit 1995 mit Ausnahme der Atom-Reihe vor 2013), des Cortex-A75-Prozessor-Designs (im Jan. 2018 noch nicht in Mobiltelefonen eingesetzt) von ARM und der POWER-Architektur von IBM bestätigt. Die x86-Prozessoren von AMD sind hingegen nicht betroffen. Die Meltdown-Sicherheitslücke wird unter der CVE-Nummer CVE-2017-5754 geführt.
Die Sicherheitslücke besteht konkret darin, dass im Rahmen der Out-of-order execution der Prozessor vorläufig den Inhalt einer Speicherzelle ausliest und weiterverarbeitet, obwohl der aufrufende Prozess für diesen Speicherabschnitt keine Rechte hat. Dies verändert das Laufzeitverhalten bei Zugriff auf den Cache und erlaubt mittels einer genauen Zeitmessung unter bestimmten Bedingungen einen eindeutigen Rückschluss auf den Dateninhalt, auch nachdem das Ergebnis der Out-of-order-Ausführung verworfen wurde. Im Prinzip stellt dieses Verfahren ein in der Kryptoanalyse als Seitenkanalattacke bekanntes Verfahren dar.

## Geschichte

Meltdown wurde unabhängig voneinander durch Forscher von Googles Project Zero, Cyberus Technology sowie der TU Graz entdeckt und am 3. Januar 2018 zeitgleich mit der Prozessor-Sicherheitslücke Spectre veröffentlicht, nachdem einige betroffene Hardware- und Software-Unternehmen bereits am 28. Juli 2017 informiert worden waren. Am 14. November 2017 kündigte Alex Ionescu auf Twitter Änderungen für die neue Windows-10-Version an, die Geschwindigkeitseinbußen mit sich bringe, ohne dies zu erläutern. Er betonte, dass bei Linux Ähnliches gemacht würde.
Forscher der TU Graz versuchten im Frühjahr 2017, ihr im sog. „KAISER“-Dokument beschriebenes Verfahren (Kernel) Page Table Isolation, kurz (K)PTI, zur Behebung der Sicherheitslücke auf der alljährlichen Konferenz Black Hat im Juli 2017 der Öffentlichkeit vorzustellen, doch lehnten die Kongress-Organisatoren die Einreichung ab.

## Anfällige Systeme

Potentiell sind alle Intel-Prozessoren betroffen, die Out-of-order execution implementieren, d. h. alle x86-Prozessoren seit 1995, das sind 32- und 64-Bit-Prozessoren der Intel Architecture 32-Bit (IA-32) und x64 (x86-64 mit Intel 64), mit Ausnahme der vor 2013 produzierten Atom-Prozessoren. Prozessoren derselben Architektur des direkten Konkurrenten AMD sind jedoch nicht anfällig.
Alle zum Zeitpunkt der Veröffentlichung gängigen Betriebssysteme wie AIX, BSD, iOS, Linux, macOS, System i und Windows für die x86-, ARM- und POWER-Architektur sind bis zum Erfolg der u. g. Gegenmaßnahmen (Page Table Isolation, PTI) grundsätzlich anfällig für ähnliche Angriffe, da sie den Kernel-Adressraum und mindestens Teile des physischen Speichers im Adressraum von allen Prozessen abbilden. Dies ist Voraussetzung dafür, dass mit Hilfe des Angriffs Speicher ausgelesen werden kann, für den der auslesende Prozess nicht autorisiert ist.
Betroffen sind auch Tablets, Smartphones oder andere IoT-Geräte, die einen Prozessor mit dem ARM-Cortex-A75-Design haben. Das sind z. B. Qualcomm-CPUs vom Typ Snapdragon 845.

## Wirkungsweise und Auswirkungen

Angriffe auf die Meltdown-Lücke – wie auch Angriffe auf die Spectre-Lücke(n) – nutzen aus, dass bei Prozessoren, die Out-of-order execution durchführen, Anweisungen vom Prozessor parallel oder auch in veränderter Reihenfolge ausgeführt werden und sich dabei der Zustand des Systems verändert, selbst wenn das Ergebnis der Out-of-order-Ausführung im Anschluss verworfen wird. Diese Veränderungen, wie z. B. das Laden einer Speicherseite in den Cache, dienen als verdeckter Kanal, um Information aus dem Adressraum des angegriffenen Prozesses, die anders nicht zugänglich wäre, an ein empfangendes Programm zu übertragen.
Im Gegensatz zu den Spectre-Lücken, die verschiedene Formen der spekulativen Ausführung ausnutzen, nutzt Meltdown lediglich die Parallelisierung in Form der Out-of-order execution aus.
Die Entdecker demonstrierten einen Angriff, der es ermöglicht, bei betroffenen Intel-Prozessoren den Inhalt einer beliebigen Speicherstelle auszulesen. Die auszulesende Speicherstelle muss dazu im Adressraum des angreifenden Prozesses abgebildet sein. Bei allen betroffenen Betriebssystemen ist der Kernelspeicher und mindestens Teile des physischen Speichers im Adressraum jedes Prozesses abgebildet. Am Beginn des Meltdown-Angriffs steht die Ausführung einer Anweisung, die aufgrund unzureichender Berechtigungen zu einer Ausnahme führt. Auf betroffenen Prozessoren werden die darauf folgenden Anweisungen ausgeführt, bevor die Ausnahme verarbeitet wird, auch wenn sie auf Daten basieren, für die der aufrufende Prozess keine Zugriffsrechte hat. Der Algorithmus besteht aus folgenden Schritten:
Beispielcode auf Senderseite:
* Es werden im angreifenden Prozess jeweils ein Sender- und Empfänger-Thread gestartet.
* Der Sender-Thread führt ein Programm aus, das den internen Zustand des Prozessors in Abhängigkeit von der auszulesenden Speicherstelle verändert. Dazu
** enthält er zunächst eine Anweisung, um den Inhalt einer Speicherstelle zu lesen, die auf reguläre Art und Weise nicht für den Prozess zugreifbar wäre. Beim Versuch, diese Anweisung auszuführen, wird der Thread unterbrochen und eine Ausnahmebehandlung durchgeführt.
** enthält er weiterhin Anweisungen, die abhängig vom Inhalt der auszulesenden Speicherstelle auf eine Speicherseite zugreifen würden. Dieser Code würde bei sequentieller Ausführung des Programms niemals ausgeführt, weil der Thread zuvor unterbrochen wurde. Bei Out-of-order execution wird dieser Code jedoch weitgehend bereits im Voraus ausgeführt. Das bewirkt, dass sich der interne Zustand des Systems verändert, indem z. B. eine Speicherseite in den Cache gelesen wird. Im Beispielcode wird, basierend auf dem Inhalt der auszulesenden Speicherstelle, die Adresse einer Speicherseite berechnet und auf deren Inhalt zugegriffen.
* Der Empfänger-Thread führt ein Programm aus, das den internen Zustand des Prozessors ausliest. Dazu führt es Anweisungen aus, die im Beispielangriff mit Hilfe von Zeitmessungen ermitteln, ob eine bestimmte Speicherseite in den Cache geladen ist.
Der Sender-Thread kann durch das von ihm ausgelöste Laden einer Speicherseite Nachrichten in den Cache des Empfänger-Threads übermitteln. Dadurch, dass er diese Nachrichten abhängig vom Inhalt der auszulesenden Speicherstelle macht, kann er den Inhalt der Speicherstelle an den Empfängerprozess senden.
Im Beispielangriff gelang es den Autoren, den gesamten physischen Speicher des Systems zu übermitteln.

## Gegenmaßnahmen

Als Workaround gegen die Sicherheitslücke wird die Page Table Isolation (PTI, vormals auch wie das veröffentlichte Dokument mit KAISER bezeichnet) aufgeführt. Kernel-PTI (KPTI) sorgt dafür, dass der Kernel-Adressraum und der physische Speicher nicht in den Adressraum des Prozesses abgebildet werden, wenn sich der Prozessor im User-Mode befindet. Im Kernel-Mode werden sie weiterhin abgebildet. Als Folge dessen muss bei jedem Übergang vom User- in den Kernel-Mode (z. B. bei Systemaufrufen und umgekehrt) der Adressraum gewechselt werden, wie sonst bei einem Kontextwechsel. Außerdem müssen die beiden Instanzen des Adressraums synchron gehalten werden. Das führt je nach Prozessorarchitektur u. a. dazu, dass bei jedem derartigen Wechsel die Translation Lookaside Buffers geleert werden und während des weiteren Programmablaufs neu gefüllt werden, was die Leistungsfähigkeit des Prozessors verringert.
Die Meltdown-Gegenmaßnahme wird in seit Januar 2018 gepatchten Betriebssystemen als „Kernel VA Shadowing“ bezeichnet. Zunächst war diese Gegenmaßnahme aber bei den 32-Bit-Versionen der Windows-Betriebssysteme trotz eingespielter Updates bis 12. Januar 2018 nicht wirksam, und auch unter Linux gab es für die 32-Bit-Versionen bis dahin noch keine gegen Meltdown wirksamen Updates. Am 18. Januar 2018 begann Microsoft mit der Herausgabe von Meltdown-Updates für 32-Bit-Betriebssysteme, beginnend mit Windows 10 Version 1709. Auf Tablets und Smartphones mit den betroffenen ARM-Prozessoren sorgt ebenfalls KPTI des mit Android genutzten Linux-Kernels für Abhilfe, was jedoch in vielen Fällen vom Hersteller abhängt, da nicht alle älteren Geräte immer Android-Aktualisierungen erhalten.
IBM-POWER-Systeme wurden von IBM nur ab dem POWER7 mit Firmware-Updates (gegen Spectre) versorgt. Leider wurde in den Betriebssystemen die Gegenmaßnahme gegen Meltdown, KPTI, auch erst ab dem POWER7 implementiert, sodass die 64-Bit-Systeme POWER4, POWER5 und POWER6 potentiell verwundbar bleiben. Für noch ältere POWER-Systeme (vor dem POWER4) gibt IBM leider keine eindeutige Auskunft. Der von Apple als PowerPC G5 vermarktete PowerPC 970 ist vom POWER4+ abgeleitet und ebenfalls von Meltdown betroffen.
Wie bei den Spectre-Lücken benötigt das Abgreifen der Information eine genaue Zeitmessung, so dass die Herabsetzung der Zeitauflösung durch Verzittern des Taktes (Jitter) gegen beide Angriffe als wirksam erachtet wird.