Configurer Snort (IDS/IPS) sur NetBSD 9.3

Introduction

Snort est un Système de Détection d'Intrusion et de Prévention (IDS/IPS) largement déployé et reconnu.
Il offre des possibilités qui étendent de beaucoup les capacités du pare-feu classique, en repérant diverses tentatives d'intrusion sur un serveur ou sur un réseau local.

A la manière d'un pare-feu en CLI, Snort utilise une syntaxe pour la création de règles spécifiques de détection.
Un jeu de règles de la communauté est d'ailleurs librement téléchargeable depuis le site snort.org et divers abonnements ou liste de règles propriétaires plus actualisées et plus spécifiques peuvent être acquises chez divers fournisseurs sur internet.

Il se configure de plusieurs façons, en tant que plugin sur PFsense (et d'autres..) ou directement en CLI sur un serveur (ou un poste de travail).

Nous allons voir comment le manipuler en CLI.
Bien entendu, la doc officielle est exhaustive, et donc à consulter.

Ici nous nous contenterons du strict minimum (et comment régler quelques petits problèmes avec NetBSD)

Vous devez disposer a minima d'un système NetBSD 9.3 minimal avec pkgin, et une connexion SSH n'est pas superflue (surtout pour les copiers/collers ci-dessous).

La configuration se fait en root.


1) Installer Snort

pkgin -y in snort pulledpork libpcap daq

2) Permettre le démarrage au lancement du serveur

cp /usr/pkg/share/examples/rc.d/snort /etc/rc.d/snort ; echo 'snort=YES' >> /etc/rc.conf

3) Télécharger manuellement les règles communautaires

https://www.snort.org/downloads/community/community-rules.tar.gz

Ce dossier compressé contient plusieurs fichiers dont un snort.conf, le fichier community.rules et divers autres.

Il ne faut pas utiliser ce fichier snort.conf mais celui fourni avec pkgin sur NetBSD car il y a trop de paramètres qui sont inadaptés à NetBSD dans le fichier snort.conf communautaire.


4) Configurer Snort

Il vaut également mieux faire une copie de sécurité du fichier snort.conf fourni avec le paquet avant de commencer la configuration.

cp /usr/pkg/etc/snort/snort.conf /usr/pkg/etc/snort/snort.conf.BAK

Indiquer les réseaux WAN et LAN dans le fichier /usr/pkg/etc/snort/snort.conf

Les règles sont conçues pour utiliser les variables HOME_NET et EXTERNAL_NET et agir tantôt sur ce qui arrive uniquement via EXTERNAL_NET (cas typique d'un serveur web) ou entre EXTERNAL_NET et HOME_NET (le cas du pare-feu).
Elles doivent donc être correctement configurées.

HOME_NET : C'est le réseau LAN.
Prenons l'exemple d'un 192.168.1.0/24
La commande va directement faire le changement dans le fichier snort.conf.
A vous d'adapter ou d'ouvrir le fichier snort.conf directement pour faire les modifications manuellement.

sed -i 's/ipvar HOME_NET any/ipvar HOME_NET 192\.168\.1\.0\/24/' /usr/pkg/etc/snort/snort.conf

EXTERNAL_NET : C'est le réseau WAN
Si votre serveur est en frontal, alors le WAN, c'est internet... donc on laisse 'any' par défaut.
Tout ce qui n'est pas HOME_NET est donc EXTERNAL_NET (il faut entendre le 'any' ainsi)
Dans le cas où vous feriez un test avec des VM, il faudra bien évidemment préciser le réseau WAN simulé (qui sera probablement un réseau 192.. ou autre)

Les ipvar

Il est essentiel de configurer les autres ipvar du fichier snort.conf pour aider Snort à mieux protéger le réseau en lui indiquant l'emplacement IP des serveurs 'à risque' (Serveurs De Noms locaux, FTP, SSH etc..)

Exemple :
Dans le cas où le réseau local abriterait un serveur SFTP, il faut renseigner l'ipvar correspondant :

ipvar $SSH_SERVERS 192.168.1.5

DAQ et pcap

Snort a besoin de DAQ et pcap pour écouter les segments, il est nécessaire d'indiquer à Snort où se trouvent les modules DAQ car il ne les trouve hélas pas tout seul sur NetBSD.
La commande suivante procède à la configuration directement dans snort.conf :

sed -i 's/# config daq_dir: /config daq_dir: \/usr\/pkg\/lib\/daq/' /usr/pkg/etc/snort/snort.conf

5) Charger les règles communautaires

Créer un fichier /usr/pkg/etc/snort/rules/community.rules et y copier/coller tout le contenu du fichier du même nom téléchargé depuis https://www.snort.org/downloads/community/community-rules.tar.gz

nano /usr/pkg/etc/snort/rules/community.rules

Puis, commenter (ou supprimer) toutes les lignes 'include $RULE_PATH/XXXXXX' de /usr/pkg/etc/snort/snort.conf et écrire celle-ci (toutes les règles communautaires étant inclues dans un seul fichier, laisser d'autres include $RULE_PATH/XXXX fera planter le test de configuration futur)

include $RULE_PATH/community.rules

(cela indique à Snort de rechercher les règles uniquement dans le fichier community.rules créé précédemment)


6) Tester la configuration de Snort

Snort est configuré à présent, mais il faut tester tout cela avant d'essayer de le démarrer :

snort -T -c /usr/pkg/etc/snort/snort.conf

Bien lire les éventuels codes d'erreur ! Si c'est ok, alors Snort peut être démarré pour de vrai.


7) Démarrer Snort

Snort peut être démarré dans 2 modes différents : en sniffer (surveille simplement les segments) ou en IPS.
Dans les 2 cas, Snort se met en écoute sur une interface. Traditionnellement, c'est sur la WAN (wm0 ici) car la détection se fait ainsi AVANT le NATage vers une interface LAN.
Cependant, il est tout à fait possible de configurer Snort sur plusieurs interfaces en même temps (en fonction des ressources de votre serveur .. parceque à consomme !!)
La version 3 (qui n'est pas encore portée sur NetBSD) permet plus facilement de faire cela que la 2.X.. donc on y touche pas ici.

Le mode sniffer permet d'établir des règles plus précises en fonction du trafic de votre réseau.
On procède généralement à une première phase de sniffer sur plusieurs jours (voir semaines) avant de démarrer vraiment l'IPS, afin d'adapter les règles en fonction du trafic sur notre réseau (et pas foutre un bordel monumental dès le premier jour !).

Pour démarrer Snort en mode sniffer (affiche sur la console tout ce qui passe) :

snort -c /usr/pkg/etc/snort/snort.conf -v -b -i wm0 -l /var/log/snort

Pour démarrer Snort en mode IDS (détection d'intrusions) sur la WAN (wm0) en arrière-plan (nohup ... &)

nohup snort -c /usr/pkg/etc/snort/snort.conf -i wm0 -l /var/log/snort &

Dernière chose, la rédaction d'une règle de test n'est pas superflue (pour s'assurer que tout fonctionne) !

Les logs d'alerte se trouvent dans /var/log/snort/

Attention, ils peuvent TRES TRES vite saturer le serveur si la configuration des règles renvoie trop d'alertes !
L'utilisation d'un outil comme 'logrotate' est fondamentale.
Egalement, l'envoi automatisé des alertes (par mail par exemple ou via un SIEM) est indispensable pour réagir au plus vite.


8) Configurer Pulledpork

Pulledpork sert à télécharger et mettre à jour les règles de Snort automatiquement.

Le fichier à configurer est /usr/pkg/etc/pulledpork/pulledpork.conf
Il faut un Oinkcode -> s'inscrire sur le site de Snort, avoir un abonnement etc...
Placer l'Oinkcode dans le fichier tel que : rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|

Si on ne veut pas s'inscrire, il suffit de commenter la ligne rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|, une autre ligne permet de télécharger un fichier de règles basiques.

Charger les règles :

pulledpork -c /usr/pkg/etc/pulledpork/pulledpork.conf

En fonction de l'abonnement ou des règles téléchargées, il sera probablement nécessaire d'ajouter une ligne 'include $RULE_PATH/NOM-DU-JEU-DE-REGLE' dans le snort.conf

Cette dernière commande peut être mise en tâche cron régulièrement pour obtenir la dernière mise-à-jour des règles.



↑ Haut de page