Linux-Kernel mit sysctl härten, in einfachen Worten
Sysctl ist die Liste der Einstellungen, die der laufende Linux-Kernel ohne Neukompilieren ändern lässt. Mit sysctl härten heißt, für die sicherheitsrelevanten davon strengere Werte zu wählen. Jede Einstellung ist klein, die meisten sind sicher. Einige können Software brechen, die Sie nutzen; daher ist der vernünftige Weg, mit den harmlosen anzufangen und den Rest einzeln zu testen.
So funktioniert es
Einen Wert lesen:
sysctl kernel.kptr_restrict
Bis zum nächsten Neustart ändern:
sudo sysctl -w kernel.kptr_restrict=2
Über Neustarts hinweg behalten, indem Sie ihn in eine Datei unter /etc/sysctl.d/ schreiben, deren Dateien auf .conf enden und in Namensreihenfolge gelesen werden:
echo 'kernel.kptr_restrict = 2' | sudo tee /etc/sysctl.d/90-beispiel.conf
sudo sysctl --system
Das funktioniert auf Fedora, Ubuntu, Debian und Arch gleich. Bearbeiten Sie nicht die Dateien Ihrer Distribution; legen Sie eigene an, damit ein Update Ihre Arbeit nicht überschreibt und Sie sie später entfernen können. Da Dateien in Reihenfolge gelesen werden, gewinnt ein späterer Name, wenn zwei denselben Schlüssel setzen.
Gefahrlose zum Anfang
Diese ändern auf einem Desktop wenig und haben einen klaren Nutzen.
kernel.kptr_restrictverbirgt Kernel-Speicheradressen vor normalen Programmen. Angreifer nutzen diese Adressen, um einen Exploit zu zielen.kernel.dmesg_restrictlässt nur einen Administrator das Kernel-Log lesen, das Adressen und Hardwaredetails zeigen kann.net.ipv4.tcp_syncookieshält die Maschine am Antworten, wenn jemand sie mit halboffenen Verbindungen flutet. Viele Distributionen setzen es schon auf 1.fs.protected_symlinks,fs.protected_hardlinks,fs.protected_fifosundfs.protected_regularblockieren alte Tricks, bei denen ein Angreifer einen Link oder eine Datei in einem gemeinsamen Ordner wie/tmpablegt, damit ein privilegiertes Programm schreibt, wo er will. Der Katalog fasst sie als gemeinsame Ordner schützen zusammen.
Manche sind auf Ihrem System vermutlich schon gesetzt. Den Wert vorher zu lesen, verrät es.
Die, die etwas brechen können
Ein strengerer Wert kann etwas entfernen, das ein Programm braucht. Bekannte Fälle:
user.max_user_namespaces=0entfernt einen großen Teil der Angriffsfläche des Kernels und stoppt zugleich Flatpak, die Sandboxes von Chromium und Firefox, rootless Container und viele AppImages. Für die meisten Desktops ist das zu teuer.kernel.yama.ptrace_scopeauf strengerer Stufe bedeutet, dass ein Debugger wiegdboderstracesich ohne Zusatzrechte nicht mehr an ein laufendes Programm hängt. Entwickler merken es schnell.kernel.perf_event_paranoidhoch stoppt unprivilegiertes Profiling mitperf.net.ipv4.conf.all.rp_filter=1verwirft Pakete, die auf einer Schnittstelle ankommen, über die der Kernel nicht antworten würde. Das kann manche VPNs und Maschinen mit mehreren Netzrouten brechen.- IPv6-Router-Ankündigungen zu ignorieren, lässt IPv6 in den meisten Heimnetzen ohne Adresse.
kernel.sysrq=0entfernt die Notfall-Tasten einer eingefrorenen Maschine.- kexec zu sperren, lässt sich erst beim nächsten Neustart aufheben und betrifft Absturz-Werkzeuge.
Die Regel ist einfach: Ändern Sie eines, benutzen Sie den Rechner einen Tag, und heben Sie den Rest für später auf.
Wie Sie eine Änderung testen
Benutzen Sie die Maschine nach jeder Änderung wie sonst. Öffnen Sie den Browser, starten Sie eine Flatpak-App, falls Sie welche nutzen, verbinden Sie Ihr VPN, stecken Sie ein Gerät an, bauen Sie etwas. Arbeiten Sie entfernt, halten Sie eine zweite Sitzung offen. Probleme durch sysctl zeigen sich meist als ein Programm, das mit „permission denied“ oder „operation not permitted“ ohne erkennbare Ursache scheitert; passiert das kurz nach einer Änderung, verdächtigen Sie zuerst diese. Ein Wert nach dem anderen macht den Schuldigen offensichtlich und das Zurücknehmen zu einer einzigen Zeile.
Anwenden und zurücknehmen
Notieren Sie die aktuellen Werte, bevor Sie etwas ändern:
sysctl kernel.kptr_restrict kernel.dmesg_restrict
Um eine dauerhafte Änderung zurückzunehmen, entfernen Sie die Datei und setzen Sie den alten Wert zurück, denn nur die Datei zu löschen ändert den laufenden Kernel nicht:
sudo rm /etc/sysctl.d/90-beispiel.conf
sudo sysctl -w kernel.kptr_restrict=0
Ein Neustart kehrt ebenfalls zu dem zurück, was die verbleibenden Dateien und der Kernel-Standard sagen. Bricht eine Einstellung etwas, ohne dass Sie wissen welche, teilen Sie: Entfernen Sie die Hälfte Ihrer Datei, führen Sie sudo sysctl --system aus und testen Sie.
Prüfen Sie mit IbexWall
Der Bildschirm Härtung listet 26 Kernel-, Netz-, Dateisystem- und Moduleinstellungen, jede mit dem, was sie brechen kann, und Sie haken an, was Sie möchten. Das Kernel-Härtungs-Plugin (system.sysctl) liest jeden Wert, vergleicht ihn mit der Referenz und wendet Ihre Wahl über einen Plan an. Der Plan zeigt die genaue Datei, die IbexWall als /etc/sysctl.d/90-ibexwall.conf schreibt, und den Diff, bevor etwas geschieht. Zuerst wird ein Sicherungspunkt gesetzt, und der Verlauf nimmt es zurück. Version 1.0 ist in Vorbereitung.