NetBSD 9.2: Stabiler, effizienter und mit geschlossenen Sicherheitslücken

Die neue NetBSD-Version 9.2 bringt ein stabileres Dateisystem ZFS und ein schnelleres fread(). Zudem behebt sie mehrere Bugs – ein Update ist empfehlenswert.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 150 Beiträge
Von
  • Oliver Müller

Die neue Version 9.2 "Nakatomi Socrates" von NetBSD ist in dieser Woche erschienen. Obwohl die Release-Notes den 12.05.2021 als Erscheinungsdatum ausgeben, war das neue Betriebssystem doch erst ab Montag zum Download verfügbar. Das neueste Update zu NetBSD 9 zeichnet sich durch Fehlerbehebungen und verbesserte Stabilität aus. Zudem sind einige Verbesserungen aus dem Entwicklungsstrang als Backports in 9.2 eingeflossen.

Da das neue Release einige schwerere Bugs beseitigt und Sicherheitslücken schließt, empfiehlt sich das Update in jedem Fall für alle, die NetBSD 9.0 oder die bislang jüngste Version 9.1 einsetzen.

Durch diverse Fixes präsentiert sich das Dateisystem ZFS im neuen Release von NetBSD deutlich stabiler. Zudem konnten die Entwickler einen schwerwiegenden Bug im Zusammenspiel mit NFS beheben.

Wurde ein von ZFS bereitgestelltes Dateisystem per NFS freigegeben, konnten Clients den Server zum Absturz bringen. Es genügte, dass ein Client auf der NFS-Freigabe versuchte, ein Verzeichnis zu erstellen. Der Server quittierte das entweder mit einem Reset oder mit einer Panic. Dieser schwerwiegende Fehler ist in 9.2 behoben. Näheres findet sich im Problemreport #55042.

Der System-Call fread() verfügt in NetBSD 9.2 über ein optimiertes Puffer-Handling bei ungepuffertem Input/Output (I/O). Was zunächst nach einem Widerspruch klingt, ist keiner: Das "ungepuffert" beim I/O bezieht sich auf die Zugriffsart auf das entsprechende Device. Die Daten landen dennoch anwendungsseitig in einem Puffer.

Ein Programm definiert beispielsweise einen Puffer buf mit 2000. Anschließend liest es von einem ungepufferten Gerät dev mit fread(buf,1,2000,dev). Diese Anweisung "lies 2000 Objekte der Größe 1 Byte" führt zu 2000 einzelnen Leseoperationen. Das ist höchst ineffizient und kann die Geschwindigkeit massiv drücken.

Wie der zugehörige Problemreport #55808 beschreibt, hatte das Schwestersystem OpenBSD das Problem bereits früher behoben. Dieser Fix von OpenBSD stand nun für NetBSD 9.2 Pate, um fread() zu optimieren.

Das oben genannte Szenario führt in der neuen Version fortan dazu, dass der System-Call die Puffergröße intern korrekt interpretiert und Einzeloperationen zu einer einzigen Operation zusammenfasst. Auf das obige Beispiel bezogen, liest NetBSD 9.2 im Gegensatz zu seinen Vorgängern 2000 Bytes in einer einzigen Leseoperation.

Bislang erzeugte NetBSD nicht per Standard zufällige Fragment-IDs für IP-Pakete, was Rückschlüsse auf die ursprünglichen IDs zulässt und Angriffe ermöglicht (predictable ID disclosure). Durch zufälliges Erzeugen von IDs können Systeme diesem Problem begegnen. Auch NetBSD gestattet dies durch Zuschalten der ID-Randomization. Die bislang verwendeten Algorithmen stellten sich aber als zu schwach heraus. Trotz zugeschalteter Randomization war das Offenlegen der ursprünglichen IDs ermöglicht. IPv4 ist davon ebenso betroffen wie IPv6. Näheres findet sich im Security Advisory 2021-001.

NetBSD 9.2 begegnet diesem Problem in zweierlei Hinsicht: Die Algorithmen erfuhren eine Generalüberholung und sind jetzt stärker. Zudem ist die ID-Randomization standardmäßig aktiv.

Die Xen Security Advisory XSA-362 beschreibt ein Szenario, in dem ein fehlerhafter Frontend-Treiber den verwendeten Backend-Treiber zum Absturz bringen kann. Damit kann ein Gastsystem (DomU) in gewissen Situationen den Hypervisor (Dom0) und damit das Host-System zum Absturz bringen.

Das neue NetBSD zieht seine Xen-Implementierung in diesem Punkt gerade. Als Auswirkung streicht die neue Version die Unterstützung für den rx-flip-Mode in xennet und in xvif. Physikalisch empfängt das Host-System (Dom0) die Daten am Netzwerkadapter. Diese Daten müssen dann dem Gastsystem (DomU) und dessen virtuellen Netzwerkadapter beziehungsweise dessen Treiber zugeführt werden.

rx-flip widmet hierzu Pages der virtuellen Speicherverwaltung, die die empfangenen Daten enthalten, vom physikalisch empfangenden Dom0 zur jeweilgen DomU um. Statt die Daten zu kopieren, werden sie kurzerhand 'umettiketiert'. Das setzt eine korrekte und saubere Programmierung auf Host (Dom0) und Gast (DomU) voraus. Andernfalls begünstigt das die Crash-Szenarien aus XSA-362.

rx-copy ist ein alternatives Betriebsmodell in Xen. Es kopiert die empfangenden von Dom0 in die jeweilige DomU. Aufwendiges Umdeklarieren mit Speicherverwaltungszauber entfällt. Die betreffenden Treiber in NetBSD nutzen rx-copy schon länger per Default. In NetBSD 9.2 ist es jetzt jedoch nicht mehr möglich, auf das optionale rx-flip zu wechseln.

Das neue Release bringt eine Reihe von verbesserten Treibern mit. Hervorzuheben sind die Treiber für Intel-Netzwerkkarten. Ein massives Problem behebt NetBSD 9.2 im Gerätetreiber für Intel-Netzwerkkarten vom Typ i8254x. Ein Bug verhinderte auf Big-Endian-Systemen, dass diese Netzwerkpakete über diese Karten empfangen konnten.

Des Weiteren sind jetzt Treiber für den WLAN-Adapter TL-WN821N V6 von TP-Link sowie für den Verschlüsselungsbeschleuniger Allwinner H5 mit an Bord.

Neben den bereits angesprochenen Lücken behebt NetBSD 9.2 die Sichereitslücke CVE-2021-3472 in Xorg. Sie ermöglichte es Angreifern sich lokal höhere Rechte zu erschleichen oder zumindest die Systemstabilität negativ zu beeinträchtigen.

Weitere Lücken schließt NetBSD in freetype, xkb und xterm. Auch OpenSSL erfährt ein Update. Es ist nun Version 1.1.1k enthalten, die insbesondere CVE-2021-3449 und CVS-2021-3450 adressiert.

Die mitgelieferte Konfiguration für den Standard-Window-Manager ctwm wurde verbessert. Es floss Feedback der Benutzer ein, um die Bedienung zu verbessern. Zudem behebt das neue Release Probleme mit dem Fensterfokus.

Das neue NetBSD verbessert außerdem die Unterstützung von Aarch64 (ARM64). ptrace und ein fehlerbereinigtes clone sind mit von der Partie. Außerdem führt es eine Emulation von Intruktionen ein, die in ARMv7 als "deprecated" deklariert sind.

Zudem verbessert es die Kompatiblität mit Linux-Programmen. Es imitiert das Verhalten von Linux bei Bugs. Verwendet ein Programm längere Namen als in der sockaddr_in-Struktur erlaubt ist, reagiert es Linux-spezifisch. Wie üblich gibt es ausführliche Release-Notes zu NetBSD 9.2.

(tiw)