- Généralités
- Prérequis
- Création d’une bases de données prelude
- Installation de prelude-manager
- Installation de prelude-correlator
- Installation de prelude-lml
- Inscriptions des plugins prelude et des sondes
- Optimisation de la base de donnée prelude
- Création de la base de donnée prewikka
- Installation de Prewikka
- Démarrage de Prewikka
- Installation de Snort
- Démarrage de Snort
- Installation d’Ossec
- Démarrage d’Ossec
- Démarrage automatique de Prelude, Snort et Ossec
Généralités
Prelude est un système de détection d’intrusion hybride (NIDS & HIDS) composé de plusieurs plugins et sondes. Sa modularité permet d’ajouter facilement de nouveaux types de détecteurs d’intrusion, d’analyseurs de logs et une solution de corrélation, le tout reposant sur la norme IDMEF (Intrusion Detection Message Exchange Format), bien que de nombreux autres formats de logs soient également compatibles.
L’intérêt de Prelude est de centraliser les alertes dans une base de données, de les normaliser au format IDMEF, puis de les visualiser à travers une interface web.
Architecture
Prelude Manager : centralise et stocke les événements des sondes/agents.
Prelude LML : plugin qui lit et normalise les logs systèmes et applicatifs en IDMEF.
Prelude Correlator : plugin qui corrèle les événements pour détecter des attaques.
Prewikka : interface web pour visualiser et analyser les alertes.
Snort : sonde réseau (NIDS) qui détecte les intrusions sur le trafic réseau.
Ossec : sonde HIDS qui surveille fichiers, logs et intégrité système.
Prérequis
Les packages suivants sont fortement recommandé.
apt install ntpdate dbconfig-common
Ntpdate : permet de maintenir votre horloge système à l’heure.
Dbconfig-common : permet de configurer les paramètres d’une base de données.
Pour fonctionner, Prelude a besoin d’un serveur de base de données, nous allons donc installer un serveur MySQL/MariaDB.
apt install mariadb-server
Une fois que l’installation des composants est terminée, tapez la commande suivante pour finaliser la configuration.
mysql_secure_installation
Comme demandé, saisissez le mot de passe root de votre Debian, puis définissez un mot de passe pour l’utilisateur root de MariaDB, qui disposera de tous les droits d’accès sur la base.
Puis répondez Y à toutes les questions suivantes.
L’installation par défaut de MySQL/MariaDB sous Debian 9 applique une restriction à l’utilisateur root.
Lorsque vous essayerez de vous connecter à MySQL/MariaDB avec la commande mysql -u root -p vous obtiendrez une erreur Access denied for user ‘root’@’localhost’.
Pour remédier à ce problème, connectez vous avec l’utilisateur root à MariaDb avec sudo.
sudo mysql -u root -p
Une fois que vous aurez taper le bon mot de passe, cette fois vous serez connecté.
Tapez alors la commande USE mysql; qui vous connectera à la base de données contenant la configuration du serveur.
Puis tapez la requête SELECT plugin FROM user WHERE user=’root’;
USE mysql;
SELECT plugin FROM user WHERE user='root';
C’est à cause du plugin unix_socket que la connexion root est refusée lorsqu’on se connecte à la base sans sudo.
Pour remédier au problème, tapez la requête UPDATE user SET plugin= » WHERE User=’root’; qui supprimera ce plugin pour l’utilisateur root.
Recharger les privilèges utilisateurs avec la commande FLUSH PRIVILEGES; puis quitter MariaDb avec la commande EXIT;
UPDATE user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
A présent, si vous essayez à nouveau de vous connecter au serveur sans sudo, avec mysql -u root -p, ca fonctionnera.
Création d’une bases de données prelude
Prelude stock toutes les informations collectées dans une base de donnée. Donc nous allons créer une nouvelle base nommée prelude ainsi qu’un nouvel utilisateur lui aussi nommé prelude.
mysql -u root -p
Nous allons créer la base de données prelude.
CREATE DATABASE prelude;
Et pour créer l’utilisateur prelude. Vous pouvez remplacer mot_de_passe par le vôtre, à l’intérieur des guillemets.
CREATE USER 'prelude'@'localhost' IDENTIFIED BY 'mot_de_passe';
Pour accorder toutes les autorisations à l’utilisateur prelude sur la base de données prelude.
GRANT ALL PRIVILEGES ON prelude.* TO 'prelude'@'localhost';
Pour que les changements prennent effet.
FLUSH PRIVILEGES;
EXIT;
Installation de prelude-manager
Pour l’instant, nous allons installer Prelude-manager et les librairies associées.
Il suffit d’installer le paquet.
apt install prelude-manager
Lors de l’installation, le gestionnaire créera le profil de l’utilisateur prelude.
Puis dbconfig-common vous demandera alors si vous souhaitez qu’il configure automatiquement la base de données, répondez Oui.
dbconfig-common demandera le mot de passe de l’utilisateur prelude (que vous avez renseigner lors de la création de la base de données prelude).
Puis une confirmation du mot de passe vous sera demmandé.
Le paquet Debian remplit automatiquement la base de données et met à jour les paramètres dans /etc/prelude-manager/prelude-manager.conf.
Prelude-Manager devrait maintenant être en cours d’exécution, pour vérifier.
systemctl status prelude-manager
Si la ligne commençant par Active contient la mention active (running), cela signifie que le service Prelude-Manager est bien installé et en cours d’exécution.
configuration de prelude-manager
Editez le fichier de configuration /etc/prelude-manager/prelude-manager.conf, puis vérifiez les paramètres suivants.
L’adresse IP d’écoute, afin que ce dernier accepte les connexions des clients (sondes).
listen = 127.0.0.1
Les paramètres de connexion à la base de donnée.
[db]
type = mysql
host = localhost
port = 3306
name = prelude
user = prelude
pass = MOT DE PASSE DE L UTILISATEUR MYSQL PRELUDE
Editez le fichier de configuration /etc/prelude/default/client.conf puis vérifiez les paramètres suivants.
L’adresse IP du serveur Prelude-Manager.
server-addr = 127.0.0.1
Stoppez Prelude-manager avec cette commande, pour faire les modification suivante.
systemctl stop prelude-manager
Puis éditez le fichier /etc/default/prelude-manager.
nano /etc/default/prelude-manager
Et modifiez le paramètre RUN=no en RUN=yes et le paramètre DAEMONUSER=prelude en DAEMONUSER=root
DAEMONUSER=root
RUN=yes
Puis redémarrez Prelude-manager avec cette commande.
systemctl start prelude-manager
La première partie est terminée, vous avez maintenant un gestionnaire opérationnel.
Installation de prelude-correlator
Tout d’abord installez le paquet suivant pour corriger l’erreur SpamhausDropPlugin: No module named netaddr.
apt install python-netaddr
Puis, il suffit d’installer le paquet.
apt install prelude-correlator
configuration de prelude-correlator
Editez le fichier de configuration /etc/prelude-correlator/prelude-correlator.conf.
nano /etc/prelude-correlator/prelude-correlator.conf
Puis modifiez le paramètres # [DshieldPlugin] en [DshieldPlugin] et le paramètre # disable = false en disable = true.
[DshieldPlugin]
disable = true
Stoppez Prelude-correlator avec cette commande, pour faire les modification suivante.
systemctl stop prelude-correlator
Puis éditez le fichier /etc/default/prelude-correlator.
nano /etc/default/prelude-correlator
Et modifiez le paramètre RUN=no en RUN=yes et le paramètre DAEMONUSER=prelude-correlator en DAEMONUSER=root
DAEMONUSER=root
RUN=yes
Puis redémarrez Prelude-correlator avec cette commande.
systemctl start prelude-correlator
Installation de prelude-lml
Il suffit d’installer le paquet.
apt install prelude-lml
configuration de prelude-lml
Editez le fichier de configuration /etc/prelude-lml/prelude-lml.conf.
nano /etc/prelude-lml/prelude-lml.conf
Puis ajouter les fichiers de log que vous voulez analyser.
Par exemple, dans la section [format-syslog], vous pouvez rajouter en dessous de # udp-server = 0.0.0.0 des fichiers de log qui utilise le format syslog (daemon.log, mail.log, etc…).
[format=syslog]
time-format = "%b %d %H:%M:%S"
prefix-regex = "^(?P<timestamp>.{15}) (?P<hostname>\S+) (?:(?P<process>\S+?)(?:\[(?P<pid>[0-9]+)\])?: )?"
file = /var/log/messages
file = /var/log/auth.log
# udp-server = 0.0.0.0
file = /var/log/daemon.log
file = /var/log/mail.log
file = /var/log/syslog
file = /var/log/user.log
Inscriptions des plugins prelude et des sondes
Comme Prelude peut utiliser des sondes et des plugins répartis sur l’ensemble du réseau, il est essentiel de sécuriser les échanges par chiffrement. Ainsi, lors de l’ajout d’un plugin comme Prelude-Correlator, qu’il soit local ou distant, celui-ci doit être enregistré et authentifié auprès du Prelude-Manager.
Pour cela, Prelude intègre l’outil prelude-admin, c’est avec cette outil qu’il va être possible d’enregistrer les sondes et plugins supplémentaires.
Tout d’abord, il faut enregistrer Prelude-Manager comme client auprès de lui-même (auto-enregistrement).
prelude-admin add prelude-manager --uid 0 --gid 0
Cette commande crée les clés permettant à Prelude-Manager de sécuriser ses échanges avec les sondes et plugins
Ajout d’un plugin : Prelude-Correlator
Pour ajouter une nouvelle sonde ou un plugin, on va devoir utiliser deux commandes en parallèle, une pour générer un mot de passe unique et accepter la requête puis l’autre pour enregistrer la nouvelle sonde.
Taper cette commande dans un autre terminal pour mettre le serveur Prelude en mode écoute et pour enregistrer une sonde ou un plugin.
prelude-admin registration-server prelude-manager
La commande génère un mot de passe à usage unique et reste en écoute. Il ne reste plus qu’à enregistrer un composant (sonde ou plugin).
Dans un autre terminal, entrez cette commande pour enregistrer la sonde Prelude-Correlator.
prelude-admin register prelude-correlator "idmef:rw admin:r" 127.0.0.1 --uid 0 --gid 0
Ensuite entrez le mot de passe à usage unique, une confirmation vous sera demandée dans l’autre terminal, acceptez en appuyant sur Y.
L’enregistrement de Prelude-Correlator est réussi. Voila vous venez d’enregistrer votre premier plugin !
Ajout d’un plugin : Prelude-LML
Même principe qu’avez le plugin Prelude-Correlator, il faut exécuter les deux commandes ci-dessous en parallèle.
prelude-admin registration-server prelude-manager
Dans un autre terminal.
prelude-admin register prelude-lml "idmef:rw admin:r" 127.0.0.1 --uid 0 --gid 0
Vérification de l’enregistrement des sondes ou des plugins
Pour lister les sondes/plugins, on va utiliser la commande
prelude-admin list
Optimisation de la base de donnée prelude
La taille de la base de donnée évolue en fonction du nombre d’évènements analysés par les sondes/plugins. Il n’est pas anormal d’avoir plusieurs centaines de milliers d’entrées dans la BDD après un mois d’utilisation.
Pour éviter cela, on va utiliser un script avec une tâche CRON pour que la suppression des alertes se fasse de manière automatique et périodique.
Créez un nouveau fichier nommé /etc/cron.daily/prelude-del-events.
nano /etc/cron.daily/prelude-del-events
Et ajouter le script ci-dessous dedans.
#!/bin/bash
set -e
DBTYPE="mysql"
DBHOST="localhost"
DBNAME="prelude"
DBUSER="prelude"
DBPASS="xxxxxxxxx"
# Supprimer tous les évènements antérieur à 1 mois
KEEPINTERVAL="1 month"
DATE=$(date -d "now - $KEEPINTERVAL" +%Y-%m-%d)
# Suppression des alertes
/usr/bin/preludedb-admin delete alert --criteria "alert.create_time <= $DATE" "type=$DBTYPE host=$DBHOST name=$DBNAME user=$DBUSER pass=$DBPASS"
# Suppression des alertes de type heartbeat (vérification de fonctionnement de l'hôte)
/usr/bin/preludedb-admin delete heartbeat --criteria "heartbeat.create_time <= $DATE" "type=$DBTYPE host=$DBHOST name=$DBNAME user=$DBUSER pass=$DBPASS"
Puis rendez-le exécutable.
chmod +x /etc/cron.daily/prelude-del-events
Création de la base de donnée prewikka
Tout comme Prelude, Prewikka stock toutes les informations collectées dans une base de donnée. Donc nous allons créer une nouvelle base nommée prewikka ainsi qu’un nouvel utilisateur lui aussi nommé prewikka.
mysql -u root -p
Nous allons créer la base de données prewikka.
CREATE DATABASE prewikka;
Et pour créer l’utilisateur prewikka. Vous pouvez remplacer mot_de_passe par le vôtre, à l’intérieur des guillemets.
CREATE USER 'prewikka'@'localhost' IDENTIFIED BY 'mot_de_passe';
Pour accorder toutes les autorisations à l’utilisateur prewikka sur la base de données prewikka.
GRANT ALL PRIVILEGES ON prewikka.* TO 'prewikka'@'localhost';
Pour que les changements prennent effet.
FLUSH PRIVILEGES;
EXIT;
Installation de Prewikka
Il suffit d’installer le paquet.
apt install prewikka
Puis dbconfig-common vous demandera alors si vous souhaitez qu’il configure automatiquement la base de données, répondez Oui.
dbconfig-common demandera le mot de passe de l’utilisateur prewikka (que vous avez renseigner lors de la création de la base de données prewikka).
Puis une confirmation du mot de passe vous sera demmandé.
Le paquet Debian remplit automatiquement la base de données et met à jour les paramètres dans /etc/prewikka/prewikka.conf.
Configuration de Prewikka
Editez le fichier de configuration /etc/prewikka/prewikka.conf.
nano /etc/prewikka/prewikka.conf
Pour adapter les paramètres de votre base de données avant de démarrer Prewikka. Voici les champs à compléter.
[idmef_database]
#
# if your database is a sqlite file, please use:
#
# type: sqlite3
# file: /path/to/your/sqlite_database
#
type: mysql
host: localhost
user: prelude
pass: MOT DE PASSE DE L UTILISATEUR MYSQL PRELUDE
name: prelude
La section [database] est automatiquement configurée par dbconfig-common, donc ne la modifiez pas.
[database]
type: mysql
host: localhost
user: prewikka
pass: MOT DE PASSE DE L UTILISATEUR MYSQL PREWIKKA
name: prewikka
La première partie correspond à la base de données de Prelude-Manager, contenant les alertes IDMEF. Quant à la seconde base de données, c’est celle de Prewikka, crée lors de l’installation de ce dernier.
Optimisation de Prewikka
Toujours dans le fichier de configuration de Prewikka (prewikka.conf).
Pour que Prewikka soit en français, il est possible de modifier la langue.
default_locale: fr_FR
encoding: utf8
Votre système doit avoir le pack de langue fr_FR.utf8. Vous pouvez le vérifier avec la commande locale -a, si ce n’est pas le cas, utilisez la commande dpkg-reconfigure locales et ajoutez le pack fr_FR.utf8.
Il est possible de changer le mot de passe d’authentification (par défaut admin/admin).
[auth loginpassword]
expiration: 60
initial_admin_user: admin
initial_admin_pass: admin
Pour activer les logs de Prewikka, il faut indiquer un fichier en sortie.
[log file]
level: info
file: /var/log/prewikka.log
Il est possible de définir des commandes spécifiques qui peuvent êtres lancés sur les hôtes sources et destinations. Ces commandes peuvent êtres utilisées pour récupérer des informations supplémentaires sur les hôtes sources et destinations.
[host_commands]
whois: /usr/bin/whois $host
traceroute: /usr/bin/traceroute $host
Si les commandes whois et traceroute ne sont pas installé sur votre machine, il faut les installer.
apt install whois traceroute
Démarrage de Prewikka
Dans un premier temps, nous allons créer un script pour pouvoir démarrer/arrêter Prewikka quand on le souhaite.
Créer un nouveau fichier nommé /etc/init.d/prewikka.
nano /etc/init.d/prewikka
Et ajouter le script ci-dessous dedans.
#!/bin/bash
### BEGIN INIT INFO
# Provides: prewikka
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Prewikka est l'interface officielle de Prelude-IDS
### END INIT INFO
# Variables couleurs
CSI="\033["
CEND="${CSI}0m"
CGREEN="${CSI}1;32m"
# PID du processus
PID=$(netstat -tlnp | awk '/:8000 */ {split($NF,a,"/"); print a[1]}')
# Variable d'environnement PYTHONPATH
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages:/usr/local/bin/prewikka-httpd
start() {
echo -n "Démarrage de Prewikka..."
/usr/bin/prewikka-httpd &
echo -e " ${CGREEN}[OK]${CEND}"
}
stop() {
echo -n "Arrêt de Prewikka..."
kill -9 $PID
echo -e " ${CGREEN}[OK]${CEND}"
}
status() {
if [[ $PID -gt 0 ]]; then
echo -e "Prewikka est actuellement en service ${CGREEN}[OK]${CEND}"
else
echo "Prewikka n'est pas en service..."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Utilisation: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Rendez le script exécutable.
chmod +x /etc/init.d/prewikka
Puis démarrez Prewikka avec la commande suivante.
/etc/init.d/prewikka start
Vous pouvez ensuite utiliser votre navigateur pour vous connecter à votre machine sur le port 8000 (http://<votreserveur>:8000).
Le login/mot de passe par défaut est admin.
Sur la gauche, on peut trouver le menu avec les différentes parties : Evénements, Agents, Paramètres et A propos.
L’authentification et la langue de Prewikka peuvent être modifiés dans la partie Paramètres, au deuxième onglet des Paramètres, c’est-à-dire Mon compte, ainsi que pour le dernier onglet Utilisateurs, ici, peut être créé ou modifié des utilisateurs autorisés à se connecter à Prewikka, en indiquant les droits de chaque utilisateur, et la langue de l’interface.
Description de l’interface
L’interface de Prewikka se présente sous la forme d’une fenêtre principale au centre de l’écran, affichant les alertes reçues des sondes Prelude.
La section Événements correspond à l’affichage des alertes IDS et constitue la page d’accueil par défaut de Prewikka.
Elle propose trois onglets : Alertes, Alertes de corrélation et Alertes d’outils.
- L’onglet Alertes (sélectionné par défaut) regroupe l’ensemble des alertes, qu’elles soient corrélées ou non.
- L’onglet Alertes de corrélation permet de consulter uniquement celles générées par Prelude-Correlator.
- Enfin, l’onglet Alertes d’outils affiche les alertes issues des sondes et autres outils de détection.
Quel que soit l’onglet sélectionné, il est généralement possible d’afficher le détail des alertes. Pour cela, il suffit de cliquer soit directement sur le titre de l’alerte, soit sur le nombre indiqué à côté du titre lorsqu’il existe plusieurs occurrences.
Après avoir cliqué sur une alerte, Prewikka en affiche le contenu au format IDMEF, présenté avec une mise en forme HTML, beaucoup plus lisible et agréable qu’un simple fichier de logs.
Concernant l’affichage des alertes, Prewikka utilise un code couleur afin de faciliter leur identification en fonction de leur niveau de gravité.
- Bleu → niveau d’information (info)
- Vert → niveau faible (low)
- Orange → niveau intermédiaire (medium)
- Rouge → niveau critique (high)
Les alertes sont présentées sous forme de tableau comportant plusieurs colonnes :
- la classification (nom de l’alerte, …),
- la source à l’origine de l’alerte,
- la destination de l’événement,
- le nom de la sonde ayant transmis l’alerte à Prelude,
- et enfin la date/heure de réception par le Prelude-Manager.
Dans chacun des onglets de la section Événements, un bouton Effacer situé en bas de page permet de supprimer les alertes sélectionnées (soit globalement, soit de manière ciblée).
Dans le menu latéral gauche se trouve également le bouton Agents.
Il permet de visualiser l’ensemble des agents qui composent l’architecture réseau du projet, c’est-à-dire les différentes sondes connectées au serveur Prelude ainsi que ses composants (comme le Prelude-Manager ou le Prelude-Correlator).
Cette vue offre la possibilité de suivre en temps réel l’état des sondes et des composants de Prelude, et d’identifier s’ils sont actuellement connectés ou non connectés.
Comme pour le bouton Événements, la section Agents comporte deux onglets :
- Agents : affiche le statut des sondes, comme expliqué précédemment.
- Pulsations : présente les vérifications de connexion entre les sondes, avec l’heure exacte de chaque test de statut des agents.
Le troisième bouton du menu latéral est Statistiques.
Cette section permet à Prelude de générer divers rapports, tels que :
- le Top 10 des adresses IP suspectes,
- les ports scannés régulièrement,
- les types d’alertes détectées,
- ainsi que la répartition selon les niveaux de gravité.
Le quatrième bouton du menu est Paramètres.
Il donne accès à un éditeur permettant de créer ou modifier des filtres pour l’affichage des alertes.
Par exemple, on peut choisir de n’afficher que les alertes issues d’une sonde spécifique.
L’un des principaux atouts de cet éditeur est qu’il repose sur le format IDMEF, offrant ainsi une grande flexibilité. Toutefois, cela nécessite de maîtriser au moins les bases de cette norme afin de pouvoir exploiter efficacement les différents champs disponibles dans une alerte IDS.
Pour appliquer un filtre, il suffit, depuis la page d’affichage des alertes, d’utiliser l’outil situé en bas à gauche (sous le menu).
On peut alors sélectionner l’un des filtres créés au préalable et l’appliquer directement.
Cet outil, présenté sous forme de menu, ne se limite pas à la gestion des filtres :
- il propose également des boutons permettant de naviguer dans l’historique des alertes par tranches d’une heure,
- et il offre la possibilité d’appliquer des filtres spécifiques sur chaque colonne du tableau d’alertes.
Par exemple, un clic sur la colonne Classification permet de filtrer les alertes selon leur type.
Enfin, le dernier bouton du menu, À propos, fournit des informations générales sur la solution Prelude-IDS, notamment la version utilisée de Prewikka, ainsi que différentes coordonnées pour contacter l’éditeur de Prelude.
Installation de Snort
Snort est un système libre de détection d’intrusions réseau (NIDS), basé sur des règles configurables (rules) pour détecter et signaler en temps réel les attaques réseau.
La prise en charge de Prelude est intégrée dans la distribution Snort pour les versions allant de 2.4.0 à 2.9.2.
Prérequis
Pour commencer, il est nécessaire d’installer les outils de compilation ainsi que toutes les dépendances requises par Snort.
apt install build-essential libnet1-dev libpcap0.8-dev libpcre3-dev
Il est également nécessaire d’installer libprelude-config, un script Shell utilisé pour déterminer les options du compilateur et de l’éditeur de liens à utiliser lors de la compilation et du lien des programmes qui exploitent la bibliothèque libprelude.
Ce script est fourni par le paquet libprelude-dev.
apt install libprelude-dev
Une fois les dépendances et libprelude installés, on peut commencer l’installation de Snort.
compilation et installation de Snort
Téléchargez et décompressez Snort
cd /tmp
wget https://www.snort.org/downloads/archive/snort/snort-2.8.4.1.tar.gz
tar -zxf snort-2.8.4.1.tar.gz
cd snort-2.8.4.1
Utilisez le script configure pour ajouter le support de Prelude, les dépendances et préparer Snort à être compiler.
./configure --enable-dynamicplugin --enable-prelude
Une fois la configuration terminée, compilez et installez Snort.
make
make install
Créez deux dossiers, un pour stocker les fichiers de configuration, l’autre pour stocker les règles Snort.
mkdir /etc/snort
mkdir /etc/snort/rules
Créez un dossier de log pour Snort.
mkdir /var/log/snort
Copiez les fichiers de configuration de Snort dans le dossier /etc/snort/.
cp /tmp/snort-2.8.4.1/etc/*.conf* /etc/snort
cp /tmp/snort-2.8.4.1/etc/*.map /etc/snort
Ajout des règles Snort
Téléchargez les régles Snort et décompressez les.
mkdir /tmp/snortrules-snapshot-2.8
cd /tmp/snortrules-snapshot-2.8
wget https://versaweb.dl.sourceforge.net/project/snortsnortsam/snortrules-snapshot-2.8.tar.gz
tar -zxf snortrules-snapshot-2.8.tar.gz
mv rules/* /etc/snort/rules
Configuration de Snort
Pour configurer Snort, il faut éditer le fichier /etc/snort/snort.conf.
nano /etc/snort/snort.conf
Dans le fichier snort.conf, voici les paramètres de base à indiquer pour le bon fonctionnement de Snort.
Il est important d’indiquer le répertoire contenant les règles.
var RULE_PATH /etc/snort/rules
Ensuite pour relayer les alertes de Snort vers le serveur Prelude.
output alert_prelude: profile=snort
Test de la configuration de Snort
Editez le fichier /etc/snort/rules/local.rules.
nano /etc/snort/rules/local.rules
Puis y ajouter cette ligne de test, qui sert à envoyer des alertes lorsque Snort sniffe et détecte des pings sur le réseau.
alert icmp any any -> any any (msg:"test ICMP";sid:10000001;)
Nous allons vérifier que notre alerte fonctionne bien. Lancez l’outil Snort avec la commande suivante (pensez à adapter le nom de l’interface si elle est différente de eth0):
snort -A console -i eth0 -c /etc/snort/snort.conf
Lancez un ping a partir de n’importe quelle machine de votre réseau. Vous devriez voir apparaître l’alerte que nous venons de créer.
Appuyez sur Ctrl + C pour stopper Snort.
Vous pouvez maintenent supprimez la ligne de test du fichier local.rules.
Activation/Désactivation d’une règle
Toujours dans le fichier de configuration de Snort, il est possible d’activer ou bien de désactiver les règles. Il suffit pour cela, respectivement de décommenter ou de commenter une règle.
include $RULE_PATH/other-ids.rules
# include $RULE_PATH/web-attacks.rules
Ajouter Snort en tant que sonde de Prelude
C’est le même principe qu’avez les sonde Prelude-Correlator et Prelude-lml, on va devoir utiliser deux commandes en parallèle, une pour générer un mot de passe unique et accepter la requête puis l’autre pour enregistrer la nouvelle sonde.
Taper cette commande dans un autre terminal pour mettre le serveur Prelude en mode écoute pour enregistrer une sonde ou un plugin.
prelude-admin registration-server prelude-manager
La commande génère alors un mot de passe à usage unique et reste en écoute. Il ne reste plus qu’à enregistrer un composant.
Dans un autre terminal, entrez cette commande pour enregistrer la sonde Snort.
prelude-admin register snort "idmef:rw admin:r" 127.0.0.1 --uid 0 --gid 0
Ensuite entrez le mot de passe à usage unique généré par l’utilitaire d’installation, une confirmation vous sera demandée dans l’autre terminal, acceptez en appuyant sur Y.
L’enregistrement de Snort est réussi.
Démarrage de Snort
Dans un premier temps, nous allons créer un script pour pouvoir démarrer/arrêter Snort quand on le souhaite.
Créer un nouveau fichier nommé /etc/init.d/snort.
nano /etc/init.d/snort
Et ajouter le script ci-dessous dedans (pensez à adapter le nom de l’interface si elle est différente de eth0).
#!/bin/bash
### BEGIN INIT INFO
# Provides: snort
# Required-Start: $time $network $local_fs $remote_fs
# Required-Stop: $network $remote_fs
# Should-Start: $syslog
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Lightweight network intrusion detection system
# Description: Intrusion detection system that will
# capture traffic from the network cards and will
# match against a set of known attacks.
### END INIT INFO
# Variables couleurs
CSI="\033["
CEND="${CSI}0m"
CGREEN="${CSI}1;32m"
# PID du processus
PID=$(pidof snort)
# Variable d'environnement
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
start() {
echo -n "Démarrage de Snort..."
/usr/local/bin/snort -u root -g root -c /etc/snort/snort.conf -D -i eth0
echo -e " ${CGREEN}[OK]${CEND}"
}
stop() {
echo -n "Arrêt de Snort..."
kill -9 $PID
echo -e " ${CGREEN}[OK]${CEND}"
}
status() {
if [[ $PID -gt 0 ]]; then
echo -e "Snort est actuellement en service ${CGREEN}[OK]${CEND}"
else
echo "Snort n'est pas en service..."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Utilisation: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Rendez le script exécutable.
chmod +x /etc/init.d/snort
Puis démarrez Snort avec la commande suivante.
/etc/init.d/snort start
Vérification du fonctionnement de la sonde snort
Bon maintenant que tout est enfin en place, on va vérifier à partir de Prewikka, que toutes les sondes sont bien actives et opérationnelles.
Avec votre navigateur connectez vous à l’interface web de Prewikka (http://<votreserveur>:8000), et vérifiez que les 4 agents sont bien en marche.
Vous pouvez aussi vérifier l’enregistrement des 4 agents avec cette la commande.
prelude-admin list
Installation d’Ossec
Ossec est un système libre de détection d’intrusion basé sur l’hôte (HIDS), qui analyse les logs, surveille l’intégrité des fichiers et peut réagir automatiquement aux menaces.
La prise en charge de Prelude est intégrée dans la distribution Ossec pour les versions allant de 1.4 à 2.9.4.
Prérequis
Pour débuter, il faut au préalable installer certains paquets, si ils ne sont pas déjà installés.
apt install libgcrypt20-dev libgnutls28-dev
Maintenant, l’installation d’Ossec peut commencer.
compilation et installation d’Ossec
Téléchargez Ossec et décompressez le.
cd /tmp
wget https://github.com/ossec/ossec-hids/archive/refs/tags/v2.8.3.tar.gz
tar -zxf v2.8.3.tar.gz
cd ossec-hids-2.8.3
Afin qu’Ossec prenne en charge Prelude il faut ajouter le support de Prelude.
cd src
make setprelude
cd ..
Puis lancez le script d’installation.
./install.sh
Ensuite, il ne reste plus qu’à suivre les instructions.
Choisissez la langue.
fr
Ensuite, il va nous avertir que nous avons besoin d’un compilateur C sur la machine, et vous donner des informations générales sur votre ordinateur (version du noyau, utilisateur et hôte).
Appuyez sur Entrée comme il est dit.
Sélectionnez ensuite une installation locale.
local
Choisissez maintenant votre répertoire d’installation, utilisez la valeur par défaut ou modifiez-la si vous le souhaitez.
Sélectionnez maintenant vos options de notification.
Je recommanderais de répondre o à tout. Les réponses actives sont vraiment sympas.
Il définira des variables de configuration par défaut en fonction de vos réponses et de certaines choses qu’il trouvera sur votre système.
Maintenant, Ossec compilera tout. Une fois la compilation terminée, appuyez sur Entrée pour terminer.
Configuration d’Ossec
Pour configurer Ossec, il faut éditer le fichier /var/ossec/etc/ossec.conf.
nano /var/ossec/etc/ossec.conf
Dans le fichier ossec.conf, voici les paramètres de base à indiquer pour le bon fonctionnement de Ossec.
pour relayer les alertes d’Ossec vers le serveur Prelude il faut ajouter les lignes suivantes dans la section <ossec_config>.
<global>
<!-- Configuration de prelude -->
<prelude_output>yes</prelude_output>
<prelude_profile>ossec</prelude_profile>
<prelude_log_level>4</prelude_log_level>
</global>
Ajouter Ossec en tant que sonde de Prelude
C’est le même principe qu’avez les sonde Prelude-Correlator et Prelude-lml et Snort, on va devoir utiliser deux commandes en parallèle, une pour générer un mot de passe unique et accepter la requête puis l’autre pour enregistrer la nouvelle sonde.
Taper cette commande dans un autre terminal pour mettre le serveur Prelude en mode écoute pour enregistrer une sonde ou un plugin.
prelude-admin registration-server prelude-manager
La commande génère alors un mot de passe à usage unique et reste en écoute. Il ne reste plus qu’à enregistrer un composant.
Dans un autre terminal, entrez cette commande pour enregistrer la sonde Ossec.
prelude-admin register ossec "idmef:rw admin:r" 127.0.0.1 --uid 0 --gid 0
Ensuite entrez le mot de passe à usage unique généré par l’utilitaire d’installation, une confirmation vous sera demandée dans l’autre terminal, acceptez en appuyant sur Y.
L’enregistrement d’Ossec est réussi.
Démarrage d’Ossec
Puis démarrez Ossec avec la commande suivante.
/etc/init.d/ossec start
Vérification du fonctionnement de la sonde ossec
Bon maintenant que tout est enfin en place, on va vérifier à partir de Prewikka, que toutes les sondes sont bien actives et opérationnelles.
Avec votre navigateur connectez vous à l’interface web de Prewikka (http://<votreserveur>:8000), et vérifiez que les 5 agents sont bien en marche.
Vous pouvez aussi vérifier l’enregistrement des 5 agents avec cette la commande.
prelude-admin list
OSSEC Web User Interface
Ossec dispose aussi d’une interface web assez sommaire mais très utile pour visualiser les alertes. Cette installation n’est pas obligatoire.
Pour installer Ossec-WUI, il faut au préalable installer certains paquets.
apt install git apache2 php
Clonez le dossier ossec-wui.
git clone https://github.com/ossec/ossec-wui.git
Déplacez le dossier vers un endroit accessible à votre serveur web.
mv ossec-wui* /var/www/html/ossec-wui
Exécuter le script d’installation.
cd /var/www/html/ossec-wui
./setup.sh
Le script demande d’entrer un utilisateur et son mot de passe, à utiliser pour administrer l’interface, et le nom d’utilisateur de votre serveur Web.
Vous pouvez maintenant accéder l’interface web d’Ossec (http://<votreserveur>/ossec-wui/).
Démarrage automatique de Prelude, Snort et Ossec
Pour lancer Prelude, ses sondes (correlator, lml, snort, ossec) et Prewikka, il faut démarrer dans un premier temps Prelude-Manager ensuite les sondes puis Prewikka.
Pour simplifier les choses, voici un script pour démarrer/arrêter tous les composants.
Créer un nouveau fichier nommé /etc/init.d/prelude-snort-ossec.
nano /etc/init.d/prelude-snort-ossec
Et ajouter le script ci-dessous dedans.
#!/bin/bash
### BEGIN INIT INFO
# Provides: prelude-snort-ossec
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Prelude-IDS, Snort, Ossec et Prewikka
### END INIT INFO
# Variables couleurs
CSI="\033["
CEND="${CSI}0m"
CGREEN="${CSI}1;32m"
CRED="${CSI}1;31m"
# PID des processus
PID_PRELUDE_MANAGER=$(pidof prelude-manager)
PID_PRELUDE_LML=$(pidof prelude-lml)
PID_PRELUDE_CORRELATOR=$(pgrep prelude-correla)
PID_SNORT=$(pidof snort)
PID_OSSEC=$(pgrep ossec)
PID_PREWIKKA=$(pgrep prewikka)
# Affiche le nombre de PID
PID_OSSEC_WC=$(pgrep ossec | wc -l)
# Variable d'environnement
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
start() {
# Démarrage du processus Prelude Manager
if [[ $PID_PRELUDE_MANAGER -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prelude Manager est actuellement en service"
else
echo -en "${CRED}[KO]${CEND} Prelude Manager n'est pas en service, démarrage imminent..."
/etc/init.d/prelude-manager start > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
fi
# Démarrage du processus Prelude LML
if [[ $PID_PRELUDE_LML -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prelude LML est actuellement en service"
else
echo -en "${CRED}[KO]${CEND} Prelude LML n'est pas en service, démarrage imminent..."
/etc/init.d/prelude-lml start > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
fi
# Démarrage du processus Prelude Correlator
if [[ $PID_PRELUDE_CORRELATOR -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prelude Correlator est actuellement en service"
else
echo -en "${CRED}[KO]${CEND} Prelude Correlator n'est pas en service, démarrage imminent..."
/etc/init.d/prelude-correlator start > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
fi
# Démarrage du processus Snort
if [[ $PID_SNORT -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Snort est actuellement en service"
else
echo -en "${CRED}[KO]${CEND} Snort n'est pas en service, démarrage imminent..."
/etc/init.d/snort start > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
fi
# Démarrage du processus Ossec
if [[ $PID_OSSEC_WC -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Ossec est actuellement en service"
else
echo -en "${CRED}[KO]${CEND} Ossec n'est pas en service, démarrage imminent..."
/etc/init.d/ossec start > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
fi
# Démarrage du processus Prewikka
if [[ $PID_PREWIKKA -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prewikka est actuellement en service"
else
echo -en "${CRED}[KO]${CEND} Prewikka n'est pas en service, démarrage imminent..."
/etc/init.d/prewikka start > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
fi
}
stop() {
# Arrêt du processus Prelude Manager
if [[ $PID_PRELUDE_MANAGER -gt 0 ]]; then
echo -n "Arrêt de Prelude Manager..."
/etc/init.d/prelude-manager stop > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
else
echo -e "${CGREEN}[OK]${CEND} Prelude Manager n'est pas en service"
fi
# Arrêt du processus Prelude LML
if [[ $PID_PRELUDE_LML -gt 0 ]]; then
echo -n "Arrêt de Prelude LML..."
/etc/init.d/prelude-lml stop > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
else
echo -e "${CGREEN}[OK]${CEND} Prelude LML n'est pas en service"
fi
# Arrêt du processus Prelude Correlator
if [[ $PID_PRELUDE_CORRELATOR -gt 0 ]]; then
echo -n "Arrêt de Prelude Correlator..."
/etc/init.d/prelude-correlator stop > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
else
echo -e "${CGREEN}[OK]${CEND} Prelude Correlator n'est pas en service"
fi
# Arrêt du processus Snort
if [[ $PID_SNORT -gt 0 ]]; then
echo -n "Arrêt de Snort..."
/etc/init.d/snort stop > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
else
echo -e "${CGREEN}[OK]${CEND} Snort n'est pas en service"
fi
# Arrêt du processus Ossec
if [[ $PID_OSSEC_WC -gt 0 ]]; then
echo -n "Arrêt de Ossec..."
/etc/init.d/ossec stop > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
else
echo -e "${CGREEN}[OK]${CEND} Ossec n'est pas en service"
fi
# Arrêt du processus Prewikka
if [[ $PID_PREWIKKA -gt 0 ]]; then
echo -n "Arrêt de Prewikka..."
/etc/init.d/prewikka stop > /dev/null 2>&1
echo -e " ${CGREEN}[OK]${CEND}"
else
echo -e "${CGREEN}[OK]${CEND} Prewikka n'est pas en service"
fi
}
status() {
# Vérification du fonctionnement de Prelude Manager
if [[ $PID_PRELUDE_MANAGER -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prelude Manager est actuellement en service"
else
echo -e "${CRED}[KO]${CEND} Prelude Manager n'est pas en service"
fi
# Vérification du fonctionnement de Prelude LML
if [[ $PID_PRELUDE_LML -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prelude LML est actuellement en service"
else
echo -e "${CRED}[KO]${CEND} Prelude LML n'est pas en service"
fi
# Vérification du fonctionnement de Prelude Correlator
if [[ $PID_PRELUDE_CORRELATOR -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prelude Correlator est actuellement en service"
else
echo -e "${CRED}[KO]${CEND} Prelude Correlator n'est pas en service"
fi
# Vérification du fonctionnement de Snort
if [[ $PID_SNORT -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Snort est actuellement en service"
else
echo -e "${CRED}[KO]${CEND} Snort n'est pas en service"
fi
# Vérification du fonctionnement de Ossec
if [[ $PID_OSSEC_WC -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Ossec est actuellement en service"
else
echo -e "${CRED}[KO]${CEND} Ossec n'est pas en service"
fi
# Vérification du fonctionnement de Prewikka
if [[ $PID_PREWIKKA -gt 0 ]]; then
echo -e "${CGREEN}[OK]${CEND} Prewikka est actuellement en service"
else
echo -e "${CRED}[KO]${CEND} Prewikka n'est pas en service"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Utilisation: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Rendez le script exécutable.
chmod +x /etc/init.d/prelude-snort-ossec
Puis executez le avec la commande suivante.
/etc/init.d/prelude-snort-ossec start
Créer un nouveau service
Pour finir nous allons créer un service pour exécuter le script prelude-snort-ossec au démarrage du système.
Créer un nouveau fichier nommé /etc/systemd/system/prelude-snort-ossec.service.
nano /etc/systemd/system/prelude-snort-ossec.service
Et ajouter le script ci-dessous dedans.
[Unit]
Description=Lance Prelude Snort Ossec
Requires=network-online.target
After=network-online.target
[Service]
User=root
Group=root
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/prelude-snort-ossec start
ExecStop=/etc/init.d/prelude-snort-ossec stop
[Install]
WantedBy=multi-user.target
Notifier systemd qu’un nouveau fichier prelude-snort-ossec.service existe en exécutant la commande suivante.
systemctl daemon-reload
Pour que le service soit lancé au démarrage du système.
systemctl enable prelude-snort-ossec.service
Et pour démarrer le service.
systemctl start prelude-snort-ossec.service