Détecter l’intrusion dans un réseau avec Azure Network Watcher et des outils open source

Les captures de paquets sont essentielles pour implémenter des systèmes de détection d’intrusions dans un réseau et surveiller la sécurité du réseau. Plusieurs outils open source de systèmes de détection d’intrusions sont disponibles pour traiter des captures de paquets et rechercher les éventuelles signatures d’activités malveillantes et d’intrusions dans un réseau. En utilisant les captures de paquets fournies par Azure Network Watcher, vous pouvez analyser votre réseau pour détecter des intrusions ou des vulnérabilités dangereuses.

Suricata est un de ces outils open source. Il s’agit d’un moteur de systèmes de détection d’intrusions qui utilise des ensembles de règles pour surveiller le trafic réseau et qui déclenche des alertes en cas d’événements suspects. Suricata propose un moteur multithread pour effectuer une analyse du trafic réseau de manière plus rapide et plus efficace. Pour plus d’informations sur Suricata et ses fonctionnalités, accédez au site web de Suricata.

Scénario

Cet article explique comment configurer votre environnement pour détecter des intrusions dans un réseau à l’aide de Network Watcher, de Suricata et de la pile élastique (Elastic Stack).

Network Watcher vous donne les captures de paquets pour effectuer la détection des intrusions réseau. Suricata traite les captures de paquets et déclenche des alertes basées sur des paquets qui correspondent à son ensemble de règles de menaces. Suricata stocke ces alertes dans un fichier journal sur votre ordinateur local.

À l’aide de la pile élastique, vous pouvez indexer les journaux générés par Suricata, puis les utiliser pour créer un tableau de bord Kibana. Un tableau de bord fournit une représentation visuelle des journaux d’activité et un moyen d’obtenir rapidement des informations sur d’éventuelles vulnérabilités du réseau.

Diagram that shows a simple web application scenario.

Vous pouvez configurer les deux outils open source sur une machine virtuelle Azure, afin de pouvoir effectuer cette analyse dans votre propre environnement réseau Azure.

Installer Suricata

  1. Dans le terminal de ligne de commande de votre machine virtuelle, exécutez les commandes suivantes :

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo apt-get install suricata
    
  2. Pour vérifier votre installation, exécutez la commande suricata -h pour afficher la liste complète des commandes.

Pour obtenir d’autres méthodes d’installation, consultez le guide de démarrage rapide d’installation Suricata.

Télécharger l’ensemble de règles Menaces émergentes

À ce stade, Suricata ne dispose d’aucune règle à exécuter. Vous pouvez créer vos propres règles si vous souhaitez détecter des menaces spécifiques à votre réseau. Vous pouvez également utiliser des ensembles de règles développés à partir de différents fournisseurs, tels que Menaces émergentes ou des règles Talos de Snort. Dans cet article, vous utilisez l’ensemble de règles Menaces émergentes disponible librement.

Téléchargez l’ensemble de règles et copiez-le dans le répertoire :

wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxf emerging.rules.tar.gz
sudo cp -r rules /etc/suricata/

Traiter les captures de paquets à l’aide de Suricata

Pour traiter les captures de paquets à l’aide de Suricata, exécutez la commande suivante :

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

Pour consulter les alertes générées, parcourez le fichier fast.log :

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

Configurer la Suite Elastic

Les journaux créés par Suricata contiennent des informations importantes sur l’activité de votre réseau, mais ceux-ci ne sont pas les plus faciles à lire et à comprendre. En connectant Suricata à la pile élastique, vous pouvez générer un tableau de bord Kibana pour rechercher, créer des graphiques, analyser et obtenir des informations à partir de nos journaux d’activité.

Installer Elasticsearch

  1. Les versions 5.0 et ultérieures d’Elastic Stack nécessitent Java 8. Exécutez la commande java -version pour vérifier la version que vous utilisez. Si Java n’est pas installé sur votre ordinateur, reportez-vous à la documentation sur les kits de développement Java pris en charge par Azure.

  2. Téléchargez le package binaire approprié pour votre système :

    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
    

    Vous trouverez d’autres méthodes d’installation sur la page web Elastic pour installer Elasticsearch.

  3. Vérifiez qu’Elasticsearch est en cours d’exécution à l’aide de cette commande :

    curl http://127.0.0.1:9200
    

    Vous devez obtenir une réponse similaire à cet exemple :

    {
    "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"
    }
    

Pour plus d’instructions sur l’installation d’Elasticsearch, reportez-vous à la page web Elastic sur l’installation.

Installer Logstash

  1. Installez Logstash en exécutant la commande suivante :

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Configurer Logstash pour qu’il puisse lire à partir de la sortie du fichier eve.json. Créez un fichier logstash.conf à l’aide de cette commande :

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Ajoutez le contenu suivant au fichier. Vérifiez que le chemin d’accès au fichier eve.json est 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. Accordez les autorisations appropriées pour le fichier eve.json afin que Logstash puisse ingérer le fichier :

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. Lancez Logstash en exécutant cette commande :

    sudo /etc/init.d/logstash start
    

Pour plus d’informations sur l’installation de Logstash, reportez-vous à la documentation Elastic officielle.

Installer Kibana

  1. Exécutez les commandes suivantes pour installer 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. Exécutez Kibana à l’aide de ces commandes :

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Affichez votre interface web Kibana en accédant à http://localhost:5601.

    Dans ce scénario, le modèle d’index utilisé pour les journaux d’activité Suricata est logstash-*.

  4. Si vous souhaitez afficher le tableau de bord Kibana à distance, créez une règle de groupe de sécurité réseau entrant (NSG) qui autorise l’accès au port 5601.

Créer un tableau de bord Kibana

Cet article fournit un exemple de tableau de bord pour que vous puissiez visualiser les tendances et les informations associées à vos alertes. Pour l’utiliser :

  1. Téléchargez le fichier du tableau de bord, le fichier de visualisation et le fichier des recherches sauvegardées.

  2. Dans l’onglet Gestion de Kibana, accédez à Objets enregistrés et importez les trois fichiers. Puis, dans l’onglet Tableau de bord, vous pouvez ouvrir et charger l’exemple de tableau de bord.

Vous avez également la possibilité de créer vos propres visualisations et tableaux de bord en fonction des métriques qui vous intéressent. Reportez-vous à la documentation officielle de Kibana pour en savoir plus sur la création de visualisation Kibana.

Screenshot that shows a Kibana dashboard.

Visualiser les journaux d’activité d’alertes de système de détection d’intrusions

L’exemple de tableau de bord fournit plusieurs visualisations des journaux d’activité d’alertes Suricata :

  • Alertes par GeoIP : carte affichant la répartition des alertes par pays/région d’origine en fonction de l’emplacement géographique (déterminé par l’adresse IP).

    Screenshot shows a map for geographic IP alerts.

  • 10 alertes principales : liste des 10 alertes les plus fréquentes déclenchées avec leur description. Sélectionner une alerte permet d’appliquer un filtre sur le tableau de bord pour qu’il affiche uniquement les informations associées à cette alerte.

    Screenshot that shows the most frequently triggered alerts.

  • Nombre d’alertes : nombre total d’alertes que l’ensemble de règles a déclenchées.

    Screenshot shows the number of alerts.

  • 20 alertes ScrIP principales, 20 alertes DestIP principales, 20 alertes SrcPort principales, 20 alertes DestPort principales : graphiques en secteurs qui affichent les sources et les destinations des 20 principales adresses IP et ports des alertes déclenchées. Vous pouvez appliquer un filtre sur des adresses IP ou des ports spécifiques pour connaître le nombre et le type d’alertes déclenchées.

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

  • Résumé des alertes : tableau récapitulant les spécificités de chaque alerte. Vous pouvez personnaliser ce tableau pour afficher d’autres paramètres qui vous intéressent pour chaque alerte.

    Screenshot shows a summary table with details about individual alerts.

Pour plus d’informations sur la création de tableaux de bord et de visualisations personnalisés, consultez la documentation officielle de Kibana.

Conclusion

L’association des captures de paquets Network Watcher avec des outils open source de système de détection d’intrusions tels que Suricata vous permet de détecter les intrusions dans un réseau pour un large éventail de menaces.

Les tableaux de bord vous aident à repérer rapidement les tendances et les anomalies au sein de votre réseau. Vous pouvez également utiliser des tableaux de bord pour examiner les données afin de détecter les causes racines des alertes, telles que les agents utilisateur malveillants ou les ports vulnérables. Avec ces données extraites, vous pouvez prendre des décisions éclairées sur la façon de :

  • Réagir et protéger votre réseau contre les tentatives d’intrusion dangereuses.
  • Créer des règles pour empêcher les intrusions futures dans votre réseau.

Étape suivante

Découvrez comment déclencher des captures de paquets en fonction des alertes :