Découverte de Snort 3
Mise à jour :
Dans le domaine de la sécurité réseau, Snort est un outil incontournable pour détecter et analyser les intrusions en temps réel. Open source et largement utilisé, il permet de surveiller le trafic réseau et de repérer toute activité suspecte grâce à des règles personnalisées.
Dans ce premier guide, d’autres vont suivre, je vais vous montrer comment installer, configurer et utiliser Snort pour détecter les intrusions. Nous aborderons également la création de règles personnalisées pour répondre aux besoins spécifiques de votre infrastructure et l’analyse des alertes générées pour vous aider à interpréter les données et agir rapidement en cas d’incident.
C’est quoi Snort ?
Snort est un logiciel de détection d’intrusion réseau (Network Intrusion Detection System ou NIDS) reconnu pour sa capacité à surveiller et protéger les réseaux informatiques en temps réel.
Ce qui fait la force de Snort, c’est sa capacité à capturer le trafic réseau et à le comparer à une base de règles pour détecter les comportements suspects. Lorsque Snort identifie une activité suspecte, il génère une alerte qui peut être analysée pour mieux comprendre et répondre à l’incident. Ses fonctionnalités permettent ainsi de détecter des intrusions en temps réel, mais aussi de prévenir certaines attaques en agissant comme une barrière proactive.
Snort fonctionne selon plusieurs modes :
- Mode sniffer : dans ce mode, Snort capture le trafic réseau en temps réel et l’affiche dans la console, ce qui est utile pour obtenir une vue immédiate de ce qui circule sur le réseau.
- Mode enregistreur de paquets : ici, Snort capture le trafic et enregistre les paquets dans un fichier, permettant une analyse approfondie plus tard.
- Mode IDS (Intrusion Detection System) : ce mode est le plus avancé, car il compare les paquets réseau à des règles prédéfinies et génère des alertes lorsque des menaces potentielles sont détectées.
Un peu d’Histoire
Depuis sa création en 1998 par Martin Roesch, Snort a évolué pour devenir l’un des outils de détection d’intrusion réseau les plus utilisés dans le monde. Initialement conçu comme un simple logiciel de capture de paquets, Snort a rapidement gagné en popularité grâce à sa flexibilité et à sa capacité à détecter un large éventail de menaces réseau.
Dans ses premières versions, Snort se limitait à des fonctionnalités de base, telles que la capture et l’enregistrement du trafic réseau. Cependant, avec le développement de la cybersécurité et l’apparition de nouvelles menaces, Snort a dû évoluer pour offrir des fonctionnalités plus avancées, comme le mode IDS qui permet de détecter les comportements malveillants à l’aide de règles définies par l’utilisateur ou téléchargées depuis des bases de données communautaires.
En 2013, Cisco Systems a acquis Sourcefire, la société derrière Snort, consolidant ainsi l’outil dans l’écosystème de sécurité de Cisco. Cette acquisition a permis d’accélérer le développement de nouvelles fonctionnalités, notamment l’intégration avec d’autres outils de sécurité réseau et la mise en place d’un support de haut niveau pour les entreprises. Depuis, Snort continue d’être amélioré, avec des mises à jour régulières de ses règles et des évolutions pour rester pertinent face aux menaces de plus en plus sophistiquées.
Installation de Snort
Passons à l’installation de Snort. Je vous propose d’installer la version 3.5.0 sur une machine Debian 12 (elle fonctionne également sur une Ubuntu 24.04), cette machine est ma machine de rebonds de mon homelab.
Étape 1 : Préparation de l’environnement et installation des dépendances
Commencez par mettre à jour votre système pour vous assurer que tous les paquets sont récents et compatibles avec l’installation.
Ensuite, installez les dépendances essentielles pour compiler et exécuter Snort 3.5.0 :
Étape 2 : Installation de DAQ (Data Acquisition Library)
DAQ est une bibliothèque indispensable pour Snort puisqu’elle gère la capture de paquets. DAQ permet à Snort de fonctionner avec plusieurs moteurs de capture comme pcap ou afpacket.
-
Clonez le dépôt DAQ :
-
Configurez, compilez et installez DAQ :
DAQ est maintenant installé et prêt à être utilisé comme bibliothèque de capture pour Snort.
Étape 3 : Téléchargement et installation de Snort 3.5.0
-
Téléchargez Snort 3.5.0 depuis le site officiel :
-
Extrayez l’archive :
-
Configurez Snort en incluant les options pour gperftools et DAQ :
-
Compilez et installez Snort :
-
Vérifiez l’installation de Snort :
Snort 3 est maintenant installé et prêt à être configuré et utilisé pour la détection d’intrusions réseau.
Configuration de l’interface réseau
Pour que Snort puisse analyser l’ensemble du trafic réseau sur une
interface, il est souvent nécessaire de placer l’interface réseau en mode
promiscuous (ou mode promisc). Cette configuration est essentielle pour un
système de détection d’intrusion, car elle permet de capturer tous les paquets
qui passent par l’interface, même ceux qui ne lui sont pas directement destinés.
Voyons en détail ce qu’est le mode promisc et comment l’activer pour une
interface réseau, ici enp1s0
.
Qu’est-ce que le mode PROMISC ?
En fonctionnement normal, une carte réseau filtre le trafic pour ne traiter que les paquets adressés spécifiquement à son adresse MAC ou diffusés en broadcast. Autrement dit, elle ignore les paquets destinés aux autres adresses du réseau, ce qui est généralement suffisant pour des usages standards.
En revanche, en mode promiscuous (ou mode promisc), l’interface réseau capture tous les paquets qui transitent, peu importe leur destination. Cette configuration est idéale pour des outils de surveillance réseau comme Snort, car elle permet d’obtenir une vue complète du trafic circulant sur le réseau. Cela aide Snort à détecter des menaces, même si celles-ci visent d’autres hôtes que celui sur lequel Snort est installé.
Configuration de l’interface
Sous Linux, il est simple d’activer le mode promisc pour une interface réseau en
utilisant des commandes comme ip ou ifconfig. Voici les étapes pour
activer ce mode pour l’interface enp1s0
. Remplacez le nom de l’interface
réseau en fonction de votre configuration.
Par ailleurs, pour éviter que Snort ne tronque les paquets volumineux, nous devons désactiver certaines fonctions d’offloading au niveau de l’interface réseau. Ces fonctions sont souvent activées par défaut pour améliorer les performances du réseau, mais elles peuvent interférer avec la capture de paquets complète requise par Snort.
Étape 1 : Activer le mode promiscuous
-
Pour activer le mode promiscuous sur l’interface réseau
enp1s0
, exécutez la commande suivante :enp1s0
doit être remplacé par le nom de l’interface que vous souhaitez utiliser si celui-ci diffère.
-
Vérifiez que l’interface est bien en mode promiscuous avec la commande suivante :
Vous devriez voir une mention
PROMISC
dans la liste des options de l’interfaceenp1s0
, ce qui confirme qu’elle est bien configurée pour capturer l’ensemble du trafic.
Étape 2 : Désactiver l’Interface Offloading
L’Interface Offloading est une série d’optimisations matérielles utilisées pour décharger le traitement des paquets vers la carte réseau, ce qui peut réduire la charge CPU. Cependant, ces options peuvent causer des problèmes avec Snort, notamment en tronquant les paquets de plus de 1518 octets, ce qui empêche Snort de capturer certaines menaces de manière complète.
Nous devons désactiver les fonctionnalités GRO (Generic Receive Offload) et LRO (Large Receive Offload), qui sont souvent activées par défaut sur les interfaces réseau.
-
Pour vérifier si GRO et LRO sont activés, exécutez la commande suivante :
Vous verrez un résultat similaire à ceci si GRO ou LRO sont activés :
Note : Si vous voyez
on [fixed]
pour l’une de ces options, cela signifie que l’interface réseau ne permet pas de les désactiver, et il pourrait être nécessaire de changer de matériel ou d’interface si ce problème persiste. -
Désactivation de GRO et LRO
Pour désactiver ces fonctions et garantir que Snort puisse capturer des paquets de taille maximale, exécutez les commandes suivantes :
gro off
désactive le Generic Receive Offload.lro off
désactive le Large Receive Offload.
-
Vérifiez de nouveau les paramètres pour vous assurer que GRO et LRO sont bien désactivés :
Le résultat devrait désormais montrer que ces options sont désactivées (
off
), ce qui garantit que l’interface capturera les paquets dans leur intégralité, même pour ceux dépassant 1518 octets.
Étape 3 : Rendre les changements permanents
Les configurations effectuées pour le mode promiscuous et la désactivation de l’offloading peuvent être temporaires et réinitialisées après un redémarrage. Pour rendre ces modifications permanentes :
-
Activer le mode promiscuous au démarrage
Créez ou éditez un fichier de service pour appliquer cette configuration au démarrage. Par exemple, créez un script dans
/etc/systemd/system/promisc-mode.service
:Ajoutez-y les lignes suivantes :
Activez ensuite le service pour qu’il démarre automatiquement :
Configuration de base de Snort
Après avoir installé Snort 3.5.0 avec toutes les dépendances, la prochaine
étape est la configuration initiale pour que Snort puisse analyser le trafic
réseau efficacement. Le fichier de configuration principal de Snort est
snort.lua
(au lieu de snort.conf
dans les versions précédentes). Nous allons
voir comment configurer Snort pour surveiller une interface spécifique, ici
enp1s0
, et comment définir les paramètres de base.
Étape 1 : Ouvrir et éditer le fichier de configuration
Le fichier de configuration par défaut pour Snort 3 est un fichier Lua
généralement situé dans /usr/local/etc/snort/snort.lua
. Commencez par ouvrir
ce fichier dans un éditeur de texte :
Étape 2 : Configurer l’interface réseau
Dans le fichier de configuration, spécifiez l’interface réseau à surveiller.
Dans ce cas, nous utiliserons enp1s0
comme interface pour capturer le trafic.
-
Localisez la section qui définit l’interface réseau et modifiez-la pour qu’elle pointe vers
enp1s0
: -
Cette interface sera maintenant surveillée en continu par Snort, permettant de capturer tout le trafic entrant et sortant sur cette interface.
Étape 3 : Définir les réseaux surveillés et externes
Pour que Snort puisse distinguer le trafic local du trafic externe, il est
essentiel de définir les variables HOME_NET
et EXTERNAL_NET
dans le fichier
snort.lua
. Cela aide Snort à générer des alertes spécifiques au réseau
surveillé.
-
Dans la section des variables réseau, configurez les valeurs pour
HOME_NET
etEXTERNAL_NET
. Par exemple :- HOME_NET : définit le sous-réseau local (remplacez
192.168.20.0/24
par votre réseau local). - EXTERNAL_NET :
any
signifie que tout ce qui n’est pas dansHOME_NET
sera considéré comme externe.
- HOME_NET : définit le sous-réseau local (remplacez
Étape 6 : Activer les règles de détection
Les règles de détection permettent à Snort d’identifier les menaces. En
fonction de votre environnement, vous pouvez activer des règles spécifiques dans
le fichier snort.lua
:
-
Incluez les fichiers de règles nécessaires pour analyser les menaces. Si vous avez téléchargé des règles, comme les règles de base ou les règles communautaires de Snort, assurez-vous de spécifier leur emplacement dans
snort.lua
:Modifiez le chemin vers le fichier
local.rules
selon l’emplacement de vos fichiers de règles. -
Enregistrez les modifications et quittez l’éditeur de texte.
Etape 6 : Créer une règle
Pour tester la configuration, nous allons créer une règle simple qui déclenche une alerte lorsqu’un paquet ICMP (ping) est reçu.
Commençons par créer les dossiers et les fichiers nécessaires :
Editez le fichier local.rules
pour y ajouter la règle suivante :
Étape 7 : Tester la configuration
Avant de lancer Snort en mode de détection, vérifiez que le fichier de configuration ne contient pas d’erreurs :
Cette commande teste la configuration et renvoie un message de succès si aucune erreur n’est détectée.
Test simple
Une fois que Snort est installé et configuré, il est essentiel de tester son bon fonctionnement pour s’assurer qu’il détecte bien les événements réseau. Un test simple consiste à utiliser la commande ping depuis une autre machine pour générer un type de trafic réseau courant. Cette opération permettra de vérifier que Snort capture les paquets ICMP (Internet Control Message Protocol) et génère une alerte en conséquence.
Étape 1 : Démarrer Snort
Pour que la nouvelle règle soit prise en compte, Démarrez Snort en spécifiant le fichier de configuration, le fichier de règles et l’interface à surveiller :
Snort est maintenant prêt à surveiller le trafic ICMP et à générer des alertes lorsqu’il détecte un ping.
Étape 2 : Lancer un ping depuis une autre machine
-
Depuis une autre machine sur le même réseau, envoyez un ping vers l’adresse IP de la machine sur laquelle Snort est configuré. Par exemple :
Remplacez
192.168.20.92
par l’adresse IP de la machine surveillée par Snort. -
Pendant que le ping est en cours, Snort devrait capturer les paquets ICMP et déclencher la règle que nous avons ajoutée, générant ainsi une alerte.
Étape 3 : Vérifier les messages
Sur la machine où a été lancé Snort, vérifiez les messages d’alerte dans la sortie standard :
Si aucune alerte n’est générée, voici quelques étapes de dépannage :
- Assurez-vous que Snort est bien en mode promiscuous (
ip link show enp1s0
doit montrerPROMISC
). - Vérifiez que Snort utilise le fichier
local.rules
et que la règle ICMP y est bien ajoutée. - Assurez-vous que la commande ping est envoyée vers l’adresse IP exacte de la machine sur laquelle Snort est configuré.
Conclusion
Ce guide constitue une première étape dans l’apprentissage et l’utilisation de Snort pour surveiller et protéger un réseau. Nous avons abordé l’installation de Snort 3.5.0, la configuration de base, l’activation du mode promiscuous, ainsi qu’un test simple pour vérifier la détection de trafic ICMP. En suivant ces étapes, vous avez maintenant une installation opérationnelle capable de détecter des événements de base, un socle essentiel pour renforcer la sécurité de votre réseau.
Les possibilités offertes par Snort sont vastes, et de nombreux sujets restent à explorer pour approfondir vos connaissances et adapter davantage Snort aux besoins spécifiques de votre environnement. Dans les prochains guides, nous aborderons des sujets plus avancés, tels que :
- Téléchargement de règles de détection de la communauté : comprendre la syntaxe des règles pour concevoir des alertes adaptées aux menaces spécifiques de votre réseau.
- Automatisation des mises à jour des règles : mise en place de PulledPork pour automatiser les mises à jour des règles et rester à jour face aux nouvelles menaces.
- Utilisation avancée des préprocesseurs : configurer des préprocesseurs comme HTTP Inspect et Stream5 pour analyser en profondeur le trafic spécifique.
- Analyse et gestion des logs avec des outils tiers : utilisation de Snorby, ELK Stack, ou Wireshark pour analyser et gérer les alertes générées par Snort.
Ces prochaines étapes vous permettront de tirer le meilleur parti de Snort et d’en faire un allié précieux pour une surveillance réseau proactive et efficace.
Liste des ressources pour approfondir Snort
-
Site officiel de Snort : https://www.snort.org/ ↗ Accès aux dernières versions de Snort, téléchargements, règles et documentation officielle.
-
Documentation de Snort 3 : https://docs.snort.org/ ↗ Guide complet pour la configuration, les préprocesseurs, et les règles spécifiques à Snort 3.
-
Projet GitHub de Snort : https://github.com/snort ↗ Code source, issues, et contributions communautaires pour Snort.
-
Sources utilisées :
- Shapehost : Guide d’installation et configuration de Snort 3 sur Ubuntu Shapehost Guide ↗
- Zenarmor : Installation et configuration de Snort sur Ubuntu Linux Zenarmor Guide ↗