In questa lezione vedremo come installare ed utilizzare Barnyard2,
un plugin che nasce con l’idea di ottimizzare la memorizzazione degli eventi generati da Snort.
Fondamentalmente, gli eventi generati da Snort verranno
prima salvati in formato binario (non direttamente leggibile),
successivamente tradotti da Barnyard2, e infine salvati all’interno di un database MySQL.
L’uso di MySQL consentirà il recupero rapido dei dati salvati e
l’utilizzo di ricerche mirate all’interno della miriade di eventi generati.
Configurazione iniziale
Passiamo ad installare i pacchetti richiesti per l’esecuzione di Barnyard2:
sudo apt-get update
sudo apt-get install -y mysql-server libmysqlclient-dev mysql-client autoconf libtool unzip
Ad un certo punto dell’installazione verrà richiesto di impostare una password di root
per MySQL; ovviamente, scegliamo una non troppo banale.
Facciamo quindi in modo che Snort salvi gli eventi in formato binario
(maggiore efficienza), e che Barnyard2 possa leggerli.
A tal fine, apriamo il file di configurazione di Snort:
sudo nano /etc/snort/snort.conf
La riga 521 dovrebbe risultare commentata e riportante il testo #output unified2:…
.
Sostituiamola con la seguente linea (ovviamente decommentata):
output unified2: filename snort.u2, limit 128
In questo modo Snort genererà dei file denominati snort.u2.xxxxx,
contenenti gli alert in formato binario. Ciascun file sarà grande al più 128MB. Le "x" conterranno il timestamp
della creazione del file.
Installazione
Scarichiamo il file .zip contenente i sorgenti di Barnyard2:
wget https://github.com/firnsy/barnyard2/archive/master.zip -O barnyard2-Master.zip
Decomprimiamo quindi l’archivio:
unzip barnyard2-Master.zip
Posizioniamoci ora all’interno della cartella dei sorgenti e iniziamo la configurazione del pacchetto:
cd barnyard2-master
autoreconf -fvi -I ./m4
Creiamo un link simbolico alla libreria dumbnet.h
(dnet.h è il nome che Barnyard2 si aspetterà di trovare) e riconfiguriamola:
sudo ln -s /usr/include/dumbnet.h /usr/include/dnet.h
sudo ldconfig
Adesso dobbiamo configurare la compilazione di Barnyard2.
Per fare ciò, il comando di configurazione avrà bisogno di conoscere la
posizione della libreria MySQL installata sulla macchina.
Scegliamo la linea corretta tra le due seguenti (in base all’architettura della piattaforma):
./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu
./configure --with-mysql --with-mysql-libraries=/usr/lib/i386-linux-gnu
Infine, compiliamo il tutto (il binario finirà in /usr/local/bin/barnyard2)
ed eseguiamo un test di verifica del corretto funzionamento:
make
sudo make install
/usr/local/bin/barnyard2 –V
Se tutto è andato a buon fine, dovremmo leggere qualcosa di simile:
Passiamo infine ad impostare permessi e file di configurazione di Barnyard2:
sudo cp ~/snort_src/barnyard2-master/etc/barnyard2.conf /etc/snort/
sudo mkdir /var/log/barnyard2
sudo chown snort.snort /var/log/barnyard2
sudo touch /var/log/snort/barnyard2.waldo
sudo chown snort.snort /var/log/snort/barnyard2.waldo
Configurazione del database MySQL
Barnyard2 leggerà i file binari salvati da Snort (snort.u2.xxxxx),
li convertirà in formato leggibile e li salverà all’interno del database MySQL.
Per rendere possibile tutto ciò, non dovremo fare altro che creare un database
e l’utente tramite il quale Barnyard2 potrà accedere.
Eseguiamo il comando mysql dalla shell (inserendo la password di root scelta in precedenza):
mysql -u root –p
Creiamo un database denominato snort, con lo schema adatto per i
salvataggi di Barnyard2:
create database snort;
use snort;
source ~/snort_src/barnyard2-master/schemas/create_mysql
Creiamo l’utente con cui accedere al DB (snort, con password "password"),
e impostiamo i permessi:
CREATE USER 'snort'@'localhost' IDENTIFIED BY 'password';
grant create, insert, select, delete, update on snort.* to 'snort'@'localhost';
exit
Adesso dobbiamo spiegare a Snort
come collegarsi al DB MySQL. Per fare ciò, dobbiamo modificare nuovamente il file di configurazione:
sudo nano /etc/snort/barnyard2.conf
Aggiungiamo la seguente linea alla fine del file (senza spezzarla):
output database: log, mysql, user=snort password=password dbname=snort host=localhost sensor name=sensor01
La password scritta in questo file risulterà leggibile, dovremo quindi cambiarne i privilegi di accesso:
sudo chmod o-r /etc/snort/barnyard2.conf
Verifica finale
A questo punto non rimane che verificare che Snort memorizzi
gli eventi nei relativi file di log in formato binario,
e che Barnyard possa leggerli e convertirli in righe per le tabelle del DB MySQL.
Eseguiamo Snort in modalità demone (sostituiamo il nome
dell’interfaccia con quella della nostra macchina):
sudo /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i en2ps3
Eseguiamo il ping verso la macchina Snort, in modo che possa registrare l’evento di “intrusione”
dei pacchetti ICMP, e dopo qualche pacchetto inviato,
interrompiamo il ping e chiudiamo Snort.
Dovremmo visualizzare un file snort.u2.xxxxx dentro la directory di log /var/log/snort.
Eseguiamo Barnyard2 per caricare il contenuto di
questo file all’interno del DB MySQL (non spezzate la linea):
sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2.xxxxxx –w /var/log/snort/barnyard2.waldo -g snort -u snort
Attendete un po’ e chiudete Barnyard2 dopo che avrete visualizzato gli eventi processati.
Verifichiamo che i record siano stati caricati all’interno di MySQL (digitate la password):
mysql -u snort -p -D snort -e "select count(*) from event"
Se tutto va a buon fine, dovremmo visualizzare
il risultato di count(*)
,
pari al numero di messaggi ICMP ricevuti durante la precedente operazione di ping: