Linux 6.2 soll Performance trotz Retbleed-Patches zurückbringen

Seite 2: BPF ausgebaut

Inhaltsverzeichnis

BPF (Berkeley Packet Filter) erlaubt mit den "user defined object"-BPF-Programmen eigene Objekte und Objekthierarchien zu erzeugen. Außerdem können BPF-Programme mithilfe der "Basic Building Blocks" des BPF-Runtime eigene Datenstrukturen flexibel anlegen und verlinkte Listen nutzen. BPF mausert sich damit langsam zur vollwertigen Programmiersprache. Erklärtes Ziel ist es, in beschränkter Form Kernel-Programmierung in BPF C zuzulassen.

Seit Version 2.5 kennt der Kernel den Synchronsationsmechanismus RCU (Read, Copy, Update). Das Eintreten (lock) und Verlassen (unlock) eines kritischen Lese-Blocks können nun auch die in Kernel 5.10 eingeführten "sleepable" BPF-Programme nutzen.

Des Weiteren haben BPF-Programme erweiterten Zugriff auf control-group local storage. Auch können sie auf task_struct-Objekte zugreifen und diese speichern.

Auf ARM64 gibt es zwei Sicherheitsmechanismen gegen Stack-Buffer-Overflow-basierte Angriffe. Die auf allen ARM64-Systemen nutzbaren Shadow-Stacks schützen vor dem Überschreiben von Rücksprungadressen, indem sie die Rücksprungadressen des aktiven Stapels und einer parallel geführten Schattenkopie abgleichen und so Änderungen auf die Schliche kommen. Auf Systemen ab ARM 8.3 mit aktiver Pointer-Authentication werden Rücksprungadressen kryptografisch signiert und sind somit bereits gegen Modifikationen abgesichert. Ein Shadow-Stack bringt auf diesen Systemen keinen Sicherheitsgewinn und frisst nur unnötig Taktzyklen.

Linux 6.2 erlaubt nun, Shadow-Stacks zur Boot-Zeit ein- und auszuschalten. Bislang war das Aktivieren der Shadow-Stacks nur zur Compile-Zeit des Kernels möglich. Die Folge waren separate Kernel-Builds für Pointer-Authentication ohne Shadow-Stacks und ohne Pointer-Authentication, jedoch mit Shadow-Stacks. Jetzt kann der gleiche Kernel auf Systemen mit und ohne Pointer-Authentication zum Einsatz kommen, da sich die Shadow-Stacks zur Laufzeit aktivieren lassen.

Für Intel-Prozessoren spendiert der neue Kernel FineIBT, das "Fine-grained Indirect Branch Tracking". Es ist ein alternativer Ansatz für "Control Flow Integrity" (CFI). CFI ist allgemein eine Technik, um durch Angriffe initiierte Abweichungen vom Programmfluss zu erkennen. FineIBT setzt auf der hardware-basierten "Control Enforcement Technology" (CET) von Intel auf. Durch die Hardware-Unterstützung reduzieren sich der sonst übliche Overhead gegenüber rein software-basierte CFI. Intern arbeitet es auf dem Prinzip, auf der aufrufenden Seite einer Funktion einen Hash-Wert zu setzen, den die aufgerufene Seite überprüft. Stimmen die Werte nicht überein, lässt sich so ein Angriff erkennen.

Intels "asynchronous exit notification"-Mechanismus unterstützt Linux 6.2 ebenfalls. Über ihn lassen sich Single-Step-Attacken in SGX-Enclaven erkennen.

Nachdem 2019 der Floppy-Treiber im Kernel bereits als "verwaist" markiert wurde und sich doch noch ein neuer Maintainer fand, wartet der Floppy-Code nun mit einigen Bugfixes und Änderungen auf. In Linux 5.11 hatte sich ein Memory-Leak in den Kernel eingeschlichen. Der Bug macht Teile des Arbeitsspeichers unansprechbar, wenn auf eine defekte Diskette zugegriffen oder diese zu früh aus dem Laufwerk entfernt wird.

Freuen dürfte das vor allem Nutzer in Ländern, in denen die Diskette noch relevantes Medium ist. Japan beispielsweise schreibt noch gesetzlich beim Austausch mit bestimmten Behörden die Floppy als Medium vor. Aber auch Anwender in Industrie, Luftfahrt und Medizin nutzen noch Disketten. Auch wenn die letzte Boeing 747 im Dezember letzten Jahres von Band lief, ist die Maschine noch im Einsatz und erhält Navigationsupdates per 3,5"-Diskette. Das Gleiche gilt für industrielle Produktionsanlagen, Laborsysteme oder Medizintechnik, die für Jahrzehnte ausgelegt sind und nicht auf Emulatoren umgerüstet werden können.

Revolutionäre technische Neuerungen bietet Linux 6.2 nicht. Der Ausbau von Rust war bereits angekündigt und ist konsequent und plangemäß in den Kernel eingeflossen. Auch wenn es noch ein längerer Weg zur praxistauglichen Rust-Integration sein mag, bleiben die Entwickler in Bewegung und liefern wie angekündigt stetig Erweiterungen.

Der Ausbau von BPF ist spannend: Das Ziel, Kernel-Funktionen in BPF zu entwickeln, kann alteingesessene Kernel-Entwickler ein wenig schauern lassen. Die Helper-Funktionen im Userspace und das mächtige BPF-Arsenal im Kernelspace können zum Spekulieren über die Zukunft der Kernels verleiten. Da mag ein bisschen Microkernel-Flair in Linux Einzug halten. Auch wenn das ein neues Licht auf den Disput zwischen Linus Torvalds und Andrew Tanenbaum aus dem Jahr 1992 werfen mag.

Positiv dürfte insbesondere Administratoren mit älterer Hardware die überarbeitete Retbleed-Gegenmaßnahme auf Skylake-Prozessoren stimmen. Die ersten Tests lassen hoffen, dass die massiven Performance-Einbrüche damit nicht mehr auftreten. Wie groß der Leistungsverlust beim neuen Ansatz in der Praxis sein wird, wird sich in den nächsten Wochen zeigen.

Ansonsten feilen die Entwickler in Linux 6.2 an Sicherheits-Features. Sie greifen neue Ansätze auf. Damit lässt sich das Release als Wartungs-Release mit Sicherheitsfokus und Vorarbeiten für zukünftige Weichenstellungen – siehe BPF-Aufbau und Rust-Integration – auffassen.

Der neue Kernel lädt wie gewohnt auf kernel.org zum Herunterladen ein. Alle Änderungen finden sich gesammelt im ausführlichen Kernel-Changelog.

(dmk)