Meltdown (Sicherheitslücke)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Meltdown

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, x86/IA-32

Betriebssysteme

Android, iOS, Linux, macOS, Windows

Hersteller

Apple, ARM, Intel, Qualcomm

Produkt(e)

Intel-x86-Prozessoren, ARM-Cortex-A75

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 eine Reihe von Prozessoren des Herstellers Intel[4] und des Cortex-A75-Prozessor-Designs (im Jan. 2018 noch nicht in Mobiltelefonen eingesetzt) von ARM[5] bestätigt, wohingegen AMD-Prozessoren nicht betroffen sind.[6][7] 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 spekulativen 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[8] und am 3. Januar 2018 zeitgleich mit der weiter reichenden Prozessor-Sicherheitslücke Spectre veröffentlicht, nachdem einige betroffene Hardware- und Software-Unternehmen bereits am 28. Juli 2017 informiert worden waren.[9] 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.[10]

Forscher der TU Graz versuchten im Frühjahr 2017, ihr KAISER genanntes Verfahren 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.[11]

Anfällige Systeme[Bearbeiten | Quelltext bearbeiten]

Potentiell sind alle Intel-Prozessoren betroffen, die Out-of-order execution implementieren, d. h. alle Prozessoren seit 1995 mit Ausnahme der Itanium- und der vor 2013 produzierten Atom-Prozessoren.[8]

Alle zum Zeitpunkt der Veröffentlichung gängigen Betriebssysteme wie iOS, Linux, macOS und Windows für die x86- und ARM-Architektur sind bis zum Erfolg der u. g. Gegenmaßnahmen (KPTI) 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.[12] Als Gegenmaßnahme sollte auch hier KPTI des in Android genutzten Linux-Kernels Abhilfe schaffen.

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 spekulativ ausgeführt werden und sich dabei der Zustand des Systems verändert, selbst wenn das Ergebnis der spekulativen Ausführung 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.[13]

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 den betroffenen Betriebssystemen macOS, Linux und Windows ist der Kernelspeicher und mindestens Teile des physischen Speichers im Adressraum jedes Prozesses abgebildet. Als Auslöser für die spekulative Ausführung nutzen sie eine Anweisung, die aufgrund unzureichender Berechtigungen zu einer Ausnahme führt. Auf betroffenen Intel-Prozessoren werden die darauf folgenden Anweisungen spekulativ ausgeführt, auch wenn sie auf Daten basieren, für die der aufrufende Prozess keine Zugriffsrechte hat. Der Algorithmus besteht aus folgenden Schritten:

Beispielcode auf Senderseite:

 1 ; rcx = kernel address
 2 ; rbx = probe array
 3 retry:
 4 movzx rax, byte [rcx]        ; Lädt den Inhalt der auszulesenden Speicherstelle in Register rax.
 5                              ; Das führt zu einer Ausnahmebehandlung.
 6                              ; Der folgende Code wird nur prozessorintern im Voraus ausgeführt.
 7 shl rax, 12                  ; Multipliziert den Inhalt des 64-bit Registers rax mit 4096,
 8                              ; so dass es nun eine Seitenadresse enthält, die vom Inhalt der
 9                              ; auszulesenden Speicherstelle abhängt.
10 jz retry                     ; Beginnt von vorn, wenn das Zero-Flag (und damit hier auch rax)
11                              ; gleich 0 ist (Auch bei [rcx]=0 keine Endlosschleife, da aufgrund
12                              ; der Ausnahmebehandlung die out-of-order Ausführung schließlich
13                              ; abgebrochen wird).
14 mov rbx, qword [rbx + rax]   ; Greift auf eine Speicherstelle auf der Seite zu, deren Adresse in
15                              ; rax steht. Dies lädt eine Seite in den Cache, deren Adresse vom
16                              ; 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 Kernel page-table isolation (KPTI, vormals KAISER) aufgeführt. 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 bei seit Januar 2018 (nach und nach) ab Windows 7 gepatchten Betriebssystemen als „Kernel VA Shadowing“ bezeichnet. Diese Gegenmaßnahme war 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.[14] Am 18. Januar 2018 begann Microsoft mit der Herausgabe von Meltdown-Updates für 32-Bit Betriebssysteme, beginnend mit dem aktuellen Windows 10 (Version 1709).[15] Am 24. Januar 2018 warnte Intel vor fehlerhaften Patches.[16][17]

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

Siehe auch[Bearbeiten | Quelltext bearbeiten]

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. Andy Greenberg: A Critical Intel Flaw Breaks Basic Security for Most Computers. In: wired.com, 3. Januar 2018, abgerufen am 6. Januar 2018
  5. Arm Processor Security Update. In: developer.arm.com. 3. Januar 2018, abgerufen am 5. Januar 2018.
  6. 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.
  7. Tom Lendacky: [tip:x86/pti] x86/cpu, x86/pti: Do not enable PTI on AMD processors. In: lkml.org. Abgerufen am 3. Januar 2018.
  8. a b Meltdown and Spectre: Which systems are affected by Meltdown? In: meltdownattack.com. Abgerufen am 3. Januar 2018 (englisch).
  9. Meltdown and Spectre: ‘worst ever’ CPU bugs affect virtually all computers. In: theguardian, 4. Januar 2018
  10. Alex Ionescu: Windows 17035 Kernel ASLR/VA Isolation In Practice (like Linux KAISER). In: Twitter.com
  11. Daniel Gruss: #FunFact: We submitted #KAISER to #bhusa17 and got it rejected. In: Twitter.com
  12. Rudolf Opitz: Prozessorlücke: Auch Qualcomm-CPUs sind anfällig. In: Heise online. 6. Januar 2018. Abgerufen am 6. Januar 2018.
  13. Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher, Werner Haas, Stefan Mangard, Paul Kocher, Daniel Genkin, Yuval Yarom, Mike Hamburg: Meltdown. Abgerufen am 4. Januar 2018 (PDF, englisch).
  14. Meltdown-Patches: 32-Bit-Systeme stehen hinten an heise.de , am 12. Januar 2018
  15. Windows/Meltdown: Patch für 32 Bit, AMD-Problem behoben In: Heise.de, 19. Januar 2018
  16. Updates verursachen Probleme: Intel warnt vor fehlerhaften Patches chip.de , am 24. Januar 2018, abgerufen am 5. März 2018
  17. Meltdown & Spectre: Microsofts Compiler-Fix weitgehend wirkungslos heise.de , am 15. Februar 2018, abgerufen am 5. März 2018
  18. Prozessor-Bug: Browser-Hersteller reagieren auf Meltdown und Spectre In: Heise.de, 4. Januar 2018