Projekt Openwall vydání jádrového modulu (Linux Kernel Runtime Guard), určený k detekci a blokování útoků a porušení integrity jaderných struktur. Například, modul může chránit před neoprávněnými změnami v běžícím jádře a pokusy o změnu oprávnění uživatelských procesů (detekce využití exploitů). Modul je vhodný jak pro ochranu před již známými exploity jader Linux (například v situacích, kdy je v systému problematické aktualizovat jádro), tak pro potírání exploitů pro dosud neznámé zranitelnosti. Kód projektu pod licencí GPLv2.
Mezi změnami v nové verzi:
- Bylo změněno zacílení projektu LKRG, který nyní není rozdělen na jednotlivé subsystémy pro kontrolu integrity a určení využití exploitů, ale je prezentován jako jednotný produkt pro detekci útoků a různých porušení integrity;
- Byla zajištěna kompatibilita s jádry Linux od 5.3 do 5.7, jakož i s jádry sestavenými s agresivními optimalizacemi GCC, bez voleb CONFIG_USB a CONFIG_STACKTRACE nebo s volbou CONFIG_UNWINDER_ORC, a také s jádry, v nichž chybí zachytávané funkce LKRG, pokud se bez nich lze obejít;
- Při sestavení byla zajištěna kontrola některých povinných nastavení jádra CONFIG_* pro tvorbu smysluplných chybových hlášení namísto nejasných selhání;
- Byla přidána podpora režimů spánku (ACPI S3, suspend to RAM) a hibernace (S4, suspend to disk);
- Do Makefile byla přidána podpora DKMS;
- Byla realizována experimentální podpora 32bitových platforem ARM (testováno na Raspberry Pi 3 Model B). Dříve dostupná podpora AArch64 (ARM64) byla doplněna o zajištění kompatibility s deskou Raspberry Pi 4;
- Byly přidány nové hooky, včetně hooku pro volání capable() pro lepší určení exploitů manipulujících s „„, namísto identifikátorů procesů ();
- Byla navržena nová logika pro určení pokusů o opuštění omezení prostorů názvů (například z kontejnerů Docker);
- Na systémech x86-64 byla zajištěna kontrola a uplatnění bitu SMAP (Supervisor Mode Access Prevention), určeného k blokování přístupu k datům ve uživatelském prostoru z privilegovaného kódu prováděného na úrovni jádra. Ochrana SMEP (Supervisor Mode Execution Prevention) byla realizována dříve;
- Během provozu byla zajištěna umístění nastavení LKRG na stránce paměti, která je obvykle dostupná pouze pro čtení;
- Výstup do logů informací, které mohou být nejvíce užitečné pro útoky (například informace o adresách v jádru), je omezen na ladicí režim (log_level=4 a vyšší), který je ve výchozím nastavení vypnutý.
- Zvýšena škálovatelnost databáze sledování procesů — místo jednoho stromu RB, chráněného jednou spinlock, byla zavedena hash tabulka ze 512 stromů RB, chráněných odpovídajících 512 zámky pro čtení a zápis;
- Byl implementován a ve výchozím nastavení zapnut režim, ve kterém se kontrola integrity identifikátorů procesu často provádí pouze pro aktuální úlohu, a také volitelně pro aktivované (probuzené) úlohy. Pro ostatní úlohy, které jsou ve spánkovém stavu nebo běží bez oslovení kontrolovaného LKRG API jádra, se kontrola provádí méně často.
- Byly přidány nové sysctl a parametry modulu pro jemné ladění LKRG, stejně jako dva sysctl pro zjednodušené ladění výběrem z připravených sad jemných nastavení (profily);
- Výchozí nastavení byla změněna pro dosažení vyváženější rovnováhy mezi operativností identifikace porušení a efektivností reakce na jedné straně, a dopadem na výkon a rizikem falešných pozitiv na straně druhé;
- Unit-fáze systemd byla přepracována pro načtení modulu LKRG v rané fázi spuštění (pro vypnutí modulu lze použít parametr příkazové řádky jádra);
S ohledem na navrhované optimalizace v nové verzi je snížení výkonu při použití LKRG 0.8 odhadováno na úrovni 2,5 % v režimu s těžkým zatížením („heavy“) a 2 % v odlehčeném režimu („light“).
V nedávném efektivity balíčků pro odhalení rootkitů LKRG dosáhl nejlepších výsledků, bez falešných pozitivů identifikoval 8 z 9 testovaných rootkitů, které fungovaly na úrovni jádra (byly identifikovány rootkity Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit a Sutekh, ale byl vynechán Keysniffer, což je modul jádra s keyloggerem, nikoli rootkit v přímém smyslu). Pro srovnání, balíčky AIDE, OSSEC a Rootkit Hunter identifikovaly 2 rootkity z 9, zatímco Chkrootkit žádný. LKRG přitom nepodporuje identifikaci rootkitů umístěných v prostoru uživatele, takže nejvyšší efektivity je dosaženo využitím kombinace AIDE a LKRG, které umožnily identifikaci 14 z 15 rootkitů všech typů.
Dále lze poznamenat, že vývojář distribuce začal hotových balíčků s DKMS pro Debian, Whonix, Qubes a Kicksecure, a balíček pro je již aktualizován na verzi 0.8. Balíčky s LKRG jsou také přítomny v ruských a .
Kontrola integrity v LKRG se provádí na základě porovnání aktuálního kódu a dat jádra a modulů, některých důležitých strukturovaných dat a nastavení CPU s uloženými hashi nebo kopií příslušných oblastí paměti, strukturovaných dat nebo registrů. Kontroly jsou aktivovány jak periodicky podle časovače, tak při výskytu různých událostí.
Určení možného použití exploitů a blokování útoků probíhá ve fázi před poskytnutím jádrem přístupu k prostředkům (například před otevřením souboru), ale po získání neoprávněných oprávnění procesem (například změna UID). Při zjištění neoprávněného chování procesů se ve výchozím nastavení provede jejich nucené ukončení, což je dostatečné pro zablokování mnoha exploitů.
Zdroj: opennet.ru
