userfaultfd einschränken
Ein gewöhnliches Programm kann die Kernel-Seite dieser Schnittstelle nicht mehr nutzen, die Angreifer zum präzisen Timing ihrer Schritte benutzt haben. Programme, die ihren Speicher im Userspace selbst verwalten, funktionieren weiter.
Warum es wichtig ist
Der Systemaufruf userfaultfd lässt ein Programm Seitenfehler selbst behandeln. Angreifer haben ihn benutzt, um den Kernel zu einem exakten Moment anzuhalten und ein winziges Zeitfenster genug zu verbreitern, um ein Rennen in einem Fehler wie einem Use-after-free zu gewinnen. Unprivilegierten Benutzern die Kernel-Form dieses Aufrufs zu nehmen, erschwert viele solcher Exploits.
Wie es funktioniert
Setzt vm.unprivileged_userfaultfd auf 0. Laut Kernel-Dokumentation können Benutzer ohne CAP_SYS_PTRACE userfaultfd dann nur für Fehler im Benutzermodus nutzen, mit dem Flag UFFD_USER_MODE_ONLY. Der Zugriff über /dev/userfaultfd lässt sich gesondert gewähren.
Für wen es sich eignet
Für fast jeden Desktop und Server in Ordnung. Prüfen Sie es, wenn Sie Live-Migration virtueller Maschinen, Checkpoint-und-Restore-Werkzeuge oder andere auf userfaultfd aufgebaute Software einsetzen.
Was Sie bemerken könnten
Fast nie sichtbar. Software, die volles userfaultfd als normaler Benutzer braucht, kann mit einem Berechtigungsfehler fehlschlagen, bis ihr /dev/userfaultfd gewährt wird oder sie mit mehr Rechten läuft.
Auf Ihrem Computer prüfen
Den aktuellen Wert lesen:
sysctl vm.unprivileged_userfaultfd Von Hand anwenden
Jetzt setzen (bis zum nächsten Neustart):
sudo sysctl -w vm.unprivileged_userfaultfd=0 Nach Neustarts beibehalten, in einer eigenen Datei:
sudo tee /etc/sysctl.d/90-kernel-userfaultfd.conf <<'EOF'
vm.unprivileged_userfaultfd = 0
EOF
sudo sysctl --system Rückgängig machen
Entfernen Sie die Datei und starten Sie neu, oder setzen Sie den alten Wert mit sysctl -w zurück.
Verwandte Einstellungen
Quellen
- Linux Hardening Guide (madaidans)
- 2.2.1