Projekti Openwall ka publikuar modulin e kernelit LKRG 1.0.0 (Linux Kernel Runtime Guard), i destinuar për verifikimin e integritetit të strukturave të kernelit dhe për identifikimin e përpjekjeve për t'i shfrytëzuar dobësitë në kernel. Kjo është e rëndësishme pasi 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 në kernelin Linux, ashtu edhe për përballimin e eksploiteve që përdorin dobësi ende të panjohura, nëse nuk aplikohen masa speciale për të anashkaluar LKRG. Mbrojtja bazohet në identifikimin e ndryshimeve të paautorizuara në kernelin e punës (verifikimi i integritetit) dhe ndjekjen e ndryshimeve të privilegjeve të proceseve të përdoruesve (identifikimi i aplikimit të eksploiteve).
Verifikimi i integritetit kryhet nĂ« bazĂ« tĂ« krahasimit tĂ« hashing-eve tĂ« llogaritur pĂ«r fushat mĂ« tĂ« rĂ«ndĂ«sishme tĂ« memories dhe strukturave tĂ« dhĂ«nash tĂ« kernelit, siç janĂ« IDT (Tabeli i PĂ«rshkrimit tĂ« NdĂ«rprerjeve), MSR, tabelat e thirrjeve sistme, tĂ« gjitha procedurat dhe funksionet, trajtuesit e ndĂ«rprerjeve, listat e moduleve tĂ« ngarkuara, pĂ«rmbajtja e seksionit â.textâ tĂ« moduleve dhe atributet e proceseve. Procedura e verifikimit aktivizohet periodikisht pĂ«rmes njĂ« timeri ose kur ndodhin ngjarje tĂ« caktuara nĂ« kernel, pĂ«r shembull, gjatĂ« ekzekutimit tĂ« thirrjeve tĂ« sistemit setuid, setreuid, fork, exit, execve dhe do_init_module.
Identifikimi i mundshëm i aplikimit të eksploiteve dhe bllokimi i sulmeve kryhet në fazën para se kernel të japë qasje në burime (për shembull, para hapjes së skedarit), por pas marrjes së privilegjeve të paautorizuara nga procesi (për shembull, ndërrimi i UID). Kur identifikohet një sjellje e paautorizuar e proceseve, ato përfundojnë me forcë, që është e mjaftueshme për të bllokuar shumë eksploite. Shpenzimet nga funksionimi i modulit vlerësohen në 2-2.5%.
Përkrahja e punës në sisteme me arkitekturat x86-64, AArch64 (ARM64), ARM32 dhe x86. Funksionimi i LKRG 1.0.0 është testuar me kernela nga distribucione të ndryshme, duke filluar nga kernel 3.10 nga RHEL/CentOS 7 dhe duke përfunduar me 6.17-rc4 nga repository, ku po përgatitet lëshimi i Fedora 44. Paketat janë në dispozicion për distribucionet ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto dhe OpenBMC. Paketat e ndërtuara për Rocky Linux mund të përdoren në RHEL 8/9 dhe distribucione të nxjerra, si AlmaLinux 8/9, ndërsa paketat për Whonix në Debian dhe Ubuntu.
Ndër ndryshimet në versionin e ri:
- Garantohet përputhshmëria me bërthamat Linux deri në lëshimin 6.17-rc4.
- Duke u përdorur me bërthamat që nga 6.13, është ndalur kapja e thirrjeve të largëta override_creds() dhe revert_creds(), gjë që kufizoi zbardhjen e sulmeve që rishkruajnë treguesin cred. Kufizimet u përpoqën të kompensoheshin me anë të shtimit të kontrolleve për mbivendosjen e treguesit cred në vende të tjera të bërthamës.
- Ndaluar mbikëqyrja e tepruar e kredencialeve për të cilat nuk bëhet kontroll i integritetit. Ky ndryshim lehtësoi reduktimin e bazës së kodit me rreth 1500 rreshta.
- Shtuar mbështetje për mekanizmin e ri në bërthamën Linux 6.10 për krijimin e skedave të përkohshme në FS OverlayFS, duke përdorur opsionin O_TMPFILE (ovl_tmpfile). Kjo mbështetje e specifikuar është e nevojshme për të parandaluar falsifikimet që shfaqen 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 teknologjinë Intel CET (Control-flow Enforcement Technology) për mbrojtjen e kodit ekzekutiv duke përdorur instruksione IBT (indirect branch tracking), si dhe mbrojtje softuerike kCFI (kernel Control Flow Integrity) për të bllokuar shkeljen e rendit normal të ekzekutimit (control flow) si rezultat i shfrytëzimeve që ndryshojnë treguesit e funksioneve të ruajtur në memorie.
- Për lidhjen e shumë handler-ave, është përdorur mekanizmi kprobes në vend të kretprobes, duke e thjeshtuar kodin e vendosjes së hook-ave dhe duke arritur një performancë më të lartë.
- Rivlerësuar puna me bllokimet (lock) e të dhënave në bërthamë, specifike për procesin (per-task shadow data). Duke përjashtuar bllokimet e tepërta, arritëm të rritnim performancën e aksesit në këto të dhëna.
- Shkaktuar gabime që çuan në gjendje garash, probleme me verifikimin e integritetit dhe falsifikime.
- Përmirësuar mbështetja për ndërtimin me Clang.
Burimi: opennet.ru
