Eseguire il rilevamento delle 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 delle intrusioni di rete (IDS) e l'esecuzione del monitoraggio della sicurezza di rete. Diversi strumenti IDS open source elaborano acquisizioni di pacchetti e cercano firme di possibili intrusioni di rete e attività dannose. Usando le acquisizioni di pacchetti fornite da Azure Network Watcher, è possibile analizzare la rete per individuare intrusioni o vulnerabilità dannose.

Uno di questi strumenti open source è Suricata, un motore IDS che usa set di regole per monitorare il traffico di rete e attiva avvisi ogni volta che si verificano eventi sospetti. Suricata offre un motore multithreading 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 delle intrusioni di rete usando Network Watcher, Suricata e 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 gli avvisi in base ai pacchetti che corrispondono al 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 un dashboard Kibana. Un dashboard fornisce una rappresentazione visiva dei log e un modo per ottenere rapidamente informazioni dettagliate sulle potenziali vulnerabilità di rete.

Diagram that shows a simple web application scenario.

È 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

  1. Nel terminale della riga di comando della macchina virtuale eseguire i comandi seguenti:

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo apt-get install suricata
    
  2. 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 Minacce emergenti

In questa fase non sono presenti 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 copiarlo 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 il comando seguente:

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 prodotti da Suricata contengono informazioni preziose su ciò che accade nella rete, ma questi file di log non sono i più semplici da leggere e comprendere. Connettendo Suricata con Elastic Stack, è possibile creare un dashboard Kibana per cercare, grafo, analizzare e derivare informazioni dettagliate dai log.

Installare Elasticsearch

  1. 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.

  2. 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 elastica per installare Elasticsearch.

  3. 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

  1. 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
    
  2. Configurare Logstash per leggere dall'output del file di eve.json . Creare un file logstash.conf usando questo comando:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Aggiungere il contenuto seguente al file. Assicurarsi che il percorso del file di 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"
    }
    }
    
  4. Assegnare le autorizzazioni corrette al file eve.json in modo che Logstash possa inserire il file:

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. Avviare Logstash eseguendo questo comando:

    sudo /etc/init.d/logstash start
    

Per altre istruzioni sull'installazione di Logstash, vedere la documentazione ufficiale di Elastic.

Installare Kibana

  1. 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
    
  2. Eseguire Kibana usando questi comandi:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Visualizzare l'interfaccia Web Kibana passando a http://localhost:5601.

    Per questo scenario, il modello di indice usato per i log di Suricata è logstash-*.

  4. Se si vuole visualizzare il 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

Questo articolo fornisce un dashboard di esempio per visualizzare le tendenze e i dettagli negli avvisi. Per usarla:

  1. Scaricare il file del dashboard, il file di visualizzazione e il file di ricerca salvato.

  2. Nella scheda Gestione di Kibana passare a Oggetti salvati e importare tutti e tre i file. Nella scheda Dashboard è quindi possibile aprire e caricare il dashboard di esempio.

È anche possibile creare visualizzazioni personalizzate e dashboard personalizzati per le metriche di proprio interesse. Per altre informazioni sulla creazione di visualizzazioni Kibana, vedere la documentazione ufficiale di Kibana.

Screenshot that shows a Kibana dashboard.

Visualizzare i log di avvisi IDS

Il dashboard di esempio offre diverse visualizzazioni dei log di avvisi di Suricata:

  • Avviso per GeoIP: mappa che mostra la distribuzione degli avvisi in base al paese o all'area geografica di origine in base alla posizione geografica (determinata dall'IP).

    Screenshot shows a map for geographic IP alerts.

  • Primi 10 avvisi: riepilogo dei 10 avvisi attivati più di frequente e delle relative descrizioni. Se si seleziona un singolo avviso, il dashboard viene filtrato in base alle informazioni relative a tale avviso specifico.

    Screenshot that shows the most frequently triggered alerts.

  • Numero di avvisi: numero totale di avvisi attivati dal set di regole.

    Screenshot shows the number of alerts.

  • Top 20 ScrIP - Alerts, Top 20 DestIP - Alerts, Top 20 SrcPort - Alerts, Top 20 DestPort - Alerts: Pie charts that show the sources and destinations for the top 20 IP and ports that alerts were triggered on. È possibile filtrare in base a indirizzi IP o porte specifici per vedere quanti tipi di avvisi vengono attivati.

    Screenshot that shows pie charts of the top 20 IPs and ports that alerts were triggered on.

  • Riepilogo avvisi: tabella che riepiloga i dettagli specifici di ogni avviso. È possibile personalizzare questa tabella per visualizzare altri parametri di interesse per ogni avviso.

    Screenshot shows a summary table with details about individual alerts.

Per altre informazioni sulla creazione di visualizzazioni e dashboard personalizzati, vedere la documentazione ufficiale di Kibana.

Conclusione

Combinando acquisizioni di pacchetti da Network Watcher e da strumenti IDS open source come Suricata, è possibile eseguire il rilevamento delle intrusioni di rete per un'ampia gamma di minacce.

I dashboard consentono di individuare rapidamente tendenze e anomalie all'interno della rete. È anche possibile usare i dashboard per esaminare i dati per 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: