Nell'articolo dedicato all'introduzione agli Intrusion Detection System (IDS) ci eravamo lasciati con il proposito di parlare degli IDS basati su regole. Come promesso eccoci qua ad analizzare e provare i due IDS più famosi ed usati in ambito Open Source: Snort e Ossec
SNORT, il re degli IDS liberi
SNORT è un Network based IDS real-time, leggero, con risposta passiva alle intrusioni e con un'elevata accuratezza nel rilevamento delle intrusioni. Questo IDS ha caratteristiche real-time, in quanto è in continuo ascolto sul segmento di rete a cui è stato assegnato ed è in grado di contattare l'amministratore di sistema attraverso molteplici meccanismi come Syslog. La leggerezza di SNORT dipende da due fattori:
- L'efficienza nella scansione dei pacchetti, dal momento che usa poche risorse di sistema;
- Le dimensioni dei sorgenti del NIDS.
La semplicità del tool e la sua struttura modulare hanno fatto in modo che non dovesse mai essere reimplementato o modificato per poter identificare nuove tipologie di attacco. Inoltre, la linearità di scrittura delle regole ed il basso livello di rete in cui opera lo rendono uno strumento particolarmente duttile, anche come tool di analisi per attacchi sconosciuti.
SNORT può esaminare i protocolli più diffusi, può individuare una varietà di attacchi e di probes, così come buffer overflow, port scanning, attacchi CGI e probes SMB. Guardando i file di log si riesce a determinare a quale tipo di attacco si è stati soggetti. Ricordate, un uso efficace di meccanismi di logging è fondamentale per la sicurezza del vostro sistema, con o senza IDS.
Altra caratteristica importante di questo NIDS è la portabilità; i sistemi operativi su cui si può installare SNORT sono: Linux, OpenBSD, FreeBSD, NetBSD, Solaris, SunOS 4.1.X, HP-UX, AIX, IRIX, Tru64 (tutti sistemi Unix like), MacOS (su sistemi Macintosh), Win32 (Win9x/NT/XP e 2000). Una volta installato SNORT, si possono scaricare ed installare gratuitamente i file di regole aggiornati regolarmente.
Questi file comprendono tutte le regole per riconoscere una serie di attacchi già noti, ma nessuno vieta di crearvi un proprio file di regole se avete esigenze specifiche. Ultima particolarità, non marginale, di questo IDS è il suo rilascio sotto licenza GNU/GPL, che ha permesso, e permette, ad un nutrito gruppo di sviluppatori di contribuire al suo perfezionamento.
Le regole di SNORT
Una regola è una precisa sequenza di istruzioni che permette di istruire l'IDS, consentendogli così di riconoscere attacchi ed anomalie nella rete. Ogni regola è scritta in un'unica riga, infatti, il parser (cioè il componente che interpreta le regole) di SNORT non è in grado di riconoscere le regole scritte su più righe. Ogni regola è composta da due sezioni distinte:
- Header (intestazione);
- Options (opzioni).
La prima sezione comprende le azioni delle regole: protocollo, indirizzo IP (di origine e di destinazione) e le informazioni relative alle porte. La seconda sezione, options, contiene invece i messaggi di alert e le informazioni su quali parti dei pacchetti devono essere analizzate per determinare se le regole di azione devono essere eseguite. Esempio di una tipica regola per SNORT è il seguente:
alert tcp any any -> 192.168.61.190/23 (content: "Last login"; msg: "Attenzione: tentativo di connessione via telnet alla macchina!";)
questa regola indica a SNORT di mostrare un messaggio di avvertimento se viene individuato del traffico TCP, proveniente da qualsiasi porta e da qualsiasi IP, che tenti di stabilire una connessione sulla porta 23 all'indirizzo 192.168.61.190. Non è scopo di questo articolo analizzare dettagliatamente la sintassi delle regole di SNORT, ma da questo piccolo esempio si può comprendere la facilità e la flessibilità usata nella creazione delle regole. La genialità di SNORT, quindi, sta proprio nella semplicità della sintassi delle regole; in pochi secondi potete creare regole ad hoc e renderle operative, senza spendere un solo euro.
Modalità operative di SNORT
SNORT è un programma dalla mille risorse, non funziona solo ed esclusivamente come NIDS, può operare in tre diverse modalità:
- SNORT come IDS: SNORT può essere posizionato tra il firewall, che controlla una rete, e la linea Internet non sicura, analizzando in questo modo sia il traffico diretto al firewall, sia il traffico nella rete controllata. Il piccolo sistema di firme, di cui è dotato, offre un tool di alerting per gli amministratori quando vengono individuate delle attività sospette;
- SNORT come packet sniffer: il programma è capace di ispezionare il carico dei pacchetti sulla rete, decodificando il livello di applicazione di un pacchetto e catalogando il traffico basato su un determinato contenuto di dati;
- SNORT come packet logger: SNORT può anche effettuare il log dei pacchetti, da linea di comando, indirizzati ad una specifica macchina inviando direttamente alert a video. Uno dei più grandi vantaggi è che SNORT effettua il logging in formato leggibile.
Installazione di SNORT
Passiamo adesso all'installazione di SNORT. Scaricate l'archivio compresso, dell'ultima versione di SNORT, dal sito del progetto; al momento della stesura dell'articolo è la 2.6.1.5. Assumete l'identità di root e decomprime il pacchetto usando i comandi gzip
e tar
da linea di comando:
# gzip -d -c snort-2.6.1.5.tar.gz | tar xf -
successivamente, spostatevi nella directory appena creata dalla decompressione del pacchetto:
# cd snort-2.6
ed avviate il comando configure
con:
# ./configure
L'operazione eseguita dall'utility configure
sarà quella di determinare tutte le caratteristiche e gli attributi del vostro sistema per generare un appropriato Makefile. Una volta terminata la configurazione bisogna compilare i file partendo dalle informazioni raccolte precedentemente con il comando configure
; per far questo digitiamo il comando:
# make
infine, per installare i file binari e le guide del programma eseguiamo:
# make install
Tutto qui, come avete visto non c'è nulla di difficile nell'installazione di SNORT. Un ultimo consiglio, anche se lo spazio occupato dall'eseguibile è di pochi bytes, è preferibile installare SNORT su una macchina ad esso dedicata, con nessun altro servizio attivo.
Uso di SNORT
SNORT non è difficile da usare, tuttavia l'uso non è sempre tanto immediato. Il tutto sta nello scegliere, in maniera appropriata, quali parametri dare in input a SNORT per renderlo efficiente.
Leggendo la guida del NIDS potrete conoscere le tantissime opzioni offerte dal programma (figura 1), ma per comodità riporto un breve elenco delle opzioni più importanti ed usate:
- -A alert-mode effettua un alert usando uno specifico alert-mode (fast, full, none, unsock). Fast scrive gli alert sul file di alert di default in una singola linea; full scrive gli alert sul file di alert decodificando completamente l'header; none disabilita gli alert; unsock è una modalità che manda gli alert su socket UNIX;
- -a mostra i pacchetti arp quando vengono decodificati;
- -b effettua il log dei pacchetti in formato tcpdump;
- -c "rules-file" usa il file di regole nel percorso indicato in rules-file;
- -C stampa solamente i caratteri del payload del pacchetto;
- -d visualizza il livello applicazione dei dati quando mostra i pacchetti;
- -D esegue SNORT in daemon mode (cioè come demone);
- -e visualizza l'header dei pacchetti ethernet;
- -h "home-net" setta la "home network" al valore home-net. Il formato di questo indirizzo è un prefisso di rete più un blocco cidr, come ad es: 192.168.2.0/24;
- -i "interface" mette in ascolto SNORT sull'interfaccia specificata;
- -l "log-dir" indirizza i log di SNORT in una directory specifica. Per default è impostato il valore /var/log/snort;
- -n "packet-count" processa solo un numero di pacchetti pari al valore packet-count ed esce;
- -N smette di loggare i pacchetti. Il programma continua normalmente a generare gli alert;
- -o cambia l'ordine in cui le regole sono applicate ai pacchetti. Invece dell'ordine d'inizio applicato nello standard Alert-> Pass-> Log, le regole verranno applicate nell'ordine Pass-> Alert -> Log;
- -p termina la modalità promiscua di sniffing;
- -q non visualizza i messaggi e le informazioni di inizializzazione;
- -r "tcpdump-file" mostra il file tcpdump-file formattato;
- -s manda messaggi di alert al Syslog;
- -S "n=v" setta la variabile "n" al valore "v". Utile per settare il valore di una variabile definita nel file di regole di SNORT con un valore specificato nella linea di comando;
- -v stampa i pacchetti;
- -V mostra la versione dell'applicazione ed esce.
SNORT come IDS
Abbiamo parlato di SNORT e visto come installarlo in una Linux box. Ora mettiamoci all'opera.
Per prima cosa (figura 2) avviamo SNORT con le opzioni:
# snort -i -lo -v -d -l log -c /etc/snort.conf
Ora SNORT è attivo e pronto. Dopo aver creato la nostra regola testiamone l'efficienza. Proviamo ad accedere alla macchina, indicata nella nostra regola, usando telnet. Dalla console aperta potrete visualizzare sia il rilevamento dei pacchetti, sia i risultati. In questa occasione abbiamo usato SNORT come IDS passandogli (con l'opzione -c
), da linea di comando, il file contenente le regole.
Considerazioni su SNORT
I vantaggi di SNORT sono tanti. Ha una struttura modulare, richiede poco tempo per l'installazione, se ci sono nuovi attacchi l'amministratore può facilmente sviluppare nuove regole per rilevarli ed è estendibile usando i plug-in. Gli svantaggi di SNORT, ovviamente, sono quelli comuni agli IDS basati sul pattern matching. Se volete usare una GUI, per lavorare più agevolmente con SNORT, potete installare SGUIL. Sebbene ancora giovane come progetto questo frontend è davvero molto promettente.
Nella prossima parte ci occuperemo di Ossec, un altro IDS open source.
Nella prima parte di questo articolo abbiamo introdotto e configurato Snort, il più noto IDS open source. Ora diamo uno sguardo ad un altro gioiello della comunità Open Source nel campo degli IDS: OSSEC o Open Source SECurity.
OSSEC permette di controllare i log, gli accessi ssh e ftp, la presenza di rootkit nel sistema. Ovviamente OSSEC è in grado di rilevare ogni tentativo di intrusione nel sistema ed anche di rispondere attivamente all'attacco. Come si può comprendere la sua utilità non è limitata ai soli fini della sicurezza, ma anche del corretto funzionamento del sistema stesso.
Installare OSSEC
l'installazione di OSSEC è davvero semplice, dopo aver avviato lo script di setup, basterà seguire la procedura guidata. Vediamo come fare.
Scaricate l'ultima versione di OSSEC dal sito del progetto e decomprimete l'archivio compresso col comando:
$ tar -xzvf ossec-hids-1.2.tar.gz
posizionatevi nella directory di OSSEC ed eseguite, con i privilegi di root, lo script install.sh. L'installazione prevede una breve serie di domande, che vi consente di configurare il programma. Una delle domande fondamentali è il tipo (o modalità) di installazione voluta (figura 3).
Nel mio caso lavoro su di un singolo sistema e pertanto ho scelto local, ma se avessi voluto controllare più host, da un server centrale, avrei scelto la modalità server preparando così la macchina a centralizzare i controlli e gli agent per tutti i sistemi periferici. Nello step successivo dovete scegliere i controlli da abilitare.
I controlli attivabili (in figura 4) sono tre:
- Il demone di controllo dell'integrità
- Il sistema di rilevamento dei rootkit
- La risposta attiva
È consigliabile attivare tutte le funzioni di protezione per ottenere maggiore efficienza. Altro passo importante, durante la fase di installazione, consiste nel fornire il proprio indirizzo e-mail, al quale verranno inviati gli alert classificati secondo una scala di valori da 1 a 10. A questo punto OSSEC imposterà la configurazione per l'analisi dei log.
Ovviamente, modificando il file /var/ossec/etc/ossec.conf con un editor di testo si possono specificare ed aggiungere i file di log desiderati ampliando la capacità di controllo del programma. A questo punto, se la compilazione è avvenuta correttamente, verranno copiati i file eseguibili nella directory di default (/var/ossec/bin) e finalmente possiamo avviare OSSEC con l'apposito script, che vedremo nella pagina successiva.
Usare OSSEC
Per eseguire OSSEC è necessario assumere l'identità di root.
Nella directory /bin del programma (figura 5) trovate lo script di avvio, ecco il comando da inserire:
# ./ossec-control start
L'avvio di tutti i demoni ci permette di verificare il corretto funzionamento del programma. OSSEC è attivo. D'ora in avanti non resta che leggere le mail inviate da OSSEC ed eventualmente intervenire in caso di necessità. Tentativi di attacco, attività anomale e file sospetti verranno immediatamente segnalati, consentendoci un controllo attivo senza nemmeno doverci collegare al sistema.
Le regole di OSSEC
Come SNORT anche OSSEC ha le sue regole. Nella directory rules si trovano i file XML per i diversi servizi monitorati. Le regole possono essere ovviamente modificate e personalizzate secondo le necessità per adattarle al sistema. Questi file contengono le firme che i diversi programmi lasciano nei file di log e permettono ad OSSEC di trovare i riferimenti per poter spedire le giuste segnalazioni. Vediamo un semplice esempio di regola:
# less apache_rules.xml
nell'output restituito da questo comando potrete leggere:
... <rule id="30101" level="0"> <if_sid>30100</if_sid> <match>^[error] </match> <description>Apache error messages grouped.</description> </rule> ...
In ogni regola di OSSEC viene specificato un id ed un livello di regola, con la relativa descrizione. In questo caso è presente anche la sezione match che permette all'IDS di identificare la segnalazione e di riportala nel suo archivio. Con un po' di pazienza si può modificare ed anche costruire da zero queste piccole regole e passarle ad OSSEC per migliorare il monitoraggio del sistema.
Vediamo adesso una tipica segnalazione di attività anomala (figura 6), in questo caso OSSEC ha rilevato e segnalato una modifica dei valori 'md5sum' e 'sha1sum' di un file, segnalazione che viene ovviamente recapitata via e-mail.
Si vede subito la flessibilità di questo sistema, in grado anche di segnalare i comuni malfunzionamenti risparmiandoci noiosissimi controlli periodici. OSSEC offre molto altro ancora, come ad esempio la risposta attiva, ma per motivi di spazio ho esposto solo le peculiarità basilari del tool. Il manuale di OSSEC è molto completo ed esaustivo non ignoratelo.
Conclusioni
Termina qui questa panoramica sugli IDS. Se siete interessati ad argomenti particolari, riguardo la sicurezza informatica, non tardate a comunicarcelo, saranno trattati il prima possibile.