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.

Izvor: opennet.ru

Dodajte komentar