Eseguire il rilevamento di intrusioni di rete con Network Watcher e strumenti open sourcePerform network intrusion detection with Network Watcher and open source tools

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.Packet captures are a key component for implementing network intrusion detection systems (IDS) and performing Network Security Monitoring (NSM). Esistono diversi strumenti IDS open source che elaborano le acquisizioni di pacchetti e cercano le firme di possibili intrusioni di rete e di attività dannosa.There are several open source IDS tools that process packet captures and look for signatures of possible network intrusions and malicious activity. Usando le acquisizioni di pacchetti fornite da Network Watcher, è possibile analizzare la rete per trovare eventuali intrusioni dannose o vulnerabilità.Using the packet captures provided by Network Watcher, you can analyze your network for any harmful intrusions or vulnerabilities.

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.One such open source tool is Suricata, an IDS engine that uses rulesets to monitor network traffic and triggers alerts whenever suspicious events occur. Suricata offre un motore a thread multipli e può quindi eseguire l'analisi del traffico di rete con maggiore velocità ed efficienza.Suricata offers a multi-threaded engine, meaning it can perform network traffic analysis with increased speed and efficiency. Per altri dettagli su Suricata e sulle relative funzionalità, visitare il sito Web all'indirizzo https://suricata-ids.org/.For more details about Suricata and its capabilities, visit their website at https://suricata-ids.org/.

ScenarioScenario

Questo articolo illustra come configurare l'ambiente per eseguire il rilevamento di intrusioni di rete usando Network Watcher, Suricata ed Elastic Stack.This article explains how to set up your environment to perform network intrusion detection using Network Watcher, Suricata, and the Elastic Stack. Network Watcher fornisce le acquisizioni di pacchetti usate per eseguire il rilevamento di intrusioni di rete.Network Watcher provides you with the packet captures used to perform network intrusion detection. Suricata elabora le acquisizioni di pacchetti e attiva avvisi in base ai pacchetti che corrispondono ai set di regole specificati delle minacce.Suricata processes the packet captures and trigger alerts based on packets that match its given ruleset of threats. Questi avvisi vengono archiviati in un file di log nel computer locale.These alerts are stored in a log file on your local machine. Usando Elastic Stack, i log generati da Suricata possono essere indicizzati e usati per creare un dashboard Kibana, che offre una rappresentazione visiva dei log e consente di comprendere rapidamente le potenziali vulnerabilità della rete.Using the Elastic Stack, the logs generated by Suricata can be indexed and used to create a Kibana dashboard, providing you with a visual representation of the logs and a means to quickly gain insights to potential network vulnerabilities.

Scenario di applicazione Web semplice

Entrambi gli strumenti open source possono essere configurati in una VM di Azure, consentendo di eseguire questa analisi nell'ambiente di rete di Azure.Both open source tools can be set up on an Azure VM, allowing you to perform this analysis within your own Azure network environment.

PassiSteps

Installare SuricataInstall Suricata

Per tutti gli altri metodi di installazione, visitare http://suricata.readthedocs.io/en/latest/install.htmlFor all other methods of installation, visit http://suricata.readthedocs.io/en/latest/install.html

  1. Nel terminale della riga di comando della VM eseguire i comandi seguenti:In the command-line terminal of your VM run the following commands:

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo sudo apt-get install suricata
    
  2. Per verificare l'installazione, eseguire il comando suricata -h per visualizzare l'elenco completo di comandi.To verify your installation, run the command suricata -h to see the full list of commands.

Scaricare il set di regole Emerging ThreatsDownload the Emerging Threats ruleset

In questa fase, non sono disponibili regole per l'esecuzione di Suricata.At this stage, we do not have any rules for Suricata to run. È possibile creare le proprie regole se esistono minacce specifiche per la rete, che si vuole rilevare, oppure è possibile usare set di regole sviluppati di diversi provider, ad esempio Emerging Threats o le regole VRT di Snort.You can create your own rules if there are specific threats to your network you would like to detect, or you can also use developed rule sets from a number of providers, such as Emerging Threats, or VRT rules from Snort. Qui viene usato il set di regole Emerging Threats accessibile gratuitamente:We use the freely accessible Emerging Threats ruleset here:

Scaricare il set di regole e copiarle nella directory:Download the rule set and copy them into the directory:

wget http://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 con SuricataProcess packet captures with Suricata

Per elaborare le acquisizioni di pacchetti usando Suricata, eseguire questo comando:To process packet captures using Suricata, run the following command:

sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>

Per controllare gli avvisi risultanti, leggere il file fast.log:To check the resulting alerts, read the fast.log file:

tail -f /var/log/suricata/fast.log

Configurare Elastic StackSet up the Elastic Stack

Anche se i log generati da Suricata contengono informazioni importanti su quanto avviene nella rete, la lettura e la comprensione di questi file di log non sono molto semplici.While the logs that Suricata produces contain valuable information about what’s happening on our network, these log files aren’t the easiest to read and understand. Connettendo Suricata con Elastic Stack, è possibile creare un dashboard Kibana che consente di cercare, creare grafici, analizzare e derivare informazioni dettagliate dai log.By connecting Suricata with the Elastic Stack, we can create a Kibana dashboard what allows us to search, graph, analyze, and derive insights from our logs.

Installare ElasticsearchInstall Elasticsearch

  1. Elastic Stack versione 5.0 e successive richiede Java 8.The Elastic Stack from version 5.0 and above requires Java 8. Eseguire il comando java -version per controllare la versione in uso.Run the command java -version to check your version. Se Java non è installato, vedere la documentazione sul sito Web OracleIf you do not have java install, refer to documentation on Oracle's website
  2. Scaricare il pacchetto binario corretto per il proprio sistema:Download the correct binary package for your system:

    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
    

    Per altri metodi di installazione, vedere Elasticsearch Installation (Installazione di Elasticsearch)Other installation methods can be found at Elasticsearch Installation

  3. Verificare che Elasticsearch sia in esecuzione con questo comando:Verify that Elasticsearch is running with the command:

    curl http://127.0.0.1:9200
    

    La risposta visualizzata sarà simile a questa:You should see a response similar to this:

    {
    "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 Installation (Installazione)For further instructions on installing Elastic search, refer to the page Installation

Installare LogstashInstall Logstash

  1. Per installare Logstash, eseguire questi comandi:To install Logstash run the following commands:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Successivamente è necessario configurare Logstash per la lettura dall'output del file eve.json.Next we need to configure Logstash to read from the output of eve.json file. Creare un file logstash.conf usando:Create a logstash.conf file using:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Aggiungere il contenuto seguente al file (verificare che il percorso al file eve.json sia corretto):Add the following content to the file (make sure that the path to the eve.json file is correct):

    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.Make sure to give the correct permissions to the eve.json file so that Logstash can ingest the file.

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. Per avviare Logstash, eseguire il comando:To start Logstash run the command:

    sudo /etc/init.d/logstash start
    

Per altre istruzioni sull'installazione di Logstash, vedere la documentazione ufficialeFor further instructions on installing Logstash, refer to the official documentation

Installare KibanaInstall Kibana

  1. Eseguire questi comandi per installare Kibana:Run the following commands to install 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. Per eseguire Kibana, usare questi comandi:To run Kibana use the commands:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Per visualizzare l'interfaccia Web di Kibana, passare a http://localhost:5601To view your Kibana web interface, navigate to http://localhost:5601

  4. Per questo scenario, il modello di indice usato per i log di Suricata è "logstash-"For this scenario, the index pattern used for the Suricata logs is "logstash-"

  5. Per visualizzare il dashboard Kibana in remoto, creare una regola dei gruppi di sicurezza di rete in ingresso che consenta l'accesso alla porta 5601.If you want to view the Kibana dashboard remotely, create an inbound NSG rule allowing access to port 5601.

Creare un dashboard KibanaCreate a Kibana dashboard

Per questo articolo, è stato fornito un dashboard di esempio per visualizzare tendenze e dettagli degli avvisi.For this article, we have provided a sample dashboard for you to view trends and details in your alerts.

  1. Scaricare il file del dashboard qui, il file di visualizzazione qui e il file della ricerca salvato qui.Download the dashboard file here, the visualization file here, and the saved search file here.

  2. Nella scheda Management (Gestione) di Kibana passare a Saved Objects (Oggetti salvati) e importare tutti e tre i file.Under the Management tab of Kibana, navigate to Saved Objects and import all three files. Dalla scheda Dashboard è quindi possibile aprire e caricare il dashboard di esempio.Then from the Dashboard tab you can open and load the sample dashboard.

È anche possibile creare visualizzazioni e dashboard personalizzati per le metriche a cui si è interessati.You can also create your own visualizations and dashboards tailored towards metrics of your own interest. Per altre informazioni sulla creazione di visualizzazioni Kibana, vedere la documentazione ufficiale di Kibana.Read more about creating Kibana visualizations from Kibana's official documentation.

Dashboard Kibana

Visualizzare i log di avvisi IDSVisualize IDS alert logs

Il dashboard di esempio offre diverse visualizzazioni dei log di avvisi di Suricata:The sample dashboard provides several visualizations of the Suricata alert logs:

  1. Alerts by GeoIP (Avvisi per IP geografico): mappa che illustra la distribuzione degli avvisi per paese di origine in base alla località geografica (determinata dall'IP)Alerts by GeoIP – a map showing the distribution of alerts by their country of origin based on geographic location (determined by IP)

    IP geografico

  2. Top 10 Alerts (Primi 10 avvisi): riepilogo dei 10 avvisi attivati più di frequente e relativa descrizione.Top 10 Alerts – a summary of the 10 most frequent triggered alerts and their description. Facendo clic su un singolo avviso, si accede alle informazioni del dashboard relative a quell'avviso specifico.Clicking an individual alert filters down the dashboard to the information pertaining to that specific alert.

    Immagine 4

  3. Number of Alerts (Numero di avvisi): conteggio totale degli avvisi attivati dal set di regoleNumber of Alerts – the total count of alerts triggered by the ruleset

    Immagine 5

  4. Top 20 Source/Destination IPs/Ports (Primi 20 IP/porte di origine/destinazione): grafici a torta che illustrano i primi 20 IP e porte in cui sono stati attivati avvisi.Top 20 Source/Destination IPs/Ports - pie charts showing the top 20 IPs and ports that alerts were triggered on. È possibile filtrare specifici IP/porte per visualizzare quanti avvisi e di quale tipo sono stati attivati.You can filter down on specific IPs/ports to see how many and what kind of alerts are being triggered.

    Immagine 6

  5. Alert Summary (Riepilogo avvisi): tabella che riepiloga specifici dettagli di ogni singolo avviso.Alert Summary – a table summarizing specific details of each individual alert. È possibile personalizzare questa tabella per visualizzare altri parametri di interesse per ogni avviso.You can customize this table to show other parameters of interest for each alert.

    Immagine 7

Per altri documenti sulla creazione di visualizzazioni e dashboard personalizzati, vedere la documentazione ufficiale di Kibana.For more documentation on creating custom visualizations and dashboards, see Kibana’s official documentation.

ConclusioneConclusion

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.By combining packet captures provided by Network Watcher and open source IDS tools such as Suricata, you can perform network intrusion detection for a wide range of threats. Questi dashboard consentono di trovare rapidamente tendenze e anomalie nella rete, oltre che esaminare i dati per trovare le cause radice degli avvisi, ad esempio agenti utenti malintenzionati o porte vulnerabili.These dashboards allow you to quickly spot trends and anomalies within your network, as well dig into the data to discover root causes of alerts such as malicious user agents or vulnerable ports. Con i dati estratti, è possibile prendere decisioni informate su come reagire e proteggere la rete da qualsiasi tentativo di intrusione dannoso e creare regole per impedire intrusioni future nella rete.With this extracted data, you can make informed decisions on how to react to and protect your network from any harmful intrusion attempts, and create rules to prevent future intrusions to your network.

Passaggi successiviNext steps

Per informazioni su come attivare le acquisizioni di pacchetti in base agli avvisi, vedere Use packet capture to do proactive network monitoring with Azure Functions (Usare l'acquisizione di pacchetti per eseguire il monitoraggio proattivo della rete con Funzioni di Azure)Learn how to trigger packet captures based on alerts by visiting Use packet capture to do proactive network monitoring with Azure Functions

Per informazioni su come visualizzare i log dei flussi dei gruppi di sicurezza di rete con Power BI, vedere Visualizzare i log dei flussi dei gruppi di sicurezza di rete con Power BILearn how to visualize your NSG flow logs with Power BI by visiting Visualize NSG flows logs with Power BI