Spectre (Sicherheitslücke)

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

Spectre-Logo

Typ Hardware
CVE-Nummer(n)

CVE-2017-5715 , CVE-2017-5753

Datum der Entdeckung 1. Juni 2017
Datum der Veröffentlichung 3. Januar 2018
Architektur(en)

ARM, POWER, PowerPC, x86/IA-32

Betriebssysteme

unabhängig vom Betriebssystem

Hersteller

AMD, Apple, ARM, IBM, Intel, Nvidia, NXP, Qualcomm

Produkt(e)

Prozessoren

Spectre beschreibt ein Angriffs-Szenario, bei dem Prozesse durch Sicherheitslücken in Mikroprozessoren mit Out-of-order execution Informationen des virtuellen Speichers anderer Prozesse, auf den sie normalerweise keinen Zugriff haben, auslesen können.[1][2][3] Die zu Spectre gehörenden Sicherheitslücken werden unter den CVE-Nummern CVE-2017-5715 (Branch Target Injection) und CVE-2017-5753 (Bounds Check Bypass) geführt.

Die Sicherheitslücken umgehen implementierte Sicherheitsmechanismen wie Sandboxing oder die Trennung zwischen Programmcode und vom Benutzer bereitgestelltem Code (z. B. Interpreter vs. Skript). Während der Out-of-order execution des Prozessors wird vorläufig der Inhalt einer Speicherzelle aus dem eigenen Adressraum ausgelesen, auf die der aufrufende Prozess normalerweise nicht zugreifen könnte. Dieses „vorläufige Auslesen“ hinterlässt im Cache eine von außen bemerkbare Spur, auch nachdem das Ergebnis der spekulativen Ausführung verworfen wurde.

Geschichte[Bearbeiten | Quelltext bearbeiten]

Spectre wurde unabhängig voneinander durch Forscher von Googles Project Zero so wie von Paul Kocher in Zusammenarbeit mit Daniel Genkin, Mike Hamburg, Moritz Lipp und Yuval Yarom entdeckt[1] und am 3. Januar 2018 in Zusammenhang mit der verwandten Sicherheitslücke Meltdown veröffentlicht, nachdem die betroffenen Software- und Hardware-Hersteller bereits am 1. Juni 2017 informiert worden waren.[4] Entdeckt wurde die Sicherheitslücke Spectre, gemeinsam mit Meltdown, auf der weit verbreiteten x86-Architektur von Intel und AMD, wobei grundsätzlich auch andere Architekturen als verwundbar gelten.

Betroffene Systeme[Bearbeiten | Quelltext bearbeiten]

Theoretisch anfällig sind alle Prozessoren, die Speculative execution branch prediction, im Besonderen mit indirect branching[5] bieten.

Als gesichert gilt, dass x86-Prozessoren vor 1995 und jene ohne Speculative execution oder ohne Out-of-order execution, etwa Atom-Prozessoren vor 2013, sowie die gesamte Itanium-Architektur von Intel und HP nicht von der Sicherheitslücke Spectre betroffen sind.

Von Apple, IBM und Motorola wurde 1991 der PowerPC-Prozessor auf Basis der IBM-POWER-Architektur entwickelt, der bereits im Grunddesign spekulative Ausführung vorsieht. Theoretisch sind damit ein Großteil aller je produzierten PowerPC- und POWER-Prozessoren anfällig.[6] Ein erster Test ergab jedoch, dass ältere PowerPC-Prozessoren der Modellreihe G3 (PPC750) und G4 (nur PPC7400 bzw. 7410) in der Praxis nicht anfällig sind, spätere Modelle ab dem PPC7450 – G4 744x und 745x sowie PowerPC G5 (PPC970) – und der POWER6 jedoch schon.[7] Auch IBM bestätigte die Anfälligkeit von POWER7+, POWER8 und POWER9.[8]

Auch Prozessoren von Oracle der ursprünglich von Sun entwickelten SPARC-Architektur sind offenbar von Spectre betroffen. Obwohl sich Oracle selbst noch nicht dazu geäußert hat, hat Fujitsu bereits Updates für unterstützte SPARC-Server, die mit den Prozessoren SPARC64 XII und SPARC64 X+ ausgestattet sind, in Aussicht gestellt.[9] Auch in älteren Modellen, etwa dem SPARC64 VI, ist Sprungvorhersage im Design des Prozessors vorhanden.

Prozessoren auf Basis der ARM-Architektur sind zum Teil für die Sicherheitslücke anfällig. Darunter sind z. B. die SoCs Snapdragon 845 von Qualcomm[10] sowie einige Modelle der Tegra-Serie von Nvidia[11][12][13][14]. Auch Apple-Produkte, die Prozessoren der ARM-Architektur verwenden (z. B. der Apple A11), sind anfällig. Dazu zählen alle Geräte auf denen iOS als Betriebssystem läuft, etwa das iPad oder das Apple TV.[15] ARM-Prozessoren mit In-Order-Exectution sind hingegen nicht betroffen, das sind etwa ARM-Cortex-A7- und -A53-Designs wie z. B. im Raspberry Pi.[16]

Apple bestätigte auch die Anfälligkeit aller aktuellen Mac-Modelle (früher „Macintosh“).[15] Auch in älteren Macs verwendete Apple von 1994 bis 2006 PowerPC-Prozessoren, die teilweise anfällig sind, und nutzt seit 2006 Intel-x86-Prozessoren, die sowohl von Spectre als auch von Meltdown betroffen sind.

Grafikprozessoren sind von Spectre nicht betroffen.[17][18] Dennoch waren etwa von Nvidia bereits Treiber-Aktualisierungen notwendig, die jedoch mit dem x86-Prozessor zusammenhängen.[19]

Wirkungsweise und Auswirkungen[Bearbeiten | Quelltext bearbeiten]

Voraussetzung für einen Angriff auf die Spectre-Lücke ist wie bei der Meltdown-Lücke, dass der Prozessor Out-of-order execution unterstützt. Bei der Out-of-order execution werden manche Anweisungen spekulativ ausgeführt, um eine hohe Effizienz zu erzielen. Nach der Idee der Out-of-order execution ist der Zustand des Prozessors selbst bei einer Fehlspekulation so, als wäre die entsprechende Anweisung nie ausgeführt worden. Der Spectre-Angriff nutzt nun aus, dass sich der Zustand des Systems an bestimmten Punkten doch verändert, selbst wenn das Ergebnis der spekulativen Ausführung verworfen wird. Diese Veränderungen, z. B. das Laden einer Speicherseite in den Cache, dienen als verdeckter Kanal, um Information aus dem Adressraum des angegriffenen Prozesses auszuschleusen.[20] Der empfangende Prozess dekodiert die übermittelte Information aus den Veränderungen im System und kann sie damit lesen.

Zur Durchführung des Angriffs wird der angegriffene Prozess dazu gebracht, bestimmte vom Angreifer eingebrachte Anweisungen spekulativ auszuführen. Das kann z. B. durch Return Oriented Programming unter Ausnutzung eines Pufferüberlaufs erreicht werden. Die Spectre-Lücke kann aber auch von interpretierten Skriptsprachen wie bspw. JavaScript ausgenutzt werden, um Informationen aus dem Adressraum ihres Interpreters, also etwa des Webbrowsers zu extrahieren. Das könnte einem Angreifer ermöglichen, über ein von einem Webserver geladenes bösartiges JavaScript Passwörter aus dem Passwortspeicher des Webbrowsers auszulesen.

Die Autoren demonstrierten ein Szenario,[20] in dem ein Programm den Inhalt einer Zeichenkette oder einer beliebigen Speicherstelle des eigenen Adressraums ausgibt, ohne direkt über den Zeiger auf die Zeichen der Zeichenkette zuzugreifen. Als Auslöser für die spekulative Ausführung nutzen sie eine bewusst falsch herbei geführte Sprungvorhersage. Aber auch andere Anweisungen, wie indirekte Sprünge, bei denen Cache-Misses zu spekulativer Ausführung von sonst nicht ausgeführtem Code führen, können verwendet werden.

Der demonstrierte Angriff unter Ausnutzung einer fehlerhaften Sprungvorhersage funktioniert wie folgt:

Kommentierter Beispielcode:

 1 unsigned int array1_size = 16;
 2 uint8_t array1[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
 3 uint8_t array2[256 * 512];
 4 uint8_t temp;
 5 void victim_function(size_t x) {
 6    if (x < array1_size) {               // Dieser Vergleich wird für die fehlerhafte Sprungvorhersage ausgenutzt
 7        temp &= array2[array1[x] * 512]; // Der Zugriff auf array2[] lädt eine Seite in den Cache, deren Adresse
 8                                         // vom Inhalt von array1[x] abhängt. Das ist der verdeckte Kanal.
 9    }
10 }
  1. Zunächst wählt der Angreifer eine Speicherstelle p und berechnet deren Offset x_m bezüglich des von ihm kontrollierten Arrays array1.
  2. Dann trainiert er die Sprungvorhersage des Prozessors für den Sprung in Zeile 6 so, dass der Prozessor annimmt, dass die Bedingung vorzugsweise zutrifft, indem er victim_function sehr oft mit Werten aus dem Intervall 0...15 aufruft.
  3. Anschließend beeinflusst der Angreifer den Cache des Systems so, dass der Wert von array1_size nicht im Cache vorhanden ist, während der Inhalt der auszulesenden Speicherstelle im Cache vorhanden ist.
  4. Nun führt er den Code mit x=x_m aus. Die Bedingung in Zeile 6 wird also nicht zutreffen. Da array1_size nicht im Cache vorhanden ist, wird der Prozessor den nachfolgenden Code spekulativ ausführen, während array1_size aus dem Speicher geladen wird, denn die zuvor gelernte Sprungvorhersage geht von einer zutreffenden Bedingung aus.
  5. array1[x_m] zeigt nun auf p. Dessen Inhalt wird spekulativ geladen, zu einer Seitenadresse umgerechnet und die entsprechende Seite aus array2 zum Laden in den Cache vorgemerkt.
  6. array1_size wurde aus dem Speicher geladen und der Prozessor stellt fest, dass die spekulativ ausgeführten Anweisungen zu verwerfen sind. Dabei verbleibt eine einzelne Seite aus array2 abhängig vom Inhalt der Speicherstelle p im Cache.
  7. Anschließend analysiert der Angreifer, welche Seiten aus array2 in den Cache geladen wurden, und schließt daraus auf den Inhalt der Speicherstelle p zurück.

Gegenmaßnahmen[Bearbeiten | Quelltext bearbeiten]

Da besonders über Webbrowser mittels schädlichem JavaScript-Programmcode (auch) die Lücke Bounds Check Bypass ausgenutzt werden könnte, reagierten erste Hersteller mit Programmaktualisierungen oder veröffentlichten Maßnahmen zur Verringerung der Anfälligkeit. Mozilla Firefox stellte in Version 57.0.4 am 4. Januar 2018 eine Aktualisierung bereit, die u. a. die Genauigkeit der Zeitauflösung reduziert, da der durch Spectre aufgezeigte Mechanismus eine genaue Zeitmessung benötigt.[21] So hat Mozilla in Firefox die Genauigkeit der betroffenen Funktion performance.now() von 5 auf 20 µs reduziert.[22] Für die Webbrowser Internet Explorer 11 und Edge von Microsoft wurden am 3. Januar 2018 die gleichen Maßnahmen publiziert[23] und in den Folgetagen für unterstützte Windows-Betriebssysteme veröffentlicht. Apple verringerte die Genauigkeit in WebKit mit einer Aktualisierung von iOS 11.2 und macOS High Sierra vom 8. Januar 2018[24][25] für Safari 11.0.2 auf 1 ms.[26] Eine Aktualisierung für Google Chrome, welche die Ausnutzung der Sicherheitslücke verhindern soll, wurde für den 23. Januar 2018 angekündigt. Angriffe über Chrome-Installationen können bis dahin durch Aktivierung der „Website-Isolierung“ erschwert werden, welche jedoch den Arbeitsspeicherverbrauch erhöht und Probleme beim Drucken bzw. beim Entwickeln von webseitenübergreifenden iFrames verursacht.[27] Die gleiche Einstellung kann auch für die aktuellste Version des auf Chromium-basierenden Webbrowsers Opera vorgenommen werden.[28] Zudem können mithilfe von Browsererweiterungen (z. B. NoScript, Werbeblocker) aktive Inhalte wie JavaScript, Flash und Java-Applets blockiert oder eingeschränkt werden, um so die Ausführung von Schadecode im Webbrowser zu verhindern.[29]

Gegen Branch Target Injection ist bei Intel-Prozessoren neben einer Softwareaktualisierung zusätzlich eine Mikrocode-Aktualisierung oder eine Überarbeitung der Prozessorarchitektur notwendig, um die Anfälligkeit gegen die Sicherheitslücke zu reduzieren bzw. zu schließen. Intel kündigte an, aktualisierte Mikrocodes für Prozessor-Generationen ab 2013 bis Ende Januar zu veröffentlichen,[30] welche allerdings von den Computer- und Hardwarehersteller zur Verfügung gestellt werden müssen.[31][32][33] Für ältere Prozessoren oder Systeme die keine Aktualisierungen mehr erhalten, muss folglich ein Austausch der Hardware in Betracht gezogen werden. AMD kündige ebenfalls an, Mikrocode-Updates zur Verfügung zu stellen, die jedoch wegen der vom Hersteller behaupteten schwierigen Ausnutzbarkeit der Lücke als optional eingestuft werden.[18]

Leistungseinbußen[Bearbeiten | Quelltext bearbeiten]

Insbesondere die Maßnahmen gegen die Branch Target Injection auf Betriebssystem-Ebene führen zu Einbußen bei der Rechenleistung. Microsoft erklärt, dass bei älterem Prozessor, älterer Windows-Version und je nach Software „die meisten Nutzer“ einen Leistungsverlust spüren werden.[34]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. a b Meltdown and Spectre. TU Graz, 2018; abgerufen am 3. Januar 2018.
  2. Cade Metz, Nicole Perlroth: Researchers Discover Two Major Flaws in the World's Computers. In: The New York Times. 3. Januar 2018, ISSN 0362-4331 (amerikanisches Englisch, nytimes.com [abgerufen am 3. Januar 2018]).
  3. Tom Warren: Intel's processors have a security bug and the fix could slow down PCs. In: The Verge. 3. Januar 2018; abgerufen am 3. Januar 2018.
  4. Meltdown and Spectre: ‘worst ever’ CPU bugs affect virtually all computers. In: theguardian.com, 4. Januar 2018
  5. More about Spectre and the PowerPC (or why you may want to dust that G3 off). In: TenFourFox Development Blog. 5. Januar 2018; abgerufen am 6. Januar 2018 (englisch).
  6. Is PowerPC susceptible to Spectre? Yep. In: TenFourFox Development Blog. 4. Januar 2018; abgerufen am 6. Januar 2018 (englisch).
  7. Actual field testing of Spectre on various Power Macs (spoiler alert: G3 and 7400 survive!). In: TenFourFox Development Blog. 7. Januar 2018; abgerufen am 10. Januar 2018 (englisch).
  8. Potential Impact on Processors in the POWER family. In: IBM PSIRT Blog. IBM, 4. Januar 2018; abgerufen am 6. Januar 2018 (englisch): „On Wednesday, January 3, researchers from Google announced a security vulnerability impacting all microprocessors, including processors in the IBM POWER family.“
  9. Christof Windeck: Spectre-Lücke: Auch Server mit IBM POWER, Fujitsu SPARC und ARMv8 betroffen. In: Heise online. 11. Januar 2018. Abgerufen am 12. Januar 2018.
  10. Rudolf Opitz: Prozessorlücke: Auch Qualcomm-CPUs sind anfällig. In: Heise online. 6. Januar 2018. Abgerufen am 6. Januar 2018.
  11. http://nvidia.custhelp.com/app/answers/detail/a_id/4616
  12. http://nvidia.custhelp.com/app/answers/detail/a_id/4614
  13. http://nvidia.custhelp.com/app/answers/detail/a_id/4613
  14. http://nvidia.custhelp.com/app/answers/detail/a_id/4617
  15. a b Ben Schwan: Meltdown und Spectre: Alle Macs und iOS-Geräte betroffen. In: Heise online. 5. Januar 2018 (Update: Apple Watch nicht betroffen.). Abgerufen am 6. Januar 2018.
  16. Eben Upton: Why Raspberry Pi isn’t vulnerable to Spectre or Meltdown. In: official Raspberry Pi blog. 5. Januar 2018; abgerufen am 6. Januar 2018 (englisch).
  17. Security Bulletin: NVIDIA Driver Security Updates for CPU Speculative Side Channel Vulnerabilities. Nvidia, 12. Januar 2018; abgerufen am 12. Januar 2018 (englisch): „We believe our GPU hardware is immune to the reported security issue.“
  18. a b Martin Fischer: AMD rudert zurück: Prozessoren doch von Spectre 2 betroffen, Microcode-Updates für Ryzen und Epyc in Kürze. In: Heise online. 12. Januar 2018. Abgerufen am 12. Januar 2018.
  19. Martin Fischer: Patch gegen Spectre: Aktualisierte Nvidia-Grafiktreiber für GeForce und Quadro, Tesla-Treiber später. In: Heise online. 9. Januar 2018. Abgerufen am 12. Januar 2018.
  20. a b Paul Kocher, Daniel Genkin, Daniel Gruss, Werner Haas, Mike Hamburg, Moritz Lipp, Stefan Mangard, Thomas Prescher, Michael Schwarz, Yuval Yarom: Spectre Attacks: Exploiting Speculative Execution. Abgerufen am 4. Januar 2018 (PDF, englisch).
  21. Prozessor-Bug: Browser-Hersteller reagieren auf Meltdown und Spectre. In: Heise.de, 4. Januar 2018
  22. Opera, Mozilla, Vivaldi and more rush to patch Spectre and Meltdown security holes. In: The Inquirer. Abgerufen am 9. Januar 2018.
  23. https://blogs.windows.com/msedgedev/2018/01/03/speculative-execution-mitigations-microsoft-edge-internet-explorer/
  24. https://support.apple.com/en-us/HT208397
  25. https://support.apple.com/en-us/HT208401
  26. Changeset 226495 – WebKit. Abgerufen am 9. Januar 2018.
  27. https://support.google.com/chrome/answer/7623121?hl=de
  28. http://blogs.opera.com/security/2018/01/opera-mitigates-critical-cpu-vulnerabilities/
  29. heise online: FAQ zu Meltdown und Spectre: Was ist passiert, bin ich betroffen, wie kann ich mich schützen? Abgerufen am 10. Januar 2018 (deutsch).
  30. https://www.golem.de/news/spectre-und-meltdown-90-prozent-der-aktuellen-intel-cpus-werden-gepatcht-1801-131981.html
  31. Reading Privileged Memory with a Side Channel. In: Lenovo Security Advisor. 3. Januar 2018; abgerufen am 6. Januar 2018.
  32. Microprocessor Side-Channel Attacks (CVE-2017-5715, CVE-2017-5753, CVE-2017-5754): Impact on Dell products. In: Dell Knowledge Base. Abgerufen am 6. Januar 2018.
  33. ASUS Motherboards Microcode Update for Speculative Execution and Indirect Branch Prediction Side Channel Analysis Method. In: Asus. 5. Januar 2018; abgerufen am 8. Januar 2018.
  34. heise online: Microsoft über Meltdown & Spectre: Details zu Patches und Leistungseinbußen. Abgerufen am 10. Januar 2018 (deutsch).
    Understanding the performance impact of Spectre and Meltdown mitigations on Windows Systems. (microsoft.com [abgerufen am 10. Januar 2018]).