Prelude-IDS et Snort, Ossec
Sécuriser son serveur Debian 9 avec Prelude-IDS et Snort, Ossec
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 composants 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
Prelude-IDS est un système de détection d’intrusion hybride (NIDS & HIDS) composé de plusieurs plugins, sondes. Sa modularité permet notamment de lui rajouter facilement de nouveaux types de détecteurs d’intrusion, d’analyseurs de logs et d’une solution de corrélation, le tout au format et à la norme IDMEF (Intrusion Detection Message Exchange Format), bien que de nombreux autres formats de logs sont compatibles.
L’intérêt de Prelude est de pouvoir centraliser les alertes dans sa base de données et de les normaliser au format IDMEF, puis de visualiser le tout dans une interface web.
Prelude peut intégrer :
un NIDS (Network Intrusion Detection System, par exemple Snort)
un HIDS (Host Intrusion Detection System, par exemple Ossec)
un LML (Log Monitoring Lackey, module Prelude : Prelude-LML)
un corrélateur (module Prelude : Prelude-Correlator)
une interface web (module Prelude : Prelude-Prewikka)
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 (MySQL/MariaDB, PostgreSQL, SQLite).
Pour fonctionner, Prelude a besoin d'un serveur de base de données (MySQL/MariaDB, PostgreSQL, SQLite), nous allons 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é, tapez le mot de passe 'root' de votre Debian, puis donner un mot de passe à l'utilisateur 'root' de MariaDB. Cet utilisateur 'root' de la base de données aura tous les droits d'accès.
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 mysql 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 de ce 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 de l'utilisateur 'prelude' à la base de données 'prelude'.
GRANT ALL PRIVILEGES ON prelude.* TO 'prelude'@'localhost';
Pour que les changements prennent effet.
FLUSH PRIVILEGES;
EXIT;
Voici la liste des composants de Prelude-IDS :
- Prelude Manager : c'est le module qui traite et centralise les alertes système
- LibPrelude : Librairie qui fournie l'API de Prelude
- LibpreludeDB : Librairie qui fournie une couche d'abstraction pour le stockage des alertes IDMEF
- Prelude-LML : Analyseur/collecteur de log
- Prelude-Correlator : Moteur de correlation des alertes système
- Prewikka WebUI : Interface web officielle de prelude
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 pour l'utilisateur prelude (que vous avez renseigner lors de la création de la base de données et l'utilisateur 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 réponse comporte du vert et les mots active (running) sur la ligne commençant par Active alors le service est installé et actif.
-
configuration de prelude-manager
Editez le fichier de configuration /etc/prelude-manager/prelude-manager.conf puis vérifiez les paramètres suivants.
L'adresse 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 = xxxxxxxxxxxx
Editez le fichier de configuration /etc/prelude/default/client.conf puis vérifiez les paramètres suivants.
Indique 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.
Tout d'abord installez le paquet suivant pour corriger l'erreur SpamhausDropPlugin: No module named netaddr.
apt install python-netaddr
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
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, ect ...).
[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
Prelude pouvant utiliser des sondes et des plugins (composants) répartis sur tout un réseau, doit pour plus de sécurité, mettre en place des échanges cryptés. Ainsi, pour l’ajout d’un plugin comme Prelude-Correlator par exemple, en local comme sur un autre serveur, ce dernier doit être enregistré et authentifié auprès du Prelude-Manager.
Pour cela, Prelude intègre un outil prelude-admin, c’est avec cette commande qu’il va être possible d’enregistrer les composants supplémentaires.
Tout d’abord, il faut commencer par créer le profil du Prelude-Manager (s'il n'est pas déja créer).
prelude-admin add prelude-manager --uid 0 --gid 0
Cette commande génère une clé pour le Prelude-Manager afin qu’il puisse mettre en place ses échanges cryptés.
-
Ajout d'une sonde : Prelude-Correlator
Pour ajouter une nouvelle sonde, 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 (9usb5on4) à 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 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 unique généré par l'utilitaire d'installation (dans l'exemple: 9usb5on4), 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 première sonde !
-
Ajout d'une sonde : Prelude-LML
Même principe qu'avez la sonde 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
Pour lister les sondes/plugins, on va utiliser la commande
prelude-admin list
La taille de la base de donnée évolue en fonction du nombre d'évènements analysés par les agents. 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
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 de l'utilisateur 'prewikka' à la base de données 'prewikka'.
GRANT ALL PRIVILEGES ON prewikka.* TO 'prewikka'@'localhost';
Pour que les changements prennent effet.
FLUSH PRIVILEGES;
EXIT;
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 pour l'utilisateur prewikka (que vous avez renseigner lors de la création de la base de données et l'utilisateur 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 pour ajouter une interface graphique.
-
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
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 est composée d’une fenêtre principale, centrale où sont affichées les alertes transmises par les sondes de Prelude.
La partie Evénements correspond donc à la visualisation des alertes IDS. C’est la page principale (par défaut) de Prewikka. Sur cette page, il y a 3 onglets disponibles. On a donc le choix entre Alertes, Alertes de Corrélation et Alertes d’outils. Le premier onglet Alertes (par défaut), affiche la totalité des alertes (corrélées, …), le second, comme l’indique son nom, sert à visualiser que les alertes corrélées par Prelude-Correlator. Quant au troisième, il affiche les alertes concernant les outils (sondes).
Quelque soit l’onglet choisi, il est possible (en général) de voir en détail les alertes en cliquant dessus, sur le titre de l’alerte ou bien, en cliquant sur le nombre à côté du titre dans le cas où il y en aurait plusieurs.
Après avoir cliqué sur une alerte, Prewikka affiche alors le contenu de l’alerte, à savoir le format IDMEF avec une mise en forme HTML, plus sympathique à lire que dans un fichier de logs.
Pour revenir sur l’affichage des alertes, elles utilisent des couleurs pour pouvoir en faciliter la recherche sur les niveaux de gravités, de danger de chacune d’entre elles. Ainsi, le code des couleurs est :
- Bleu → niveau d’information « info »
- Vert → niveau le plus faible « low »
- Orange → niveau intermédiaire « medium »
- Rouge → niveau d’alerte maximum « high »
Les alertes sont affichées sous la forme d’un tableau, avec comme colonnes, la classification (nom de l’alerte, …), la source ayant provoquée l’alerte, puis la destination de l’événement, ensuite le nom de la sonde ayant fait remontée cette alerte à Prelude, et enfin le temps (heure) sur lequel l’alerte à été reçue par le Prelude-Manager. Pour chacun des ses onglets (Evénements), un bouton se trouvant en bas de page (Effacer), permet après sélection des alertes (globale, ou ciblée), de les supprimer.
Sur le menu, à gauche il y a aussi un autre choix, le bouton Agents. Ce dernier permet de visualiser l’ensemble des agents constituant l’architecture réseau de notre projet, à savoir les différentes sondes connectées au serveur Prelude, ainsi que ses composants, comme le Prelude-Manager, le Prelude-Correlator. Il est possible donc de voir l’état des sondes et des composants de Prelude en temps réel, c’est-à-dire si ils sont connectées ou pas.
Comme pour le bouton Evénements, la partie Agents contient deux onglets, le premier nommé aussi Agents, correspond à l’affichage des statuts des sondes comme énoncé précédemment. Pour le deuxième onglet Pulsations, il permet de voir les différentes vérifications de connexions entre les sondes, avec l’heure exacte de chaque test de statuts des agents.
Troisième bouton du menu (à gauche de l’interface), Statistiques. C’est ici que Prelude générer des statistiques avec un top 10 des adresses ip suspectes, les ports scannés régulièrement, les types d'alertes, etc...
Les types d'alertes générées :
Les niveaux de gravité :
Quatrième bouton du menu (à gauche de l’interface), Paramètres. C’est ici, que l’on peut créer ou éditer des filtres pour l’affichage des alertes, en précisant par exemple de n’afficher que les alertes provenant d’une sonde en particulier, … etc. Principal avantage de cet éditeur de filtre, c’est qu’il repose sur le format IDMEF, ce qui donne une multitude de possibilités, à condition bien sûr de maîtriser un minimum la norme IDMEF, pour pouvoir utiliser les différents champs d’une alerte IDS.
Pour appliquer un filtre, il suffit lorsque l’on est sur la page d’affichage des alertes d’utiliser l’outil disponible tout en bas à gauche (sous le menu), puis de choisir l’un des filtres préalablement créés et l’appliquer.
Cet outil (sorte de menu) dispose en plus de pouvoir appliquer des filtres, des boutons pour faire défiler les pages des alertes classées par période d’une heure. Permettant ainsi de voir un historique des alertes reçues.
Il est aussi possible d’appliquer des filtres spécifiques sur chaque colonne d’affichage d’alertes, en cliquant sur le nom d’une des colonnes (ex: en cliquant sur Classification).
Et enfin, le dernier bouton du menu A propos donne des informations générales sur la solution Prelude-IDS, la version utilisée de Prewikka, et les différentes adresses pour contacter la société, éditrice de Prelude.
Snort, est un système de détection d'intrusion libre pour le réseau (ou NIDS) publié sous licence GNU GPL. Sa configuration est gérée par des règles (rules).
La prise en charge de Prelude est incluse dans la distribution Snort à partir de Snort 2.4.0 jusqu'à 2.9.2.
-
Prérequis
Pour débuter, il faut installer les outils de compilations et les dépendances de Snort.
apt install build-essential libnet1-dev libpcap0.8-dev libpcre3-dev
Il faut aussi installer libprelude-config (script shell utilisé pour déterminer les drapeaux du compilateur et de l'éditeur de liens qui doivent être utilisés pour compiler et lier les programmes qui utilisent la bibliothèque libprelude) grâce au paquet libprelude-dev.
apt install libprelude-dev
Maintenant, l’installation de Snort peut commencer.
-
compilation et installation de Snort
Téléchargez Snort et décompressez le.
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 la commande configure pour ajouter le support de Prelude, les dépendances et préparer Snort à être compiler.
./configure --enable-dynamicplugin --enable-prelude
Ensuite, vous 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
Editer 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 l’alerte que nous venons de créer apparaître.
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 (ih5w5225) à 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 unique généré par l'utilitaire d'installation (dans l'exemple: ih5w5225), une confirmation vous sera demandée dans l'autre terminal, acceptez en appuyant sur Y.
L'enregistrement de Snort est réussi.
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
Ossec est une application de détection d’intrusion, et plus précisément un HIDS (Host Intrusion Detection System). Il permet de surveiller l’intégrité des fichiers systèmes.
La prise en charge de Prelude est incluse dans la distribution d'Ossec à partir de d'Ossec 1.4.
-
Prérequis
Pour débuter, il faut au préalable installer certains paquets, si ils ne sont pas déja 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. Vous pouvez choisir les réponses utilisées dans ce tutoriel ou différentes. 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, vous devriez avoir ceci.
Une fois terminé, appuyez sur Entrée pour terminer.
-
Configuration d'Ossec
Pour configurer Ossec, il faut éditer le fichier /etc/snort/snort.conf.
nano /var/ossec/etc/ossec.conf
Dans le fichier ossec.conf, voici les paramètres de base à indiquer pour le bon fonctionnement de Snort.
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 (gktkqy04) à 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 unique généré par l'utilitaire d'installation (dans l'exemple: gktkqy04), une confirmation vous sera demandée dans l'autre terminal, acceptez en appuyant sur Y.
L'enregistrement d'Ossec est réussi.
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, 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.
cd /var/www/html/ossec-wui
./setup.sh
Vous pouvez maintenant accéder l'interface web d'Ossec (http://<votreserveur>/ossec-wui/).
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 executer 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