Neue Prozessoren braucht das Land – Sicherheitsfeatures und -lücken in modernen Prozessor-Architekturen

03.06.2018 / Dr. Markus Ermes / IT-Berater

aus Netzwerk-Insider-Ausgabe Juni 2018

Im Januar wurden mit „Spectre“ und „Meltdown“ die Grundfesten der Informationstechnologie und -sicherheit erschüttert. Auf einmal war die Annahme, dass der Prozessor sicher und vertrauenswürdig ist und man sich nur um die Software kümmern muss, infrage gestellt. Darauf folgten erste Patches und wieder neue Sicherheitslücken. Die Auswirkungen waren und sind noch nicht endgültig absehbar. Dabei sind auch neue Sicherheitsfunktionen moderner CPUs in den Hintergrund getreten, obwohl diese in vielen Bereichen sinnvoll eingesetzt werden können.

Im folgenden Artikel wird eine ausführliche Betrachtung moderner CPUs dargestellt. Diese Betrachtung beginnt bei den Funktionen, die einerseits die heutige Leistung ermöglicht haben, aber auch die Grundlage für Spectre und Meltdown darstellen. Auch diese Lücken werden etwas detaillierter betrachtet. Anschließend wird auf einige Funktionen moderner CPUs eingegangen, die die Sicherheit in verschiedenen Umgebungen erhöhen sollen, die ihrerseits jedoch auch keine absolute Sicherheit ermöglichen. Aus der Betrachtung all dieser Funktionen und Sicherheitslücken ergeben sich dann diverse Konsequenzen, die ebenfalls angesprochen werden.

Prozessoren – das Herz unserer modernen Informationsgesellschaft – werden seit Jahrzehnten immer schneller. In den letzten vier Jahrzehnten hat sich die Performance pro Prozessor um einen Faktor 100.000 gesteigert. Die Steigerung der Leistung eines einzelnen Prozessorkerns sowie die Anzahl der Prozessorkerne ist in Abbildung 1 dargestellt ([1]). Dabei gelten als Prozessor einer oder mehrere verbundene „Dies“ mit einem oder mehreren Prozessorkernen, die auf einem einzelnen Prozessorsockel verbaut sind. Hierbei haben verschiedene Ansätze zur Steigerung der Leistung beigetragen. In einigen Bereichen ist die Grenze des physikalisch und ökonomisch Sinnvollen bereits erreicht, in anderen Bereichen sehen Experten noch viel Potential.

Ein Nebeneffekt der vielen verschiedenen Ansätze zur Performancesteigerung ist die steigende architektonische Komplexität der CPUs. CPUs bestehen heute aus wesentlich mehr Komponenten als noch vor 20 Jahren. Diese gesteigerte Komplexität führt aber unausweichlich auch zu einer höheren Fehleranfälligkeit. So wurden Fehler bereits 1994 in den ersten Intel Pentium Prozessoren gefunden (FDIV- und F00F-Bugs).

Prozessorleistung seit 1970

Abbildung 1: Prozessorleistung seit 1970

Im Januar hat das Bekanntwerden der Sicherheitslücken „Spectre“ und „Meltdown“ für großes Aufsehen gesorgt und uns allen schmerzlich klargemacht, welche Konsequenzen ein Fehler in modernen Prozessorarchitekturen haben kann. Das grundlegende Problem betrifft nicht einen einzelnen Hersteller oder ein einzelnes Produkt, sondern einen Kernbestandteil moderner CPUs, ob in Desktop-Systemen, Servern, Netzwerkkomponenten, Tablets oder Smartphones.

Auf der anderen Seite bemühen sich die Prozessorhersteller darum, zusätzliche Funktionen in ihre Prozessoren einzubauen, um die Nutzung auch in wenig vertrauenswürdigen Umgebungen wie der Cloud abzusichern.

Dieser Artikel beschäftigt sich mit den beiden Seiten moderner CPU-Architekturen: Probleme durch komplexere Architekturen und integrierte Sicherheitsmaßnahmen sowie den möglichen Interaktionen zwischen beiden Seiten.

1. Grundlagen moderner CPUs

Um zu verstehen, was genau Spectre und Meltdown so gefährlich macht, müssen wir zunächst die Grundlagen aktueller CPUs betrachten. Dieser Abschnitt wird sowohl die allgemein bekannten Grundlagen moderner Prozessorperformance als auch die weniger bekannten betrachten. Insbesondere letztere haben weitreichenden Einfluss auf die Funktionsweise eines Prozessors und bilden die Grundlage für Spectre und Meltdown.

1.1 Die bekannten Performance-Grundlagen – Taktrate und Multi-Core
Die wohl bekanntesten Techniken zur Erhöhung der Performance sind die Taktrate und die Anzahl der CPU-Kerne. Diese sind auch daher so bekannt, da sie in Produktwerbungen und technischen Spezifikationen sehr prominent platziert sind.

Dabei ist gerade die Taktrate ein schon recht lange ausgereizter Bereich. Bereits mit dem Intel Pentium IV von 2004 wurden Taktraten von 4 GHz erreicht, und selbst die am höchsten getakteten heutigen CPUs erreichen nur bis zu 4,5 GHz. Bei höheren Taktraten wird der Energieverbrauch der CPUs bei der momentan eingesetzten Silizium-basierten Technologie zu hoch und die Leistung pro Watt nimmt stark ab.

Als sich abzeichnete, dass eine Erhöhung der Taktrate nicht mehr möglich ist, kam der zweite bekannte Faktor ins Spiel: Es wurden mehrere CPU-Kerne auf einem Sockel betrieben und die Multi-Core-CPUs waren geboren. Die Steigerung der Kernanzahl schreitet bis heute fort und 32-Kern-CPUs sind im Server-Bereich verfügbar. Zwar sind auch hier bei steigender Zahl der Kerne Anpassungen an der Architektur notwendig, speziell um die Kommunikation zwischen Kernen effizienter zu gestalten, aber das Potential ist hier noch nicht ausgeschöpft. So gibt es im Bereich der Forschung und Entwicklung bereits Tests mit mehr als 100 Kernen pro Sockel.

1.2 Die weniger bekannten Funktionen: Fortgeschrittene Funktionsblöcke, Out-of-Order-Execution und Speculative Execution
Die weniger bekannten, aber für moderne CPUs mindestens genauso wichtigen Funktionen betreffen die Architektur jedes einzelnen CPU-Kerns. So gibt es in modernen CPUs diverse Funktionsblöcke, die für Spezialoperationen notwendig sind. Neben den schon lange vorhandenen Blöcken, beispielsweise für Ganzzahl- und Gleitkomma-Operationen, gibt es für einige häufige (Software-)Funktionen mittlerweile eigene Blöcke innerhalb der CPU; darunter fallen beispielsweise:

  • Verschlüsselungsoperationen, z. B. für Festplattenverschlüsselung
  • Vektoroperationen, die identische Operationen auf mehrere Datensätze gleichzeitig anwenden können
  • Speichercontroller, die den Zugriff auf den RAM beschleunigen

Ebenso befindet sich heutzutage die Anbindung an externe Anschlüsse, wie PCI Express, Ethernet oder USB direkt in der CPU.

Ein schon in den 1980er Jahren absehbares Problem war, dass die Prozessorperformance viel schneller wuchs als die Geschwindigkeit des angebundenen Arbeitsspeichers. So steht dem Performance-Gewinn der CPUs um einen Faktor 100.000 eine Geschwindigkeitserhöhung des Arbeitsspeichers um einen Faktor 10 entgegen. Ohne Tricks würde eine CPU bei Operationen mit Speicherzugriff also mehr als 99% der Zeit darauf warten, Daten aus dem Arbeitsspeicher zu laden. Hierzu wurden und werden immer größere Caches in die CPUs eingebaut, die einen Teil der geladenen Daten aus dem Arbeitsspeicher vorhalten. Diese verfügen über verschiedene Größen und Geschwindigkeiten, wobei schnellerer Cache aufgrund der höheren Kosten kleiner ausfällt als langsamer Cache.

Ein weiterer Performance-Gewinn ist möglich, indem die CPU-Instruktionen nicht in der vorgegebenen Reihenfolge abgearbeitet werden, sondern so, dass möglichst keine Taktzyklen verschwendet werden und alle Funktionsblöcke ausgelastet werden. Dabei muss aber sichergestellt werden, dass die Ergebnisse der Instruktionen auch in veränderter Reihenfolge identisch sind. Auch muss der ursprüngliche Zustand vor der Ausführung wiederhergestellt werden, falls ein Fehler (sog. Exception) auftritt. Hierzu wurde bereits Mitte der 1990er Jahre die „Out-of-Order Execution“ eingeführt. Das Prinzip ist in Abbildung 2 dargestellt. Es können in diesem Beispiel alle Funktionsblöcke im ersten Taktzyklus gleichzeitig genutzt werden und es werden insgesamt nur zwei Taktzyklen statt vier benötigt. Aufgrund der Komplexität der notwendigen Logik innerhalb des Prozessors ist diese Funktion aber zunächst nicht flächendeckend eingesetzt worden. Stattdessen wurde diese Technik in einigen Server-CPUs sowie in Intels Pentium Pro und AMDs K5-Prozessoren eingesetzt. Aber selbst im Serverbereich gab es einige CPUs, in denen zunächst auf diese Funktion verzichtet wurde, wie der Intel Itanium oder IBM POWER6. Heutzutage besitzen alle gängigen CPU-Architekturen diese Funktion.

Funktionsprinzip

Abbildung 2: Funktionsprinzip „Out-of-Order-Execution“ und „Speculative Execution“

Ebenfalls mit dem Pentium Pro hat Intel die sogenannte „Speculative Execution“ eingeführt, wie sie in Abbildung 2 dargestellt ist. Diese behebt folgendes Problem: Sobald eine Entscheidung in einem Programm gefällt werden muss (beispielsweise eine if-Abfrage), kann der Prozessor erst dann wissen, welchen Weg er einschlagen muss, wenn er das Ergebnis der Abfrage kennt. Hier setzt die Speculative Execution an: Der Prozessor trifft eine Abschätzung, welcher Zweig des Programms am wahrscheinlichsten ist und führt, beispielsweise beim Warten auf Daten aus dem Arbeitsspeicher, diesen Zweig schon einmal aus; wenn das Ergebnis der Abfrage zu einem späteren Zeitpunkt bekannt ist und der vermutete Pfad der richtige war, so ist dieser zumindest teilweise, im Optimalfall vollständig, abgearbeitet und der Prozessor spart viele Taktzyklen. Sollte der Prozessor falsch geraten haben, so ist der Performanceverlust gering; der ursprüngliche Zustand vor der Verzweigung wird analog zur Out-of-Order-Execution wiederhergestellt und das Programm wird so ausgeführt, wie es vorgesehen ist. Dabei kann eine CPU auch anhand vorheriger Ausführungen lernen, ob ein bestimmter Pfad häufig genutzt wird und dies bei zukünftigen Ausführungen berücksichtigen. Ein direkter Vergleich zwischen einem Intel Pentium MMX 200 (ohne Out-of-Order-Execution und Speculative Execution) und einem Pentium Pro 200 ergibt einen Performance-Zuwachs durch Out-of-Order Execution und Speculative Execution von ca. 46% ([2]). Eine ausführliche Beschreibung der Intel-Prozessorarchitektur im Zusammenhang mit Intel SGX findet sich in [3].

2. Spectre und Meltdown – wie moderne Features zum Sicherheitsproblem werden

Die im letzten Kapitel dargestellten Funktionen jenseits der Erhöhung der Taktrate und Kernanzahl haben dazu geführt, dass heutige CPUs um ein Vielfaches komplexer geworden sind. So ist die Zahl der Transistoren um viele Größenordnungen gestiegen. Diese Komplexität und die Tricks der Hersteller, die Performance zu erhöhen, führten zu den im Januar bekanntgewordenen Sicherheitslücken Spectre ([4]) und Meltdown ([5]), die in diesem Kapitel genauer beschrieben werden sollen. Außerdem ist Anfang Mai dieses Jahres eine Reihe weiterer Sicherheitslücken aufgetaucht, die als „Spectre Next Generation“ ([6]) bezeichnet werden. Allen diesen Lücken liegen Out-of-Order-Execution und Speculative Execution zugrunde, die auf unterschiedliche Art und Weise ausgenutzt werden.

2.1 Spectre
Die Sicherheitslücke Spectre ([4]), welche einem Programm ermöglicht, eigentlich unzugängliche Speicherbereiche anderer Programme auszulesen, macht sich fehlende Sicherheitsüberprüfungen bei der Speculative Execution zunutze. Grob beschrieben erfolgt ein Angriff wie folgt: Zunächst werden die Caches der CPU geleert, was zu Optimierungszwecken von jedem Programm ausgelöst werden kann. Damit wird sichergestellt, dass alle Daten aus dem (langsamen) Arbeitsspeicher geladen werden müssen. Dann wird bei einem Angriff per Spectre die CPU darauf trainiert, eine gewisse Entscheidung im Programm des Angreifers zu erwarten, in der abhängig von der Entscheidung ein Speicherzugriff erfolgt. Im Allgemeinen wird bei dieser Abfrage vom Programm überprüft, ob der Speicherzugriff erlaubt ist. Sobald ausreichend wahrscheinlich ist, dass der Prozessor von einer positiven Abfrage ausgeht, wird die entsprechende Variable sowohl in der Abfrage als auch für den Speicherzugriff so manipuliert, dass auf einen eigentlich verbotenen Speicherbereich zugegriffen wird. Zwar verwirft die CPU die Daten, sobald klar ist, dass eine falsche Entscheidung getroffen wurde, aber bleiben ggf. die hierfür gelesenen Daten im Cache der CPU. Wenn man nun versucht, diesen Wert noch einmal zu lesen (erfolgreich oder nicht), so ist die Ladezeit wesentlich geringer, da die Daten im Cache liegen, was sie eigentlich nicht sollten. Durch speziell konstruierte Speicherzugriffe ist es möglich, anhand der verringerten Zugriffszeiten den eigentlichen Inhalt des Caches zu lesen, der durch die spekulative Ausführung modifiziert wurde. Hierdurch kann Stück für Stück der Speicher von „fremden“ Programmen ausgelesen werden. Dies ist kein schneller Vorgang, aber speziell für das Auslesen von AES-Verschlüsselungs-Keys, Passwörter oder den privaten Teil eines Public/Private-Keypaars müssen nur wenige Kilobyte an Daten ausgelesen werden. Somit können sehr sensible Daten ausgelesen werden, die einem Angreifer weitreichende Möglichkeiten geben.

Diese Sicherheitslücke betrifft nahezu jeden der großen CPU-Hersteller: Intel, AMD, IBM und ARM. Dies verdeutlicht, dass es sich hier um ein Problem in der modernen CPU-Architektur handelt und nicht um das Problem eines einzelnen Herstellers. Zwar sind von den Herstellern erste Patches auf Hardwareebene bereitgestellt worden, aber es sind seit der Veröffentlichung dieser Patches bereits neue Wege gefunden worden, diese architekturbedingte Lücke auszunutzen.

Aufgrund der Kritikalität dieser Sicherheitslücke hat sich Microsoft sogar bereit-erklärt, die notwendigen Patches, die die eigenen Produkte eigentlich nicht betreffen, über den Update-Mechanismus des Betriebssystems bereitzustellen.

2.2 Meltdown
Die parallel zu Spectre veröffentlichte Meltdown-Sicherheitslücke ([5]) nutzt im Gegensatz zu Spectre die Out-of-Order-Execution aus, um auf den eigentlich geschützten Speicherbereich des Kernels zuzugreifen. Ein Angreifer kann in einem Programm einen Speicherzugriff nach einer eigentlich fehlerhaften Anweisung, welche eine Exception auslöst, platzieren. Durch die Out-of-Order-Execution kann es aber dennoch sein, dass dieser Speicherzugriff – zumindest temporär – ausgeführt wird, während die Exception verarbeitet wird. Zwar wird bei Bemerken der Exception der Speicherzugriff wieder verworfen und ggf. das Programm beendet, die gelesenen Daten finden sich aber – wie bei Spectre – im CPU-Cache und können über einen Seitenkanal ausgelesen werden.

Dabei ist wichtig, dass die o.g. Speicherzugriffe nur im Kontext des aktuellen Programmes stattfinden können und kein (direktes) Auslesen fremder Speicherbereiche möglich ist. Diese Limitierung lässt sich durch eine Eigenheit vieler moderner Betriebssysteme umgehen:

Der Speicherbereich des Kernels wird üblicherweise aus Performancegründen direkt im Speicherbereich eines Programms verfügbar gemacht und im Kernelspeicher ist üblicherweise der gesamte (genutzte) physische Arbeitsspeicher eines Systems sichtbar. Zwar existieren eigentlich Sicherheitsmechanismen, die einen Zugriff auf unerlaubte Bereiche unterbinden sollen. Diese Mechanismen werden aber – ähnlich wie bei der Speculative Execution und Spectre – durch die Out-of-Order-Execution umgangen.

Die ursprüngliche Veröffentlichung ([5]) hat für das Auslesen des Kernelspeichers eine Bandbreite von ca. 500 kB/s erreicht.

Gegenmaßnahmen gegen Meltdown können zu großen Teilen im Betriebssystem greifen. Im Linuxkernel beispielsweise gibt es bereits Patches, die das Übertragen von Kernelspeicher in jedes Programm minimieren und somit einen Angriff erheblich erschweren. Auch hier ist allerdings nicht sicher, ob diese Mechanismen ausreichen und wie lange es ggf. dauern wird, bis neue Angriffe gefunden werden, die diese Sicherheitsmechanismen aushebeln.

Meltdown ist – sofern man dies momentan beurteilen kann – nur für Intel relevant. Die Entdecker dieser Lücke waren nicht in der Lage, diese bei CPUs von ARM oder AMD zu reproduzieren. Veröffentlichungen der Hersteller haben dies bestätigt.

2.3 Spectre-NG – erste Informationen
Als Erweiterung zu Spectre sind am 3. Mai erste Informationen zu weiteren Spectre-basierten Lücken namens Spectre Next Generation bekannt geworden ([6]). Diese insgesamt 8 Lücken werden teilweise als kritisch eingestuft, aber weitergehende Informationen sind nur teilweise verfügbar. Als besonders kritisch wird dabei eine Lücke eingestuft, die es im Virtualisierungsumfeld ermöglicht, von einer virtuellen Maschine auf den Speicher einer anderen virtuellen Maschine zuzugreifen, ohne dass der Hypervisor Einfluss darauf hat.

Die ersten weitergehenden Informationen beziehen sich leider nur auf zwei der acht Lücken, von denen beide nur als mittelschwer eingeordnet werden. Diese werden allgemein als „Spectre V3“ und „Spectre V4“ bezeichnet. Zu diesen Lücken sind bereits Patches auf Prozessorebene verfügbar; weitere Patches auf Betriebssystemebene sind in Arbeit und beispielsweise im Linuxkernel bereits vorhanden. Die Aufnahme der Patches in verschiedene Linux-Distributionen ist in vollem Gange. Zu den übrigen Lücken stehen momentan noch keine neuen Informationen zur Verfügung. Eine Übersicht der betroffenen Hersteller und Informationen zu Lücken und Patches sind unter [7] zusammengefasst.

3. Sicherheitsmechanismen moderner CPUs

So katastrophal die Situation aufgrund der gefundenen Sicherheitslücken auch aussehen mag, so gibt es auch starke Bemühungen der CPU-Hersteller, die Sicherheit ihrer CPUs zu verbessern. Insbesondere für nicht vertrauenswürdige Umgebungen wurden in den letzten Jahren Funktionen in die CPUs integriert, die es dem Nutzer trotzdem ermöglichen, vertrauliche Daten sicher zu verarbeiten. Eine der wichtigsten Einsatzmöglichkeiten ist dabei die Nutzung der Cloud. Hier stellt sich für Nutzer und Entscheidungsträger die Frage: Wie kann ich sicher sein, dass nicht sogar ein anderer Nutzer oder der Cloud-Anbieter selbst meine Daten abgreift und daraus Kapital schlägt?

Zwar gibt es mit der sogenannten homomorphen Verschlüsselung ([8]) Möglichkeiten, dies in Software zu realisieren. Allerdings ist die Performance immer noch um viele Größenordnungen schlechter als bei der Verarbeitung von unverschlüsselten Daten.

In diesem Kapitel werden zwei für das Rechenzentrum und den Cloud-Betrieb relevante Technologien der Hersteller Intel und AMD beschrieben, die das gleiche Ziel verfolgen, aber unterschiedliche Ansätze nutzen.

Funktionsweise Intel SGX

Abbildung 3: Funktionsweise Intel SGX

3.1 Intel SGX
Intel hat im Jahr 2014 die „Software Guard Extensions“ – kurz SGX – eingeführt. Dabei setzt Intel auf eine Absicherung von Programmen gegeneinander. Ein Programm kann eine sog. „SGX Enclave“ erzeugen, in der vertrauliche Daten verarbeitet werden können. Der für die Enklave genutzte Arbeitsspeicher wird dabei vollständig verschlüsselt und erst innerhalb der CPU entschlüsselt. Damit ist ein Zugriff auf den von der Enklave genutzten Speicher nicht direkt möglich. Der dabei verwendete Schlüssel kann nicht vom Betriebssystem oder von DMA-fähiger Hardware ausgelesen werden und dies wird auf verschiedenen Ebenen vom Prozessor sichergestellt. Eine Nutzung der Enklave kann nur über klar definierte Ein- und Ausgangspunkte erfolgen, und diese Punkte sind nur für die Applikation zugänglich, die die Enklave erzeugt hat. Eine grafische Darstellung findet sich in Abbildung 3.

Um sicherzustellen, dass der Betreiber der Infrastruktur weder das zugrundeliegende Betriebssystem noch das SGX-fähige Programm manipuliert, findet beim Einrichten der Enklave eine sog. „Software Attestation“ statt. Dabei wird einerseits die Integrität der Software überprüft, andererseits führt die Verschlüsselung zu einem Schutz vor bösartigen Betreibern oder Mitarbeitern des Betreibers.

Ein Nachteil dieser Technologie ist die wahrscheinlich geringere Performance von Code innerhalb einer Enklave. Zwar gibt Intel selbst keine genauen Informationen zum Einfluss auf die Performance. Allerdings wird dazu geraten, nur kleine Teile eines Programms in die Enklave auszulagern, was ein deutlicher Hinweis auf Performanceeinbußen ist. Genaue Informationen zum Einfluss auf die Performance sind leider nicht öffentlich verfügbar, da die Nutzung von SGX momentan einen speziellen Vertrag zwischen dem Entwickler und Intel voraussetzt. Erst dadurch ist es möglich, die eigene Software um SGX zu erweitern und die eigenen Enklaven vom Prozessor genehmigen zu lassen.

Insgesamt ist der Ansatz, den Intel für SGX gewählt hat, aber als positiv für verschiedene Szenarien zu bewerten, in denen geringe Mengen vertraulicher Daten auf einem System mit mehreren Benutzern verarbeitet werden müssen. Diese Absicherung gegeneinander kann die Sicherheit mehrerer Nutzer innerhalb eines einzigen Betriebssystems oder mehrerer virtualisierter Betriebssysteme mit je einem Nutzer auf einem physischen Host erhöhen. Beispiele für SGX-fähige Software sind VPN-Server und –Clients oder sonstige Verschlüsselungstools, bei denen die Sicherheit von der Vertraulichkeit von Zertifikaten oder Verschlüsselungs-Keys abhängt.

Funktionsweise T-SME

Abbildung 4: Funktionsweise T-SME

3.2 AMD SME
Der Ansatz, den AMD in seinen CPUs verfolgt, ist ein grundlegend anderer als der von Intel, aber er verfolgt dieselben Ziele. AMD hat mit Einführung seiner Epyc-Prozessoren für Server drei Verschlüsselungsmechanismen für den Arbeitsspeicher in seine CPUs integriert([9]): „Transparent Secure Memory Encryption“ (T-SME), „Secure Memory Encryption“ (SME) und „Secure Encrypted Virtualization“ (SEV). Alle basieren darauf, dass – zusätzlich zu den normalen Prozessorkernen – ein Prozessorkern auf Basis der ARM Cortex-A5 Architektur in jeden Epyc-Prozessor integriert ist. Dieser wird von AMD selbst als „Platform Security Processor“ (PSP) bezeichnet und ermöglicht unter anderem eine Verschlüsselung des Arbeitsspeichers auf verschiedenen Ebenen und erzeugt temporäre Schlüssel bei jedem Start des Systems. Dabei kann auf den oder die Schlüssel theoretisch nicht von außerhalb des PSP zugegriffen werden.

Die hier betrachteten Sicherheitsmechanismen dienen alle der Verschlüsselung des Arbeitsspeichers auf verschiedenen Ebenen. Aber diese Verschlüsselungsmechanismen haben ihren Preis: Der zusätzliche Aufwand durch die Verschlüsselung spiegelt sich in einer leicht erhöhten Latenz bei Speicherzugriffen wider, was speziell bei speicherintensiven Applikationen wie Datenbanken eine Rolle spielen kann.

Dabei unterscheiden sich die drei Varianten der Speicherverschlüsselung wie folgt:

  • T-SME:
    Bei der transparenten Verschlüsselung des gesamten Speichers werden die Daten zwar im Arbeitsspeicher verschlüsselt abgelegt, aber für das Betriebssystem transparent entschlüsselt. Innerhalb des Betriebssystems besteht also weiterhin die Möglichkeit, die Daten anderer Programme auszulesen. T-SME ist für Betriebssysteme ohne Unterstützung von SME gedacht. Ein hierdurch nutzloser Angriff ist der (physische) Diebstahl von Arbeitsspeichermodulen, wie in Abbildung 4 dargestellt.
  • SME:
    Eine selektive Verschlüsselung einzelner Speicherbereiche ist ebenfalls möglich, muss aber vom Betriebssystem unterstützt werden. So können beispielsweise vertrauliche Informationen im Speicher vor nicht vertrauenswürdiger Software geschützt werden, wie es in Abbildung 5 dargestellt ist.
Funktionsweise SME

Abbildung 5: Funktionsweise SME

  • SEV:
    Das Ziel der Secure Encrypted Virtualization ist der Einsatz in Virtualisierungsumgebungen. Dabei wird für jede zu startende VM ein eigener Schlüssel generiert, so dass selbst bei Ausbruch aus einer VM kein (sinnvoller) Zugriff auf den Speicher einer anderen VM möglich ist. Dieser Mechanismus lässt sich – Unterstützung vom Betriebssystem vorausgesetzt – auch jenseits des Hypervisors z. B. zur Absicherung von Containern nutzen. Das Beispiel der virtuellen Maschinen ist in Abbildung 6 dargestellt.

4. Schwachstellen vs. Sicherheitsmechanismen – wer gewinnt?

Nach der Betrachtung moderner CPUs und der durch ihre Komplexität verursachten Probleme, stellt sich bei der Betrachtung von neuen Sicherheitsfunktionen wie SGX oder SME die Frage, ob diese zusätzliche Komplexität nicht weitere Sicherheitsprobleme verursachen kann. Die kurze Antwort auf diese Frage ist: Ja, auch diese Funktionen sind nicht zu 100% sicher; speziell bei AMD handelt es sich momentan um die erste Generation einer neuen Technologie, so dass sich die Sicherheit erst noch beweisen muss.

4.1 SgxPectre – Spectre hebelt SGX aus
Die bei Spectre ausgenutzte unzureichende Prüfung, ob ein Zugriff im Rahmen einer spekulativen Ausführung erlaubt ist, wirkt sich leider auch auf die Sicherheit von SGX aus. So haben Chen et al. ([10]) einen Angriff präsentiert, bei dem es möglich ist, Informationen aus einer (eigentlich als sicher und vertrauenswürdig angesehenen) Enklave zu extrahieren. Dieser Angriff, genannt „SgxPectre“, setzt den Zugriff des Angreifers auf das Betriebssystem voraus. Für den Angriff werden verschiedene Phasen durchlaufen, die leider nicht vollständig im Rahmen dieses Artikels dargestellt werden können. Der interessierte Leser sei daher auf [10] verwiesen.

Funktionsweise AMD SEV

Abbildung 6: Funktionsweise AMD SEV

Die von Intel bereits veröffentlichten Patches verhindern diesen speziellen Angriff erfolgreich, wobei in dem von Chen et al. angenommenen Szenario der Angreifer die Möglichkeit besitzt, die entsprechenden Patches rückgängig zu machen. Daher wird hier empfohlen, beim Einsatz von SGX die sogenannte „CPU Security Version Number“ zu überprüfen, die Informationen darüber enthält, ob die entsprechenden Patches vorhanden sind.

4.2 Der AMD Platform Security Processor – auch ein System mit Lücken
Auch beim AMD PSP wurden bereits Sicherheitslücken gefunden. Eine, für die AMD bereits im Dezember 2017 Patches bereitgestellt hat, wurde im Januar 2018 von ihren Entdeckern publik gemacht ([11]): Durch einen Softwarefehler in der Implementierung des Trusted Platform Modules (TPM) war es möglich, die Kontrolle über den PSP zu erlangen und so auf den gesamten Speicher zuzugreifen. Auch hier waren – ähnlich wie bei SgxPectre – einige Voraussetzungen angegeben, die den Angriff sehr schwer ausnutzbar machten. So war in jedem Fall physischer Zugriff auf das System notwendig, da Teile des Mainboards (speziell der SPI-Flash) manipuliert werden müssen.

5. Konsequenzen

Mit all den Vor- und Nachteilen der modernen Prozessorwelt stellen sich unweigerlich einige Fragen bzgl. vieler Bereiche der IT-Landschaft, von kurz- bis mittelfristiger Kapazitätsplanung über Betrieb bis hin zu der eigenen RZ-Architektur. In diesem Abschnitt sollen einige der wichtigsten Fragen beantwortet werden.

5.1 Was bewirken die Patches für Spectre und Meltdown?
Die von den CPU- und Betriebssystem-Herstellern bereitgestellten Patches, die Spectre und Meltdown adressieren, arbeiten auf verschiedenen Ebenen. Dabei wird für die (momentan verfügbaren) Spectre-Patches das Verhalten der Vorhersage und Ausführung von verschiedenen Programmzweigen beeinflusst. Dabei werden insgesamt drei Techniken eingesetzt:

  1. Indirect Branch Restricted Speculation (IBRS): Durch dieses Verfahren wird verhindert, dass mögliche Verzweigungen höher privilegierter Applikationen von niedriger privilegierten Applikationen gesteuert werden. Dies verhindert beispielsweise vollständig den SgxPectre-Angriff, da eine externe Applikation keinen Einfluss mehr auf die Vorhersage innerhalb einer SGX-Enklave hat.
  2. Single Thread Indirect Branch Predictors (STIBP): Hier wird verhindert, dass ein logischer CPU-Kern Einfluss auf einen benachbarten logischen CPU-Kern nehmen kann.
  3. Indirect Branch Predictor Barrier (IBPB): Diese Barriere verhindert die Vorhersage von Verzweigungen nach der Barriere. Dadurch kann eine Software kontrollieren, innerhalb welcher Bereiche überhaupt eine Vorhersage stattfinden soll. Diese Funktion muss allerdings von der Software oder dem Betriebssystem umgesetzt werden.

Die für Meltdown verfügbaren Patches wirken, indem sie die Menge des für ein Programm sichtbaren Kernelspeichers minimieren. Dadurch soll ein Zugriff auf den im Kernel erreichbaren gesamten Arbeitsspeicher verhindert werden.

5.2 Wie beeinflussen die Patches die Performance?
Die ersten Untersuchungen zu den Performanceeinbußen der Patches gingen noch von bis zu 30% weniger Leistung für Programme aus, bei denen Out-of-Order-Execution und Speculative Execution eine große Rolle spielen oder bei denen viele Kernelfunktionen aufgerufen werden. Als Beispiel für Letzteres bieten sich Datenbanken an, da diese sehr viel Schreib- und Leseoperationen auf dem Speichersystem ausführen, wobei für jede dieser Operationen eine Kernelfunktion aufgerufen werden muss. Ebenso betroffen sind Applikationen mit vielen Netzwerkoperationen.

Eine übergreifende Betrachtung der Auswirkungen ([12]) hat aber gezeigt, dass eher mit Leistungseinbußen von maximal 5% zu rechnen ist. Die neuen Maßnahmen zu Spectre V3 und Spectre V4 haben einen vergleichbaren Einfluss auf die Performance. Dies ist zwar immer noch bedauernswert, aber in Anbetracht der Kritikalität der Sicherheitslücken vertretbar. Auch ist damit zu rechnen, dass mit weiteren Updates und neuen CPU-Generationen entweder die Leistungseinbußen verringert oder die Gesamtleistung der CPUs entsprechend gesteigert werden. Geht man von einem Leistungsverlust von 5%-10% aus und betrachtet die aktuellen Leistungszuwächse von CPUs, so werfen die Patches uns um eine, maximal zwei Prozessorgenerationen zurück. Als Beispiel seien hier die in Arbeitsplatzrechnern verbreiteten Core i7 CPUs von Intel genannt. Bei einem Vergleich zwischen Core i7 6700K („Skylake-S“) und Core i7 7700K („Kaby Lake-S“) sind je nach Einsatzzweck 5%-10% mehr Leistung bei der Kaby Lake-S-Architektur sichtbar. Dabei wird von Intel der Core i7 7700K als direkter Nachfolger des Core i7 6700K angesehen.

5.3 Sind die Patches überall notwendig?
Nein, sind sie nicht. Jeder der hier dargestellten Angriffe basiert darauf, dass ein Nutzer eigenen Code auf dem jeweiligen System ausführen kann. Wenn ein System nur vertrauenswürdige Applikationen ausführt und keine direkte Nutzerinteraktion stattfindet, so sind die hier aufgeführten Sicherheitslücken nur wenig relevant.

Umgebungen, in denen diese Patches sehr wohl eine Rolle spielen, sind alle Systeme, auf die nicht vertrauenswürdige Nutzer Zugriff haben. Speziell im Cloud- und Virtualisierungsumfeld kann nicht davon ausgegangen werden, dass kein Nutzer diese Lücken ausnutzt. Ein relevantes Beispiel hierfür sind virtuelle Desktops und aus dem Internet erreichbare Systeme, da hier gegebenenfalls auch Malware auf die Systeme gelangt, die die Lücken ausnutzen kann.

Einen Bereich, den man auf gar keinen Fall außer Acht lassen darf, sind Appliances für den Netzwerkbetrieb. Prominente Beispiele sind Firewalls und Anti-Malware-Systeme, da hier häufig Code ausgeführt wird, der nicht vom Betreiber kontrolliert wird. So kann beispielsweise bei einer modernen Anti-Malware-Lösung über die neu bekanntgewordenen Spectre NG Sicherheitslücken auch auf das zugrundeliegende System zugegriffen und ggf. die Appliance kompromittiert werden. Auch Switches, die über moderne CPUs verfügen und deren Funktionsumfang weit über den ursprünglichen Zweck erweitert werden kann, sollten berücksichtigt werden.

Dadurch ergibt sich für den Betrieb ein Dilemma: Entweder man spielt die Patches auf jedem System ein und riskiert (geringe) Performance-Einbußen, oder man analysiert im Vorfeld, welche Systeme am ehesten betroffen sind und patcht nur diese. Letzterer Weg ist allerdings nur bedingt zu empfehlen, da sich das Nutzungsprofil der Systeme ändern kann.

5.4 Wenn die neuen Sicherheitsmechanismen (Intel SGX, AMD PSP) bereits geknackt sind, brauche ich sie überhaupt?
Ja, auf jeden Fall. Wie schon oben beschrieben, sind die Voraussetzungen für einen erfolgreichen Angriff auf die Sicherheitsmechanismen sehr hoch. Speziell die Angriffe auf Intel SGX (SgxPectre) sind in Umgebungen wahrscheinlich, in denen der ursprüngliche Spectre-Angriff relevant ist. Da in einer solchen Umgebung in jedem Fall die verfügbaren Patches eingespielt werden sollten, wird damit auch der Angriff auf SGX (zumindest vorerst) verhindert.

5.5 Wann werden Spectre und Meltdown vollständig verschwinden?
Das wird wahrscheinlich deutlich länger dauern, als es wünschenswert wäre. Es handelt sich prinzipiell um eine Schwäche der zugrundeliegenden CPU-Architektur. Natürlich kann man davon ausgehen, dass die Hersteller jetzt auch auf Hardware-Ebene daran arbeiten, diese Lücken zu schließen, aber bis architektonisch sichere CPUs auf den Markt kommen, wird noch einige Zeit vergehen. Warum? Die Entwicklung einer CPU ist ein unglaublich aufwendiger Prozess, und meistens werden die CPU-Generationen über mehrere Jahre hinweg geplant. So kursieren schon jetzt Gerüchte und Ankündigungen über Intel-CPUs bis 2020. AMD und Intel selbst haben vermutlich noch wesentlich langfristigere Pläne in ihren Schubladen liegen. Eine komplette Umstellung der Architektur kann voraussichtlich erst danach stattfinden.

5.6 Wofür brauchen wir die ganzen modernen Funktionen eigentlich? Kommen wir nicht auch ohne aus?
Leider kommen wir nicht ohne diese Funktionen aus. Wie bereits erwähnt hat die Einführung dieser Funktionen bereits einen Performance-Gewinn von ca. 40% gebracht. Und diese Funktionen sind mittlerweile so weit entwickelt, dass wir ohne sie nur noch die Hälfte der momentanen Leistung unserer CPUs nutzen könnten. Im Rechenzentrum bedeutet dies eine Verdopplung der physischen Hosts. Abgesehen von den enormen Investitionskosten steigt damit auch der Strom-, Klimatisierungs- und Platzbedarf enorm an.

5.7 Werden wir sicher sein, wenn diese Lücken geschlossen sind?
Natürlich nicht. CPUs werden in den nächsten Jahren und Jahrzehnten voraussichtlich nicht weniger komplex. Andere Funktionen aktueller CPUs können eventuell ebenfalls Sicherheitslücken beinhalten. Vielleicht gibt es auch bald eine neue, tolle Funktion, die nach ein paar Jahren (oder Jahrzehnten) ähnliche Probleme offenbart. Oder es wird gezeigt, dass die zukünftigen Gegenmaßnahmen nicht vollständig sind und doch wieder umgangen werden können.

6. Fazit

Durch ihre Funktionsvielfalt und Leistung sind moderne CPUs ein zweischneidiges Schwert. Einerseits haben die vielfältigen Funktionen einen unglaublichen Leistungszuwachs ermöglicht, aber einige der größten Performancesteigerungen stammen aus einer Zeit, in denen aktuelle Technologien wie Virtualisierung und Cloud Computing noch nicht abzusehen waren und dadurch die Sicherheitsaspekte noch eine untergeordnete Rolle spielten. Diese Funktionen sind lange Zeit nicht weiter beachtet worden und erst jetzt sind die ersten Sicherheitsprobleme aufgetaucht. Andererseits bemühen sich die CPU-Hersteller darum, die Sicherheit der Systeme auf anderen Ebenen zu verbessern. Bei den dafür entwickelten Funktionen spielen genau die Bereiche eine große Rolle, die bei den jetzt als problematisch identifizierten Funktionen noch nicht abzusehen waren. Die Sicherheit speziell in nicht vertrauenswürdigen Umgebungen wird so verbessert.

Verschwinden werden architekturbedingte Sicherheitslücken in CPUs nicht. Selbst nach den ersten Patches für die hier vorgestellten Lücken wurden bereits neue Angriffsvektoren gefunden. Für eine 100%ige Sicherheit sind moderne CPUs zu komplex geworden. Denn für eine 100%ige Sicherheit müssten die verantwortlichen Funktionen komplett abgeschaltet werden. Dadurch reduziert sich die Leistung moderner CPUs allerdings auf ungefähr die Hälfte, was gerade mit Blick auf die daraus folgenden Kosten nicht akzeptabel ist.

Es bleibt uns als Käufer und Nutzer der CPUs leider nur die Möglichkeit, auf die von den Herstellern entwickelten Patches zu vertrauen und zu hoffen, dass bei zukünftigen CPUs besonders die Sicherheitsaspekte neuer Funktionen stärker in den Fokus der Hersteller rücken.

8. Literaturverzeichnis

[1] K. Rupp, „GitHub – karlrupp/microprocessor-trend-data,“ 15. Februar 2018. [Online]. Verfügbar unter: https://github.com/karlrupp/microprocessor-trend-data. [Zugriff am 16. Mai 2018].

[2] A. L. Shimpi, „NT Benchmarks – Intel Pentium II,“ AnandTech, 30. Mai 1997. [Online]. Verfügbar unter: https://www.anandtech.com/show/55/3. [Zugriff am 22. Mai 2018].

[3] V. Costan und S. Devadas, Intel SGX Explained, 2016.

[4] P. Kocher, D. Genkin, D. Gruss, W. Haas, M. Hamburg, M. Lipp, S. Mangard, T. Prescher, M. Schwarz und Y. Yarom, „Spectre Attacks: Exploiting Speculative Execution,“ 2018.

[5] M. Lipp, M. Schwarz, D. Gruss, T. Prescher, W. Hass, S. Mangard, P. Kocher, D. Genkin, Y. Yarom und M. Hamburg, „Meltdown,“ 2018.

[6] J. Schmidt, „Super-GAU für Intel: Weitere Spectre-Lücken im Anflug,“ heise Medien GmbH & Co. KG, 3. Mai 2018. [Online]. Verfügbar unter: https://www.heise.de/ct/artikel/Super-GAU-fuer-Intel-Weitere-Spectre-Luecken-im-Anflug-4039134.html. [Zugriff am 16. Mai 2018].

[7] Heise.de, „CPU-Sicherheitslücken Spectre-NG: Updates und Info-Links,“ heise Medien GmbH & Co. KG, 22. Mai 2018. [Online]. Verfügbar unter: https://www.heise.de/ct/artikel/CPU-Sicherheitsluecken-Spectre-NG-Updates-und-Info-Links-4053268.html. [Zugriff am 24. Mai 2018].

[8] S. Hoff, „Verschlüsselung in der Cloud: Licht am Ende des Tunnels,“ Der Netzwerk Insider, p. 24f, Oktober 2017.

[9] D. Kaplan, J. Powell und T. Woller, AMD Memory Encryption, 2016.

[10] G. Chen, S. Chen, Y. Xiao, Y. Zhang, Z. Lin und T. H. Lai, „SgxPectre Attacks: Leaking Enclave Secrets via Speculative Execution,“ Ohio, 2018.

[11] T. Claburn, „Security hole in AMD CPUs‘ hidden secure processor code revealed ahead of patches,“ The Register, 6. Januar 2018. [Online]. Verfügbar unter: https://www.theregister.co.uk/2018/01/06/amd_cpu_psp_flaw/. [Zugriff am 23. April 2018].

[12] S. Grüner, „Meltdown- und Spectre-Benchmarks: Weniger schlimm als erwartet,“ Golem Media GmbH, 3. Mai 2018. [Online]. Verfügbar unter: https://www.golem.de/news/meltdown-und-spectre-benchmarks-weniger-schlimm-als-erwartet-1805-134195.html. [Zugriff am 16. Mai 2018].

Der Netzwerk Insider gehört mit seinen Produkt- und Markt-Bewertungen rund um IT-Infrastrukturen zu den führenden deutschen Technologie-Magazinen. Der Bezug des Netzwerk Insiders ist kostenlos.

© Copyright - ComConsult