![]() |
Rootkit |
![]() |
Definizione e scopo di un rootkit
I rootkit trovano molte analogie con i trojan, tantopiù che i secondi sono una parte integrante dei primi.
Più formalmente, un rootkit è una "raccolta di tool che un intruso installa sulla macchina vittima dopo essersi
guadagnato un accesso non autorizzato alla stessa" [Altunergil].
Lo scopo principale di un rootkit è identico a quello di un trojan, cioè quello di permettere all'intruso (o agli intrusi)
di poter ritornare al sistema compromesso senza essere scoperti.
Rootkit: come è fatto e come agisce
In genere, un rootkit è composto da tre elementi:
I rootkit rimpiazzano gli eseguibili di molti comandi di sistema (ps, who, netstat, ls,
find, ifconfig, login, passwd, ecc.) con le relative versioni trojan, in modo tale da
poter "nascondere" le azioni degli intrusi.
Dato che quasi tutti i rootkit imitano la data di creazione e la dimensione dei file di sistema che rimpiazzano, tenere
traccia unicamente di queste informazioni non è sufficiente a determinare la presenza di un rootkit. Ciò che serve è un
meccanismo che permetta il mantenimento di un database informativo dei file presenti nel sistema.
Il modo migliore di mantenere un tale archivio è quello di calcolare le checksum di
tali file e memorizzarle in un posto sicuro, come un CD-Rom o un qualsiasi altro dispositivo a sola lettura.
Ovviamente questo processo deve essere ripetuto ogni volta che nel sistema vengono installati nuovi file.
Tripwire è un tool che permette di eseguire facilmente questo compito, automatizzando il calcolo dell'impronta digitale lasciata da ogni file presente nel sistema.
La presenza di un network sniffer all'interno di un rootkit permette all'attaccante di
entrare in possesso di password verso altri sistemi e, in generale, di tenere sotto controllo tutto il traffico dei dati in
ingresso e in uscita dal sistema.
Per fare ciò, il rootkit imposta la scheda di rete della macchina colpita nella modalità PROMISCUOUS.
In che modo questa operazione viola la confidenzialità dei dati trasmessi ?
Normalmente, la scheda di rete di un computer presta attenzione esclusivamente al traffico indirizzato ad essa e al
traffico proveniente da un nodo comune durante un broadcast.
I dati contenuti nei pacchetti destinati ad altre macchine vengono semplicemente ignorati.
Se, però, nella scheda di rete viene settata la modalità PROMISCUOUS e la rete è composta da PC connessi
direttamente via cavo o mediante semplici HUB non-switch, allora diventa possibile
"ascoltare" tutti i dati in transito.
Per proteggere il resto della rete da un attacco del genere quando una delle macchine è già stata "infettata" dal
rootkit, è necessario evitare di impiegare le connessioni sopra descritte, ricorrendo ad HUB
switch e ad altre tipologie di rete più sofisticate.
Dato che la prima azione che un amministratore di sistema compie per monitorare le attività "sospette" è quella di controllare i file di log, nei rootkit è molto comune l'inclusione di una utility che ne permetta la modifica. Questi script hanno il compito di "purificare" i vari log di sistema, nascondendo la presenza di un intruso. Alcuni script permettono, addirittura, di bloccare la scrittura dei log e di cancellare tutti quelli presenti nel filesystem, ma questo modo, così drastico, di operare è proprio esclusivamente degli hacker in stile mordi e fuggi. Infatti, il bloccaggio o l'assenza dei file di log rappresenta un palese campanello d'allarme per il system administrator. Invece, se un attaccante intende usare la macchina vittima come "base di lancio" per successive intrusioni, opterà per una modifica oculata dei vari log, in modo tale da non rivelare la sua presenza.
Rootkit avanzati: rootkit LKM
La minaccia più grave che un rootkit può portare alla sicurezza di un sistema è quella causata dai trojan con
tecnologia LKM.
LKM (Loadable Kernel Module) è un meccanismo comodo e veloce per aggiungere "on the fly" nuove funzionalità al
kernel del sistema operativo, senza doverlo ricompilare daccapo ogni volta.
Sebbene i vantaggi derivanti dall'impiego degli LKM siano universalmente riconosciuti (soprattutto nei sistemi operativi
Linux, Solaris e FreeBSD), essi sono soggetti all'abuso da parte di intrusori che intendono usare il meccanismo di
caricamento dei moduli del kernel per scopi maliziosi.
I rootkit LKM non rimpiazzano gli eseguibili di sistema come visto in precedenza, ma ne alterano il funzionamento
attraverso il kernel.
Per esempio, nel sistema operativo Linux, il comando ps raccoglie informazioni circa i processi attivi attingendo,
di solito, dalla directory /proc.
Tale directory è posta sotto il diretto controllo del servizio procfs integrato nel kernel.
Un kernel rootkit può essere in grado di alterare il kernel allo scopo di nascondere determinati processi al controllo
di procfs.
Così facendo, anche utilizzando l'originale comando ps dato in dotazione al sistema, si avranno a disposizione
sempre false informazioni circa lo stato dei processi.
Le soluzioni a questo problema possono essere due:
Il sistema è compromesso ?
Riuscire a capire che il sistema sia stato compromesso è di fondamentale importanza affinchè si possa eliminare un rootkit.
Di solito, il primo segno di compromissione è riscontrabile in piccole anomalie del sistema. Una delle anomalie più semplici
da notare è quella che affligge il comportamento dei comandi essenziali del sistema operativo. Per esempio, la semplice
esecuzione del programma netstat o ps potrebbe terminare inaspettatamente, restituendo un messaggio d'errore.
La spiegazione di questo evento potrebbe essere che l'intruso abbia rimpiazzato tali comandi con versioni scritte ad hoc
per nascondere attività maliziose e compilate con opzioni diverse da quelle usate normalmente dall'utente.
L'altra anomalia che potrebbe fungere da campanello d'allarme è quella di un forte utilizzo della banda di comunicazione, con un
conseguente aumento del traffico gestito dal sistema rispetto al normale. Spesso, questo episodio è causato da intrusi che
usano il sistema per distribuire illecitamente il software protetto da copyright (comunemente conosciuti come "warez").
E' bene ricordare che, in queste condizioni, sarà il system administrator a dover pagare le conseguenze di un'eventuale azione
legale mossa dalle software house interessate.
Regole generali per difendersi
L'unico modo di evitare l'installazione di un rootkit sul proprio sistema è quello di fermarne l'ingresso.
Bisogna ricordare che un rootkit non è progettato per aiutare un intruso ad ottenere un accesso al sistema, bensì è
progettato per far si che un intruso, dopo essersi guadagnato un accesso non autorizzato, possa "lavorare" in silenzio
ed indisturbato.
Per ottenere tale accesso, l'hacker di solito sfrutta alcune delle vulnerabilità note dei servizi installati nel sistema,
oppure tenta di scoprire le password deboli.
Quindi, per evitare problemi, si rivela necessaria l'installazione di un firewall,
di applicare le patch più aggiornate per il software di sistema, e di disabilitare tutti
i servizi non strettamente necessari.
Unendo questi accorgimenti all'impiego di password più "forti" e di protocolli sicuri (SSL,
SSh), si può essere certi che il sistema non verrà mai compromesso... o quasi !
La contradditorietà dell'ultima affermazione è dovuta al fatto che, nonostante l'impegno e le risorse profuse nella difesa
di un sistema, può capitare di "offrire il fianco" a tipologie di attacco non ancora conosciute o a buchi di sicurezza del
software non ancora segnalati da nessuno.