Izdaja modula LKRG 0.8 za zaščito pred izkoriščanjem ranljivosti v jedru Linuxa

Projekt Openwall objavljeno izdaja modula jedra LKRG 0.8 (Linux Kernel Runtime Guard), zasnovan za odkrivanje in blokiranje napadov in kršitev integritete struktur jedra. Modul lahko na primer zaščiti pred nepooblaščenimi spremembami delujočega jedra in poskusi spreminjanja dovoljenj uporabniških procesov (zaznavanje uporabe podvigov). Modul je primeren tako za organizacijo zaščite pred že znanimi izkoriščanji za jedro Linux (na primer v situacijah, ko je jedro v sistemu težko posodobiti), kot za preprečevanje izkoriščanja še neznanih ranljivosti. Koda projekta distributer licenciran pod GPLv2.

Med spremembami v novi različici:

  • Spremenjeno je pozicioniranje projekta LKRG, ki ni več razdeljen na ločene podsisteme za preverjanje integritete in ugotavljanje uporabe exploitov, temveč je predstavljen kot celovit izdelek za prepoznavanje napadov in različnih kršitev integritete;
  • Združljivost je zagotovljena z jedri Linuxa od 5.3 do 5.7, pa tudi z jedri, prevedenimi z agresivnimi optimizacijami GCC, brez možnosti CONFIG_USB in CONFIG_STACKTRACE ali z možnostjo CONFIG_UNWINDER_ORC, pa tudi z jedri, ki nimajo zasvojenih funkcij LKRG, če lahko opustiti;
  • Pri gradnji so nekatere obvezne nastavitve jedra CONFIG_* preverjene, da ustvarijo smiselna sporočila o napakah namesto nejasnih zrušitev;
  • Dodana podpora za način pripravljenosti (ACPI S3, zaustavitev v RAM) in spanje (S4, zaustavitev na disk);
  • Dodana podpora za DKMS v Makefile;
  • Izvedena je bila eksperimentalna podpora za 32-bitne platforme ARM (testirano na Raspberry Pi 3 Model B). Prej razpoložljiva podpora za AArch64 (ARM64) je bila razširjena, da zagotovi združljivost s ploščo Raspberry Pi 4;
  • Dodani so bili novi kavlji, vključno z obdelovalcem klicev capable() za boljše prepoznavanje izkoriščanj, ki manipulirajo z "Zmogljivosti", ne ID-ji procesov (poverilnice);
  • Predlagana je bila nova logika za odkrivanje poskusov izogibanja omejitvam imenskega prostora (na primer iz vsebnikov Docker);
  • V sistemih x86-64 se preveri in uporabi bit SMAP (Supervisor Mode Access Prevention), zasnovan za blokiranje dostopa do podatkov o uporabniškem prostoru iz privilegirane kode, ki se izvaja na ravni jedra. Zaščita SMEP (Supervisor Mode Execution Prevention) je bila že implementirana;
  • Med delovanjem se nastavitve LKRG postavijo na pomnilniško stran, ki je običajno samo za branje;
  • Beleženje informacij, ki so lahko najbolj uporabne za napade (na primer informacije o naslovih v jedru), je omejeno na način odpravljanja napak (log_level=4 in višje), ki je privzeto onemogočen.
  • Povečana je razširljivost podatkovne baze za sledenje procesom - namesto enega drevesa RB, zaščitenega z enim spinlockom, se uporablja zgoščena tabela 512 dreves RB, zaščitenih s 512 bralno-pisalnimi ključavnicami;
  • Implementiran in privzeto omogočen je način, v katerem se celovitost identifikatorjev procesov pogosto preverja le za trenutno nalogo, po želji pa tudi za aktivirane (bujenje) naloge. Za druge naloge, ki so v stanju spanja ali delajo brez dostopa do API-ja jedra, ki ga nadzira LKRG, se preverjanje izvaja manj pogosto.
  • Dodan nov sysctl in parametri modula za natančno nastavitev LKRG ter dva sysctl za poenostavljeno konfiguracijo z izbiro iz naborov nastavitev za natančno nastavitev (profilov), ki so jih pripravili razvijalci;
  • Privzete nastavitve so bile spremenjene, da bi dosegli bolj uravnoteženo ravnotežje med hitrostjo odkrivanja kršitev in učinkovitostjo odziva na eni strani ter vplivom na delovanje in tveganjem lažnih pozitivnih rezultatov na drugi strani;
  • Datoteka enote systemd je bila preoblikovana za nalaganje modula LKRG zgodaj ob zagonu (za onemogočanje modula je mogoče uporabiti možnost ukazne vrstice jedra);

Ob upoštevanju optimizacij, predlaganih v novi izdaji, je zmanjšanje zmogljivosti pri uporabi LKRG 0.8 ocenjeno na 2.5 % v privzetem načinu (»heavy«) in 2 % v lahkem načinu (»light«).

V nedavno organiziranem raziskave učinkovitost paketov za odkrivanje rootkitov LKRG pokazala najboljše rezultate, pri čemer je identificiral 8 od 9 preizkušenih rootkitov, ki delujejo na ravni jedra brez lažnih pozitivnih rezultatov (rootkiti Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit in Sutekh so bili identificirani, vendar Keysniffer, ki je jedro modul, je bil zgrešen s keyloggerjem in ne z rootkitom v dobesednem pomenu). Za primerjavo, paketi AIDE, OSSEC in Rootkit Hunter so zaznali 2 od 9 rootkitov, medtem ko Chkrootkit ni zaznal nobenega. Hkrati LKRG ne podpira zaznavanja rootkitov, ki se nahajajo v uporabniškem prostoru, zato je največja učinkovitost dosežena pri uporabi kombinacije AIDE in LKRG, ki je omogočila identifikacijo 14 od 15 rootkitov vseh vrst.

Poleg tega je mogoče opozoriti, da razvijalec distribucije Whonix začel oblikovanje že pripravljeni paketi z DKMS za Debian, Whonix, Qubes in Kicksecure ter paket za Arch Linux že posodobljen na različico 0.8. Paketi z LKRG so na voljo tudi v ruščini alt linux и AstraLinux.

Preverjanje integritete v LKRG se izvaja s primerjavo dejanske kode in podatkov jedra in modulov, nekaterih pomembnih podatkovnih struktur in nastavitev CPE s shranjenimi zgoščenimi vrednostmi ali kopijami ustreznih pomnilniških področij, podatkovnih struktur ali registrov. Preverjanja se aktivirajo občasno s časovnikom in ob pojavu različnih dogodkov.

Ugotavljanje možne uporabe podvigov in blokiranje napadov se izvaja na stopnji, preden jedro omogoči dostop do virov (na primer pred odpiranjem datoteke), vendar potem, ko je proces prejel nepooblaščena dovoljenja (na primer sprememba UID). Ko je zaznano nepooblaščeno vedenje, se procesi privzeto prisilno prekinejo, kar zadostuje za blokiranje številnih izkoriščanj.

Vir: opennet.ru

Dodaj komentar