Veröffentlichung von LKRG 1.0.0 zum Schutz vor Ausnutzung von Schwachstellen im Linux-Kernel.

Das Openwall-Projekt hat das LKRG 1.0.0 (Linux Kernel Runtime Guard) Kernel-Modul veröffentlicht, das zur Überprüfung der Integrität von Kernel-Strukturen und zur Erkennung von Versuchen zur Ausnutzung von Schwachstellen im Kernel dient. Die Vergabe der Versionsnummer 1.0.0 markiert dabei den Erreichungsgrad des Projekts in einen mature Zustand. Der Code des Projekts wird unter der GPLv2-Lizenz verbreitet.

Das Modul eignet sich sowohl für Schutz vor Angriffen, die bereits bekannte Schwachstellen im Linux-Kernel ausnutzen, als auch zur Abwehr von Exploits, die noch unbekannte Schwachstellen nutzen, sofern keine speziellen Maßnahmen zur Umgehung von LKRG ergriffen werden. Der Schutz basiert auf der Erkennung von unautorisierten Änderungen am laufenden Kernel (Integritätsprüfung) und der Überwachung von Änderungen der Berechtigungen von Benutzerprozessen (Erkennung der Anwendung von Exploits).

Die Integritätsprüfung erfolgt durch den Vergleich der Hashwerte, die für die wichtigsten Speicherbereiche und Datenstrukturen des Kernels berechnet werden, wie z. B. IDT (Interrupt Descriptor Table), MSR, Systemaufruftabellen, alle Prozeduren und Funktionen, Interrupt-Handler, Listen geladener Module, der Inhalt der Textsektion der Module und die Attribute der Prozesse. Der Prüfprozess wird regelmäßig über einen Timer oder bei bestimmten Ereignissen im Kernel aktiviert, beispielsweise bei der Ausführung der Systemaufrufe setuid, setreuid, fork, exit, execve und do_init_module.

Die Identifizierung möglicher Exploit-Anwendungen und die Blockierung von Angriffen erfolgt bereits, bevor der Kernel den Zugriff auf Ressourcen gewährt (z. B. vor dem Öffnen einer Datei), jedoch nachdem ein Prozess nicht autorisierte Berechtigungen erhalten hat (z. B. durch UID-Änderung). Bei der Feststellung unautorisierter Verhaltensweisen von Prozessen erfolgt deren sofortige Beendigung, was ausreicht, um viele Exploits zu blockieren. Die overhead-Kosten des Moduls werden auf 2-2,5 % geschätzt.

Es wird die Ausführung auf Systemen mit x86-64, AArch64 (ARM64), ARM32 und x86-Architekturen unterstützt. Die Funktionalität von LKRG 1.0.0 wurde mit Kernel aus verschiedenen Distributionen getestet, beginnend mit dem Kernel 3.10 aus RHEL/CentOS 7 bis hin zu 6.17-rc4 aus dem Repository, in dem die Veröffentlichung von Fedora 44 vorbereitet wird. Pakete sind für die Distributionen ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto und OpenBMC verfügbar. Die für Rocky Linux erstellten Pakete können in RHEL 8/9 und deren Derivaten, wie AlmaLinux 8/9, verwendet werden, während die Pakete für Whonix unter Debian und Ubuntu genutzt werden können.

Zu den Änderungen in der neuen Version gehören:

  • Die Kompatibilität mit Linux-Kerneln bis zur Version 6.17-rc4 wurde sichergestellt.
  • Bei der Verwendung mit Kernen ab 6.13 wurde die Erfassung von Remote-Calls für override_creds() und revert_creds() eingestellt, was die Erkennung von Angriffen, die den cred-Zeiger überschreiben, eingeschränkt hat. Die Einschränkungen wurden versucht zu kompensieren, indem Überprüfungen zur Überschreibung des cred-Zeigers an anderen Stellen im Kernel hinzugefügt wurden.
  • Das übermäßige Tracking von Anmeldedaten, bei denen keine Integritätsprüfung durchgeführt wurde, wurde eingestellt. Diese Änderung ermöglichte eine Verringerung des Codeumfangs um etwa 1500 Zeilen.
  • Die Unterstützung des in Kernel Linux 6.10 eingeführten Mechanismus zur Erstellung temporärer Dateien im OverlayFS mithilfe der Option O_TMPFILE (ovl_tmpfile) wurde hinzugefügt. Diese Unterstützung ist erforderlich, um falsche Auslösungen zu verhindern, die bei der Verwendung isolierter Container auf Systemen mit den Kerneln 6.10-6.12 auftreten können.
  • Für x86_64-Systeme wurde die Unterstützung der Intel CET (Control-flow Enforcement Technology) zur Sicherung des ausführbaren Codes durch Verwendung der IBT-Instruktionen (indirect branch tracking) sowie der softwarebasierten kCFI (kernel Control Flow Integrity) zum Blockieren von Verletzungen des normalen Ausführungsablaufs (control flow) im Zuge von Exploits, die die in der Speicher gespeicherten Funktionszeiger manipulieren, hinzugefügt.
  • Für die Anbindung vieler Handler wurde anstelle von kretprobes der Mechanismus kprobes verwendet, der den Code zur Einrichtung von Hooks vereinfacht und eine höhere Leistung ermöglicht.
  • Die Bearbeitung von Datenlocken (lock), die spezifisch für Prozesse sind (per-task shadow data), wurde überarbeitet. Durch den Verzicht auf überflüssige Lockings konnte die Leistung beim Zugriff auf solche Daten gesteigert werden.
  • Fehler behoben, die zu Wettlaufbedingungen, Integritätsprüfungsproblemen und Fehlalarmen führten.
  • Unterstützung für den Bau mit Clang verbessert.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster