Lansare LKRG 1.0.0 pentru protecția împotriva exploatării vulnerabilităților în nucleul Linux

Proiectul Openwall a publicat modulul nucleu LKRG 1.0.0 (Linux Kernel Runtime Guard), destinat verificării integrității structurilor nucleului și identificării încercărilor de exploatare a vulnerabilităților din nucleu. Se notează că atribuirea numărului de versiune 1.0.0 a marcat atingerea unei stări mature a proiectului. Codul proiectului este distribuit sub licența GPLv2.

Modulul este potrivit atât pentru protecția împotriva atacurilor, manipulând deja vulnerabilitățile cunoscute din nucleul Linux, cât și pentru a contracara exploiturile care folosesc vulnerabilități încă necunoscute, dacă nu sunt aplicate măsuri speciale pentru a evita LKRG. Protecția se bazează pe identificarea modificărilor neautorizate în nucleul activ (verificarea integrității) și monitorizarea schimbării privilegiilor proceselor utilizatorului (determinarea aplicării exploiturilor).

Verificarea integrității se efectuează pe baza comparării hash-urilor calculate pentru cele mai importante zone de memorie și structuri de date ale nucleului, cum ar fi IDT (Interrupt Descriptor Table), MSR, tabelele apelurilor de sistem, toate procedurile și funcțiile, gestionarii întreruperilor, listele modulelor încărcate, conținutul secțiunii „.text” a modulelor și atributele proceselor. Procedura de verificare este activată periodic printr-un temporizator sau la apariția anumitor evenimente în nucleu, de exemplu, atunci când se efectuează apeluri de sistem setuid, setreuid, fork, exit, execve și do_init_module.

Determinarea posibilelor aplicații ale exploiturilor și blocarea atacurilor se realizează înainte de a oferi nucleul acces la resurse (de exemplu, înainte de a deschide un fișier), dar după ce procesul a obținut privilegii neautorizate (de exemplu, schimbarea UID). La identificarea comportamentului neautorizat al proceselor, acestea sunt terminate forțat, ceea ce este suficient pentru a bloca multe exploatări. Costurile de funcționare ale modulului sunt estimate între 2-2.5%.

Se susține funcționarea pe sisteme cu arhitecturi x86-64, AArch64 (ARM64), ARM32 și x86. Funcționarea LKRG 1.0.0 a fost testată cu nuclee din diferite distribuții, începând cu nucleul 3.10 din RHEL/CentOS 7 și terminând cu 6.17-rc4 din depozitul care pregătește lansarea Fedora 44. Pachetele sunt disponibile pentru distribuțiile ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto și OpenBMC. Pachetele construite pentru Rocky Linux pot fi utilizate în RHEL 8/9 și distribuții derivate, cum ar fi AlmaLinux 8/9, iar pachetele pentru Whonix în Debian și Ubuntu.

Printre modificările din noua versiune:

  • Compatibilitatea cu nucleele Linux este asigurată până la versiunea 6.17-rc4.
  • În utilizarea cu nucleele începând cu 6.13, interceptarea apelurilor îndepărtate override_creds() și revert_creds() a fost oprită, limitând astfel detectarea atacurilor care suprascriu pointerul cred. Limitările au fost compensate prin adăugarea de verificări asupra pointerului cred în alte locuri ale nucleului.
  • A fost oprită urmărirea excesivă a credentialelor pentru care nu se efectuează verificări de integritate. Această modificare a permis reducerea bazei de cod cu aproximativ 1500 de linii.
  • S-a adăugat suport pentru mecanismul apărut în nucleul Linux 6.10 pentru crearea de fișiere temporare în sistemul de fișiere OverlayFS, folosind opțiunea O_TMPFILE (ovl_tmpfile). Suportul menționat este necesar pentru a preveni alarmele false care apar în utilizarea containerelor izolate pe sisteme cu nucleele 6.10-6.12.
  • Pentru sistemele x86_64 a fost adăugat suport pentru tehnologia Intel CET (Control-flow Enforcement Technology) pentru protecția codului executabil prin utilizarea instrucțiunilor IBT (indirect branch tracking), precum și protecția software kCFI (kernel Control Flow Integrity) pentru a bloca încălcarea ordinii normale de execuție a controlului (control flow) ca urmare a utilizării exploit-urilor care modifică pointerii funcțiilor stocați în memorie.
  • Pentru conectarea multor handleri în loc de kretprobes a fost utilizat mecanismul kprobes, simplificând codul de instalare a hook-urilor și permițând obținerea unei performanțe mai mari.
  • A fost revizuit modul de manipulare a blocajelor (lock) de date în nucleu, specifice pentru proces (per-task shadow data). Prin eliminarea blocajelor inutile, s-a reușit creșterea performanței accesului la aceste date.
  • Au fost corectate erorile care duceau la stări de competiție, probleme de verificare a integrității și alarme false.
  • A fost îmbunătățit suportul pentru compilarea cu Clang.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster