Visualize pfSense Snort logs on Kibana

Questo articolo tratterà la visualizzazione in Kibana dei log generati da Snort su pfSense.

Prerequisiti
un’installazione funzionante di pfSense, Snort e dello stack ELK (Elasticsearch, Logstash e Kibana).
La procedura di installazione dei software sopracitati non viene tratta in questo articolo ma si possono trovare degli ottimi spunti ai seguenti link:

How To Install Elasticsearch, Logstash and Kibana (ELK Stack) on Ubuntu 14.04
Installing pfSense
pfSense – setup Snort Package

Cos’è pfSense?
pfSense è un firewall software open source, basato su FreeBSD e che è sviluppato ormai da circa 15 anni. E’ altamente scalabile e le sue performance gli permettono di essere installato sia in ambienti domestichi che in ambienti enterprise.

Cos’è Snort?
Snort è l’IDS (Intrusion Detection System) open source più conosciuto al mondo. Nell’articolo si fa riferimento ad un’installazione di Snort effettuata all’interno di pfSense.

Cos’è Elasticsearch?
Elastisearch è un server di ricerca basato su Lucene, con capacità Full Text, con supporto ad architetture distribuite.

Cos’è Logstash?
Logstash è un tool per la gestione di log ed eventi.

Cos’è Kibana?
Kibana è il plugin di Data Visualization di Elasticsearch

Una volta terminata la fase di installazione dei software definiti nei prerequisiti è necessario configurare Snort e pfSense affinchè possano inviare i log allo stack ELK. Per fare ciò è necessario effettuare due diverse configurazioni, una in pfSense e una in Snort, descritte di seguito:

pfSense
dal menù Status scegliere System Logs, quindi cliccare sulla tab”Settings” e configurare la sezione “Remote Logging Options” in questo modo:
in Enable Remote Logging mettere il flag su “Send log messages to remote syslog server”
in Remote Syslog Servers specificare l’indirizzo ip del server sul quale è stato installato lo stack ELK (ed il rispettivo syslog server [ndr: è possibile utilizzare sia syslog che rsyslog e pfSense di default invia i log sulla porta 514/UDP])
in Remote Syslog Contents mettere il flag su “System events”

pfsense

Snort
dal menù Services scegliere Snort, quindi dalla tab “Snort Interfaces” fare clic sul pulsante di editing e nella sezione “Alert Settings” mettere il flag su “Snort will send Alerts to the firewall’s system logs

snort

Ora entrando in Kibana dovrebbe già essere possibile visualizzare, nella tab “Discover”, i log generati da Snort e inviati da pfSense, che avranno un formato simile a questo (gli ip sono stati volutamente asteriscati):

Dec 17 13:03:44 snort[94597]: [1:2013031:1] ET POLICY Python-urllib/ Suspicious User Agent [Classification: Attempted Information Leak] [Priority: 2] {TCP} ***.***.***.***:64229 -> ***.***.***.***:80

In questo momento Kibana non sa come è strutturato il nostro log, quindi non ne conosce tutti i campi, anche se provvede in ogni caso a riconoscerne qualcuno, come ad esempio la data [Dec 17 13:03:44], il messaggio [ET POLICY Python-urllib/ Suspicious User Agent [Classification: Attempted Information Leak] [Priority: 2] {TCP} ***.***.***.***:64229 -> ***.***.***.***:80] ed il programma che ha generato il log [snort].

Quelli che abbiamo interesse a far riconoscere sono ulteriori campi, come ad esempio l’ip del sorgente, la porta del sorgente, l’ip del destinatario, la porta del destinatario ed il protocollo. In questo modo potremo così ad esempio creare una visualizzazione grafica con gli ip sorgenti che più spesso effettuano tentativi di attacco alle nostre applicazioni web, oppure una visualizzazione grafica con le porte che esponiamo e che sono più soggette statisticamente ad un attacco.

Per fare ciò è necessario creare un nuovo filtro per Logstash. I filtri sono dei file che indicano a Logstash come interpretare un log. Ad esempio, per creare un filtro che vada a matchare correttamente una log entry come quella sopra riportata, è necessario creare nella directory $LOGSTASHINSTALLPATH/etc/conf.d un file con la seguente struttura:

# BEGIN SNORT LOG
filter {
if [program] == “snort” {
if [message] =~ /.* ET .*{(TCP|UDP)} .*:.* -> .*:.*/ {
grok {
match => [ “message”, “.* ET .*{%{WORD:snort_protocol}} %{IP:snort_src_ip}:%{INT:snort_src_port} -> %{IP:snort_dst_ip}:%{INT:snort_dst_port}”
]
remove_tag => “_grokparsefailure”
}
}
}
}
# END SNORT LOG

Possiamo salvare il file chiamandolo ad esempio 1_f00450_pfsense_snort.filter, dove con f indichiamo a logstash che si tratta di un file di filtro e dove con 00450 impostiamo un numero che verrà interpretato come priorità da dare al filtro stesso. Ad esempio, un filtro con nome 1_f00350_pfsense_snort.filter verrebbe interpretato prima del filtro con nome 1_f00450_pfsense_snort.filter.

Per confermare e applicare la configurazione di Logstash è poi necessario eseguire i seguenti script:

$LOGSTASHINSTALLPATH/scripts/logstash-genconf.sh
$LOGSTASHINSTALLPATH/script/logstash-applyconf.sh

L’ultimo script provvede anche a riavviare il servizio Logstash.

Completata la configurazione del filtro di Logstash, possiamo finalmente accedere a Kibana e fargli riconoscere i nuovi campi. Per fare ciò, è necessario nell’ordine:

  • aprire il menù Settings
  • scegliere l’indice di logstash cliccando, sulla sinistra della pagina, l’indice [logstash-]YYYY.MM.DD
  • aggiornare il filtro

Per maggiore comprensione ecco un’immagine dettagliata:

kibana1

Successivamente possiamo creare una nuova visualizzazione dal menù  Visualize. Nell’esempio ho selezionato il tipo “Pie chart” e ho poi aggiunto un buckets dandogli come tipologia di aggregazione “Terms” e come Field “snort_src_ip”. Ho inoltre creato un ordinamento per Top utilizzando come metrica Count. Questo è il risultato:

kibana2

Lo stack ELK è davvero robusto e Kibana è perfetto per chi vuole avere a disposizione un potente strumento di correlazione di log, non avendo alcunché da invidiare, almeno a questo livello, a strumenti commerciali (e costosi) come ad esempio Splunk. E’ necessaria un po’ di pratica per capire come ragiona il software e soprattuto come costruire i filtri adatti ad ogni situazione, ma una volta risolto questo l’unico limite è davvero la fantasia! Buon divertimento!

Per avere maggiori informazioni sui software utilizzati, ecco una lista di link:
pfSense: http://www.pfsense.org
Snort: http://www.snort.org
Elastisearch: https://www.elastic.co/products/elasticsearch
Logstash: https://www.elastic.co/products/logstash
Kiabana: https://www.elastic.co/products/kibana

Be Sociable, Share!

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *