Product SiteDocumentation Site

10.4. Evitare i root-kit

10.4.1. Moduli del kernel caricabili (LKM)

I moduli caricabili del kernel sono file che contengono componenti del kernel per espanderne le funzionalità, caricabili in modo dinamico. Il principale vantaggio nel loro impiego sta nella possibilità di aggiungere ulteriori dispositivi, come per una scheda sonora o una Ethernet, senza apportare correzioni al sorgente del kernel e senza ricompilarlo interamente. Però, al momento, i cracker li sfruttano per i loro root-kit (usurpando l'account di root (knark e adore)) per aprire porte all'insaputa dell'amministratore (le cosiddette "back door") nei sistemi GNU/Linux.
Le porte segrete aperte tramite LKM sono più sofisticate e meno rilevabili rispetto ai tradizionali root-kit. Possono nascondere processi, file, cartelle e perfino connessioni, senza modificare il codice sorgente dei binari. Per esempio, un LKM maligno può obbligare il kernel a nascondere processi specifici da procfs, cosicché una copia del binario ps, ritenuta fedele, non fornirebbe, invece, informazioni precise sugli attuali processi in atto nel sistema.

10.4.2. Scoprire i root-kit

Ci sono due approcci per difendere il sistema contro i root-kit a mezzo LKM: la difesa preventiva e quella reattiva. Il lavoro di ricerca può essere semplice e indolore, o difficile e faticoso, a seconda dell'approccio.

10.4.2.1. Difesa preventiva

Il vantaggio di questo tipo di difesa è che in primo luogo previene danni al sistema. Una siffatta strategia consiste nel motto arrivateci per primi, cioè, caricare un LKM atto a proteggere il sistema da altri LKM malevoli. Una seconda strategia è quella di rimuovere completamente la possibilità che il kernel possa caricare dei moduli. Notate, comunque, che esistono rootkit che potrebbero funzionare anche in questo caso, ce ne sono alcuni che manomettono direttamente /dev/kmem (la memoria del kernel) per non essere scoperti.
Debian GNU/Linux ha alcuni pacchetti che possono essere utilizzati per realizzare una difesa preventiva:
lcap - A user friendly interface to remove capabilities (kernel-based access control) in the kernel, making the system more secure. For example, executing lcap CAP_SYS_MODULE[65] will remove module loading capabilities (even for the root user).[66] There is some (old) information on capabilities at Jon Corbet's http://lwn.net/1999/1202/kernel.php3 section on LWN (dated December 1999).
Se non avete affatto bisogno di molte delle caratteristiche del kernel sul vostro sistema GNU/Linux, potete disabilitare il supporto ai moduli caricabili durante la fase di configurazione del kernel stesso. Per disabilitare questo supporto, impostate CONFIG_MODULES=n durante la fase di configurazione per la compilazione del vostro kernel, oppure nel file .config. Questo annullerà i tentativi dei root-kit LKM, ma perderete questa potente caratteristica del kernel Linux. Inoltre, disabilitare il supporto per i moduli caricabili a volte potrebbe appesantire troppo il kernel, rendendo il supporto ai moduli indispensabile.

10.4.2.2. Difesa reattiva

Il vantaggio di una difesa reattiva è che non sovraccarica le risorse del sistema. Funziona confrontando la tabella delle chiamate di sistema con una copia sicura in un file del disco, System.map. Ovviamente, una difesa reattiva si limiterà ad avvisare l'amministratore di sistema dopo che il sistema è già stato compromesso.
Detection of some root-kits in Debian can be accomplished with the chkrootkit package. The http://www.chkrootkit.org program checks for signs of several known root-kits on the target system, but is not a definitive test.


[65] There are over 28 capabilities including: CAP_BSET, CAP_CHOWN, CAP_FOWNER, CAP_FSETID, CAP_FS_MASK, CAP_FULL_SET, CAP_INIT_EFF_SET, CAP_INIT_INH_SET, CAP_IPC_LOCK, CAP_IPC_OWNER, CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE, CAP_MKNOD, CAP_NET_ADMIN, CAP_NET_BIND_SERVICE, CAP_NET_RAW, CAP_SETGID, CAP_SETPCAP, CAP_SETUID, CAP_SYS_ADMIN, CAP_SYS_BOOT, CAP_SYS_CHROOT, CAP_SYS_MODULE, CAP_SYS_NICE, CAP_SYS_PACCT, CAP_SYS_PTRACE, CAP_SYS_RAWIO, CAP_SYS_RESOURCE, CAP_SYS_TIME, and CAP_SYS_TTY_CONFIG. All of them can be de-activated to harden your kernel.
[66] You don't need to install lcap to do this, but it's easier than setting /proc/sys/kernel/cap-bound by hand.