Projekti Openwall ka publikuar modulin e kernelit LKRG 1.0.0 (Linux Kernel Runtime Guard (Kernel Runtime Guard) është projektuar për të verifikuar integritetin e strukturave të kernelit dhe për të zbuluar përpjekjet për të shfrytëzuar dobësitë e kernelit. Lëshimi i versionit 1.0.0 shënon pjekurinë e projektit. Kodi i projektit shpërndahet sipas licencës GPLv2.
Moduli është i përshtatshëm për të dyja mbrojtje nga sulmet, duke manipuluar dobësitë tashmë të njohura në kernel Linux, për të kundërshtuar shfrytëzimet që shfrytëzojnë dobësitë e panjohura më parë, përveç nëse ato përdorin masa të posaçme për të anashkaluar LKRG. Mbrojtja bazohet në zbulimin e ndryshimeve të paautorizuara në bërthamën në funksionim (kontrollimi i integritetit) dhe monitorimin e ndryshimeve në privilegjet e procesit të përdoruesit (zbulimi i shfrytëzimit).
Kontrolli i integritetit kryhet bazuar në krahasimin e hash-eve të llogaritura për zonat më të rëndësishme të memories dhe strukturave të të dhënave të kernelit, siç janë IDT (Tabela e Përshkruesve të Ndërprerjeve), MSR, tabelat e thirrjeve të sistemit, të gjitha procedurat dhe funksionet, trajtuesit e ndërprerjeve, listat e moduleve të ngarkuara, përmbajtja e seksionit ".text" të moduleve dhe atributet e procesit. Procedura e kontrollit aktivizohet periodikisht nga një kohëmatës ose kur ndodhin ngjarje të caktuara në kernel, për shembull, kur ekzekutohen thirrjet e sistemit setuid, setreuid, fork, exit, execve dhe do_init_module.
Identifikimi i shfrytëzimeve të mundshme dhe bllokimi i sulmeve kryhet në fazën përpara se bërthama të japë akses në burime (për shembull, përpara se të hapet një skedar), por pasi procesi të ketë marrë privilegje të paautorizuara (për shembull, ndryshimi i UID-së). Kur zbulohet sjellje e paautorizuar e proceseve, ato ndërpriten me forcë, gjë që është e mjaftueshme për të bllokuar shumë shfrytëzime. Shpenzimet e përgjithshme të modulit vlerësohen në 2-2.5%.
Arkitekturat e mbështetura përfshijnë x86-64, AArch64 (ARM64), ARM32 dhe x86. LKRG 1.0.0 është testuar me bërthama nga shpërndarje të ndryshme, duke filluar me bërthamën 3.10 nga RHEL.CentOS 7 dhe duke përfunduar me 6.17-rc4 nga depoja ku Fedora 44 po përgatitet për publikim. Paketat janë të disponueshme për shpërndarjet ALT. Linux, Hark Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto dhe OpenBMC. Mbledhur për Rocky Linux paketat mund të përdoren në RHEL 8/9 dhe shpërndarje derivate si p.sh. AlmaLinux 8/9, dhe paketa për Whonix në Debian О Ubuntu.
Ndër ndryshimet në versionin e ri:
- Pajtueshmëria me kernelet është e siguruar Linux deri në publikimin e versionit 6.17-rc4.
- Kur përdoret me kernele që nga versioni 6.13, përgjimi i thirrjeve në distancë në override_creds() dhe revert_creds() është ndaluar, gjë që ka kufizuar zbulimin e sulmeve që ripërcaktojnë treguesin cred. Janë bërë përpjekje për të kompensuar kufizimet duke shtuar kontrolle për rishkrimin e treguesit cred diku tjetër në kernel.
- U ndalua gjurmimi i tepërt i kredencialeve që nuk kontrollohen për integritet. Ndryshimi e reduktoi bazën e kodit me afërsisht 1500 rreshta.
- Shtoi mbështetje për atë që shfaqej në kernel Linux Mekanizëm 6.10 për krijimin e skedarëve të përkohshëm në sistemin e skedarëve OverlayFS duke përdorur opsionin O_TMPFILE (ovl_tmpfile). Ky mbështetje është i nevojshëm për të parandaluar pozitivet e rreme që ndodhin kur përdoren kontejnerë të izoluar në sisteme me bërthama 6.10-6.12.
- Për sistemet x86_64, është shtuar mbështetje për Intel CET (Teknologjia e Zbatimit të Fluksit të Kontrollit) për të mbrojtur kodin ekzekutues duke përdorur udhëzime IBT (ndjekje indirekte e degëve), si dhe mbrojtjen e softuerit kCFI (Integriteti i Fluksit të Kontrollit të Kernelit) për të bllokuar shkeljet e urdhrit normal të ekzekutimit (rrjedha e kontrollit) si rezultat i përdorimit të shfrytëzimeve që ndryshojnë treguesit në funksionet e ruajtura në memorie.
- Për të lidhur shumë trajtues, në vend të kretprobes, përdoret mekanizmi kprobes, i cili thjeshton kodin e instalimit të grepit dhe lejon arritjen e performancës më të lartë.
- Trajtimi i bllokimeve të të dhënave specifike për procesin (kyçeve) në bërthamë (të dhëna hije për detyrë) është ripërpunuar. Duke eliminuar bllokimet e panevojshme, ishte e mundur të rritej performanca e aksesimit të të dhënave të tilla.
- U rregulluan gabimet që shkaktonin kushte gare, probleme me kontrollin e integritetit dhe rezultate pozitive të rreme.
- Mbështetje e përmirësuar për ndërtimin duke përdorur Clang.
Burimi: opennet.ru
