Izdanje LKRG 0.8 modula za zaštitu od iskorištavanja ranjivosti u Linux kernelu
Projekt Openwall objavljen izdanje kernel modula LKRG 0.8 (Linux Kernel Runtime Guard), dizajniran za otkrivanje i blokiranje napada i kršenja integriteta struktura jezgre. Na primjer, modul može zaštititi od neovlaštenih promjena pokrenute jezgre i pokušaja promjene dopuštenja korisničkih procesa (otkrivanje korištenja exploita). Modul je prikladan kako za organiziranje zaštite od već poznatih exploita za Linux kernel (na primjer, u situacijama kada je teško ažurirati kernel u sustavu), tako i za suzbijanje exploita za još nepoznate ranjivosti. Šifra projekta distribuira licenciran pod GPLv2.
Među promjenama u novoj verziji:
Promijenjeno je pozicioniranje LKRG projekta koji više nije podijeljen na zasebne podsustave za provjeru integriteta i utvrđivanje korištenja exploita, već je predstavljen kao cjelovit proizvod za identifikaciju napada i raznih povreda integriteta;
Kompatibilnost je osigurana s Linux kernelima od 5.3 do 5.7, kao i s kernelima kompajliranim s agresivnim GCC optimizacijama, bez opcija CONFIG_USB i CONFIG_STACKTRACE ili s opcijom CONFIG_UNWINDER_ORC, kao i s kernelima koji nemaju LKRG zakačene funkcije, ako mogu biti bez;
Prilikom izgradnje, provjeravaju se neke obavezne CONFIG_* postavke kernela kako bi se generirale smislene poruke o pogrešci umjesto nejasnih rušenja;
Dodana podrška za način mirovanja (ACPI S3, suspendiranje na RAM) i mirovanje (S4, suspendiranje na disk);
Dodana DKMS podrška Makefileu;
Implementirana je eksperimentalna podrška za 32-bitne ARM platforme (testirano na Raspberry Pi 3 Model B). Prethodno dostupna podrška za AArch64 (ARM64) proširena je kako bi pružila kompatibilnost s pločom Raspberry Pi 4;
Dodane su nove kuke, uključujući rukovatelj pozivom capable() za bolje prepoznavanje iskorištavanja koja manipuliraju "sposobnosti", a ne ID-ovi procesa (akreditiv);
Predložena je nova logika za otkrivanje pokušaja izbjegavanja ograničenja imenskog prostora (na primjer, iz Docker spremnika);
Na x86-64 sustavima provjerava se i primjenjuje bit SMAP (Supervisor Mode Access Prevention), dizajniran za blokiranje pristupa podacima o korisničkom prostoru iz povlaštenog koda koji se izvodi na razini kernela. SMEP (Supervisor Mode Execution Prevention) zaštita je implementirana ranije;
Tijekom rada, LKRG postavke se smještaju na memorijsku stranicu koja je obično samo za čitanje;
Zapisivanje informacija koje mogu biti najkorisnije za napade (na primjer, informacije o adresama u jezgri) ograničeno je na način otklanjanja pogrešaka (log_level=4 i viši), koji je prema zadanim postavkama onemogućen.
Povećana je skalabilnost baze podataka za praćenje procesa - umjesto jednog RB stabla zaštićenog jednim spinlock-om, koristi se hash tablica od 512 RB stabala zaštićenih s 512 read-write brava;
Implementiran je i omogućen prema zadanim postavkama način rada u kojem se integritet identifikatora procesa često provjerava samo za trenutni zadatak, a također opcionalno za aktivirane (buđenje) zadatke. Za druge zadatke koji su u stanju mirovanja ili rade bez pristupa API-ju kernela kojim upravlja LKRG, provjera se izvodi rjeđe.
Dodani su novi sysctl i parametri modula za fino podešavanje LKRG-a, kao i dva sysctl za pojednostavljenu konfiguraciju odabirom iz skupova finih podešavanja (profila) koje su pripremili programeri;
Zadane postavke su promijenjene kako bi se postigla uravnoteženija ravnoteža između brzine otkrivanja kršenja i učinkovitosti odgovora, s jedne strane, i utjecaja na performanse i rizika od lažno pozitivnih rezultata, s druge strane;
Datoteka jedinice systemd redizajnirana je za učitavanje LKRG modula rano u pokretanju (može se koristiti opcija naredbenog retka jezgre za onemogućavanje modula);
Uzimajući u obzir optimizacije predložene u novom izdanju, smanjenje performansi pri korištenju LKRG 0.8 procjenjuje se na 2.5% u zadanom načinu rada ("teški") i 2% u laganom načinu rada ("lagani").
U nedavno održanoj studija učinkovitost paketa za otkrivanje rootkita LKRG pokazala najbolje rezultate, identificirajući 8 od 9 testiranih rootkitova koji rade na razini kernela bez lažno pozitivnih rezultata (rootkitovi Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit i Sutekh su identificirani, ali Keysniffer, koji je kernel modul, promašen je s keyloggerom, a ne rootkitom u doslovnom smislu). Usporedbe radi, paketi AIDE, OSSEC i Rootkit Hunter otkrili su 2 od 9 rootkita, dok Chkrootkit nije otkrio nijedan. Istodobno, LKRG ne podržava detekciju rootkita koji se nalaze u korisničkom prostoru, pa se najveća učinkovitost postiže kombinacijom AIDE i LKRG, što je omogućilo identifikaciju 14 od 15 rootkita svih vrsta.
Dodatno, može se primijetiti da je programer distribucije Whonix počeo formacija gotovi paketi s DKMS-om za Debian, Whonix, Qubes i Kicksecure te paket za Arch Linux već ažuriran na verziju 0.8. Paketi s LKRG-om dostupni su i na ruskom jeziku alt linux и AstraLinux.
Provjera integriteta u LKRG-u provodi se usporedbom stvarnog koda i podataka kernela i modula, nekih važnih podatkovnih struktura i CPU postavki s pohranjenim hashovima ili kopijama odgovarajućih memorijskih područja, podatkovnih struktura ili registara. Provjere se aktiviraju i povremeno pomoću mjerača vremena i nakon pojave različitih događaja.
Utvrđivanje moguće upotrebe exploita i blokiranje napada provodi se u fazi prije nego što kernel omogući pristup resursima (na primjer, prije otvaranja datoteke), ali nakon što je proces dobio neovlaštena dopuštenja (na primjer, promjena UID-a). Kada se otkrije neovlašteno ponašanje, procesi su prisiljeni prekinuti prema zadanim postavkama, što je dovoljno za blokiranje mnogih eksploatacija.