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