Die Neuerungen von Linux 4.13

Seite 4: Sicherheit & Netzwerk-Support

Inhaltsverzeichnis

Linux 4.13 bringt größere Umbauten am Thunderbolt-Code. Zwischen diesen steckt unter anderem der "Thunderbolt Bus and Connection Manager", der die Basis zur Unterstützung des Internal Connection Manager (ICM) bildet, der in neueren Thunderbolt-Controllern von Intel steckt (u. a. 1, 2, Dokumentation). Durch diese und andere Umbauten beherrscht Linux jetzt die Security Level von Thunderbolt, die Systeme vor Spionage- oder Sabotage-Hardware schützen.

Dazu sind aber noch Erweiterungen bei den Linux-Desktops nötig: Sie müssen in Zukunft fragen, welche Berechtigungen ein gerade angestecktes Thunderbolt-Gerät erhalten soll, um diese dann mithilfe der neuen Kernel-Techniken zu setzen. Windows 10 bietet solche Funktionen samt Abfrage bereits. Linux-Distributionen fehlt sie bislang – beim aktuellen XPS-13-Notebook von Dell und vielen anderen aktuellen Systemen muss man daher im BIOS-Setup eine unsichere Betriebsart aktivieren, um manche Thunderbolt-Geräte unter Linux nutzen zu können. In dieser Einstellung kann ein böswilliges TB-Gerät dann aber den gesamten Arbeitsspeicher per DMA (Direct Memory Access) auslesen, sofern das System den Zugriff nicht mit einer IOMMU (Input-Output Memory Management Unit) reglementiert und so sensitive Informationen schützt. Ein vor wenigen paar Wochen veröffentlichter Blog-Eintrag beschreibt die Problematik näher.

Durch die umfangreichen Änderungen am Thunderbolt-Code gelingt über diesen nun auch ein Update der NVM Firmware von Host und Geräten. Außerdem unterstützt Linux jetzt weitere Thunderbolt-Controller der Intel-Baureihen Win Ridge (Thunderbolt 2) und Alpine Ridge (Thunderbolt 3). Auf den vorgenommenen Umbauten soll zudem ein Netzwerk-Treiber aufbauen, an dem Intels Entwickler arbeiten.

Durch einige Umbauten im Random-Subsystem (u. a. 1, 2) kann Kernel-Code jetzt besser sichergehen, erst Zufallsdaten vom Congruential Random Number Generator (CRNG) zu erhalten, wenn dieser vollständig initialisiert wurde. Programmierer können so sichergehen, dass der Zufallszahlengenerator bei der Arbeit auch genug Entropie zur Verfügung hatte, denn ohne solche würde er keine möglichst zufälligen, sondern womöglich vorhersehbare Daten liefern. Details zur Problematik und dem gewählten Lösungsansatz nennt LWN.net.

Unter den Änderungen am Security Layer waren welche, die das Zusammenspiel von Infiniband mit der Sicherheitslösung SELinux verbessern. Wie schon bei Linux 4.11 haben Canonical-Mitarbeiter eine Reihe von Erweiterungen an der Sicherheitslösung AppArmor beigesteuert, die viele Jahre lang nur in Ubuntus Kernel-Quellen steckten. Darunter ist etwa der Domain Labeling Code und einige andere Funktionen, auf die das Paketmanagementwerkzeug Snapd zurückgreift, um Berechtigungen von als Snap ausgelieferten Anwendungen zu beschränken. Dieser Prozess ist aber noch nicht abgeschlossen, denn die Entwickler arbeiten noch an der Integration weiterer AppArmor-Funktionen, auf die Snapd beim Confinement von Snap-Paketen zurückgreift.

Einige weitere Neuerungen rund um Sicherheit nennen die Merge-Commits der Subsysteme Audit, Crypto und User-Namespaces. Auch bei der Speicherverwaltung (u. a. 1, 2, 3) und dem von Dateisystemen genutzten Virtual File System (VFS) gab es einige Detailänderungen, um den Kernel robuster gegen Angriffe zu machen.

Das Fault-Injection-Subsystem ermöglicht jetzt eine systematische Injektion von Fehlern. Durch sie kann das Framework einen vorher festgelegten Fehler jetzt erst auslösen, nachdem ein Task oder ein Prozess eine vom Tester festgelegte Anzahl von Malen aufgerufen wurde (u. a. 1, 2). Mit diesem Ansatz konnten Googles Entwickler gleich zehn Kernel-Fehler finden, als sie den Syscall-Fuzzer syzkaller testweise um Support für die neue Fault-Injection-Schnittstelle erweiterten

Neu ist auch die Möglichkeit, die Optionen von Netzwerk-Sockets einer Control Group (Cgroup) mit BPF-Programmen beeinflussen zu können. Netzwerkadmins sollen dadurch Verbindungsparameter einfacher und flexibler einstellen können – etwa Puffergrößen oder den TCP SYN Retransmission Timeout (RTO). Diese und weitere Socket-Optionen lassen sich bereits über andere Wege setzen. BPF-Programme können die Parameter aber für einzelne Sockets setzen, was beim Einstellen via sysctl nicht gelingt. Im Unterschied zu den Routen-Metriken können die Programme auch Port-Nummern oder von Userspace-Anwendungen bereitgestellte Informationen bei der Entscheidung nutzen. Außerdem kann ein vom BPF-Interpreter des Kernels ausgeführtes Programm auch einen Teil der Verbindungen auf eine andere Weise handhaben, um zu sehen, ob diese Herangehensweise denn Vorteile bietet. Details hierzu finden sich im Commit mit der "BPF Cgroup Support for sock_ops" genannten Funktion, das genau wie KTLS maßgeblich von Facebook-Mitarbeitern entwickelt wurde.

Linux unterstützt nun auch die "Pear" genannten 802.11ac-WLAN-Chips der QSR10g-Familie von Quantenna. Auch für den Realtek-WLAN-Chip RTL8153B bringt der Kernel jetzt einen Treiber mit. Der für Intel-Chips zuständige Treiber i40e unterstützt jetzt die bei Linux 4.8 integrierte Netzwerk-Schnellstraße XDP/Express Data Path (1, 2); das gleiche gilt für die QLogic-FastLinQ-Treiber qed und qede.

Linux nutzt bei den Zeitstempeln von TCP-Paketen nun eine Granularität von 1 Millisekunde. Das soll besser für den Datenfluss von TCP-Verbindungen im Internet sein als die bisher meist genutzte Auflösung von 4 oder 10 Millisekunden. Google hat damit schon gute Erfahrungen gesammelt und nutzt in seinen Rechenzentren noch geringere Werte.

Der TCP-Code hat jetzt einen eigenen und optionalen Schritt-Mechanismus, der bei bestimmten Umgebungsbedingungen die Systemlast reduzieren kann.

Einige weitere Änderungen rund um den Netzwerk-Support nennt der Merge-Commit, in dem die wesentlichsten Änderungen am Netzwerksubsystem von 4.13 stecken. Darunter waren beispielsweise noch Optimierungen für das UDP-Handling unter hoher Last, Namespace-Support im von NFS genutzten Rxrpc oder Multichain-Support für die mit tc(Traffic Control) administrierten Qdisc-Filter.