Openwall-Projekt Erscheinung des Kernel-Moduls (Linux Kernel Runtime Guard), das zur Erkennung und Blockierung von Angriffen und zur Wahrung der IntegritĂ€t von Kernel-Strukturen entwickelt wurde. Zum Beispiel kann das Modul vor unbefugten Ănderungen am laufenden Kernel sowie vor Versuchen schĂŒtzen, die Berechtigungen von Benutzerprozessen zu Ă€ndern (Bestimmung der Nutzung von Exploits). Das Modul eignet sich sowohl zur Sicherung gegen bereits bekannte Exploits fĂŒr den Linux-Kernel (z. B. in Situationen, in denen es schwierig ist, den Kernel im System zu aktualisieren) als auch zur Abwehr von Exploits fĂŒr noch unbekannte Schwachstellen. Projektcode unter der GPLv2-Lizenz.
Zu den Neuerungen in der neuen Version gehören:
- Die Positionierung des LKRG-Projekts wurde geĂ€ndert, sodass es nun nicht mehr in separate Subsysteme zur IntegritĂ€tsprĂŒfung und zur Bestimmung der Nutzung von Exploits unterteilt wird, sondern als ein einheitliches Produkt zur Erkennung von Angriffen und verschiedenen VerstöĂen gegen die IntegritĂ€t prĂ€sentiert wird;
- KompatibilitÀt mit Linux-Kernels von 5.3 bis 5.7 wurde gewÀhrleistet, sowie mit Kernen, die mit aggressiven GCC-Optimierungen, ohne die Optionen CONFIG_USB und CONFIG_STACKTRACE oder mit der Option CONFIG_UNWINDER_ORC, sowie mit Kernen, in denen die abfangbaren LKRG-Funktionen fehlen, soweit darauf verzichtet werden kann;
- Bei der Erstellung wird die ĂberprĂŒfung bestimmter erforderlicher Kernel-Einstellungen CONFIG_* sichergestellt, um sinnvolle Fehlermeldungen anstelle von unklaren AbstĂŒrzen zu generieren;
- UnterstĂŒtzung fĂŒr den Wartemodus (ACPI S3, Suspend to RAM) und den Schlafmodus (S4, Suspend to Disk) wurde hinzugefĂŒgt;
- Die UnterstĂŒtzung von DKMS wurde in die Makefile integriert;
- Experimentelle UnterstĂŒtzung fĂŒr 32-Bit-ARM-Plattformen wurde implementiert (getestet auf Raspberry Pi 3 Model B). Die zuvor verfĂŒgbare UnterstĂŒtzung fĂŒr AArch64 (ARM64) wurde um die Sicherstellung der KompatibilitĂ€t mit der Platine Raspberry Pi 4 erweitert;
- Neue Hooks wurden hinzugefĂŒgt, einschlieĂlich des Hooks fĂŒr den Aufruf capable() zur besseren Bestimmung von Exploits, die mit ââ, und nicht mit Prozess-IDs ();
- Eine neue Logik zur Bestimmung von Versuchen, EinschrÀnkungen von NamensrÀumen (z. B. aus Docker-Containern) zu umgehen, wurde vorgeschlagen;
- Auf x86-64-Systemen erfolgt die ĂberprĂŒfung und Anwendung des SMAP-Bits (Supervisor Mode Access Prevention), das den Zugriff auf Daten im Benutzerspeicher aus privilegiertem Code, der im Kernel-Modus ausgefĂŒhrt wird, blockiert. Der Schutz SMEP (Supervisor Mode Execution Prevention) wurde bereits zuvor implementiert;
- WĂ€hrend des Betriebs wird sichergestellt, dass die LKRG-Einstellungen in einem normalerweise nur lesbaren Speicherbereich abgelegt werden;
- Die Ausgabe von Informationen, die fĂŒr Angriffe am nĂŒtzlichsten sein könnten (z. B. Informationen zu Adressen im Kernel), ist auf den Debug-Modus (log_level=4 und höher) beschrĂ€nkt, der standardmĂ€Ăig deaktiviert ist.
- Die Skalierbarkeit der ProzessĂŒberwachungs-Datenbank wurde erhöht â anstelle eines einzelnen RB-Baums, der durch einen Spinlock geschĂŒtzt wird, wird eine Hashtabelle aus 512 RB-BĂ€umen verwendet, die jeweils durch 512 Lese-/Schreiblocks geschĂŒtzt sind;
- Es wurde ein Modus implementiert und standardmĂ€Ăig aktiviert, in dem die IntegritĂ€tsprĂŒfung der Prozessidentifikatoren hĂ€ufig nur fĂŒr die aktuelle Aufgabe und optional fĂŒr aktivierte (aufwachende) Aufgaben durchgefĂŒhrt wird. FĂŒr die anderen Aufgaben, die sich im Ruhezustand befinden oder ohne Zugriff auf die vom LKRG-API bereitgestellte Kernel-API laufen, wird die PrĂŒfung seltener durchgefĂŒhrt.
- Neue sysctl und Modulpunkte wurden hinzugefĂŒgt, um LKRG fein abzustimmen, sowie zwei sysctl zur vereinfachten Konfiguration durch Auswahl aus von den Entwicklern vorbereiteten Feineinstellungen (Profiles);
- Die Standardkonfigurationen wurden geĂ€ndert, um ein ausgewogeneres Gleichgewicht zwischen der Reaktionsschnelligkeit bei der Erkennung von VerstöĂen einerseits und dem Einfluss auf die Leistung sowie dem Risiko von Fehlalarmen andererseits zu erzielen;
- Die systemd-Unit-Datei wurde ĂŒberarbeitet, um das LKRG-Modul in einem frĂŒhen Ladeprozess zu laden (zum Deaktivieren des Moduls kann ein Kernel-Befehlszeilenparameter verwendet werden);
Mit den im neuen Release vorgeschlagenen Optimierungen wird der Leistungsabfall bei der Anwendung von LKRG 0.8 auf 2,5 % im Standardmodus (âheavyâ) und 2 % im leichten Modus (âlightâ) geschĂ€tzt.
In einer kĂŒrzlich durchgefĂŒhrten EffektivitĂ€t von Paketen zur Erkennung von Rootkits durch LKRG Die besten Ergebnisse ohne Fehlalarme lieferten 8 von 9 getesteten Rootkits, die auf Kernel-Ebene arbeiten (es wurden die Rootkits Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit und Sutekh identifiziert, wĂ€hrend Keysniffer, ein Kernel-Modul mit einem Keylogger und kein Rootkit im eigentlichen Sinne, ĂŒbersehen wurde). Zum Vergleich haben die Pakete AIDE, OSSEC und Rootkit Hunter 2 Rootkits von 9 identifiziert, wĂ€hrend Chkrootkit keins gefunden hat. Dabei unterstĂŒtzt LKRG nicht die Erkennung von Rootkits, die im Benutzerspeicher platziert sind, sodass die höchste Effizienz bei der Verwendung der Kombination AIDE und LKRG erzielt wird, was die Identifizierung von 14 von 15 Rootkits aller Typen ermöglicht.
ZusĂ€tzlich kann angemerkt werden, dass der Entwickler des Distributionspakets begonnen fertige Pakete mit DKMS fĂŒr Debian, Whonix, Qubes und Kicksecure bereitstellt, und das Paket fĂŒr bereits auf Version 0.8 aktualisiert wurde. Pakete mit LKRG sind ebenfalls in russischen und .
Die IntegritĂ€tsprĂŒfung in LKRG erfolgt anhand des Vergleichs des aktuellen Codes und der Daten des Kernels sowie der Module, einiger wichtiger Datenstrukturen und CPU-Einstellungen mit den gespeicherten Hashes oder Kopien der entsprechenden Speicherbereiche, Datenstrukturen oder Register. Die PrĂŒfungen werden sowohl regelmĂ€Ăig durch einen Timer als auch beim Auftreten verschiedener Ereignisse aktiviert.
Die Identifizierung möglicher Exploit-Anwendungen und die Blockierung von Angriffen erfolgt in der Phase, bevor der Kernel Zugriff auf die Ressourcen gewĂ€hrt (z. B. vor dem Ăffnen einer Datei), aber nachdem der Prozess unbefugte Berechtigungen erhalten hat (z. B. UID-Wechsel). Bei Erkennung von unbefugtem Verhalten von Prozessen wird standardmĂ€Ăig deren sofortige Beendigung durchgefĂŒhrt, was ausreicht, um viele Exploits zu blockieren.
Quelle: opennet.ru
