Error: no file object

Weltweiter Super-Gau bei nahezu jedem Prozessor

Das Neue Jahr 2018 hatte bereits in der ersten Januarwoche mit einer schier unglaublichen Mitteilung in allen Medien begonnen. Im Sommer 2017 hatte ein Forscher-Team Schwachstellen in der Architektur von Prozessoren (CPUs) entdeckt. Die Folge ist, dass Angreifer durch das geschickte Ausnutzen dieser Sicherheitslücken mit Schadcode alle Daten auslesen können, die der jeweilige Computer im Speicher verarbeitet – strenggenommen also auch Passwörter und geheime Zugangscodes.

Ursprünglich sollte diese Bombe erst diese Woche publik gemacht werden - oder genauer gesagt erst entschärft und dann öffentlich gemacht werden, um das Schadenspotenzial zu minimieren. Bekannt sind diese Schwachstellen den Prozessor-Herstellern wie Intel, AMD, ARM bereits seit Sommer 2017, man hatte nur gewartet, weil man Gegenmaßnahmen mitliefern wollte. Lücken in den Verschwiegenheitsvereinbarungen hatten dieser Tage für die Unruhe und zu massenhaften Informationen geführt.

Spectre und Meltdown die beiden Szenarien

Bei Spectre und Meltdown handelt es nicht um "Bugs" oder "Sicherheitslücken", sondern um Hacks im ganz klassischen Sinne. Prinzipell arbeiten Hard- und Software einwandfrei wie es vom Entwickler vorgesehen ist. Dennoch bieten sie aber über die spezifizierte Funktionsweise hinaus Möglichkeiten an, von deren Existenz selbst Entwicklern bislang nichts bekannt war. Und je eine von beiden erlaubt potentiellen Angreifern das Aufrufen und anschließende Auslesen von Daten, die sie laut nominellem Programmablauf weder aufrufen noch auslesen.

Was steckt da technisch dahinter?

Moderne CPUs benötigen für ihre Berechnungen mehrere Taktzyklen, so kommt es zwangsläufig zwischen aufeinander aufbauenden Instruktionen zu Wartezeiten. Aus diesem Grund arbeiten seit dem ersten Pentium von Intel alle x86-CPUs (auch die anderer Hersteller) Out of Order (OoO). Das bedeutet nichts anderes, als dass die Prozessoren selber und nicht die Software über die Reihenfolge der Befehlsabarbeitung bestimmen. Zusätzlich können die CPUs zur Vermeidung einzelner Aufgaben, zur permanenten Entlastung von Recheneinheiten, vorziehen.

Zweites Standbein ist Speculative Execution, eine Erweiterung, die nahezu quasi alle OoO-CPUs benutzen. Dadurch, dass sie mit einer (Sprung-)Vorhersage-Einheit ausgestattet sind, können sie nicht nur bereits in Auftrag gegebene Befehle abarbeiten, sondern auch spekulativ kommende Einträge im Programmcode ausführen. Dabei entscheidet eine CPU hier selber aufgrund relativ primitiver Analysen, welche Instruktionen vermutlich als Nächstes aufgerufen werden könnte. Wenn allerdings Speculative Execution auf komplexe Informationen und viel zu langsame Systemprozesse warten müsste, dann könnte sie auch keinen Geschwindigkeitsvorteil liefern. Für den nominellen Programmfluss stellt dieses Verhalten auch kein Problem dar. Denn wird eine Instruktion später doch nicht aufgerufen, dann wird das Ergebnis vom Prozessor verworfen und die Software erfährt nichts vom gesamten Vorgang. Die Schnelligkeit der „Berechnung“ der CPU entsteht erst dann, wenn die Vorhersage dagegen korrekt erfolgt ist.

 

Für das Verständnis der nachfolgenden Beschreibung ist noch die Erwähnung der Privilege Levels wichtig. Die Rede ist vom Kernel-Space und vom User-Space. Jeder Prozess arbeitet in einem eigenen virtuellem Adressraum ohne Kontakt zu anderen Programmen außer dem Betriebssystem. Dieses trennt hieraus einen teil des Adressraums für Systemprozesse ab, das ist der Kernel-Space. Anwendungsprogramme wiederum arbeiten generell im User-Space und haben nur in genehmigten Ausnahmefällen Zugriff auf den Kernel-Space. Das geschieht über einen Syscall, den das Betriebssystem bei der CPU anfordert und auf die Genehmigung warten muss.
Dieses Sicherheitsfeature auf CPU-Ebene wird durch die Privilege Level zur Verfügung gestellt. Und das bedeutet, das für bestimmte Befehle, insbesondere Zugriffe auf geschützte Betriebssystem-Daten im Kernel-Space, die CPU erst durch das Betriebssystem in den höchst privilegierten Modus versetzt werden muss.
Somit kann ein Anwendungsprozess aus dem User-Space niemals direkt auf Daten außerhalb seines Spaces zugreifen, es sei denn das Betriebssystem unterstützt es dabei ausdrücklich. Wird es dennoch versucht, so sorgt die Überschreitung das Privileg-Levels dafür, dass der Prozess vorzeitig vor einem Datenaustausch beendet wird.

Szenario Meltdown

Dieser etwas mehr im Vordergrund stehende Angriff nutzt hierbei eine bislang nur für Intel-Prozessoren nachgewiesene Eigenschaft aus. Hierbei führen unter anderem indirekte Speicherzugriffe spekulativ vor dessen Aufruf durch einen Prozess aus; insbesondere bevor die Prüfung des Privilege Levels abgeschlossen wurde. Das bedeutet nichts Anderes, als dass die Zugriffe auf den Kernel-Space auch dann spekulativ ausgeführt werden können, wenn der Programmcode zu einem Prozess des User-Space angehört.
Wenn jetzt ein Angreifer zusätzlich noch sicherstellt, dass der logische Programmablauf die Instruktion nie aktiv aufruft, dann würde noch nicht einmal die Privilege-Überwachung schützen, weil der Prozessor die vermeintlich unerwünscht angeforderte Instruktion einfach wieder verworfen haben wird. Aus Sicht der Software ist damit auch die Datensicherheit sichergestellt.

Szenario Spectre

Spectre versucht ebenfalls, einen illegitimen Datenzugriff bis in den Cache ausführen zu lassen, bevor dieser abgebrochen wird. Anders als Meltdown arbeitet Spectre aber nicht im eigenen Adressraum und versucht dort, die Grenze zwischen Kernel- und User-Space zu schmelzen. Im Gegensatz dazu wird gezielt die Arbeit fremder Prozesse genutzt. Auch diese Prozesse führen regelmäßig verschiedene Arten abhängiger und indirekter Speicherzugriffe durch; selbstverständlich auf Speicheradressen, die sie auch nutzen dürfen. Die CPU versucht auch diese Zugriffe unter Nutzung ihrer Sprungvorhersage, spekulativ zu beschleunigen. Die Achilles-Ferse hierbei ist, dass Letztere nicht die nötige Zeit hat, um zwischen gerade laufenden Prozessen zu unterscheiden. Offen gesagt, ist dies aus Performance-Sicht auch gar nicht erwünscht, denn viele Operationen laufen in verschiedenen Programmen gleich ab und können somit von der gleichen Optimierung profitieren.

Jetzt stellt Spectre stellt in einem eigenen User-Space Codefragemente des angegriffenen Prozesses nach und trainiert damit die Sprungvorhersage auf ein vom Angreifer vorher definiertes Ziel. Startet später der Ziel-Prozess seine Kopie des Codes, so wird die trainierte Sprungvorhersage fälschlicherweise eine spekulative Ausführung anhand der vom Angreifer trainierten Parameter ausführen. Dieses Vorgehen kann nun erneut genutzt werden, um abhängig von eigentlich unerreichbaren Informationen spezifische Lademuster zu initiieren. Im einfachen Fall (Spectre 1) geschieht das, indem man Sicherheitschecks des Ziels selbst übergeht und darauf folgende sicherheitsrelevante Instruktionen in missbräuchlicher Weise spekulativ ausführen lässt. Im komplexeren Fall (Spectre 2) schafft man das, indem man einen indirekten Sprung zu einer beliebigen, vom Angreifer gewünschten (Lade-)Instruktion provoziert.

Was heißt das als Gefahrenpotential?

Der positive Aspekt ist, dass beide Angriffsszenarien ausschließlich nur Lesezugriffe durchführen können. Die Manipulation von Daten, das Verschlüsseln von Festplatten oder Daten oder die Übernahme ganzer Rechner sind nicht möglich. Allerdings können alle Daten, wie Passwörter und Zugangsdaten – egal, ob sie in Passwortmanagern liegen oder von Hand eingegeben werden – potenziell abgehört werden.

Nachdem die beschriebene Technik bereits seit Intels Pentium I existiert und viele andere CPU-Produzenten die Technik ebenfalls anwenden, sind die anfälligen Prozessoren seit Jahren in einer Vielzahl von Geräten verbaut. Das können Desktop-Rechner genauso sein wie Laptops, Smartphones, Tablets, Automotive-Bordcomputer, Streaming-Boxen, um nur einige Bereiche zu nennen. Ebenso fatal sind die „Things of Internet“-Geräte (Küchengeräte, Smarthome-Geräte etc.), denn alle sollen möglichst in Echtzeit reagieren und besitzen damit mit hoher Wahrscheinlichkeit einen der anfälligen Prozessoren. Betroffen sind unter anderem sämtliche Intel-Core-Prozessoren bis zurück zum Jahr 2008 sowie eine Vielzahl von ARM-Cortex-CPUs. Anfällig für mindestens eine der Andgriffsvarianten sind dabei Prozessoren der Serien Cortex-R7, Cortex-R8, Cortex-A8, Cortex-A9, Cortex-A15, Cortex-A15, Cortex-A17, Cortex-A57, Cortex-A72, Cortex-A73 und Cortex-A75.

Dagegen sind AMD-Prozessoren nach aktuellem Kenntnisstand allenfalls für eine der drei Angriffsszenarien tatsächlich anfällig (Spectre 1). AMD geht davon aus, dass AMD-Prozessoren aufgrund ihrer Architektur nicht über Spectre 2 angreifbar sind.

 

Welche Betriebssysteme sind betroffen?

Nachdem es sich hier um ein reines Hardware-Problem handelt, sind wirklich alle Betriebssysteme betroffen. Also Windows genauso wie Linux (alle Distributionen), Apples macOS, FreeBSD und die Smartphone-Systeme Android und iOS.

Welchen Schutz gibt es dagegen?

Zwar sind Sicherheitsupdates dringend anzuraten zeitnah durchzuführen, sie können die Prozessorlücken nicht reparieren. Dazu wäre der Austausch neu entwickelter Prozessoren notwendig, verbunden mit den passenden Mainboards und selbstverständlich kompletter Neuinstallationen.
Dennoch sollten die bereits ausgerollten Updates dringend aufgespielt werden und vor allem müssen Anwendungen wie der Firefox-Browser oder Chrome, von dem Windows-Browser ganz zu schweigen, und Treiber abgesichert werden. Denn Schadsoftware kann sich über diese Anwendungen Zugriff zu den Sicherheitslücken verschaffen.

Sind Meltdown und Spectre auch remote (Fernzugriff) eine Gefahr?

Das schließt an den letzten Punkt an. Das geht nur indirekt, indem der Angreifer Schadcode auf dem betroffenen System wie Routern und Embedded Systems ausführt. Deshalb geht sehr große Gefahr von den Webbrowsern aus, weil sie Code von Webseiten laden und dann ausführen können (JavaScript, HTML5). Hilfreich sind auch hier wieder Browser-Updates und Script-Blocker wie NoScript und Webbrowser wie Nightly. Nightly ist eine tagesaktuelle Variante von Firefox, die entsprechend konfiguriert immer die aktuellste Firefox-Version mit Sicherheitsupdates auf dem Computer installiert hält.

Besteht ein Einfluss der Updates auf die Performance?

Nachdem die leistungssteigernde Funktionalität der CPUs das Problem darstellt und Softwareupdates die Lücke schliessen sollen, wird es unweigerlich zu Einbussen der Leistungsfähigkeit kommen. Allerdings wie hoch der Performance-Verlust zu beziffern sein wird, hängt ganz vom Nutzungsszenario ab.

Normale Anwender, die mit Prozessoren ab der Serie Intel Core i-6000 (Skylake) unterwegs sind, dürften die Bremswirkung der Patches nicht spüren, sie bewege sich im einstelligen Prozentbereich. Das ließ zumindest Microsoft bereits verlauten. Dagegen werden die Nutzer von älteren Prozessoren bis hin zur Haswell-Generation Core i-4000 durchaus einen Rückgang der Systemleistung bemerken. Zumindest zeigten bereits durchgeführte Benchmarks eine signifikante Verlangsamung. Somit dürften die Bremswirkungen umso spürbarer werden, je älter der Prozessor und das Betriebssystem sind.

Dagegen dürften hohe Performance-Minderungen die Betreiber von Server-Farmen und Cloud-Diensten bemerken, bei denen generell eine sehr hohe Anzahl von I/O-Operationen zu erwarten sind.