Rilascio di LKRG 1.0.0 per la protezione contro l'exploitation delle vulnerabilità nel kernel Linux

Il progetto Openwall ha pubblicato il modulo del kernel LKRG 1.0.0 (Linux Kernel Runtime Guard), progettato per verificare l'integrità delle strutture del kernel e per rilevare tentativi di sfruttare vulnerabilità nel kernel. Si segnala che l'assegnazione del numero di versione 1.0.0 ha segnato il raggiungimento di uno stato maturo per il progetto. Il codice del progetto è distribuito sotto licenza GPLv2.

Il modulo è adatto sia per la protezione dagli attacchimanipolare vulnerabilità già note nel kernel Linux, sia per contrastare exploit che utilizzano vulnerabilità ancora sconosciute, se non vengono adottate misure speciali per eludere LKRG. La protezione si basa sulla rilevazione di modifiche non autorizzate al kernel in esecuzione (verifica dell'integrità) e sul monitoraggio delle modifiche ai privilegi dei processi utente (rilevazione d'uso degli exploit).

La verifica dell'integrità viene eseguita confrontando gli hash calcolati per le aree di memoria e le strutture dati più importanti del kernel, come IDT (Interrupt Descriptor Table), MSR, tabelle delle chiamate di sistema, tutte le procedure e funzioni, gestori di interruzioni, elenchi dei moduli caricati, il contenuto della sezione «.text» dei moduli e gli attributi dei processi. La procedura di verifica viene attivata periodicamente tramite timer o in seguito a eventi specifici nel kernel, ad esempio durante l'esecuzione delle chiamate di sistema setuid, setreuid, fork, exit, execve e do_init_module.

La rilevazione di possibili exploit e il blocco degli attacchi avviene in fase precedente all'accesso alle risorse da parte del kernel (ad esempio, prima di aprire un file), ma dopo che il processo ha ottenuto privilegi non autorizzati (ad esempio, cambio di UID). In caso di comportamento non autorizzato dei processi, viene forzato il loro termine, il che è sufficiente per bloccare molti exploit. I costi operativi del modulo sono stimati tra il 2 e il 2.5%.

Il supporto è garantito per sistemi con architetture x86-64, AArch64 (ARM64), ARM32 e x86. Il funzionamento di LKRG 1.0.0 è stato testato con kernel di diverse distribuzioni, a partire dal kernel 3.10 di RHEL/CentOS 7 fino al 6.17-rc4 del repository in preparazione del rilascio di Fedora 44. I pacchetti sono disponibili per le distribuzioni ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto e OpenBMC. I pacchetti creati per Rocky Linux possono essere utilizzati su RHEL 8/9 e distribuzioni derivate come AlmaLinux 8/9, nonché pacchetti per Whonix su Debian e Ubuntu.

Tra le modifiche nella nuova versione:

  • È garantita la compatibilità con i kernel Linux fino alla versione 6.17-rc4.
  • Con l'uso di kernel a partire dalla versione 6.13 è cessato il monitoraggio delle chiamate remote override_creds() e revert_creds(), il che ha limitato la rilevazione di attacchi che sovrascrivono il puntatore cred. Le limitazioni sono state tentate di compensare attraverso l'aggiunta di controlli di sovrascrittura del puntatore cred in altre parti del kernel.
  • È cessato il monitoraggio eccessivo delle credenziali per le quali non viene eseguita la verifica dell'integrità. Questa modifica ha permesso di ridurre la base di codice di circa 1500 righe.
  • È stato aggiunto il supporto per il meccanismo introdotto nel kernel Linux 6.10 per creare file temporanei nel file system OverlayFS, utilizzando l'opzione O_TMPFILE (ovl_tmpfile). Il supporto fornito è necessario per prevenire falsi positivi che si manifestano durante l'uso di contenitori isolati su sistemi con kernel 6.10-6.12.
  • Per i sistemi x86_64 è stato aggiunto il supporto per la tecnologia Intel CET (Control-flow Enforcement Technology) per proteggere il codice eseguibile utilizzando istruzioni IBT (indirect branch tracking), nonché una protezione software kCFI (kernel Control Flow Integrity) per bloccare le violazioni dell'ordine normale di esecuzione (control flow) a causa di exploit che alterano i puntatori a funzione memorizzati in memoria.
  • Per l'integrazione di molti gestori, invece di kretprobes, è stato utilizzato il meccanismo kprobes, che semplifica il codice di impostazione degli hook e permette di ottenere prestazioni superiori.
  • È stata riprogettata la gestione dei lock (blocchi) dei dati specifici per processo (per-task shadow data). Escludendo i lock non necessari, è stata aumentata la velocità di accesso a tali dati.
  • Sono stati risolti bug che portavano a condizioni di gara, problemi di verifica dell'integrità e falsi positivi.
  • È stato migliorato il supporto per la compilazione utilizzando Clang.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster