Condividi tramite


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.

Diagramma che mostra uno scenario di applicazione Web semplice.

È 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 VM 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 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

  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 Elastic per l’installazione di 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 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 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. 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
    
  5. 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

  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 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:

  1. Scaricare il file della dashboard, il file delle visualizzazioni e il file della ricerca salvata.

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

Screenshot che mostra una dashboard 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)

    Screenshot che mostra una mappa per gli avvisi IP geografici.

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

    Screenshot che mostra gli avvisi attivati più di frequente.

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

    Screenshot che mostra il numero di avvisi.

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

    Screenshot che mostra grafici a torta dei primi 20 indirizzi IP e porte in cui sono stati attivati gli avvisi.

  • 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 che mostra una tabella di riepilogo con informazioni dettagliate sui singoli avvisi.

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: