Eseguire il rilevamento di intrusioni di rete usando Azure Network Watcher e strumenti open source
Le acquisizioni di pacchetti sono un componente chiave per l'implementazione di sistemi di rilevamento di intrusioni (IDS, Intrusion Detection System) di rete e per l'esecuzione del monitoraggio della sicurezza di rete. Diversi strumenti IDS open source elaborano le acquisizioni di pacchetti e cercano le firme di possibili intrusioni di rete e di attività dannosa. Usando le acquisizioni di pacchetti fornite da Azure Network Watcher, è possibile analizzare la rete per trovare intrusioni dannose o vulnerabilità.
Uno strumento open source di questo tipo è Suricata, un motore IDS che usa set di regole per monitorare il traffico di rete e attiva avvisi quando si verificano eventi sospetti. Suricata offre un motore a thread multipli per eseguire l'analisi del traffico di rete con maggiore velocità ed efficienza. Per ulteriori informazioni su Suricata e sulle sue funzionalità, visitare il sito Web di Suricata.
Scenario
Questo articolo illustra come configurare l'ambiente per eseguire il rilevamento di intrusioni di rete usando Network Watcher, Suricata ed Elastic Stack.
Network Watcher offre le acquisizioni di pacchetti per l'esecuzione del rilevamento delle intrusioni di rete. Suricata elabora le acquisizioni di pacchetti e attiva avvisi in base ai pacchetti che corrispondono ai set di regole delle minacce. Suricata archivia questi avvisi in un file di log nel computer locale.
Usando Elastic Stack, è possibile indicizzare i log generati da Suricata e quindi usarli per creare una dashboard Kibana. Una dashboard fornisce una rappresentazione visiva dei log e un modo per ottenere rapidamente informazioni dettagliate sulle potenziali vulnerabilità di rete.
È possibile configurare entrambi gli strumenti open source in una macchina virtuale di Azure, in modo da poter eseguire questa analisi all'interno del proprio ambiente di rete di Azure.
Installare Suricata
Nel terminale della riga di comando della VM eseguire i comandi seguenti:
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata
Per verificare l'installazione, eseguire il comando
suricata -h
per visualizzare l'elenco completo di comandi.
Per altri metodi di installazione, vedere la guida introduttiva all'installazione di Suricata.
Scaricare il set di regole Emerging Threats
In questa fase, non sono disponibili regole per l'esecuzione di Suricata. È possibile creare regole personalizzate se si desidera rilevare minacce specifiche alla rete. È anche possibile usare set di regole sviluppati da vari provider, ad esempio minacce emergenti o regole Talos da Snort. In questo articolo si usa il set di regole Minacce emergenti disponibile gratuitamente.
Scaricare il set di regole e copiarle nella directory:
wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxf emerging.rules.tar.gz
sudo cp -r rules /etc/suricata/
Elaborare le acquisizioni di pacchetti tramite Suricata
Per elaborare le acquisizioni di pacchetti usando Suricata, eseguire questo comando:
sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>
Per controllare gli avvisi risultanti, leggere il file fast.log:
tail -f /var/log/suricata/fast.log
Configurare Elastic Stack
I log generati da Suricata contengono informazioni importanti su quanto avviene nella rete,ma la lettura e la comprensione di questi file di log non sono molto semplici. Connettendo Suricata con Elastic Stack, è possibile creare una dashboard Kibana per cercare, creare grafici, analizzare e derivare informazioni dettagliate dai log.
Installare Elasticsearch
Elastic Stack versione 5.0 e successive richiedono Java 8. Eseguire il comando
java -version
per controllare la versione in uso. Se Java non è installato, vedere la documentazione relativa ai Kit di sviluppo Java supportati da Azure.Scaricare il pacchetto binario corretto per il proprio sistema:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb sudo dpkg -i elasticsearch-5.2.0.deb sudo /etc/init.d/elasticsearch start
È possibile trovare altri metodi di installazione nella pagina Web Elastic per l’installazione di Elasticsearch.
Verificare che Elasticsearch sia in esecuzione usando questo comando:
curl http://127.0.0.1:9200
Si dovrebbe ottenere una risposta simile all'esempio seguente:
{ "name" : "Angela Del Toro", "cluster_name" : "elasticsearch", "version" : { "number" : "5.2.0", "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe", "build_timestamp" : "2016-01-27T13:32:39Z", "build_snapshot" : false, "lucene_version" : "6.1.0" }, "tagline" : "You Know, for Search" }
Per altre istruzioni sull'installazione di Elasticsearch, vedere la pagina Web Elastic sull'installazione.
Installare Logstash
Installare Logstash eseguendo i comandi seguenti:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb sudo dpkg -i logstash-5.2.0.deb
Configurare Logstash per leggere dall'output del file eve.json. Creare un file logstash.conf usando questo comando:
sudo touch /etc/logstash/conf.d/logstash.conf
Aggiungere il contenuto seguente al file. Assicurarsi che il percorso del file eve.json sia corretto.
input { file { path => ["/var/log/suricata/eve.json"] codec => "json" type => "SuricataIDPS" } } filter { if [type] == "SuricataIDPS" { date { match => [ "timestamp", "ISO8601" ] } ruby { code => " if event.get('[event_type]') == 'fileinfo' event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0]) end " } ruby{ code => " if event.get('[event_type]') == 'alert' sp = event.get('[alert][signature]').to_s.split(' group ') if (sp.length == 2) and /\A\d+\z/.match(sp[1]) event.set('[alert][signature]', sp[0]) end end " } } if [src_ip] { geoip { source => "src_ip" target => "geoip" #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } if ![geoip.ip] { if [dest_ip] { geoip { source => "dest_ip" target => "geoip" #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } } } } } output { elasticsearch { hosts => "localhost" } }
Verificare di assegnare le autorizzazioni corrette al file eve.json in modo che Logstash possa inserire il file:
sudo chmod 775 /var/log/suricata/eve.json
Avviare Logstash eseguendo questo comando:
sudo /etc/init.d/logstash start
Per altre istruzioni sull'installazione di Logstash, vedere la documentazione ufficiale Elastic.
Installare Kibana
Eseguire questi comandi per installare Kibana:
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz tar xzvf kibana-5.2.0-linux-x86_64.tar.gz
Eseguire Kibana usando questi comandi:
cd kibana-5.2.0-linux-x86_64/ ./bin/kibana
Visualizzare l'interfaccia Web Kibana passando a
http://localhost:5601
.Per questo scenario, il modello di indice usato per i log di Suricata è
logstash-*
Se si vuole visualizzare la dashboard Kibana in remoto, creare una regola del gruppo di sicurezza di rete in ingresso che consenta l'accesso alla porta 5601.
Creare un dashboard Kibana
Per questo articolo, è stata fornita una dashboard di esempio per visualizzare tendenze e dettagli degli avvisi. Per usarla:
Scaricare il file della dashboard, il file delle visualizzazioni e il file della ricerca salvata.
Nella scheda Gestione di Kibana passare a Oggetti salvati e importare tutti e tre i file. Dalla scheda Dashboard è quindi possibile aprire e caricare la dashboard di esempio.
È anche possibile creare visualizzazioni e dashboard personalizzate per le metriche a cui si è interessati. Per altre informazioni sulla creazione di visualizzazioni Kibana, vedere la documentazione ufficiale di Kibana.
Visualizzare i log di avvisi IDS
Il dashboard di esempio offre diverse visualizzazioni dei log di avvisi di Suricata:
Avvisi per IP geografico: mappa che illustra la distribuzione degli avvisi per paese di origine in base alla località geografica (determinata dall'IP)
Primi 10 avvisi: riepilogo dei 10 avvisi attivati più di frequente e relativa descrizione. Facendo clic su un singolo avviso, si accede alle informazioni della dashboard relative a quell'avviso specifico.
Numero di avvisi: il numero totale di avvisi attivati dal set di regole.
primi 20 SrcPort - Avvisi, primi 20 DestIP - Avvisi, primi 20 SrcPort - Avvisi, Primi 20 DestPort - Avvisi: grafici a torta che mostrano le origini e le destinazioni per i primi 20 indirizzi IP e porte attivati dagli avvisi. È possibile filtrare specifici IP o porte per visualizzare quanti avvisi e di quale tipo sono stati attivati.
Riepilogo avvisi: tabella che riepiloga i dettagli specifici di ogni avviso. È possibile personalizzare questa tabella per visualizzare altri parametri di interesse per ogni avviso.
Per ulteriori informazioni sulla creazione di visualizzazioni e dashboard personalizzati, vedere la documentazione ufficiale di Kibana.
Conclusione
Combinando le acquisizioni di pacchetti fornite da Network Watcher e da strumenti IDS open source come Suricata, è possibile eseguire il rilevamento di intrusioni di rete per svariate minacce.
Le dashboard consentono di individuare rapidamente tendenze e anomalie all'interno della rete. È anche possibile usare le dashboard per esaminare i dati e individuare le cause radice degli avvisi, ad esempio agenti utente dannosi o porte vulnerabili. Con questi dati estratti, è possibile prendere decisioni informate su come:
- Reagire e proteggere la rete da tentativi di intrusione dannosi.
- Creare regole per evitare intrusioni future nella rete.
Passaggio successivo
Informazioni su come attivare acquisizioni di pacchetti in base agli avvisi: