Project Snort & IDSCenter
Théorie :
Qu'est-ce qu'un système de détection d'intrusion ?
Introduction à Snort
Qu'est-ce que les règles Snort (Rules) ?
Syntaxe des règles Snort
Comment fonctionne Snort ?
Placement de Snort IDS sur le réseau
À propos de notre environnement de laboratoire
Démonstration pratique :
Installation de Snort
Comment examiner le manuel de Snort
Configuration de Snort
Tester notre fichier de configuration
Créer des règles de base
Comment exécuter Snort
Essayer avec SSH
Comment utiliser Snorpy
Essayer avec FTP
Examiner les règles communautaires
Essayer avec MS17
Examiner les journaux avec Wireshark.
Conclusion
Systèmes de Détection d'Intrusion (IDS)
La détection d'intrusion est le processus de découverte active des
menaces/attaques/intrusions sur un réseau, des hôtes ou des
services.
Il existe deux types de solutions IDS basées sur le placement :
un IDS basé sur l'hôte (HIDS) est configuré sur un hôte
individuel sur un réseau, et un IDS réseau (NIDS) est placé au
sein d'un réseau pour surveiller le trafic à destination et en
provenance de tous les hôtes sur un réseau.
Un IDS est un système/hôte implanté dans un réseau pour
capturer le trafic et identifier les activités malveillantes basées
sur des règles prédéfinies. Ensuite, cette activité malveillante est
enregistrée, et une notification est envoyée aux parties
concernées pour les informer d'une intrusion.
Les systèmes de détection d'intrusion sont généralement associés
à des fonctionnalités de prévention des intrusions, où des règles
spécifiques peuvent être définies pour bloquer les paquets
malveillants ou intrusifs.
Introduction à Snort
Snort est un système IDS/IPS populaire, gratuit et open-source
utilisé pour effectuer l'analyse du trafic/protocole, la
correspondance de contenu, et qui peut être utilisé pour détecter
et prévenir diverses attaques basées sur des règles prédéfinies.
Snort est en développement actif et compte des milliers
d'utilisateurs et de contributeurs qui développent des règles pour
maintenir Snort à jour avec les dernières attaques.
Snort dispose de trois modes de fonctionnement principaux :
o Sniffing de paquets : Collecte et affiche le trafic réseau,
comme le fait Wireshark.
o Journalisation de paquets : Collecte et enregistre le trafic
réseau dans un fichier.
o Détection d'intrusion réseau : Analyse les paquets et
compare le trafic aux signatures.
Snort détecte le trafic malveillant ou les attaques en utilisant la
correspondance de motifs.
Lorsqu'il est actif, Snort capture les paquets, les réassemble, les
analyse et détermine ce qu'il faut faire avec le paquet en fonction
de règles prédéfinies.
Les règles Snort sont très similaires à une règle de pare-feu
typique, c'est-à-dire qu'elles sont utilisées pour faire
correspondre l'activité réseau à des motifs ou signatures
spécifiques et, par conséquent, prendre une décision sur l'envoi
d'une alerte ou le rejet du trafic (dans le cas d'un IPS).
Snort dispose d'un grand nombre de règles créées par la
communauté, qui sont très utiles pour commencer.
Règles Snort
Snort propose trois types de règles/ensembles de règles :
Règles communautaires : Ensembles de règles gratuits créés
par la communauté Snort.
Règles enregistrées : Ensembles de règles gratuits créés par
Talos. Pour les utiliser, une inscription à un compte est requise.
Talos est L'auteur des ensembles de règles officiels de Snort
Règles uniquement sur abonnement : Ces ensembles de règles
nécessitent un abonnement payant actif pour être accessibles et
utilisés.
En outre, il est possible de rédiger nos propres règles en fonction de
nos besoins spécifiques.
Syntaxe des règles Snort
Comment fonctionne Snort ?
Placement de Snort IDS sur le réseau
À propos de notre environnement de laboratoire
Démonstration pratique :
1-Installation de Snort
sudo apt-get install snort
Spécifiez la plage d'adresses pour le réseau local.
Vous pouvez vérifier cela en tapant `ip a` dans le terminal.
snort --version
Comment examiner le manuel de Snort
man snort
Les flags les plus importants de Snort
1. -c (Fichier de Configuration)
Description : Spécifie le fichier de configuration pour Snort.
Exemple : snort -c /etc/snort/[Link]
Importance : Ce flag est essentiel car il indique à Snort quel fichier de configuration
utiliser. Ce fichier contient les règles et les paramètres qui déterminent comment Snort
analyse le trafic réseau.
2. -i (Interface)
Description : Spécifie l'interface réseau à écouter.
Exemple : snort -i eth0
Importance : Ce flag permet de choisir l'interface réseau que Snort va surveiller, ce
qui est crucial pour diriger Snort vers la bonne source de trafic.
3. -l (Répertoire de Logs)
Description : Spécifie le répertoire où Snort doit enregistrer ses fichiers de log.
Exemple : snort -l /var/log/snort
Importance : La journalisation est essentielle pour l'analyse et les enquêtes médico-
légales. Ce flag garantit que les logs de Snort sont stockés dans un emplacement
désigné pour un accès et une révision faciles.
4. -A (Mode d'Alerte)
Description : Définit le mode d'alerte (ex. : full, fast, console).
Exemple : snort -A fast
Importance : Ce flag contrôle la verbosité et le format des alertes générées par Snort.
Différents modes sont utiles pour différents besoins opérationnels, comme la
surveillance en temps réel ou la journalisation détaillée.
5. -K (Mode de Log)
Description : Définit le mode de log (ex. : ascii, pcap).
Exemple : snort -K pcap
Importance : Ce flag détermine le format dans lequel les paquets sont enregistrés. Par
exemple, utiliser pcap permet d'analyser les logs plus tard avec des outils comme
Wireshark.
6. -T (Tester la Configuration)
Description : Teste le fichier de configuration pour détecter des erreurs sans démarrer
Snort.
Exemple : snort -T -c /etc/snort/[Link]
Importance : Ce flag est utile pour vérifier que le fichier de configuration est correct
avant de déployer Snort dans un environnement réel, évitant ainsi les problèmes
potentiels pendant l'opération.
7. -D (Mode Daemon)
Description : Exécute Snort en arrière-plan en tant que daemon.
Exemple : snort -D -c /etc/snort/[Link] -i eth0
Importance : Exécuter Snort en tant que daemon est important pour une surveillance
continue et non supervisée sur les systèmes de production.
8. -q (Mode Silencieux)
Description : Supprime la sortie console.
Exemple : snort -q -c /etc/snort/[Link]
Importance : Ce flag est utile pour réduire le bruit de sortie de la console, surtout
lorsque Snort est exécuté en arrière-plan ou intégré dans un système plus large.S
Configuration de Snort :
ls -la /etc/snort/
"Il est conseillé de toujours faire une sauvegarde au cas
où vous détruiriez le fichier original."
sudo cp /etc/snort/[Link] /etc/snort/snort-
[Link]
sudo vim /etc/snort/[Link]
ipvar :
Description : Il s'agit d'une directive utilisée dans la configuration de
Snort pour définir une variable qui représente une ou plusieurs adresses
IP.
Usage : Permet de simplifier la configuration en utilisant des variables
pour représenter des adresses ou des plages d'adresses IP dans les règles et
les paramètres de Snort.
HOME_NET :
Description : HOME_NET est une variable standard utilisée dans les
fichiers de configuration de Snort pour désigner le réseau interne ou le
réseau protégé que vous surveillez.
Usage : Cette variable est utilisée dans les règles de Snort pour identifier
le trafic entrant ou sortant de votre réseau interne.
Il est recommandé de définir HOME_NET avec une plage d'adresses IP
spécifique correspondant à votre réseau interne.
Ce réglage indique que HOME_NET inclut toutes les adresses IP de la plage
[Link] à [Link].
EXTERNAL_NET :
Description : EXTERNAL_NET est une variable standard utilisée dans les
fichiers de configuration de Snort pour désigner le réseau externe, c'est-à-
dire tout ce qui n'appartient pas au réseau interne ou protégé
(HOME_NET).
Usage : Cette variable est utilisée dans les règles de Snort pour identifier
le trafic en provenance ou à destination de réseaux externes.
Tester notre fichier de configuration
sudo snort -T -i enp0s3 -c /etc/snort/snort-
[Link]
On a expliqué déjà les flags suivants :
-T : (Tester la Configuration)
Description : Teste le fichier de configuration pour détecter des erreurs
sans démarrer Snort.
-i : (Interface)
Description : Spécifie l'interface réseau à écouter.
-c : (Fichier de Configuration)
Description : Spécifie le fichier de configuration pour Snort
4057 Snort rules read : Snort a lu un total de 4057 règles.
o 3383 detection rules : Parmi ces règles, 3383 sont des règles de détection,
utilisées pour identifier des activités suspectes ou malveillantes.
o 0 decoder rules : Il n'y a pas de règles de décodage. Les règles de décodage
sont utilisées pour interpréter les données de certains protocoles.
o 0 preprocessor rules : Il n'y a pas de règles de préprocesseur. Les
préprocesseurs sont utilisés pour préparer les données avant leur analyse par
les règles de détection.
o 3383 Option Chains linked into 949 Chain Headers : 3383 chaînes d'options
sont liées à 949 en-têtes de chaîne. Les chaînes d'options sont des éléments de
règles qui décrivent les actions à prendre lorsque des conditions spécifiques
sont rencontrées.
Détail des Comptes de Ports de Règles
Le tableau montre le nombre de règles par type de port et par protocole :
src (source) :
o tcp : 151 règles
o udp : 18 règles
o icmp : 0 règle
o ip : 0 règle
dst (destination) :
o tcp : 3306 règles
o udp : 126 règles
o icmp : 0 règle
o ip : 0 règle
any (n'importe quelle adresse) :
o tcp : 383 règles
o udp : 48 règles
o icmp : 52 règles
o ip : 22 règles
nc (non-classifié) :
o tcp : 27 règles
o udp : 8 règles
o icmp : 15 règles
o ip : 20 règles
s+d (source et destination) :
o tcp : 12 règles
o udp : 5 règles
o icmp : 0 règle
o ip : 0 règle
Maintenant, nous allons désactiver ces règles et créer notre propre règle.
Pour désactiver les lignes de 597 à 717, nous utilisons l'éditeur Vim car il facilite
le processus, notamment lorsqu'il y a beaucoup de lignes.
:597,717s/^/#
:597,717 : Cette partie spécifie la plage de lignes à modifier, de la ligne 597 à
la ligne 717.
s : C'est l'abréviation de "substitute" (substituer). Elle indique que nous allons
faire une substitution sur la plage de lignes spécifiée.
/^/ : Le symbole ^ représente le début de chaque ligne. La commande
s/^/#/ indique donc de remplacer le début de chaque ligne par le caractère #.
# : C'est le caractère ajouté au début de chaque ligne sélectionnée pour les
commenter.
Là, on reprend la commande passée pour tester notre fichier de
configuration.
sudo snort -T -i enp0s3 -c /etc/snort/snort-
[Link]
Snort a lu un total de 0 règles.
Créer des règles de base
sudo vim /etc/snort/rules/[Link]
Maintenant, nous allons écrire les règles ici.
alert icmp any any -> $HOME_NET any (msg:”
Détection d’un ping ICMP”; sid:100001; rev:1;)
alert : C'est le type d'action à entreprendre lorsque la règle est déclenchée.
Dans ce cas, une alerte sera générée.
icmp : C'est le protocole réseau concerné par cette règle. Ici, c'est ICMP
(Internet Control Message Protocol), souvent utilisé pour le diagnostic et le
contrôle à distance des réseaux.
any : Ce mot-clé spécifie n'importe quelle adresse IP ou port pour l'adresse
source et de destination.
any : Indique également n'importe quelle adresse IP ou port pour l'adresse de
destination et d'origine.
-> $HOME_NET any : Cette partie spécifie la direction du trafic.
$HOME_NET est une variable qui représente l'ensemble des adresses IP internes
du réseau local surveillé. Any signifie que n'importe quel port est autorisé en
tant que port de destination.
(msg :"Détection d'un ping ICMP" ; : C'est un message d'alerte qui sera
inclus dans le log ou la notification lorsque la règle est déclenchée. Ici, il indique
la détection d'un ping ICMP.
sid : 100001 ; : C'est l'identifiant unique de la signature de la règle. Chaque
règle Snort a un SID qui permet de l'identifier de manière unique.
rev :1;) : C'est la version de la règle. Cette règle spécifique est en version 1.
Là, on va tester la règle qu'on a mise en place.
sudo snort -A fast -q -i enp0s3 -l /var/log/snort -c
/etc/snort/[Link]
-A fast : Indique à Snort d'utiliser un mode d'analyse rapide pour traiter le trafic réseau.
Cela permet à Snort de réduire la charge de traitement tout en fournissant une détection
efficace.
-q : Mode silencieux, réduit la quantité de messages de journalisation sur la sortie
standard.
-l /var/log/snort : Indique le répertoire où Snort va enregistrer les fichiers
journaux générés par ses activités de détection d'intrusion.
On a fait un ping vers l'adresse de la machine pour voir si elle va capturer le trafic ou pas.
Nous constatons clairement que nous avons capté le trafic.
Essayer avec SSH
Ajouter une autre règle :
Comment utiliser Snorpy
Snorpy est un outil basé sur le web conçu pour faciliter l'écriture, la gestion et la
validation des règles pour Snort. Snort utilise des règles pour identifier et réagir
aux activités malveillantes dans le trafic réseau. La création et la gestion de ces
règles peuvent être complexes et fastidieuses, et c'est là que Snorpy intervient.
Je remplis les cases nécessaires, puis je copie la commande en bas.
Essayer avec FTP
Ajoutez la commande dans la règle locale.
Examiner les règles communautaires
Ce que nous allons faire maintenant, c'est enlever les commentaires que nous avons mis
précédemment, car ces règles sont très importantes
Maintenant, nous allons télécharger des règles
Beaucoup de règles ont été écrites par la communauté.
Essayer avec MS17
EternalBlue est une vulnérabilité de sécurité dans le protocole SMB (Server
Message Block) de Microsoft, spécifiquement dans les versions 1.0 (SMBv1)
utilisées par les systèmes Windows. Elle a été rendue publique en 2017 après
avoir été exploitée par l'outil d'attaque du même nom, développé par la
National Security Agency (NSA) des États-Unis et ensuite divulgué par le groupe
de hackers Shadow Brokers.
Ajouter la règle dans les règles locales.
J'utilise Metasploit sur Kali Linux pour exploiter la vulnérabilité MS17-010 sur mon système
Windows 7 afin de vérifier si Snort parvient à détecter cette activité malveillante.
Snort est actuellement en mode d'écoute.
L'attaque a été exécutée avec succès en utilisant l'exploit EternalBlue.
Snort a détecté l'accès au partage IPC$ via SMB, ce qui est un indicateur de l'attaque
EternalBlue en cours.
Examiner les journaux avec Wireshark.
Les paquets ICMP.
Les paquets SSH.
Les paquets SMB.
Conclusion :
À travers l'utilisation de Snort, nous avons pu mettre en place un système
robuste de détection d'intrusions réseau. En configurant des règles spécifiques
et en surveillant activement le trafic, nous avons identifié plusieurs tentatives
d'intrusion et d'exploitation potentielles, telles que l'utilisation de l'exploit
MS17-010 et la surveillance des paquets ICMP et SSH. Ces détections nous ont
permis de renforcer la sécurité de notre réseau en identifiant et en réagissant
efficacement aux menaces. Snort s'est avéré être un outil précieux dans notre
arsenal de sécurité, offrant une visibilité essentielle sur les activités suspectes
et jouant un rôle crucial dans la protection de nos systèmes contre les attaques.
Source :
1-[Link]
install-and-configure-snort-on-ubuntu-linux
2- [Link]
snort-ids-ips-on-ubuntu-896706425307
3- [Link]
4- [Link]
[Link]
5- [Link]
6- [Link]
7- [Link]