Qu'est-ce que Snort ?

Snort est un système open source de détection et de prévention des intrusions (IDS/IPS) qui surveille le trafic réseau et identifie les activités potentiellement malveillantes sur les réseaux IP (Internet Protocol). Les organisations peuvent utiliser Snort par l'intermédiaire d'un langage de règles qui combine différentes méthodes d'inspection (protocoles, signatures et anomalies) pour détecter les paquets malveillants dans le trafic réseau et bloquer les vecteurs d'attaque potentiels.

Cette combinaison est essentielle. Les méthodes basées sur les signatures couramment utilisées sont efficaces pour identifier les menaces connues, mais elles sont moins performantes en cas de menaces inconnues. Snort exploite également des approches basées sur le comportement pour découvrir les vulnérabilités réelles en comparant l'activité du réseau à un ensemble prédéfini de règles Snort. Il peut ainsi détecter des menaces émergentes sophistiquées passées inaperçues jusque-là grâce à des méthodes basées sur les signatures uniquement.

Cas d'usage de Snort

Snort est surtout utilisé par les organisations à la recherche d'un système IDS/IPS indépendant de toute plateforme pour sécuriser leurs réseaux contre les cybermenaces émergentes. Les entreprises font appel à Snort pour les tâches suivantes :

  • Surveillance du trafic réseau en temps réel
  • Analyse des protocoles
  • Correspondance de contenu ; regroupement des règles en fonction des protocoles et des ports, puis en fonction de leur contenu ou non
  • Empreinte du système d'exploitation
  • Compatibilité avec tous les systèmes d'exploitation

Mais Snort offre bien d'autres fonctionnalités.

Analyse des paquets et journalisation

Snort est un outil d'analyse des paquets qui permet de capturer le trafic réseau sur une interface réseau locale. Vous pouvez également utiliser Snort comme un enregistreur de paquets qui écrit les paquets capturés sur le disque pour déboguer le trafic réseau. Vous pouvez également utiliser ses fonctions de détection et de prévention des intrusions (IDS/IPS) pour surveiller le trafic réseau en temps réel et examiner chaque paquet à la recherche d'activités suspectes ou de charges actives potentiellement malveillantes.

Alertes et règles

Snort peut générer des alertes pour tout paquet inhabituel découvert dans le trafic réseau, conformément aux règles configurées. Vous pouvez ainsi identifier les menaces qui pèsent sur le réseau ou d'autres risques susceptibles d'entraîner l'exploitation des vulnérabilités.

Le langage de règles Snort est très souple. Vous pouvez donc créer vos propres règles Snort pour différencier l'activité régulière du réseau de l'activité anormale. Vous pourrez également ajouter de nouvelles procédures qui demanderont à Snort de surveiller le réseau pour détecter des comportements spécifiques et prévenir des cyberattaques potentielles sur le réseau de l'organisation.

Détection des cyberattaques

Grâce à la souplesse du langage des règles Snort et à sa compatibilité avec tous les systèmes d'exploitation, Snort est capable de détecter n'importe quelle attaque lancée sur le réseau, à condition qu'une règle soit associée au comportement de l'attaque. Voici quelques exemples de brèches que Snort peut aider les organisations à repérer.

Attaque par déni de service (DoS) / déni de service distribué (DDoS)

Les attaques par déni de service (DoS/DDoS) consistent à inonder un réseau de demandes de service injustifiées afin de perturber les activités de l'entreprise. Alors qu'une attaque par déni de service (DoS) est lancée à partir d'un seul système, une attaque par déni de service distribué (DDoS) est une attaque orchestrée à partir de plusieurs systèmes situés à plusieurs emplacements.

Débordement de mémoire tampon

Un débordement de mémoire tampon se produit lorsque le cyberattaquant dirige davantage de trafic entrant vers une adresse réseau, de sorte que le volume de données réseau dépasse toute la bande passante disponible dans le système.

Usurpation d'identité

Un pirate peut se faire passer pour un utilisateur ou un système autorisé afin d'accéder à un réseau cible et de voler des informations ou d'effectuer des activités malveillantes. C'est ce qu'on appelle une attaque par usurpation d'identité.

Common Gateway Interface (CGI)

Si la CGI constitue une interface entre le web et l'utilisateur final pour le rendu de pages web dynamiques, elle est également réputée pour contenir des failles de sécurité qui peuvent être exploitées par des cybercriminels. Les scripts CGI du web peuvent fréquemment être victimes d'attaques par validation d'entrée, car ils ne filtrent pas les entrées malveillantes.

Analyse furtive des ports

Les pirates utilisent souvent des analyses furtives des ports, également appelées analyses semi-ouvertes, pour attaquer via des ports ouverts sur le réseau sans établir une connexion complète. Par exemple, ils envoient un seul paquet via le protocole TCP et mettent fin au processus dès qu'un port est détecté dans le réseau cible. Cette opération permet de contourner les pare-feux et de faire apparaître l'analyse comme du trafic réseau normal.

Comment fonctionne Snort ?

Snort repose sur la bibliothèque de capture de paquets (libpcap), une interface indépendante du système pour capturer le trafic, qui est largement utilisée dans les analyseurs de réseau. Snort surveille le trafic réseau et le compare à un ensemble de règles définies par les utilisateurs dans un fichier de configuration. Il applique ces règles aux paquets du trafic réseau et émet des alertes lorsqu'il détecte une activité anormale.

Découvrons un peu plus en détail le fonctionnement de Snort et de ses règles.

Différents modes Snort

Snort peut être configuré pour fonctionner de trois manières différentes en utilisant l'un des trois indicateurs suivants :

  • Mode d'analyse (indicateur -v) : Snort lit les paquets TCP/IP et affiche les informations relatives aux paquets sur la console.
  • Mode d'enregistrement des paquets (indicateur -l) : Snort enregistre les paquets TCP/IP entrants dans un répertoire de journalisation sur le disque en vue d'une analyse ultérieure.
  • Mode système de détection et de prévention des intrusions dans le réseau (NIDS) (indicateur -c) : Snort détermine si le système doit effectuer une action sur le trafic réseau en fonction du type de règle spécifié dans le fichier de configuration.

Types de règles Snort

Snort n'évalue pas les règles dans l'ordre où elles apparaissent dans le fichier de configuration ; il les examine plutôt en fonction de leur type, qui spécifie l'action à entreprendre lorsque Snort trouve un paquet qui correspond aux critères de la règle.

Les cinq types de règles de base de Snort sont les suivants :

  • Règles d'alerte : Snort génère une alerte lors de la détection d'un paquet suspect.
  • Règles de blocage : Snort bloque le paquet suspect et tous les paquets suivants dans le flux du réseau.
  • Règles d'abandon : Snort abandonne le paquet dès la génération de l'alerte.
  • Règles de journalisation : Snort journalise le paquet dès la génération de l'alerte.
  • Règles de passage : Snort ignore le paquet suspect et le marque comme étant ignoré.

Comprendre les règles Snort

Rédigez correctement les règles Snort afin qu'elles puissent remplir leur fonction, c'est-à-dire détecter efficacement les nouvelles cybermenaces qui pourraient surgir dans votre réseau. Pour ce faire, vous devez bien comprendre la syntaxe de Snort et la manière dont les règles sont créées.

Bien que les règles Snort soient généralement écrites sur une seule ligne, les versions récentes de Snort permettent d'écrire des règles sur plusieurs lignes. Ceci est particulièrement utile pour les règles plus avancées qui ne peuvent se limiter à une seule ligne.

Les règles Snort sont divisées en deux parties : un en-tête de règle et des options de règle. Voyons tout cela plus en détail.

En-têtes de règle

Ces règles définissent l'action à entreprendre lorsqu'un trafic correspondant à la règle est identifié. Un en-tête de règle comprend cinq éléments principaux :

  • Mesure à prendre : le premier composant déclaré dans une règle Snort
  • Adresses IP : la source et la destination
  • Numéros de port : la source et la destination
  • Direction du trafic : -> pour une seule direction de la source à la destination ; <> pour le trafic bidirectionnel
  • Protocole d'inspection : protocoles de la couche 3 (IP et ICMP) et de la couche 4 (TCP et UDP)

Remarque : bien que Snort prenne actuellement en charge les couches 3 et 4, dans Snort 3, vous pouvez également demander à Snort de ne faire correspondre les règles qu'au trafic d'un service de couche d'application donné (tel que SSL/TLS et HTTP).

Options de la règle

Elles définissent les critères de trafic réseau à respecter pour qu'une règle soit appliquée, ainsi que la sortie en cas de correspondance. Voici quelques-unes des règles disponibles :

  • Message à afficher en cas de correspondance avec la règle : explique l'objectif de la règle
  • État du flux : spécifie les propriétés de la session à vérifier pour un paquet donné.
  • Contenu ou motif : spécifie le contenu ou le modèle à trouver dans la charge active ou les données non utiles d'un paquet.
  • Service ou protocole d'application : demande à Snort d'identifier le contenu ou le modèle soit sur le trafic du service de couche d'application spécifié, soit sur les ports source et destination spécifiés dans l'en-tête de la règle.
  • ID Snort (sid) et numéro de révision (rev) : identifie de manière unique une règle Snort (sid) ou le numéro de révision d'une règle Snort (rev).

Exemple de règles Snort

Voyons comment rédiger des règles Snort pour une attaque DoS à l'aide de honypots Docker.

Pour détecter ce mode d'attaque, nous devons écrire une règle pour découvrir les requêtes HTTP envoyées par une image Docker compromise sur une connexion TCP/IP :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS
Expand
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS

Les attaques DoS consistent à inonder le serveur de requêtes HTTP GET au cours d'une connexion établie. Nous devons donc demander à Snort de vérifier ce modèle dans la section des options de la règle :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# only detect established TCP connections from client requests<p>flow:to_server, established;</p>
<p># match on HTTP GET requests</p>
<p>http_header; content:"Mozilla/5.0 (Windows NT 10.0|3B| Win64|3B| x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";</p>
<p>http_method; content:"GET";</p>
# only detect established TCP connections from client requests<p>flow:to_server, established;</p> <p># match on HTTP GET requests</p> <p>http_header; content:"Mozilla/5.0 (Windows NT 10.0|3B| Win64|3B| x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";</p> <p>http_method; content:"GET";</p>
Expand
# only detect established TCP connections from client requests

flow:to_server, established;

# match on HTTP GET requests

http_header; content:"Mozilla/5.0 (Windows NT 10.0|3B| Win64|3B| x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";

http_method; content:"GET";

Le mode d'attaque étant lancé via des honeypots, la règle est classée comme une activité de cheval de Troie sur réseau :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (<p>msg: "Detects DoS HTTP request sent by compromised Docker image";</p>
<p>flow:to_server, established;</p>
<p>http_header; content:"Mozilla/5.0 (Windows NT 10.0|3B| Win64|3B| x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";</p>
<p>http_method; content:"GET";</p>
<p>classtype:trojan-activity;</p>
<p>sid:8001951;</p>
<p>rev:20220420;</p>
<p>)</p>
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (<p>msg: "Detects DoS HTTP request sent by compromised Docker image";</p> <p>flow:to_server, established;</p> <p>http_header; content:"Mozilla/5.0 (Windows NT 10.0|3B| Win64|3B| x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";</p> <p>http_method; content:"GET";</p> <p>classtype:trojan-activity;</p> <p>sid:8001951;</p> <p>rev:20220420;</p> <p>)</p>
Expand
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (

msg: "Detects DoS HTTP request sent by compromised Docker image";

flow:to_server, established;

http_header; content:"Mozilla/5.0 (Windows NT 10.0|3B| Win64|3B| x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";

http_method; content:"GET";

classtype:trojan-activity;

sid:8001951;

rev:20220420;

)

Utilisation de règles Snort rédigées par des experts

En intégrant Snort à votre système de cybersécurité, vous bénéficiez d'une solution souple et indépendante pour protéger votre réseau contre les cybermenaces existantes et émergentes. Cependant, vous devez configurer les règles pour qu'elles fonctionnent correctement.

Même si vous pouvez créer vos propres règles Snort pour des cas d'usage assez simples, leur mise à jour pour contrer les cybermenaces les plus récentes reste difficile. Pensez plutôt à utiliser des règles Snort et YARA créées par des experts, comme le jeu de règles communautaire disponible gratuitement ou CrowdStrike Falcon Intelligence.