In questa lezione conclusiva vedremo come utilizzare Snort quale sistema di prevenzione delle intrusioni (intrusion prevention system, IPS). La modalità con la quale viene eseguito Snort in questo caso viene comunemente detta inline. Questo perché (come abbiamo visto nell'introduzione di questa guida), Snort funziona da bridge tra due segmenti di rete. In questa modalità, Snort svolgerà un compito di difesa attiva, poiché scarterà tutti i pacchetti sospetti che avrà rilevato, oltre che generare i consueti alert della modalità intrusion detection.
Configurazione della rete e modalità promiscua
Snort dovrà essere eseguito su una macchina che dovrà apparire come “trasparente” ai due segmenti di rete che si intendono controllare. Tale macchina dovrà montare (almeno) due interfacce di rete, ciascuna relativa al segmento monitorato, e le due interfacce dovranno essere collegate in modalità promiscua. Quando un’interfaccia di rete è così configurata, essa lascia passare tutto il traffico entrante senza controllare l’indirizzo MAC di destinazione; questa operazione risulta particolarmente utile per scopi diagnostici e si addice perfettamente all’utilizzo di Snort come IPS. Le interfacce configurate in modalità promiscua NON dovranno avere alcun indirizzo IP per il semplice motivo che dovranno agire come se fossero “trasparenti” per i segmenti di rete monitorati. Da questo ne discende che i due segmenti di rete dovranno necessariamente appartenere alla stessa sottorete.
A meno che non disponiamo dell’accesso fisico alla macchina che ospiterà Snort, dovremo comunque aggiungere una terza interfaccia con compiti “amministrativi” per consentire la gestione di Snort da remoto. Nell’ipotesi più tipica, dunque, ci troveremo di fronte alla seguente configurazione di rete:
A questo punto, eseguiamo il comando:
ifconfig -a
Memorizziamo quindi i nomi delle interfacce di rete che intendiamo impostare come “amministrativa” e “monitorata”.
Passiamo quindi alla modifica del file di configurazione delle interfacce di rete, eseguendo il comando:
sudo vi /etc/network/interfaces
Il file sarà diviso in due parti. Nella prima indicheremo i parametri per l’interfaccia “amministrativa”, che sarà gestita dal DHCP; nella seconda, indicheremo che le due interfacce da monitorare dovranno essere attivate in modalità promiscua e senza un indirizzo IP (avendo cura di sostituire i nomi delle interfacce con quelli della nostra macchina):
#interfaccia amministrativa
auto enp2s0
iface enp2s0 inet dhcp
#interfacce promiscue
auto enp2s1
iface enp2s1 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
post-up ethtool -K $IFACE gro off
post-up ethtool -K $IFACE lro off
down ip link set $IFACE promisc off
down ifconfig $IFACE down
auto enp2s2
iface enp2s2 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
post-up ethtool -K $IFACE gro off
post-up ethtool -K $IFACE lro off
down ip link set $IFACE promisc off
down ifconfig $IFACE down
Configurazione di Snort
Come accennato all’inizio della lezione, dovremo eseguire Snort nella modalità “inline”. Per prima cosa, assicuriamoci che le librerie DAQ siano correttamente installate:
Se non vediamo questo tipo di output, ritorniamo all’installazione
di Snort. Se invece tutto è andato a buon fine, a questo punto dovremo modificare il file di configurazione di Snort:
sudo nano /etc/snort/snort.conf
Cerchiamo tra le linee commentate quella che comincia per #Configure DAQ related options for inline operations.
Decommentiamo le linee che iniziano per #config daq e config daq_mode, sostituendole alle seguenti:
config daq: afpacket
config daq_mode: inline
Eseguiamo il classico test di verifica del funzionamento di Snort, con il flag -Q per la modalità inline, e per effettuare il bridging delle interfacce “monitorate” usiamo il flag -i. Utilizziamo dunque la seguente linea di codice:
sudo snort -T -c /etc/snort/snort.conf -Q -i enp2s1:enp2s2
Se tutto funziona correttamente, dovremmo leggere la seguente linea alla fine dell’output generato dal comando precedente:
Eseguire Snort in modalità IPS
Non rimane che eseguire Snort e verificare che svolga il suo compito di difesa attiva. Per prima cosa modifichiamo il file:
sudo /etc/snort/rules/local.rules
ed aggiungiamo la seguente regola (sempre che non lo abbiamo già fatto, nella lezione precedente):
drop icmp any any -> $HOME_NET any (msg:"Pacchetto ICMP rilevato"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)
A questo punto eseguiamo Snort in modalità console:
sudo /usr/local/bin/snort -A console -Q -c /etc/snort/snort.conf -i enp2s1:enp2s2 –N
Generiamo un ping da un computer esterno alla macchina Snort collegato da uno dei lati monitorati, diretto verso una macchina residente sul secondo segmento di rete. Se tutto funziona correttamente, il ping dovrà fallire e dovremmo vedere un alert a video generato da Snort, che indica il (tentato) passaggio di un messaggio ICMP.