Configurer Suricata comme un Système de Prévention d’Intrusion (IPS)

Avec la popularité croissante de la cybercriminalité, il est urgent que les entreprises disposent d’une meilleure protection contre les hackers. Un système de prévention des intrusions (IPS) est l’un des meilleurs moyens de se défendre contre les attaques informatiques. Mais avant de chercher sur Internet un IPS, essayez Suricata.

Dans ce tutoriel, vous apprendrez comment configurer un IPS Suricata entièrement fonctionnel sur un serveur Linux pour protéger votre réseau contre les menaces en ligne.

Prêt ? Lisez la suite et commencez à protéger votre réseau !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous de disposer des éléments suivants :

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • En fonction de la configuration de votre réseau et de la manière dont vous prévoyez d’utiliser Suricata, vous pourriez avoir besoin de plus ou moins de CPU et de RAM pour votre serveur. En général, plus vous prévoyez d’inspecter de trafic, plus vous allouerez de ressources à Suricata. Dans un environnement de développement, prévoyez d’utiliser au moins 2 CPU et 8 Go de RAM pour commencer, afin que Suricata puisse accomplir ses tâches sans compromettre la qualité de service pour tous les utilisateurs.

Installation de Suricata et ajout du dépôt PPA

Suricata n’est pas installé par défaut sur Ubuntu, mais l’installation de Suricata est similaire à l’installation d’autres packages sur votre système.

1. Exécutez la commande apt update pour mettre à jour les packages disponibles sur votre système.

sudo apt update -y
Updating the list of available packages

2. Ensuite, exécutez la commande add-apt-repository pour ajouter le dépôt PPA maintenu par la Open Information Security Foundation (OISF). En ajoutant le dépôt PPA, vous obtiendrez la version la plus récente et stable de Suricata (ppa:oisf/suricata-stable).

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. Réexécutez la commande sudo apt update pour charger le nouveau dépôt Suricata dans l’index des packages de votre système.

sudo apt update -y

4. Maintenant, exécutez la commande sudo apt policy pour vérifier que vous avez ajouté correctement le PPA Suricata. Assurez-vous de voir le PPA Suricata dans la liste comme indiqué ci-dessous avant d’installer Suricata

sudo apt policy
Running the sudo apt policy

5. Exécutez la commande suivante pour installer suricata sur votre système.

sudo apt install suricata -y
Installing Suricata on your system

6. Une fois l’installation terminée, exécutez la commande systemctl status ci-dessous pour vérifier le statut du service suricata.

sudo systemctl status suricata

Vous pouvez voir ci-dessous que le service Suricata est actif (en cours d’exécution).

Checking the Suricata service status

Configuration de Suricata

Le paquet Suricata est livré avec un fichier de configuration nommé suricata.yaml situé dans le répertoire /etc/suricata. Ce fichier de configuration contient de nombreux paramètres différents pour de nombreux autres cas d’utilisation. Mais gardez à l’esprit qu’il y a quelques paramètres dans le fichier de configuration par défaut que vous devez ajuster avant d’utiliser Suricata.

Le mode par défaut pour Suricata est le mode Détection d’Intrusion (IDS), qui enregistre, mais ne bloque aucun trafic. Ce mode est utilisé lors de la configuration et de la familiarisation avec Suricata. Une fois que vous êtes plus à l’aise avec Suricata et que vous comprenez mieux les types de trafic sur lesquels Suricata vous alertera, vous pouvez choisir d’activer le mode IPS.

Suricata ajoute un champ dans son format JSON (ID de flux communautaire). L’ID de flux communautaire est un champ de 8 octets qui vous permet de corréler les enregistrements générés par d’autres outils. Cette fonctionnalité est pratique lorsque vous utilisez Suricata en conjonction avec d’autres outils comme Bro ou Elasticsearch.

1. Ouvrez le fichier /etc/suricata/suricata.yaml dans votre éditeur de texte préféré.

2. Trouvez une ligne qui lit community-id: false et changez-la en community-id: true. Enregistrez les modifications et quittez l’éditeur de texte.

Chaque fois que vous examinez les événements, vous verrez l’ID de flux de la communauté dans leur sortie JSON.

Enabling Community ID

Ensuite, exécutez la commande suivante pour trouver un appareil avec une route par défaut sur votre système (route show default). Le drapeau -p indique à la commande ip d’afficher le périphérique de manière lisible par l’homme, tandis que le drapeau -j imprime la sortie JSON.

Suricata est configuré pour renifler des paquets à partir de n’importe quelle interface réseau disponible par défaut. Mais vous pouvez modifier ce comportement et spécifier une interface pour Suricata à écouter lorsqu’il démarre.

 ip -p -j route show default

Comme vous le voyez ci-dessous, le paramètre dev spécifie l’interface que Suricata utilisera pour renifler des paquets. Dans cette démo, l’interface est eth0, mais votre interface peut être différente, comme tun0, wlan0, etc.

Previewing the Network Interface

4. Enfin, ouvrez le fichier de configuration /etc/suricata/suricata.yaml, localisez le paramètre interface sous la section af-packet et modifiez-le en conséquence. Dans cette démo, eth0 est utilisé comme interface pour renifler des paquets.

Enregistrez les modifications, mais gardez votre éditeur de texte ouvert pour le moment.

Editing the /etc/suricata/suricata.yaml configuration file

Configuration de la fonction de rechargement automatique des règles en direct

Vous avez maintenant configuré Suricata, mais ce n’est que le début de la protection de votre réseau. En général, vous voudriez ajouter des règles sur place et recharger automatiquement les règles. Comment faire ? La fonction de rechargement en direct des règles de Suricata vous permet de mettre à jour les règles à la volée. Par conséquent, vous n’avez pas besoin de redémarrer Suricata manuellement pour que les nouvelles règles prennent effet.

Ouvrez le fichier /etc/suricata/suricata.yaml, copiez/collez les directives suivantes en bas du contenu du fichier et enregistrez les modifications. Ces directives vous permettent d’activer la fonction de rechargement en direct des règles.

Avec ce paramètre en place, lorsque vous éditez/mettez à jour vos ensembles de règles, les changements prendront effet sans redémarrer votre service Suricata.

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

Maintenant, exécutez la commande kill ci-dessous pour notifier votre processus Suricata ($(pidof suricata)) de mettre à jour les règles sans redémarrer.

La commande envoie un signal défini par l’utilisateur (-usr2) à l’ID de processus spécifié, puis Suricata effectue automatiquement ce qui suit :

  • Chargez la nouvelle configuration pour mettre à jour les variables et valeurs des règles.
  • Chargez de nouvelles règles
  • Construisez un nouveau moteur de détection
  • Échangez les anciens et les nouveaux moteurs de détection
  • Assurez-vous que tous les threads sont mis à jour
  • Libérez l’ancien moteur de détection
sudo kill -usr2 $(pidof suricata)

Mise à jour des ensembles de règles Suricata

La fonction de rechargement en direct des règles est prête, mais elle ne servira à rien à moins que vous ne mettiez à jour vos ensembles de règles. Par défaut, le package Suricata a un ensemble de règles limité qui ne détecte que les protocoles Internet les plus courants situés dans le répertoire /etc/suricata/rules.

À ce stade, vous obtiendrez un message d’erreur Aucun fichier de règles ne correspond au modèle, comme celui ci-dessous, chaque fois que vous essayez de démarrer et d’utiliser votre service Suricata. Ce message d’erreur indique qu’il n’y a pas de jeux de règles pour que Suricata les utilise.

Previewing Error Message when No Rulesets Exist

Pour résoudre cette erreur, fournissez des fichiers de jeu de règles à votre instance Suricata. Heureusement, Suricata dispose d’un outil appelé suricata-update qui vous aidera à récupérer davantage de jeux de règles auprès de fournisseurs tiers.

1. Exécutez la commande ci-dessous pour mettre à jour votre instance Suricata.

sudo suricata-update

Comme vous pouvez le voir ci-dessous, la sortie indique que la commande suricata-update a récupéré les règles en se connectant à https://rules.emergingthreats.net/open/. La commande enregistre ensuite les nouvelles règles dans le répertoire /var/lib/suricata/rules/.

La sortie imprime également ce qui suit:

  • Le nombre total (31737) de jeux de règles
  • Le nombre de règles activées (24355)
  • Le nombre de celles qui sont ajoutées (31737)/supprimées (0).
Updating Your Suricata Rulesets

Ensuite, exécutez la commande ci-dessous pour répertorier tous les fournisseurs de jeux de règles (list-sources).

La commande suricata-update récupère des jeux de règles auprès de nombreux fournisseurs, y compris des fournisseurs gratuits et commerciaux.

sudo suricata-update list-sources

Vous pouvez voir ci-dessous une petite partie de la liste. Notez un nom de jeu de règles à partir duquel vous souhaitez que Suricata récupère spécifiquement des jeux de règles. Ce tutoriel récupère les jeux de règles et/open à des fins de démonstration (étape trois).

Listing all ruleset providers

3. Exécutez la commande ci-dessous pour récupérer et inclure les ensembles de règles et/open dans vos règles Suricata.

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

Enfin, relancez la commande suricata-update pour charger le nouvel ensemble de règles sélectionné.

sudo suricata-update

Validation de la configuration Suricata

Vous avez configuré Suricata et même ajouté des ensembles de règles, il est donc temps de valider vos modifications et de vous assurer que tout fonctionne comme prévu. Le package Suricata dispose d’un service de validation intégré qui vous permet de voir toutes les déviations par rapport à la configuration actuelle.

Exécutez la commande suricata ci-dessous pour valider les modifications dans le fichier de configuration de Suricata (-c /etc/suricata/suricata.yaml). La commande affiche également tous les messages de validation (-v).

Le drapeau -T indique à Suricata de s’exécuter en « mode test » et en « mode top down ». Les deux modes ont des règles plus strictes pour l’appariement des paquets et sont moins susceptibles de générer un faux positif.

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Étant donné que Suricata est un pare-feu hautement configurable, le test peut prendre plusieurs minutes pour s’achever. S’il n’y a pas d’erreurs, vous verrez une sortie similaire à celle ci-dessous qui affiche un message complet.

Validating Your Suricata Configuration: complete

Si votre fichier de configuration comporte des erreurs similaires à celle ci-dessous, Suricata affichera chaque erreur, indiquant les lignes spécifiques posant problème. Si vous obtenez ces erreurs, corrigez chaque problème de configuration un par un jusqu’à ce que la validation soit réussie.

Validating Your Suricata Configuration: errors

Test des règles Suricata

Maintenant que vos fichiers de configuration Suricata sont validés, vous pouvez exécuter Suricata pour vérifier qu’ils fonctionnent correctement. Vous utiliserez Suricata pour tester l’ET Open (2100498) avec la commande curl afin de détecter une activité/trafic suspecte.

Actuellement, votre instance Suricata dispose de plus de 30 000 règles que Suricata a récupérées à partir de différents ensembles de règles. Il serait donc impossible de tester toutes les règles avec leurs explications dans ce tutoriel.

1. Exécutez la commande curl ci-dessous pour générer du trafic/des requêtes HTTP/des activités à partir du site TestMyNIDS. TestMyNIDS est un projet d’apprentissage en ligne dédié à la prise en charge des tests, de la validation et de la comparaison des NIDS. Le site offre une plateforme unique pour l’analyse comparative des NIDS et des outils associés.

Vous pouvez utiliser ce site pour tester toute activité/trafic suspect afin de vérifier si votre ensemble de règles configurées fonctionne comme prévu.

curl http://testmynids.org/uid/index.html

Les données de réponse sont conçues pour déclencher une fausse alerte en prétendant être un utilisateur root Linux/Unix. Et cet utilisateur root se trouve sur un système potentiellement compromis.

Testing Your Suricata Rules

Ensuite, exécutez la commande grep ci-dessous pour examiner le fichier fast.log dans le répertoire /var/log/suricata/ à la recherche d’un message d’alerte correspondant 2100498. Cette commande vérifie le fichier journal pour une alerte utilisateur.

En dehors du fichier fast.log, un autre fichier journal à surveiller est le eve.log dans le même répertoire.

grep 2100498 /var/log/suricata/fast.log

Vous verrez une sortie similaire à celle ci-dessous qui montre l’adresse IPv4 publique de votre système.

Examining the fast.log file

3. Maintenant, exécutez la commande jq ci-dessous pour examiner le fichier eve.log. Le fichier eve.log est également utilisé pour enregistrer des événements, mais au format JSON (/var/log/suricata/eve.json). Ce sont les fichiers eve.json et fast.log auxquels vous ferez référence pour le trafic suspect et les tentatives bloquées. Une fois trouvés, agissez selon les besoins.

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

Ci-dessous, vous pouvez voir “signature_id”: 2100498 dans la sortie, qui est l’ID de signature d’alerte que vous avez spécifié dans la commande.

Vous pouvez également voir le “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” dans la sortie, qui est l’ID de flux de la communauté que vous avez configuré dans le fichier /etc/suricata/suricata.yaml.

Ce community_id est pratique lorsque vous utilisez Suricata en conjonction avec d’autres outils comme Elasticsearch pour obtenir une « pile de surveillance de sécurité » complète à un coût raisonnable.

Examining the eve.log file

Conclusion

Tout au long de ce tutoriel, vous avez appris comment installer et configurer Suricata avec des ensembles de règles pour protéger votre réseau. Vous avez également effectué des tests pour vérifier si les ensembles de règles fonctionnent en générant du trafic sur votre réseau.

À ce stade, Suricata fonctionne parfaitement avec votre ensemble de règles personnalisé pour détecter les activités/trafic suspects sur votre réseau.

Bien, pourquoi ne pas capitaliser sur ces connaissances nouvellement acquises ? Commencez peut-être par installer et configurer Suricata, Zeek, la pile Elasticsearch pour mettre en place un ensemble complet de « security monitoring stack »?

Source:
https://adamtheautomator.com/suricata/