Installation d’un NIDS : Suricata

Bonjour à tous, dans cet article nous allons voir comment installer et configurer l’IDS Suricata (qui est pour un être plus précis un NIDS).

Tout d’abord, qu’est ce qu’un IDS (Intrusion Detection System) ?
C’est un outil qui permet d’analyser les flux (provenant du réseau ou d’une machine (système d’exploitation par exemple)), et va permettre de faire une remonter d’alerte en fonction de son fichier de signature.
Suricata est un NIDS (Network Intrusion Detection System) : un IDS qui est basé sur le réseau.

En parallèle, il y a également des HIDS qui sont orientés « machines » (Host Intrusion Detection System).
Vous pouvez visiter cet excellent article écrit par Mr Rigonnaux : https://homputersecurity.com/2018/06/10/wazuh-hids-presentation-installation/

Préparation

Pour l’installation et la configuration de Suricata, nous avons choisi CentOS connu pour sa fiabilité et sa robustesse.

Avant de pouvoir l’installer, il faut installer toutes ses dépendances :

Installation

Afin d’installer Suricata, il faut se rendre sur la page officielle afin de le télécharger : https://openinfosecfoundation.org/download/

On récupère le fichier avec la dernière version stable.

NB : En date du 13/02/2019, la dernière version stable est : suricata-4.1.2

Puis nous effectuons un téléchargement directement à partir de notre serveur :

On décompresse le fichier :

On se rend à l’intérieur du dossier :

Et on lance l’installation du logiciel :

–prefix=/usr : installation des binaires de Suricata dans /usr/bin/suricata
–sysconfdir=/etc : installation des fichiers de configuration de suricata dans /etc/suricata
–localstatedir=/var : configuration de suricata pour placer les logs dans /var/log/suricata
–enable-nfqueue : activation du module IPS (pour une future utilisation)
–enable-lua : activation du module Lua pour la détection et l’affichage en fonction de différent filtre.

Il faut vérifier si les options LRO et GRO de vos cartes réseaux sont désactivées :

Si les deux modules sont à « Off », vous pouvez poursuivre, sinon je vous invite à les désactiver :

NB :  L’argument -k de la commande « ethtool » permet de spécifier une carte réseau : attention au nom de votre carte réseau.

NB2 :

  • LRO (Large Receive Offload) permet de réduire le traitement des paquets réseau par le CPU (c’est le processeur de la carte réseau qui va travailler). Si la carte reçoit 5 paquets provenant de la même source avec des entêtes similaires (entête MAC), l’hôte va les stocker dans un tampon et va transférer un seul paquet en les regroupant.
  • GRO (Generic Receive Offload) : permet de former un seul paquet (regroupant une multitude paquet) qui possèdent tous une entête MAC commune (et des données TCP / IP différentes).

On lance la compilation et l’installation de Suricata en lui demandant de récupérer les règles de Suricata mais également la configuration de base :

Si vous souhaitez installer seulement la configuration de Suricata :

Enfin, si vous souhaitez installer seulement les règles de Suricata :

A la fin de l’installation, nous pouvons vérifier si Suricata est bien installé :

Configuration

La configuration de base

Nous devons maintenant éditer le fichier de configuration de Suricata :

Nous devons modifier la variable « HOME_NET » afin qu’il y figure votre réseau local :

HOME_NET : « [10.13.0.0/16] »

Nous avons trois interfaces réseaux sur le poste :

  • enp4s0 est l’interface de management : 10.13.9.19
  • enp2s0 est l’interface miroir des bornes wifi : 10.13.9.17
  • enp3s0 est l’interface miroir des prises brassés (prise rj-45 murale) : 10.13.9.18

L’interface miroir va nous permettre de récupérer une copie de tout le trafic sortant des bornes wifi et des prises brassés sur les différents switch.
La configuration du switch est à faire en amont (pas traité dans cet article).

A l’installation de Suricata, il copie un fichier contenant toutes les règles dans /var/lib/suricata/rules et se nomme « suricata.rules ». C’est se fichier de règle que nous allons utiliser (en écrasant les autres fichiers de règles).
Pour lancer suricata sur les interfaces ci-dessus :

-c : pour indiquer le fichier de configuration
-i : pour indiquer sur quelle interface suricata va écouter
-S : pour spécifier le fichier de règle pour Suricata (et ne pas récupérer les règles indiquées dans le fichier de configuration)
-D : lance suricata en mode démon

Nous pouvons tester notre configuration en rajoutant l’argument « -T » à la fin de notre commande pour éviter de faire une fausse manipulation :

Deux fichiers vont se créer :

  • eve.json : fichier structuré et très verbeux, qui va être envoyé à un SIEM (Splunk dans notre cas)
  • fast.log : c’est un fichier où toutes les alertes seront notifiés, il est plus facile à lire car une ligne correspond à une information

Le mode service

Nous allons maintenant ajouter Suricata en tant que service.

Il faut commencer par créer un fichier /etc/systemd/system/suricata.service :

[Unit]
Description=Suricata IDPS Daemon
Wants=network.target syslog.target
After=network.target syslog.target
Restart=on-failure
 
[Service]
Type=forking
PIDFile=/var/run/suricata.pid
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -i enp2s0 -i enp3s0 -S /var/lib/suricata/rules/suricata.rules -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStopPost=/bin/kill $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

Attention : il faut modifier la valeur de « ExecStart » en fonction de vos cartes réseaux.

Puis il faut activer le service :

Enfin, nous pouvons démarrer Suricata :

Ou le stopper :

Ou le redémarrer :

Ou vérifier son statut :

NB : Nous pouvons appeler directement « suricata » au lieu de « suricata.service » pour gagner du temps.

Au prochain redémarrage de votre serveur, suricata se lancera automatiquement.

La récupération des règles

Nous allons maintenant créer un script qui va gérer la récupération des règles tous les jours.

Nous créons donc un script /home/rotateRulesSuricata.sh :

#!/bin/sh
 
# Téléchargement du fichier contenant toutes les règles dans /root #
wget http://rules.emergingthreats.net/open/suricata/emerging-all.rules -P /root
 
# On déplace le fichier que l’on vient de télécharger dans le dossier des règles #
mv /root/emerging-all.rules /var/lib/suricata/rules/suricata.rules
 
# On redémarre suricata pour prendre en compte la modification #
systemctl restart suricata

Nous donnons le droit à root de l’exécuter :

# Rotation des règles tous les jours à 2h00 du matin #
00 02 * * * /home/rotateRulesSuricata.sh

La gestion des logs

Nous allons voir maintenant l’installation et la configuration de LogRotate (pour la rotation des logs).
Le paquet « LogRotate » est présent par défaut dans CentOS 7, si ce n’est pas le cas :

On va créer le fichier /etc/logrotate.d/suricata :

/var/log/suricata/*.log /var/log/suricata/*.json
{
    daily
    rotate 45
    missingok
    nocompress
    create
    sharedscripts
    dateext
    dateformat -%d%m%Y
    postrotate
            systemctl restart suricata
    endscript
}

Nous planifions donc une rotation de logs sur 45 jours, sans compression, en incluant la date du jour dans le nom du fichier.

Nous vérifions à quelle heure se lance le « cron.daily » :

Pour ma part, il se lance à 1h05 du matin :

NB : Pour une machine serveur, il est préférable d’utiliser « cron » qui est un démon (contrairement à anacron qui est plus approprié pour des ordinateurs fixes ou portables).
Dans mon cas, le « cron.daily » était déjà configuré dans anacron, c’est la raison pour laquelle j’ai laissé cela.

Votre IDS Suricata est maintenant configuré et opérationnel.

J’espère que cet article vous aura plu.
N’hésitez pas à me faire un retour pour tout problème rencontré.

A bientôt,

Fabio Pace.

3 Replies to “Installation d’un NIDS : Suricata”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.