10.02.2018
Sicherheitsrisiken durch spekulative Befehlsausführung

Informationen zu den Angriffen durch Meltdown und Spectre

Anfang Januar 2018 wurden 3 Sicherheitslücken gängiger Prozessoren und Betriebssysteme veröffentlicht, die auf unzureichender Definition des Prozessorzustands beruhen. Diese Lücken gefährden die Sicherheit gängiger Systeme in unterschiedlichem Maße, und bis jetzt sind noch umfassend wirksamen Schutzmaßnahmen gegen alle drei Lücken verfügbar, obwohl diese Lücken intern schon seit Mitte 2017 bekannt waren.

 

Problemstellung

Die meisten modernen Prozessoren erhöhen die Verarbeitungsgeschwindigkeit durch Parallelisierung der Befehlsabläufe und möglichst weitgehenden Verzicht auf Wartezustände, die auftreten, wenn Daten aus dem – gegenüber dem Prozessor – langsameren Arbeitsspeicher geladen werden müssen. Dies ist unter anderem dann besonders störend, wenn der weitere Programmablauf von den geladenen Daten abhängt, indem beispielsweise diese Daten bestimmen, welche Zweig einer bedingten Anweisung auszuführen ist. In diesem Fall führen viele Prozessoren schon die nächsten Befehle aus, obwohl noch nicht feststeht, ob der Programmablauf – in Abhängigkeit von den noch zu ladenden Daten – diese Befehle überhaupt durchführen muss. Man nennt dieses Vorgehen, bei dem man einen Teil der Wartezeit produktiv nutzt, spekulative Befehlsausführung.

Sofern sich aus den geladenen Daten ergibt, dass die spekulativ ausgeführten Befehle doch nicht benötigt werden, weil etwa das Ergebnis einer Abfrage anders ausfällt als erwartet, setzt der Prozessor seinen internen Zustand so zurück, als wären die spekulativen Befehle nie ausgeführt worden. Das Problem bei vielen Prozessoren ist nun, dass dieser interne Prozessorzustand nicht vollständig alle Auswirkungen dieser Befehle umfasst. Insbesondere können diese Befehle Daten in die schnellen Zwischenspeicher (Caches) geladen haben, und diese Speicherinhalte werden beim Zurücksetzen nicht aus den Caches entfernt, so dass die spekulative Befehlsausführung Spuren hinterlässt, die ggf. von einem Angreifer beobachtet und missbraucht werden können.

 

Beschreibung der Lücken

Von zwei unabhängigen Forschergruppen (Google Project Zero [1] und TU Graz [2], [3]) wurden zeitgleich drei verschiedene Angriffsszenarien beschrieben:

  • "Rogue Data Load" (Meltdown, CVE-2017-5754 [1], [2]): Auf einigen Prozessoren erfolgen Zugriffsprüfungen bei Zugriffen auf die Seitentabellen erst dann, wenn die betreffenden spekulativen Befehle als tatsächlich durchzuführen festgelegt werden, so dass diese Befehle zunächst ohne Berücksichtigung ihrer Zulässigkeit erfolgen. Damit kann ein potentieller Angreifer auf beliebige Daten im Adressraum lesend zugreifen, ggf. auch auf Daten des Systems und anderer Prozesse, auf die er eigentlich keinen Zugriff hat.
  • "Bounds-check bypass" (Spectre Typ 1, CVE-2017-5753 [1], [3]): Normalerweise versucht die Bedingungslogik der Prozessoren vorauszusehen, welcher Zweig einer Abfrage wahrscheinlich durchzuführen ist. Durch eine geeignete Programmstruktur lässt sich diese Vorhersage so manipulieren, dass der falsche Zweig der Abfrage vorhergesagt und damit spekulativ ausgeführt wird. Damit lassen sich beispielsweise Zugriffe auf fremde Speicherbereiche spekulativ ausführen, indem etwa ungültige Verweise auf Elemente eines Datenfeldes genutzt werden.
  • "Branch Target Injection" (Spectre Typ 2, CVE-2017-5715 [1], [3]): Hier wird die Vorhersagelogik in der Form irregeführt, dass Sprünge auf zuvor berechnete Ziele so manipuliert werden, dass statt des dann tatsächlich durchgeführten Sprunges zunächst ein Sprung zu einer willkürlich vom Angreifer auswählten Adresse ausgeführt wird.

In allen drei Fällen führen die spekulativ ausgeführten Befehle dazu, das nicht zugreifbare Daten in die schnellen Cache-Speicher geladen werden und dort verbleiben, auch wenn diese Daten selbst nicht für den Angreifer regulär zugreifbar sind. Der Angreifer kann  jedoch dafür sorgen, dass die spekulativen Befehle auf weitere Daten in Abhängigkeit von den eigentlich nicht zugreifbaren Daten zugreifen und somit diese ebenfalls in die Cache-Speicher laden. Durch Messung der Zugriffszeit auf diese weiteren Daten lassen sich dann anschließend im regulären Programmcode Rückschlüsse auf die nicht zugreifbaren Datenwerte ziehen. Dabei werden zumindest beim Meltdown-Angriff innerhalb kurzer Zeit erhebliche Mengen eigentlich geschützter Daten offengelegt.

 

Betroffene Systeme

Von der Bedrohung durch den Meltdown-Angriff sind alle neueren Intel-Prozessoren mit IA-32-Architektur sowohl in der 32- als auch der 64-Bit-Version betroffen (x86 und x86_64) [4]. Eine detaillierte Liste wurde von Intel veröffentlicht und wird permanent gepflegt [5]. Prozessoren der Firma AMD sowie Alpha-Prozessoren sind von Meltdown nicht betroffen. Einige ARM-Prozessoren (Cortex –A-72/75) sind auch von Meltdown betroffen.

Die beiden Spectre-Angriffe bedrohen dagegen fast alle neueren Prozessoren. Insbesondere sind hiervon auch die meisten Prozessoren anderer Hersteller betroffen, u.a. AMD, ARM, Power-PC, Alpha ab EV6 (21264).

Raspberry Pi Rechner sind von keinem dieser Angriffe betroffen, weil sie keine spekulative Befehlsausführung nutzen. Dasselbe gilt für Intel-Prozessoren mit IA-64-Architektur (Itanium, nicht zu verwechseln mit x86_64).

Praktisch alle Betriebssysteme, die auf einem der angreifbaren Prozessoren laufen, sind durch diese Angriffe bedroht und können geschädigt werden. Dabei besteht bezüglich Meltdown die Einschränkung, dass Systeme, die getrennte Seitentabellen für System- und Benutzerbereiche verwenden, auch auf angreifbaren Prozessoren immun gegen Meltdown sind. Einen derartigen Schutz gegen Spectre gibt es nicht.

Genauere Informationen über die Angreifbarkeit bestimmter Prozessoren und Systeme werden von den jeweiligen Herstellern zur Verfügung gestellt und permanent aktualisiert. Verweise auf die Dokumentation vieler Hersteller finden sich in der Zusammenstellung [7].

 

Bestehende Risiken

Durch den Meltdown-Angriff besteht die Möglichkeit des lesenden Zugriffs auf fremde Speicherbereiche, insbesondere auch bereiche, die einem anderen Benutzer zugeordnet sind. Dieser Angriff ist deshalb vor allem in Mehrbenutzer-Umgebungen kritisch, da er es bösartigen Benutzern erlaubt, Daten anderer Benutzer auszuspionieren. Sowohl auf Servern, mit und ohne Virtualisierung, als auch in Cloud-Systemen wird damit jegliche Mandantentrennung kompromittiert. Hier besteht ein hohes Risiko, zumal dieser Angriff es erlaubt, Daten sehr schnell und ohne großen Aufwand seitens des Angreifers auszulesen; es genügt ggf. der Zugriff auf eine entsprechende Webseite aus einem ungeschützten Browser.

Spectre-Angriffe sind erheblich schwieriger durchzuführen, da sie eine Kooperation zweier Prozesse erfordern und Daten nur mit geringer Bandbereite übertragen können. Hier stellt sich die Frage, ob solche Angriffe überhaupt eine wesentliche zusätzliche Bedrohung darstellen, da für einen erfolgreichen Angriff sowieso schon die Möglichkeit bestehen muss, eigene Software in das Zielsystem einzubringen – und wer das schafft, hat auch ohne Spectre schon gewonnen.

Beide Angriffe erlauben es, besonders schützenswerte, vom Umfang sehr beschränkte Daten auszulesen. Dazu gehören insbesondere unverschlüsselte Passwörter sowie kryptographische Schlüssel. Insbesondere im Hochsicherheitsbereich stellt dies ein erhebliches Risiko dar, so dass dort gerade der Spectre-Angriff eine Bedeutung haben könnte, die ihm normalerweise nicht zukommt.

 

Verfügbare Gegenmaßnahmen

Für die gängigen Browser stehen inzwischen Updates zur Verfügung, die gegen Meltdown schützen. Ebenso sind Patches für viele Betriebssysteme zur Verfügung, die Angriffe durch Meltdown abwehren. Speziell ist Linux ab den Kernel-Versionen 4.14.18 und 4.15.2 geschützt, während der Xen-Hypervisor ab Version 4.6.6-36 bzw. 4.8-comet die Gastsysteme so kapselt, dass sie diesen Angriff nicht mehr durchführen können [8]. Für Windows stehen ab Windows 7 SP1 Korrekturen zur Verfügung, die gegen Meltdown schützen; dabei besteht jedoch das Problem, dass diese Korrekturen nicht in Systeme eingespielt werden dürfen, auf denen ein dazu inkompatibler Virenscanner läuft.

Ein vollständiger Schutz gegen Spectre ist für die meisten betroffenen Prozessoren nicht möglich, sofern nicht auch deren Firmware passend geändert wird. Ob und welche Änderungen der Firmware von den Herstellern der Prozessoren bzw. Motherboards verfügbar sind, muss im Einzelfall mit Hilfe der Herstellerdokumentation geklärt werden; einen ersten Einstieg gibt dabei die Liste in [7]. Ebenso muss dort geklärt werden, welche Software-Updates erforderlich sind, um die neuen Firmware-Funktionen zu nutzen. Hier besteht noch zusätzlich die Schwierigkeit, dass einzelne Hersteller Korrekturen auf den Markt gebracht haben, die zum kompletten Versagen der korrigierten Systeme geführt haben; inwieweit diese Korrekturen wieder zurückgezogen und ggf. durch neue Versionen ersetzt wurden, ist ebenfalls in Einzelfall zu klären. Unklar ist dabei auch, in welchem Umfang hierdurch Spectre-Angriffe tatsächlich abgewehrt oder wenigstens erschwert werden.


Bewertung:

schlecht
gut

Bewertung abgeben: