Introduction à Snort IDS

CybersécuritéBeginner
Pratiquer maintenant

Introduction

Bienvenue dans ce laboratoire d'introduction à Snort IDS.

Snort est un système open-source de prévention des intrusions réseau (NIPS) et de détection des intrusions réseau (NIDS) capable d'effectuer une analyse du trafic et une journalisation des paquets en temps réel sur les réseaux IP. Il peut réaliser des analyses de protocoles, des recherches de contenu et des correspondances. Il est couramment utilisé pour bloquer activement ou détecter passivement diverses attaques et sondages, tels que les dépassements de tampon (buffer overflows), les scans de ports furtifs, les attaques d'applications web, et bien plus encore.

À un niveau élevé, un IDS répond à une question différente de celle d'un renifleur de paquets. Un renifleur vous aide à observer le trafic. Un IDS tente de décider si une partie de ce trafic mérite une attention particulière. Snort y parvient en combinant l'inspection des paquets avec un langage de règles. En d'autres termes, il transforme le trafic brut en événements pertinents pour la sécurité.

Dans ce laboratoire, vous apprendrez les bases de Snort. Vous explorerez son fichier de configuration, apprendrez à valider la syntaxe de configuration et exécuterez Snort dans deux de ses principaux modes opérationnels : le mode renifleur (Sniffer) et le mode enregistreur de paquets (Packet Logger).

Inspecter le fichier de configuration de Snort

Dans cette étape, vous explorerez le fichier de configuration principal utilisé par Snort. Comprendre ce fichier est essentiel car il dicte le comportement de Snort, le réseau qu'il protège et les règles qu'il applique.

La configuration est importante car la qualité de la détection dépend fortement du contexte. Un IDS qui ne sait pas quelles adresses appartiennent à votre environnement ne peut pas raisonner correctement sur le trafic entrant par rapport au trafic interne. Les variables comme HOME_NET ne sont donc pas des paramètres cosmétiques. Elles font partie de la manière dont Snort modélise le réseau qu'il défend.

Le fichier de configuration principal de Snort se trouve à l'emplacement /etc/snort/snort.conf. Ce fichier contient divers paramètres, notamment des variables réseau, les chemins vers les fichiers de règles et les configurations des préprocesseurs.

Commençons par naviguer vers votre répertoire de projet, qui est votre espace de travail par défaut.

cd ~/project

L'une des variables les plus importantes dans le fichier de configuration de Snort est HOME_NET. Cette variable définit le réseau interne que Snort est censé protéger. Par défaut, elle est souvent définie sur any, ce qui signifie que Snort surveillera tout le trafic réseau.

Vous pouvez utiliser la commande grep pour rechercher la variable HOME_NET dans le fichier de configuration. La commande grep est un outil puissant sous Linux utilisé pour rechercher des modèles de texte spécifiques dans les fichiers. Comme le fichier de configuration est protégé, nous devons utiliser sudo pour exécuter la commande avec des privilèges administratifs.

sudo grep "ipvar HOME_NET" /etc/snort/snort.conf

Vous devriez voir un résultat similaire à celui-ci :

ipvar HOME_NET any

Ce résultat confirme que la variable HOME_NET est actuellement définie sur any. Dans un environnement de production réel, vous changeriez généralement cela pour correspondre à votre sous-réseau IP interne spécifique (par exemple, 192.168.1.0/24) afin de réduire les faux positifs et d'améliorer les performances.

Vous pouvez également visualiser l'intégralité du fichier de configuration à l'aide de la commande less si vous souhaitez explorer davantage, bien qu'il soit assez long. Pour l'instant, savoir où se trouve le fichier et comment trouver les variables clés est suffisant.

Tester la syntaxe de configuration

Dans cette étape, vous apprendrez à tester le fichier de configuration de Snort pour détecter les erreurs de syntaxe.

La validation avant le déploiement est une pratique opérationnelle critique. Une règle de détection ou un fichier de configuration n'est utile que si le moteur peut réellement le charger. Le test de syntaxe est l'équivalent IDS de la compilation de code avant la mise en production : il détecte les erreurs tôt et évite les angles morts en production.

Chaque fois que vous apportez des modifications au fichier snort.conf, il est fortement recommandé de tester la configuration avant de démarrer ou de redémarrer le service Snort. S'il y a une faute de frappe ou une mauvaise configuration, Snort ne démarrera pas, ce qui pourrait laisser votre réseau sans surveillance.

Snort propose un mode de test intégré. Vous pouvez utiliser l'indicateur -T pour demander à Snort de tester la configuration et l'indicateur -c pour spécifier le chemin vers le fichier de configuration que vous souhaitez tester.

Exécutez la commande suivante pour tester la configuration par défaut :

sudo snort -T -c /etc/snort/snort.conf

Comme Snort doit accéder aux interfaces réseau et aux fichiers système, vous devez l'exécuter avec sudo pour lui accorder des privilèges administratifs.

Pendant l'exécution de la commande, Snort affichera de nombreuses informations dans le terminal. Il initialise les préprocesseurs, charge les règles et valide la syntaxe.

Faites défiler jusqu'en bas de la sortie. Vous recherchez un message de succès spécifique qui ressemble à ceci :

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.15.1 GRE (Build 68)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2019 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.10.1 (with TPACKET_V3)
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.11

           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 3.0  <Build 1>
           Preprocessor Object: SF_GTP  Version 1.1  <Build 4>
           Preprocessor Object: SF_CORVUS  Version 1.1  <Build 4>
           ...

Snort successfully validated the configuration!
Snort exiting

La phrase clé ici est Snort successfully validated the configuration!. Cela signifie que votre fichier snort.conf est syntaxiquement correct et prêt à être utilisé.

Exécuter Snort en mode renifleur (Sniffer)

Dans cette étape, vous exécuterez Snort en mode renifleur.

Le mode renifleur est la manière la plus basique d'utiliser Snort. Dans ce mode, Snort lit simplement les paquets circulant sur le réseau et les affiche sur la console dans un flux continu. Il fonctionne de manière très similaire à l'utilitaire populaire tcpdump.

Ceci est utile sur le plan pédagogique car cela montre que la technologie IDS commence toujours par les paquets. Avant que Snort puisse alerter sur le trafic, il doit capturer et décoder ce trafic correctement. Apprendre le mode renifleur en premier permet de garder visible la base au niveau des paquets, au lieu de traiter les alertes comme quelque chose de magique.

Pour exécuter Snort en mode renifleur, vous utilisez l'indicateur -v (verbose). Cela indique à Snort d'imprimer les en-têtes des paquets TCP/IP à l'écran.

Comme le trafic réseau peut être écrasant et inonder votre terminal, nous utiliserons également l'indicateur -n suivi d'un nombre. Cela indique à Snort de ne capturer qu'un nombre spécifique de paquets, puis de quitter automatiquement.

Exécutez la commande suivante pour capturer et afficher 5 paquets :

sudo snort -v -n 5

Vous verrez une sortie similaire à la suivante, montrant les en-têtes des paquets :

Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
...
05/18-14:32:10.123456 192.168.1.10:54321 -> 8.8.8.8:53
UDP TTL:64 TOS:0x0 ID:12345 IpLen:20 DgmLen:63
Len: 35
...
===============================================================================
Snort exiting

Si vous souhaitez voir encore plus de détails, vous pouvez combiner les indicateurs. Par exemple, l'ajout de -d affiche les données d'application (charge utile) du paquet, et -e affiche les en-têtes de la couche liaison (adresse MAC).

Essayons de capturer 2 paquets avec tous les détails (en-têtes, données et informations de la couche liaison) :

sudo snort -vde -n 2

Ce mode est extrêmement utile pour résoudre les problèmes de connectivité réseau ou pour inspecter rapidement quel type de trafic traverse actuellement votre interface réseau.

Exécuter Snort en mode enregistreur de paquets (Packet Logger)

Dans cette étape, vous apprendrez à exécuter Snort en mode enregistreur de paquets.

Bien que le mode renifleur soit idéal pour une visualisation en temps réel, il n'est pas pratique pour une surveillance à long terme ou une analyse détaillée. Le mode enregistreur de paquets résout ce problème en enregistrant les paquets capturés sur le disque dans un format qui peut être analysé ultérieurement à l'aide d'outils comme Wireshark ou Snort lui-même.

Les preuves sous forme de paquets enregistrés sont importantes car les alertes et les paquets se complètent. Une alerte vous indique qu'une règle a été déclenchée. L'enregistrement du paquet vous permet de confirmer ce qui s'est réellement passé et d'enquêter sur des détails que le résumé de l'alerte pourrait ne pas inclure. Les piles de surveillance matures conservent souvent les deux.

Tout d'abord, vous devez créer un répertoire pour stocker les fichiers journaux. Créons un répertoire nommé snort_logs dans votre dossier de projet.

mkdir -p ~/project/snort_logs

Pour exécuter Snort en mode enregistreur de paquets, vous utilisez l'indicateur -l suivi du chemin vers votre répertoire de journalisation. Nous utiliserons également -dev pour capturer tous les détails des paquets et -n 10 pour capturer exactement 10 paquets avant de quitter.

Exécutez la commande suivante :

sudo snort -dev -l ~/project/snort_logs -n 10

Snort capturera 10 paquets et les écrira dans le répertoire que vous avez spécifié. Vous ne verrez pas les paquets imprimés à l'écran cette fois-ci, mais vous verrez les résumés d'initialisation et de sortie.

Une fois que Snort a terminé son exécution, vous pouvez vérifier que le fichier journal a été créé en listant le contenu du répertoire snort_logs :

ls -l ~/project/snort_logs

Vous devriez voir un fichier nommé snort.log. suivi d'un horodatage, similaire à ceci :

total 4
-rw------- 1 root root 1234 May 18 14:45 snort.log.1684421100

Ce fichier est enregistré dans un format binaire (pcap). Vous ne pouvez pas le lire directement avec un éditeur de texte comme nano ou cat. Au lieu de cela, vous utiliseriez généralement un outil comme tcpdump ou le reliriez dans Snort en utilisant l'indicateur -r (read) pour une analyse plus approfondie.

Résumé

Félicitations ! Vous avez terminé avec succès le laboratoire d'introduction à Snort IDS.

Dans ce laboratoire, vous avez appris les concepts fondamentaux de Snort. Vous avez exploré le fichier de configuration principal (snort.conf) et appris à valider sa syntaxe à l'aide de l'indicateur -T pour éviter les erreurs au démarrage. Vous vous êtes également exercé à exécuter Snort en mode renifleur pour visualiser le trafic réseau en direct sur votre terminal, et en mode enregistreur de paquets pour enregistrer les paquets capturés dans un répertoire en vue d'une analyse ultérieure. Ces compétences fondamentales sont essentielles pour quiconque souhaite utiliser Snort pour la surveillance de la sécurité réseau et la détection des intrusions.