In questa lezione vedremo come installare Snort 2.9.9.x su una macchina Ubuntu Server 16.04. Prima di iniziare è bene precisare che, nel caso in cui abbiamo installato Snort su VirtualBox, è necessario abilitare il network bridging (come mostrato in figura), che consentirà la comunicazione tra la macchina host e guest:
Terminato l’installazione di Ubuntu, aggiorniamo dei pacchetti del sistema operativo ed installiamo OpenSSH-Server, che consentirà la gestione remota del server Snort:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install -y openssh-server
A questo punto, riavviamo per essere certi che l’aggiornamento del sistema sia andato a buon fine:
sudo reboot
Prerequisiti per l'installazione
Alcune schede di rete utilizzano funzionalità quali “Large Receive Offload" (lro) e “Generic Receive Offload" (gro),
che possono causare problemi con la rilevazione di pacchetti sospetti. Per questo motivo è preferibile disabilitarle.
A tal fine, apriamo il file di configurazione delle interfacce di rete, digitando:
sudo nano /etc/network/interfaces
Aggiungiamo quindi le seguenti linee in coda alla sezione di configurazione dell’interfaccia che utilizzeremo per monitorare il traffico di rete (che in questo esempio è eth0):
post-up ethtool -K eth0 gro off
post-up ethtool -K eth0 lro off
Passiamo adesso all’installazione dei pacchetti necessari per la compilazione ed installazione di Snort:
sudo apt-get install -y build-essential
sudo apt-get install -y libpcap-dev libpcre3-dev libdumbnet-dev
sudo apt-get install -y libnghttp2-dev
sudo apt-get install -y zlib1g-dev liblzma-dev openssl libssl-dev
sudo apt-get install -y bison flex
Creiamo una cartella dove andremo a scaricare i sorgenti di Snort:
mkdir ~/snort_src
cd ~/snort_src
Scarichiamo la Data Acquisition Library (DAQ), come segue:
wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz
tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure
make
sudo make install
Durante l’installazione, lo script dovrebbe stampare a video le righe seguenti, che assicurano che DAQ abbia installato il supporto alle librerie di base:
Build PCAP DAQ module...... : yes
Build AFPacket DAQ module.. : yes
La libreria “PCAP” è necessaria per leggere pacchetti dalle interfacce di rete, mentre “AFPacket” risulta necessaria per eseguire Snort come IPS.
Installazione
Posizioniamoci all’interno della directory snort_src precedentemente creata, ed eseguiamo i seguenti comandi per scaricare ed installare Snort:
wget https://www.snort.org/downloads/archive/snort/snort-2.9.9.0.tar.gz
cd ~/snort_src
tar -xvzf snort-2.9.9.0.tar.gz
cd snort-2.9.9.0
./configure --enable-sourcefire
make
sudo make install
Se non ci sono errori, dovremo ora aggiornare le librerie condivise, e creare un link simbolico all’eseguibile appena creato:
sudo ldconfig
sudo ln -s /usr/local/bin/snort /usr/sbin/snort
Proviamo dunque ad eseguire Snort, digitando il comando:
snort –V
Se tutto è andato bene, l'output che otterremo sarà simile al seguente:
Configurazione dell’utente
È buona prassi che Snort non venga eseguito con i privilegi di root. Per questo motivo, sarà necessario creare un nuovo account utente ed un nuovo gruppo. Eseguiamo quindi le seguenti operazioni, che permettono di creare l’utente snort facente parte del gruppo snort:
sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
Adesso creiamo la struttura delle directory necessarie per la memorizzazione dei pacchetti, delle regole e degli alert generati da Snort.
Directory per le regole:
sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/rules/iplists
sudo mkdir /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules
sudo touch /etc/snort/rules/iplists/black_list.rules
sudo touch /etc/snort/rules/iplists/white_list.rules
sudo touch /etc/snort/rules/local.rules
sudo touch /etc/snort/sid-msg.map
Directory per il logging dei pacchetti e delle attività di Snort:
sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs
Infine, settiamo i permessi delle directory appena create, in modo che l’utente snort possa effettivamente accedervi:
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
Configurazione di Snort
Per configurare correttamente Snort, dobbiamo copiare alcuni dei file di configurazione contenuti nei sorgenti all’interno delle directory appena create. Per fare ciò, eseguiamo la seguente lista di comandi:
cd ~/snort_src/snort-2.9.9.0/etc/
sudo cp *.conf* /etc/snort
sudo cp *.map /etc/snort
sudo cp *.dtd /etc/snort
cd ~/snort_src/snort-2.9.9.0/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
Adesso commentiamo le linee contenute nel file di configurazione snort.conf, che si riferiscono ai path delle regole esterne.
Questo perché la gestione delle regole sarà invece demandata al plugin “PulledPork”, che verrà illustrato in un secondo momento:
sudo sed -i "s/include \$RULE\_PATH/#include \$RULE\_PATH/" /etc/snort/snort.conf
Possiamo verificare che i path siano stati effettivamente commentati, aprendo il file snort.conf e verificando che tutte le righe
che iniziano con include $RULE_PATH
presentano il caratter #
in testa. Modifichiamo ancora il file snort.conf, ed indichiamo la sottorete HOME_NET che verrà monitorata da snort:
sudo nano /etc/snort/snort.conf
ipvar HOME_NET networkaddress/mask
Assicuriamoci che l’interfaccia di rete su cui Snort sta in ascolto abbia un indirizzo di rete appartenente alla HOME_NET su indicata. Con il file snort.conf ancora aperto in scrittura, indichiamo i path corretti delle regole:
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists
Decommentiamo infine la seguente linea, per consentire il testing di Snort:
include $RULE_PATH/local.rules
L’ultima verifica
A questo punto non rimane che verificare se le modifiche effettuate al file di configurazione sono valide e se i riferimenti sono tutti corretti. Eseguiamo il seguente comando (supponendo ancora che eth0 sia il nome dell'interfaccia di rete):
sudo snort -T -i eth0 -c /etc/snort/snort.conf
Se tutto è andato bene, l'output sarà il seguente:
Il flag –T
indica di eseguire un test per la configurazione di Snort, mentre il flag -c
indica quale file utilizzare. Il flag -i
specifica, infine, il nome dell’interfaccia di rete.