Massive Sicherheitslücken in vielen CPUs sorgen für Aufsehen, weil zum Umgehen dieser Hardware-Bugs tiefgreifende Umbauarbeiten an Betriebssystemen erforderlich sind, die sich negativ auf die Leistung auswirken können. Besonders betroffen ist Intel, aber nicht nur. ComputerBase hat Benchmarks.

Hinweis: Der Artikel wude fortlaufend um neue Erkenntnisse ergänzt, die in Form von Updates in chronologischer Reihenfolge am Ende angefügt sind. Um einen vollständigen Überblick über den aktuellen Stand zum Thema Meltdown und Spectre zu erlangen, ist das aufmerksame Lesen des gesamten Artikels erforderlich. Die Berichterstattung von ComputerBase begann 1½ Tage bevor die Thematik am Abend des 4.1.2018 offiziell wurde.

Die Entwickler des Linux-Kernels haben in den letzten Wochen tiefgreifende Umbauarbeiten am Virtual-Memory-Subsystem des Kernels vorgenommen. Nicht-trivialen Änderungen an diesem zentralen Teil des Linux-Kernels gehen sonst üblicherweise monate- oder jahrelange Diskussionen voraus. Und als wäre das noch nicht genug, werden diese großen Patches aktuell nicht nur in die kommende Version 4.15 des Linux-Kernels eingebaut, sondern auch in die bereits veröffentlichten stabilen Versionen 4.9 und 4.14 mit Long-Term-Support (LTS) zurückportiert. Aufmerksamen Beobachtern wird zunehmend klar, dass es für diese insbesondere über die Feiertage außergewöhnliche Hektik einen triftigen Grund geben muss.

Eine Sicherheitslücke in Intel-CPUs

Dem aktuellen Vernehmen nach verhindern die Patches das Ausnutzen einer massiven Sicherheitslücke in allen Intel-CPUs. [Nachträgliche Klarstellung: Hierbei handelt es sich um die Sicherheitslücke namens „Meltdown“.] Offenbar kann ein Prozess eine Intel-CPU durch Ausnutzen eines Hardware-Bugs dazu bringen, Speicherbereiche spekulativ zu laden und den Zugriff darauf dann ohne weitere Prüfung zu erlauben, ohne dass der Prozess die erforderlichen Rechte hat. So kann ein unprivilegierter Prozess auf den Speicher des Kernels zugreifen, in welchem sich sensible Daten befinden können. Besonders prekär ist das für Cloud-Provider wie Amazon und Google, die ein Ausbrechen aus virtuellen Maschinen verhindern wollen. Darüber hinaus könnte die als „Defense in Depth“ eingesetzte Sicherheitstechnik Address Space Layout Randomization (ASLR) des Kernels ausgehebelt werden.

Für Linux gibt es einen Workaround

Der von den Linux-Entwicklern für diesen Hardware-Bug in Intel-CPUs jetzt eingebaute Workaround namens Kernel Page-Table Isolation (PTI beziehungsweise KPTI) sorgt dafür, dass der Speicherbereich des Kernels nicht mehr in die Seitentabelle („Page Table“) der Prozesse gemappt wird. Mit PTI sieht ein Prozess also nur noch seinen eigenen Speicherbereich. Der Speicherbereich des Kernels ist für ihn schlicht unsichtbar, sodass eine offenbar leicht auszuhebelnde Zugriffsprüfung keine Rolle mehr spielt.

Kleiner Exkurs: Prozesse arbeiten mit virtuellen Speicheradressen („Virtual Memory“) beginnend bei 0. Es ist die Aufgabe des Kernels, eine freie Stelle im RAM (oder im Swap beziehungsweise der Auslagerungsdatei) zu finden und diese virtuellen Adressen zur Laufzeit des Prozesses in physische Adressen zu übersetzen. Dazu pflegt der Kernel für jeden Prozess ein Mapping: die sogenannte Seitentabelle. So können mehrere Prozesse nebenläufig ausgeführt werden ohne sich ins Gehege zu kommen oder gegenseitig ihre Speicherbereiche lesen oder überschreiben zu können. Damit diese Abstraktion sich nicht negativ auf die Leistung auswirkt, verfügt jede CPU über einen speziellen Cache namens Translation Lookaside Buffer (TLB), der das Übersetzen einer logischen Adresse in eine physische Adresse beschleunigt.

Obwohl sich PTI nach einer einfachen Lösung anhört, hat die Sache einen gewaltigen Haken: Wenn der Speicherbereich des Kernels nicht mehr in die Seitentabelle der Prozesse gemappt wird, erfordert jeder Aufruf einer vom Kernel bereitgestellten Funktion (Systemaufruf) das Laden einer neuen Seitentabelle und somit das Leeren des für die Performance überaus wichtigen Translation Lookaside Buffer. Normalerweise ist das Leeren des TLB nur bei einem Prozesswechsel erforderlich – also wenn der Kernel alle paar Millisekunden einen Prozess pausiert und mit der Ausführung des nächsten Prozesses fortfährt. Mit PTI muss der TLB zusätzlich dazu auch vor und nach jedem Syscall geleert werden. Die zu erwartenden Leistungseinbußen hängen also stark davon ab, wie oft ein Prozess Syscalls nutzt. Im Endeffekt rechnen die Linux-Entwickler durch PTI mit Performance-Einbußen von rund 5 Prozent, in Extremfällen können es aber offenbar auch fast 50 Prozent sein:

AMD-Prozessoren von diesem (!) Problem nicht betroffen

Dass dieser Benchmark auf einem AMD-System durchgeführt wurde, obwohl AMD-CPUs von der Sicherheitslücke Meltdown nicht betroffen sind und PTI dort nach jetzigem Stand überflüssig ist, entbehrt nicht einer gewissen Ironie. Grund zur Annahme, dass die Leistungseinbußen auf Intel-CPUs deutlich anders ausfallen würden, gibt es aber nicht. Trotzdem ist dieser Benchmark vermutlich der absolute Worst-Case und in weniger speziellen Benchmarks dürften die Leistungseinbußen deutlich geringer bis kaum noch messbar ausfallen.

Die Aussage des AMD-Entwicklers, derzufolge die eigenen Prozessoren von dieser Sicherheitslücke nicht betroffen sind, lautet wie folgt:

AMD processors are not subject to the types of attacks that the kernel page table isolation feature protects against. The AMD microarchitecture does not allow memory references, including speculative references, that access higher privileged data when running in a lesser privileged mode when that access would result in a page fault. Disable page table isolation by default on AMD processors by not setting the X86_BUG_CPU_INSECURE feature, which controls whether X86_FEATURE_PTI is set. Tom Lendacky, AMD

Auch Microsoft arbeitet an einem Patch, Insider haben ihn schon

Weil die Sicherheitslücke von einem Hardware-Bug in Intel-CPUs ausgelöst wird, sind neben Linux natürlich auch Windows, macOS und andere Betriebssysteme von dem Problem betroffen, wenngleich aufgrund des offenen Entwicklungsmodells die Linux-Workarounds zuerst publik geworden sind. Auch Microsoft arbeitet bereits an einem ähnlichen Isolations-Feature, wie Entwickler Mitte November festgestellt hatten („KAISER“ ist die damalige Bezeichnung für KPTI):

ComputerBase hat Intel um Stellungnahme zu dem angeblichen Hardware-Bug gebeten.