Meltdown (Sicherheitslücke)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Meltdown
Meltdown-Logo

Meltdown-Logo

Typ Hardware
CVE-Nummer(n)

CVE-2017-5754

Datum der Entdeckung 28. Juli 2017
Datum der Veröffentlichung 3. Januar 2018
Architektur(en)

ARM, IA-32/x64 (x86), POWER/​PowerPC

Betriebssysteme

AIX, Android, iOS, Linux, macOS, System i, Windows uvw.

Hersteller

Apple, ARM, IBM, Intel, Qualcomm

Produkt(e)

ARM-Cortex-A75-, IBM-POWER-, PowerPC-970- und Intel-x86-Prozessoren

Meltdown ist eine Hardware-Sicherheitslücke in Mikroprozessoren, über die ein unautorisierter Zugriff auf den Speicher fremder Prozesse möglich ist.[1][2][3] 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)[4], des Cortex-A75-Prozessor-Designs (im Jan. 2018 noch nicht in Mobiltelefonen eingesetzt) von ARM[5] und der POWER-Architektur von IBM[6] bestätigt. Die x86-Prozessoren von AMD sind hingegen nicht betroffen.[7][8] Die Meltdown-Sicherheitslücke wird unter der CVE-Nummer CVE-2017-5754[9] 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[Bearbeiten | Quelltext bearbeiten]

Meltdown wurde unabhängig voneinander durch Forscher von Googles Project Zero, Cyberus Technology sowie der TU Graz entdeckt[10] 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.[11] 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.[12]

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.[13]

Anfällige Systeme[Bearbeiten | Quelltext bearbeiten]

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.[10] 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.[14]

Wirkungsweise und Auswirkungen[Bearbeiten | Quelltext bearbeiten]

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.[15]

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:

; rcx = kernel address
; rbx = probe array
retry:
movzx rax, byte [rcx]        ; Lädt den Inhalt der auszulesenden Speicherstelle in Register rax.
                             ; Das führt zu einer Ausnahmebehandlung.
                             ; Der folgende Code wird nur prozessorintern im Voraus ausgeführt.
shl rax, 12                  ; Multipliziert den Inhalt des 64-bit Registers rax mit 4096,
                             ; so dass es nun eine Seitenadresse enthält, die vom Inhalt der
                             ; auszulesenden Speicherstelle abhängt.
jz retry                     ; Beginnt von vorn, wenn das Zero-Flag (und damit hier auch rax)
                             ; gleich 0 ist (Auch bei [rcx]=0 keine Endlosschleife, da aufgrund
                             ; der Ausnahmebehandlung die out-of-order Ausführung schließlich
                             ; abgebrochen wird).
mov rbx, qword [rbx + rax]   ; Greift auf eine Speicherstelle auf der Seite zu, deren Index innerhalb
                             ; des probe arrays rbx in rax steht. Dies lädt eine Seite in den Cache,
                             ; deren Adresse vom Inhalt der auszulesenden Speicherstelle abhängt.
  1. Es werden im angreifenden Prozess jeweils ein Sender- und Empfänger-Thread gestartet.
  2. 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.
  3. 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[Bearbeiten | Quelltext bearbeiten]

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.[16] Am 18. Januar 2018 begann Microsoft mit der Herausgabe von Meltdown-Updates für 32-Bit-Betriebssysteme, beginnend mit Windows 10 Version 1709.[17] 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.[6] Der von Apple als PowerPC G5 vermarktete PowerPC 970 ist vom POWER4+ abgeleitet und ebenfalls von Meltdown betroffen.[18]

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.[19]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Cade Metz, Nicole Perlroth: Researchers Discover Two Major Flaws in the World's Computers. In: nytimes.com. 2018, abgerufen am 3. Januar 2018 (amerikanisches Englisch).
  2. Intel’s processors have a security bug and the fix could slow down PCs. In: The Verge. Abgerufen am 3. Januar 2018.
  3. Linux Gaming Performance Doesn't Appear Affected By The x86 PTI Work. In: phoronix.com. Abgerufen am 3. Januar 2018 (englisch).
  4. Meltdown and Spectre. Abgerufen am 15. November 2019.
  5. Arm Processor Security Update. In: developer.arm.com. 3. Januar 2018, abgerufen am 5. Januar 2018.
  6. a b Potential Impact on Processors in the POWER Family. In: PSIRT Blog. IBM, 14. Mai 2019, abgerufen am 9. August 2019 (englisch).
  7. Thomas Gleixner: x86/cpu, x86/pti: Do not enable PTI on AMD processors. In: git.kernel.org. 3. Januar 2018, abgerufen am 3. Januar 2018.
  8. Tom Lendacky: [tip:x86/pti] x86/cpu, x86/pti: Do not enable PTI on AMD processors. In: lkml.org. Abgerufen am 3. Januar 2018.
  9. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5754
  10. a b Meltdown and Spectre: Which systems are affected by Meltdown? In: meltdownattack.com. Abgerufen am 3. Januar 2018 (englisch).
  11. Meltdown and Spectre: ‘worst ever’ CPU bugs affect virtually all computers. In: theguardian, 4. Januar 2018
  12. Alex Ionescu: Windows 17035 Kernel ASLR/VA Isolation In Practice (like Linux KAISER). In: Twitter.com
  13. Daniel Gruss: #FunFact: We submitted #KAISER to #bhusa17 and got it rejected. In: Twitter.com
  14. Rudolf Opitz: Prozessorlücke: Auch Qualcomm-CPUs sind anfällig. In: Heise online. 6. Januar 2018. Abgerufen am 6. Januar 2018.
  15. Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher, Werner Haas, Stefan Mangard, Paul Kocher, Daniel Genkin, Yuval Yarom, Mike Hamburg: Meltdown. (PDF) Abgerufen am 4. Januar 2018 (englisch).
  16. Meltdown-Patches: 32-Bit-Systeme stehen hinten an heise.de, am 12. Januar 2018
  17. Windows/Meltdown: Patch für 32 Bit, AMD-Problem behoben In: Heise.de, 19. Januar 2018
  18. Michael Larabel: PowerPC Memory Protection Keys In For Linux 4.16, Power Has Meltdown Mitigation In 4.15. Phoronix, 22. Januar 2018, abgerufen am 10. August 2019 (englisch).
  19. Prozessor-Bug: Browser-Hersteller reagieren auf Meltdown und Spectre In: Heise.de, 4. Januar 2018