Vydání modulu LKRG 0.8 pro ochranu před zneužitím zranitelností v jádře Linuxu

Projekt Openwall zveřejněna vydání modulu jádra LKRG 0.8 (Linux Kernel Runtime Guard), určený k detekci a blokování útoků a narušení integrity struktur jádra. Modul může například chránit před neoprávněnými změnami běžícího jádra a pokusy o změnu oprávnění uživatelských procesů (detekce použití exploitů). Modul je vhodný jak pro organizaci ochrany před již známými exploity pro jádro Linuxu (například v situacích, kdy je obtížné aktualizovat jádro v systému), tak pro boj proti exploitům pro dosud neznámé zranitelnosti. Kód projektu distribuovány pod licencí GPLv2.

Mezi změny v nové verzi:

  • Změnilo se umístění projektu LKRG, který již není rozdělen na samostatné subsystémy pro kontrolu integrity a určování použití exploitů, ale je prezentován jako kompletní produkt pro identifikaci útoků a různých porušení integrity;
  • Kompatibilita je zajištěna s linuxovými jádry od 5.3 do 5.7, stejně jako s jádry kompilovanými s agresivními optimalizacemi GCC, bez možností CONFIG_USB a CONFIG_STACKTRACE nebo s možností CONFIG_UNWINDER_ORC, stejně jako s jádry, která nemají LKRG připojené funkce, pokud mohou obejít se bez;
  • Při sestavování se kontrolují některá povinná nastavení jádra CONFIG_*, aby se namísto nejasných pádů generovaly smysluplné chybové zprávy;
  • Přidána podpora pohotovostního režimu (ACPI S3, uspání na RAM) a spánku (S4, uspání na disk);
  • Přidána podpora DKMS do Makefile;
  • Byla implementována experimentální podpora pro 32bitové platformy ARM (testováno na Raspberry Pi 3 Model B). Dříve dostupná podpora AArch64 (ARM64) byla rozšířena o zajištění kompatibility s deskou Raspberry Pi 4;
  • Byly přidány nové háčky, včetně schopného obsluhy volání () pro lepší identifikaci exploitů, které manipulují "schopnosti“, nezpracovat ID (pověření);
  • Byla navržena nová logika pro detekci pokusů uniknout omezením jmenného prostoru (například z kontejnerů Docker);
  • Na systémech x86-64 se kontroluje a aplikuje bit SMAP (Supervisor Mode Access Prevention), který je navržen tak, aby blokoval přístup k datům uživatelského prostoru z privilegovaného kódu spuštěného na úrovni jádra. Ochrana SMEP (Supervisor Mode Execution Prevention) byla implementována dříve;
  • Během provozu jsou nastavení LKRG umístěna na paměťovou stránku, která je obvykle pouze pro čtení;
  • Protokolování informací, které mohou být nejužitečnější pro útoky (například informace o adresách v jádře), je omezeno na režim ladění (log_level=4 a vyšší), který je ve výchozím nastavení zakázán.
  • Byla zvýšena škálovatelnost databáze sledování procesů – místo jednoho RB stromu chráněného jedním spinlockem je použita hashovací tabulka 512 RB stromů chráněných 512 zámky pro čtení a zápis;
  • Ve výchozím nastavení je implementován a povolen režim, ve kterém se integrita identifikátorů procesů často kontroluje pouze u aktuální úlohy a volitelně také u aktivovaných (probouzecích) úloh. U ostatních úloh, které jsou ve stavu spánku nebo pracují bez přístupu k rozhraní API jádra řízenému LKRG, se kontrola provádí méně často.
  • Přidány nové parametry sysctl a modulu pro jemné doladění LKRG a také dva sysctl pro zjednodušenou konfiguraci výběrem ze sad nastavení (profilů) jemného doladění připravených vývojáři;
  • Výchozí nastavení byla změněna, aby bylo dosaženo vyváženější rovnováhy mezi rychlostí detekce porušení a účinností reakce na jedné straně a dopadem na výkon a rizikem falešných poplachů na straně druhé;
  • Soubor systemd unit byl přepracován tak, aby načítal modul LKRG brzy při bootování (k deaktivaci modulu lze použít volbu příkazového řádku jádra);

S přihlédnutím k optimalizacím navrženým v nové verzi se snížení výkonu při použití LKRG 0.8 odhaduje na 2.5 % ve výchozím režimu („těžký“) a 2 % v lehkém režimu („lehký“).

V nedávno konaném výzkum účinnost balíčků pro detekci rootkitů LKRG ukázáno nejlepší výsledky, identifikující 8 z 9 testovaných rootkitů pracujících na úrovni jádra bez falešně pozitivních výsledků (byly identifikovány rootkity Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit a Sutekh, ale Keysniffer, což je kernel modul, byl vynechán s keyloggerem, nikoli rootkit v doslovném smyslu). Pro srovnání, balíčky AIDE, OSSEC a Rootkit Hunter detekovaly 2 z 9 rootkitů, zatímco Chkrootkit nezjistil žádný. LKRG zároveň nepodporuje detekci rootkitů umístěných v uživatelském prostoru, takže největší efektivity je dosaženo při použití kombinace AIDE a LKRG, která umožnila identifikovat 14 z 15 rootkitů všech typů.

Kromě toho lze poznamenat, že vývojář distribuce Whonix začal tvarování hotové balíčky s DKMS pro Debian, Whonix, Qubes a Kicksecure a balíček pro Arch Linux již aktualizován na verzi 0.8. Balíčky s LKRG jsou k dispozici také v ruštině alt linux и AstraLinux.

Kontrola integrity v LKRG se provádí porovnáním skutečného kódu a dat jádra a modulů, některých důležitých datových struktur a nastavení CPU s uloženými hashemi nebo kopiemi odpovídajících paměťových oblastí, datových struktur nebo registrů. Kontroly jsou aktivovány jak periodicky časovačem, tak při výskytu různých událostí.

Určení možného použití exploitů a blokování útoků se provádí ve fázi předtím, než jádro poskytne přístup ke zdrojům (například před otevřením souboru), ale poté, co proces získal neoprávněná oprávnění (například změna UID). Když je zjištěno neoprávněné chování, procesy jsou ve výchozím nastavení nuceny ukončit, což je dostatečné k zablokování mnoha exploitů.

Zdroj: opennet.ru

Přidat komentář