Suchen

Hacker: Warum Raspberry Pi sicher vor Meltdown und Spectre ist

Seite: 3/3

Firmen zum Thema

Meltdown-Attacke auf den Prozessor

Betrachten wir nun, wie vorausschauendes Lesen und Caching einen Meltdown-artigen Angriff auf unseren Prozessor ermöglichen. Betrachten Sie das folgende Beispiel, bei dem es sich um ein Benutzerprogramm handelt, das manchmal von einer ungültigen (Kernel-) Adresse liest, was zu einem Fehler (Absturz) führt:

t = a + b

Bildergalerie

Bildergalerie mit 8 Bildern

u = t + c

v = u + d

wenn v:

w = kern_mem [Adresse] # wenn wir hier sind, Fehler

x = w & 0x100

y = user_mem [x]

Jetzt, vorausgesetzt, wir können den Verzweigungs-Prädiktor so trainieren, dass wir glauben, dass v wahrscheinlich nicht Null ist, mischt unser außer der Reihe liegender Zweiweg-Superskalar-Prozessor das Programm folgendermaßen:

t, w_ = a + b, kern_mem [Adresse]

u, x_ = t + c, w_ & 0x100

v, y_ = u + d, user_mem [x_]

wenn v:

# Fehler

w, x, y = w_, x_, y_ # wir kommen nie hierher

Obwohl der Prozessor immer spekulativ von der Kerneladresse liest, muss er den resultierenden Fehler verschieben, bis er weiß, dass v nicht Null ist. Auf den ersten Blick scheint dies sicher zu sein, weil entweder:

v ist Null, so dass das Ergebnis des illegalen Lesens nicht auf w übergeben wird

v ist nicht Null, aber der Fehler tritt auf, bevor das Lesen an w übergeben wird

Nehmen wir jedoch an, wir leeren unseren Cache vor der Ausführung des Codes und ordnen a, b, c und d so an, dass v tatsächlich Null ist. Nun, das spekulative Lesen im dritten Zyklus:

v, y_ = u + d, user_mem [x_]

wird entweder auf die Benutzerlandadresse 0x000 oder die Adresse 0x100 zugreifen, abhängig von dem achten Bit des Ergebnisses des illegalen Lesens, wobei diese Adresse und ihre Nachbarn in den Cache geladen werden. Da v null ist, werden die Ergebnisse der spekulativen Anweisungen verworfen, und die Ausführung wird fortgesetzt. Wenn wir einen nachfolgenden Zugriff auf eine dieser Adressen zeitlich festlegen, können wir ermitteln, welche Adresse sich im Cache befindet. Herzlichen Glückwunsch: Sie haben gerade ein Bit aus dem Adressraum des Kernels gelesen!

Der echte Meltdown-Nutzen ist wesentlich komplexer als dieser (insbesondere, um zu vermeiden, den Verzweigungsprädiktor falsch zu trainieren, wird bevorzugt, das illegale Lesen bedingungslos auszuführen und die resultierende Ausnahme zu handhaben), aber das Prinzip ist das gleiche. Spectre verwendet einen ähnlichen Ansatz, um Software-Array-Grenzen-Prüfungen zu unterlaufen.

Fazit: Abstraktion und Realität moderner Prozessoren

Moderne Prozessoren tun viel, um die Abstraktion zu bewahren, dass sie Skalarmaschinen sind, die direkt auf den Speicher zugreifen, während sie tatsächlich eine Vielzahl von Techniken verwenden, darunter Caching, Neuordnung von Befehlen und vorausschauende Zugriffe, die viel mehr Leistung bieten als ein einfacher Prozessor erreicht. Meltdown und Spectre sind Beispiele dafür, was passiert, wenn wir im Kontext dieser Abstraktion über Sicherheit sprechen und dann auf kleine Diskrepanzen zwischen Abstraktion und Realität treffen.

Fazit: Das Fehlen von vorausschauenden Zugriffen in den ARM1176-, Cortex-A7- und Cortex-A53-Kernen, die im Raspberry Pi verwendet werden, machen die Raspberry Pis gegen Angriffe wie Meltdown und Spectre immun.

Die Ausführungen von Eben Upton finden Sie auch auf der Seite von raspberrypi.org.

(ID:45113225)

Über den Autor

 Margit Kuther

Margit Kuther

Redakteur, ELEKTRONIKPRAXIS - Wissen. Impulse. Kontakte.