Projekti Openwall publikoi modulin e kernelit LKRG 1.0.0 (Linux Kernel Runtime Guard), i dedikuar për kontrollin e integritetit të strukturave të kernelit dhe identifikimin e përpjekjeve për shfrytëzimin e dobësive në kernel. Vërehet se caktimi i numrit të versionit 1.0.0 shënon arritjen e një gjendjeje të pjekur për projektin. Kodi i projektit shpërndahet nën licencën GPLv2.
Moduli është i përshtatshëm si për mbrojtjen nga sulmet, manipulimin e dobësive të njohura tashmë në kernelin Linux, ashtu edhe për të kundërshtuar eksploitat që përdorin dobësi ende të panjohura, nëse nuk aplikohen masa speciale për të kaluar LKRG. Mbrojtja bazohet në identifikimin e ndryshimeve të paautorizuara në kernelin e punës (kontrolli i integritetit) dhe ndjekjen e ndryshimeve të autorizimeve të proceseve të përdoruesit (identifikimi i përdorimit të eksploitateve).
Kontrolli i integritetit kryhet në bazë të krahasimit të hash-eve të llogaritura për zonat më të rëndësishme të memories dhe strukturave të të dhënave të kernelit, si IDT (Tabela e Pëshkrimit të Ndërprerjeve), MSR, tabelat e thirrjeve sistemore, të gjitha procedurat dhe funksionet, përpunuesit e ndërprerjeve, listat e moduleve të ngarkuara, përmbajtja e seksionit ".text" të moduleve dhe atributet e proceseve. Procedura e kontrollit aktivizohet periodikisht nga një timer ose kur ndodhin ngjarje të caktuara në kernel, për shembull, gjatë ekzekutimit të thirrjeve sistemore setuid, setreuid, fork, exit, execve dhe do_init_module.
Identifikimi i mundshëm i përdorimit të eksploitateve dhe bllokimi i sulmeve ndodh në fazën para se kernel të ofrojë akses në burime (për shembull, para se të hapë një skedare), por pas marrjes së autorizimeve të paautorizuara nga procesi (për shembull, ndërrimi i UID). Kur identifikohet një sjellje e paautorizuar e proceseve, ato mbyllen me forcë, gjë që është e mjaftueshme për të bllokuar shumë eksploita. Ngarkesat nga funksionimi i modulit përcaktohen të jenë 2-2.5%.
Përkrahja e funksionimit në sisteme me arkitekturë x86-64, AArch64 (ARM64), ARM32 dhe x86. Funksionimi i LKRG 1.0.0 është testuar me kernel nga distribucione të ndryshme, duke filluar nga kernel 3.10 nga RHEL/CentOS 7 dhe duke përfunduar me 6.17-rc4 nga repository në të cilin po përgatitet lëshimi i Fedora 44. Paketat janë të disponueshme për distribucione si ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto dhe OpenBMC. Paketat e grumbulluara për Rocky Linux mund të përdoren në RHEL 8/9 dhe distribucione të deriva, si AlmaLinux 8/9, ndërsa paketat për Whonix në Debian dhe Ubuntu.
Ndër ndryshimet në versionin e ri:
- Sigurohet përputhshmëri me kernelat e Linux deri në lëshimin 6.17-rc4.
- Me përdorimin e kernelëve që fillojnë nga 6.13, është ndalur kapja e thirrjeve të largëta override_creds() dhe revert_creds(), gjë që ka kufizuar identifikimin e sulmeve që ri-marrin treguesin cred. Kufizimet u përpoqën të kompensoheshin duke shtuar kontroll të ri-ndërprerjes së treguesit cred në vende të tjera të kernelit.
- ĂshtĂ« ndaluar ndjekja e tepĂ«rt e kredencialeve pĂ«r tĂ« cilat nuk kryhet kontrolli i integritetit. Ndryshimi lejoi tkurrjen e bazĂ«s sĂ« kodit me rreth 1500 rreshta.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r mekanizmin e ri tĂ« krijimit tĂ« skedarĂ«ve tĂ« pĂ«rkohshĂ«m nĂ« FS OverlayFS nĂ« kernelin Linux 6.10, duke pĂ«rdorur opsionin O_TMPFILE (ovl_tmpfile). Kjo mbĂ«shtetje Ă«shtĂ« e nevojshme pĂ«r tĂ« parandaluar alarmin e rremĂ« qĂ« shfaqet gjatĂ« pĂ«rdorimit tĂ« kontejnerĂ«ve tĂ« izoluar nĂ« sisteme me kernel 6.10-6.12.
- Për sistemet x86_64 është shtuar mbështetje për teknologjinë Intel CET (Control-flow Enforcement Technology) për mbrojtjen e kodit ekzekutiv duke përdorur instruksionet IBT (ndërprerja e degëve indirekte), si dhe mbrojtjen programore kCFI (kernel Control Flow Integrity) për bllokimin e shkeljes së rendit normal të ekzekutimit (control flow) si rezultat i përdorimit të eksploitateve që ndryshojnë treguesit e funksioneve të ruajtur në memorie.
- Për të lidhur shumë trajtues, është përdorur mekanizmi kprobes në vend të kretprobes, duke e thjeshtuar kodin e vendosjes së hook-ëve dhe duke lejuar arritjen e performancës më të lartë.
- Puna me bllokimet (lock) e të dhënave në kernel që janë specifike për procesin (per-task shadow data) është përmirësuar. Duke përjashtuar bllokimet e panevojshme, është arritur një rritje e performancës në trajtimin e këtyre të dhënave.
- Janë përmirësuar problemet që çonin në gjendje garuese, probleme me kontrollin e integritetit dhe alarmin e rremë.
- ĂshtĂ« pĂ«rmirĂ«suar mbĂ«shtetja pĂ«r grumbullimin me pĂ«rdorimin e Clang.
Burimi: opennet.ru
