*New 11.3 series Release:
2019-10-05: XigmaNAS 11.3.0.4.6928 - released, 11.2 series are soon unsupported!

*New 12.0 series Release:
2019-10-05: XigmaNAS 12.0.0.4.6928 - released!

*New 11.2 series Release:
2019-09-23: XigmaNAS 11.2.0.4.6881 - released!

We really need "Your" help on XigmaNAS https://translations.launchpad.net/xigmanas translations. Please help today!

Producing and hosting XigmaNAS costs money. Please consider donating for our project so that we can continue to offer you the best.
We need your support! eg: PAYPAL

[TUTO] Sécuriser son serveur avec Prelude-IDS et Ossec

Moderators: mtiburs, velivole18, ernie

Locked
laster13
PowerUser
PowerUser
Posts: 996
Joined: 01 Jun 2013 19:15
Location: France-Marseille
Status: Offline

[TUTO] Sécuriser son serveur avec Prelude-IDS et Ossec

#1

Post by laster13 » 06 Nov 2015 19:41

Un grand MERCI à Hardware, modérateur du forum mondedie. Son tuto DEBIAN m'a servi de support pour l'adaptation et l'installation de prelude sur Nas4free. Je me suis d'ailleurs très largement inspiré de sa littérature pour rédiger ce tuto. Par contre énormément d'investissement personnel notamment parce que rien n'avait (jusqu'à présent) été écris pour freebsd. Je remercie également l'un des responsable du projet Antoine LUONG qui m'a permis de débloquer des situations qui par moment me semblaient insolubles ;)

Prelude est un logiciel SIEM qui permet de superviser la sécurité des systèmes informatiques. Prelude collecte, trie, corrèle et affiche tous les événements de sécurité indépendamment des types d'équipements ou système surveillés. OSSEC quand à lui va traiter les intrusions en bloquant les IP qui lui sembleront suspectes. Ce sont les journaux systèmes qui serviront de support pour piéger les intrus qui oseraient s'en prendre à votre serveur :mrgreen: .

Au-delà de sa capacité de traitement de tout type de journaux d’événements (journaux système, syslog, fichiers de configuration...etc), Prelude est nativement compatible avec de nombreuses sondes anti-intrusion open-source (snort, ossec... etc) grâce à l'utilisation du format IDMEF.

Si vous avez besoin d'aide, merci de poster sur le [Topic unique] Sécuriser son serveur avec Prelude-IDS et Ossec !!

Testé dans les conditions suivantes: ASRock E350M1/USB3 x64-embedded sur AMD E-350 Processor, 8GO DDR3, 2 x 2To - ZFS entrelacés, Nas4free Embedded (10.1.0.2 - Prescience (revision 1731) + TheBrig (Alcatraz)
- 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
Installation

Pour commencer, installer TheBrig en vous aidant de ce tuto
[TUTO] TheBrig-Comment créer une Jail

Nous avons besoin d'activer le firewall dans la jail, pour ce faire nous allons la configurer ainsi :

Image

Enfin dans Système|Avancé|loader.conf vous rentrez les paramètres suivants :

Code: Select all

net.inet.ip.fw.default_to_accept=”1″
ipfw_load=”YES"
Image

Une fois activée la jail ressemblera à cela :

Image

Pré requis pour compiler :

On aurait pu installer la version 1.0.1 disponible avec les ports sauf qu'elle date un peu (2012). On va donc compiler prélude à partir des sources pour profiter de la dernière version (aout 2015)

On modifie le fichier /etc/hosts

Code: Select all

ee /etc/hosts
On rajoute la ligne suivante en considérant que vous avez nommé votre jail "prelude" sinon adaptez (l' IP est celle de votre jail)
192.168.0.104 prelude.local

Code: Select all

pkg install wget python27 gnutls pkgconf libgcrypt pcre swig gsed
Compilation et installation de Libprelude :

Code: Select all

cd /tmp
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/410/libprelude-1.2.6.tar.gz
tar -xzf libprelude-1.2.6.tar.gz
cd libprelude-1.2.6
rm configure
wget --no-check-certificate https://dl.dumptruck.goldenfrog.com/p/HlYLQ1LWjW/configure
chmod +x configure
./configure --without-perl --without-lua --with-python=/usr/local/bin/python2.7
Voilà ce que vous devez obtenir
*** Dumping configuration ***
- Generate documentation : no
- LUA binding : no
- Perl binding : no
- Python2.x binding : yes
- Python3.x binding : no
- Ruby binding : no
- Easy bindings : yes
Pour finir l'installation de libprelude, exécutez les commandes suivantes :
# On inclus la librairie cstddef
gsed -i '1i\#include <cstddef>' /tmp/libprelude-1.2.6/bindings/python/_prelude.cxx

Code: Select all

make
make install
Remarque importante : Pour les versions 9.3 il faut utiliser les commandes de compilation gmake et gmake install et non "make et make install"

Code: Select all

pkg install gmake
Compilation et installation de LibpreludeDB :

On va activer le support mysql et pour ce faire, on install "mysql-server"

Code: Select all

pkg install mysql56-server
On télécharge la source puis on configure la compilation

Code: Select all

cd /tmp
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/408/libpreludedb-1.2.6.tar.gz
tar -xzf libpreludedb-1.2.6.tar.gz
cd libpreludedb-1.2.6
rm configure
wget --no-check-certificate https://dl.dumptruck.goldenfrog.com/p/Yl6LEwAvs7/configure
chmod +x configure
# Variable d'environnement obligatoire sinon le linker ne trouvera pas libprelude

Code: Select all

setenv LD_LIBRARY_PATH /usr/local/lib

Code: Select all

./configure --without-perl --without-lua --with-python=/usr/local/bin/python2.7
Voilà ce que vous devez obtenir
*** Dumping configuration ***
- Generate documentation : no
- Enable MySQL plugin : yes
- Enable PostgreSQL plugin : no
- Enable SQLite3 plugin : no
- Python2.x binding : yes
- Python3.x binding : no
- Easy bindings : yes

Code: Select all

make
make install
Création de la base de donnée Prelude

Au préalable on va configurer mysql ainsi que le Firewall dans la jail :

Code: Select all

echo 'mysql_enable="YES"' >> /etc/rc.conf
echo 'firewall_enable="YES"' >> /etc/rc.conf
echo 'firewall_type="/usr/local/etc/prelude-lml/ruleset/ipfw.rules"' >> /etc/rc.conf
Création du mot de passe Mysql

Code: Select all

service mysql-server start
mysql_secure_installation
Si problème avec le mot de passe
viewtopic.php?f=35&t=9334&p=57630#p57630

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" :
# Connexion au serveur MySQL en tant que root

Code: Select all

mysql -u root -p
# Création de la base de données "prelude"

Code: Select all

mysql> CREATE database prelude;
# Création de l'utilisateur "prelude" et ajout des permissions

Code: Select all

mysql> CREATE USER 'prelude'@'localhost' IDENTIFIED BY 'MOT DE PASSE';
mysql> GRANT USAGE ON *.* TO 'prelude'@'localhost';
mysql> GRANT ALL PRIVILEGES ON prelude.* TO 'prelude'@'localhost';
# On quitte la console MySQL

Code: Select all

mysql> exit
# Création des tables

Code: Select all

mysql -u prelude prelude -p < /usr/local/share/libpreludedb/classic/mysql.sql
Compilation et installation de Prelude Manager :

Pour activer le support du format IDMEF XML et de la technique "d'emballage TCP", installez les paquets suivants :

Code: Select all

pkg install libxml2
On télécharge la source puis on configure la compilation

Code: Select all

cd /tmp
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/414/prelude-manager-1.2.6.tar.gz
tar -xzf prelude-manager-1.2.6.tar.gz
cd prelude-manager-1.2.6
rm configure
wget --no-check-certificate https://dl.dumptruck.goldenfrog.com/p/CvLrR5mLwX/configure
chmod +x configure
./configure
On s'assure que le support de XML et TCP Wrapper est activé :
*** Dumping configuration ***
- TCP wrapper support : yes
- XML plugin support : yes
- Database plugin support: yes
Puis

Code: Select all

make
make install
Installation de Prelude Correlator :

Code: Select all

cd /tmp
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/409/prelude-correlator-1.2.6.tar.gz
tar -xzf prelude-correlator-1.2.6.tar.gz
cd prelude-correlator-1.2.6
python2.7 setup.py install --record correlator_files.txt
Compilation et installation de Prelude-LML :

Code: Select all

pkg install devel/icu
On télécharge l'archive puis on configure la compilation :

Code: Select all

cd /tmp
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/411/prelude-lml-1.2.6.tar.gz
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/412/prelude-lml-rules-1.2.6.tar.gz
tar -xzf prelude-lml-1.2.6.tar.gz
cd prelude-lml-1.2.6
rm configure
wget --no-check-certificate https://dl.dumptruck.goldenfrog.com/p/HO0VvybNY8/configure
chmod +x configure
./configure
On s'assure que le support de libICU est activé
*** Dumping configuration ***
- Enable TLS support : no
- Favor libICU over Iconv : yes
Puis

Code: Select all

make
make install
Installation de Prewikka :

Pré requis

Code: Select all

pkg install py27-cheetah py27-cairo py27-netaddr  py27-babel gettext devel/py-pip
Tant qu'à faire on met à jour PIP vers la version 7.1.2

Code: Select all

pip install --upgrade pip
On installe lesscpy qui est un Python LESS Compiler

Code: Select all

pip install lesscpy
pip install python-dateutil
On télécharge ensuite l'archive

Code: Select all

cd /tmp
wget --no-check-certificate https://www.prelude-siem.org/attachments/download/413/prewikka-1.2.6.tar.gz
tar -xzf prewikka-1.2.6.tar.gz
cd prewikka-1.2.6
python2.7 setup.py install --record prewikka_files.txt --prefix /usr/local
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" :
# Connexion au serveur MySQL en tant que root

Code: Select all

mysql -u root -p
# Création de la base de données "prewikka"

Code: Select all

mysql> CREATE database prewikka;
# Création de l'utilisateur "prewikka" et ajout des permissions

Code: Select all

mysql> CREATE USER 'prewikka'@'localhost' IDENTIFIED BY 'MOT DE PASSE';
mysql> GRANT USAGE ON *.* TO 'prewikka'@'localhost';
mysql> GRANT ALL PRIVILEGES ON prewikka.* TO 'prewikka'@'localhost';
# On quitte la console MySQL

Code: Select all

mysql> exit
Configuration de Prewikka

On édite le fichier prewikka.conf

Code: Select all

ee /usr/local/etc/prewikka/prewikka.conf
On modifie ainsi:
# Paramètres de connexion à la base de donnée Prelude
[idmef_database]
type: mysql
host: localhost
user: prelude
pass: MOT DE PASSE DE L UTILISATEUR MYSQL PRELUDE
name: prelude

# Paramètres de connexion à la base de donnée Prewikka
[database]
type: mysql
host: localhost
user: prewikka
pass: MOT DE PASSE DE L UTILISATEUR MYSQL PREWIKKA
name: prewikka
Installation des agents de surveillance

Prelude utilise un système de sonde/plugins installé en local ou sur un ensemble de machine afin de récupérer divers informations comme des audits, les alertes et les évènements système...etc Pour ajouter une nouvelle sonde, on va utiliser la commande prelude-admin.

Création du profil de Prelude-manager

Tout d’abord, il faut commencer par créer le profil du Prelude-Manager. Pendant la création du profil, prelude-admin va créer une clé privée/publique afin de sécuriser les échanges entre Prelude-Manager et la sonde.

On va créer un nouveau profil :

Code: Select all

prelude-admin add prelude-manager --uid 0 --gid 0
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 (One-Time Password) et accepter la requête puis l'autre pour enregistrer la nouvelle sonde. Pour exécuter deux commandes en même temps, on va utiliser screen.

Code: Select all

pkg install screen
On tape ensuite "screen" dans la console putty (par exemple)

Pour les 2 premieres commandes, penser à activer les majuscules
CTRL + a puis S # On split le terminal en deux
CTRL + a puis TAB # On change de fenêtre
CTRL + a puis c # On créé une nouvelle fenêtre
Image

RAPPEL : Pour vous déplacer d'une console à l'autre, il faut faire CTRL + a puis TAB.

Donc dans la première console, entrez la commande suivante :

Code: Select all

prelude-admin registration-server prelude-manager
Dans la deuxième console, entrez cette commande pour enregistrer la sonde Prelude-Correlator :

Code: Select all

prelude-admin register prelude-correlator "idmef:rw admin:r" localhost --uid 0 --gid 0
Ensuite entrez le mot de passe unique généré par l'utilitaire d'installation, une confirmation vous sera demandée dans l'autre console, acceptez en appuyant sur Y. Voila vous venez d'enregistrer votre première sonde !

Image

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 :

Code: Select all

prelude-admin registration-server prelude-manager
prelude-admin register prelude-lml "idmef:rw admin:r" localhost --uid 0 --gid 0
Vérification de l'enregistrement des sondes :

Pour cela, on va utiliser la commande prelude-admin list -l :
# prelude-admin list -l

Profile UID GID AnalyzerID Permission Issuer AnalyzerID
--------------------------------------------------------------------------------
prelude-correlator root root 1070801180844572 idmef:rw admin:r 1460371894460377
prelude-manager root root 1460371894460377 n/a n/a
prelude-lml root root 857822342571350 idmef:rw admin:r 1460371894460377
Vous devriez avoir 3 profils distincts : prelude-manager, prelude-lml, prelude-correlator.

Dans ce tuto je n'ai traité que la mise en place d'un serveur maître mais il est tout à fait possible de rajouter des sondes client d'autres serveurs faisant parti du même réseau local (debian, windows ou autres). Autrement dit on peut surveiller tout un parc informatique en rajoutant autant de sondes que de serveurs à surveiller.

Configuration de Prelude-Manager :

Editez le fichier de configuration prelude-manager.conf puis ajoutez/modifiez les paramètres suivants :
# ee /usr/local/etc/prelude-manager/prelude-manager.conf

# Interface d'écoute
listen = 127.0.0.1

# Paramètres de connexion à la base de donnée
[db]
type = mysql
host = localhost
port = 3306
name = prelude
user = prelude
pass = xxxxxxxxxxxx
Configuration de Prelude-LML :

On va passer à la configuration de l'analyseur des fichiers de log, editez le fichier prelude-lml.conf :
# ee/usr/local/etc/prelude-lml/prelude-lml.conf

[prelude]
# Adresse du serveur maitre (dans notre cas il s'agit du même serveur)
server-addr = 127.0.0.1

[format=syslog]
time-format = "%b %d %H:%M:%S"
prefix-regex = "^(?P<timestamp>.{15}) (?P<hostname>\S+) (?:(?P<process>\S+?)(?:\[(?P<pid>[0-9]+)\])?: )?"

# Ajout des fichiers de log à analyser
file = /var/log/messages
file = /var/log/auth.log
file = /var/log/daemon.log
file = /var/log/mail.log
file = /var/log/syslog
file = /var/log/user.log

[Pcre]
ruleset=/usr/local/etc/prelude-lml/ruleset/pcre.rules
Ajout des règles de Prelude-LML :

Tout à l'heure, pendant les étapes de compilation, nous avons téléchargé les règles de détection de Prelude-LML, il ne faut pas oublier de les mettre au bon endroit :

Code: Select all

cd /tmp
tar -xzf prelude-lml-rules-1.2.6.tar.gz
cd prelude-lml-rules-1.2.6
cp -r ruleset /usr/local/etc/prelude-lml/
Fichiers de démarrage

Aucun script de gestion des services n'est fournit avec les tarball d'installation du site officiel. Pour les obtenir j'ai installé la version des ports et récupéré les fichiers de démarrage.

Code: Select all

cd /etc/rc.d
wget https://dl.dumptruck.goldenfrog.com/p/AfbKJlUXe9/prewikka
wget https://dl.dumptruck.goldenfrog.com/p/dqAXyxLtej/prelude-manager
wget https://dl.dumptruck.goldenfrog.com/p/EVX-MXv4hj/prelude-lml
wget https://dl.dumptruck.goldenfrog.com/p/CvFoXjpTl5/prelude-correlator
On configure le démarrage automatique :

Code: Select all

echo 'prelude_manager_enable="YES"' >> /etc/rc.conf
echo 'prelude_lml_enable="YES"' >> /etc/rc.conf
echo 'prelude_correlator_enable="YES"' >> /etc/rc.conf
echo 'prewikka_enable="YES"' >> /etc/rc.conf
On applique les autorisations necessaires :

Code: Select all

chmod +x prelude-manager
chmod +x prelude-lml
chmod +x prelude-correlator
chmod +x prewikka
Synchronisation des composants de Prelude

Les agents de Prelude peuvent parfois ne plus être synchronisés entre eux à cause le plus souvent d'une désynchronisation temporelle entre les serveurs. Pour éviter ce type de problème, il est conseillé d'utiliser le protocole NTP pour que vos serveurs soient synchronisés à la seconde près.

Freebsd possède un outil qui permet de configurer le serveur de temps NTP

Code: Select all

tzsetup
Image
Sélectionner "no" et renseigner votre région et le fuseau horaire
Image

Image

Puis :

Code: Select all

echo 'ntpd_enable="YES"' >> /etc/rc.conf
On va également mettre en place un script qui va vérifier que tous les services sont lancés

Code: Select all

ee /usr/local/bin/prelude-services
Copier-coller

Code: Select all

#!/bin/sh

CSI="\033["
CEND="${CSI}0m"
CGREEN="${CSI}1;32m"
CRED="${CSI}1;31m"

if ps ax | grep -v grep | grep prelude-manager
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, demarrage imminent..."
    service prelude-manager start
fi

if ps ax | grep -v grep | grep prelude-lml
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, demarrage imminent..."
    service prelude-lml start
fi

if ps ax | grep -v grep | grep prelude-correlator
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, demarrage imminent..."
    service prelude-correlator start
fi

if ps ax | grep -v grep | grep prewikka
then
    echo -e "${CGREEN}[OK]${CEND} Prelude prewikka est actuellement en service"
else
    echo -e "${CRED}[KO]${CEND} Prelude prewikka n'est pas en service, demarrage imminent..."
    service prewikka start
fi

Code: Select all

chmod +x /usr/local/bin/prelude-services
Puis ajouter une nouvelle tâche qui se lance toutes les minutes par exemple:

Code: Select all

ee /etc/crontab
Coller cette ligne à la fin du fichier
*/1 * * * * root /usr/local/bin/prelude-services
On relance le service cron

Code: Select all

service cron restart
Optimisation de la base de données

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 un tâche CRON pour que la suppression des alertes se fasse de manière automatique et périodique :

Code: Select all

ee /usr/local/bin/prelude-donnees
Copier Coller le code ci dessous :

Code: Select all

#!/bin/sh

set -e

DBTYPE="mysql"
DBHOST="localhost"
DBNAME="prelude"
DBUSER="prelude"
DBPASS="xxxxxxxx"

# Supprimer tous les évènements antérieur à 1 mois
KEEPINTERVAL="1 month"
DATE=$(date -v -1m +%Y-%m-%d)

# Suppression des alertes
/usr/local/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/local/bin/preludedb-admin delete heartbeat --criteria "heartbeat.create_time <= $DATE" "type=$DBTYPE host=$DBHOST name=$DBNAME user=$DBUSER pass=$DBPASS"
Créer un nouveau fichier nommé /usr/local/bin/prelude-donnees et ajouter le script ci-dessus dedans puis rendez-le exécutable :

Code: Select all

chmod +x /usr/local/bin/prelude-donnees
Puis ajouter une nouvelle tâche qui se lance tous les jours à minuit par exemple:

Code: Select all

ee /etc/crontab
Coller cette ligne à la fin du fichier
0 0 * * * root /usr/local/bin/prelude-donnees
On relance le service cron

Code: Select all

service cron restart
A ce stade, on relance la jail et on vérifie que tout fonctionne correctement
On se connecte à l'interface de prelude
ip_jail:8000
Vérifiez que les 3 agents sont bien en marche :
Image

Maintenant il ne vous reste plus qu'à attendre que des évènements notables surviennent sur votre serveur (une connexion, un changement de mot de passe, une attaque par brute-force, une application qui génére des erreurs...etc). Pour visualiser alertes en cours, cliquez sur "Alertes" . Je reprends l'exemple donné par Hardware dans son tuto

Image

Grâce à ce screen, on peut voir que le serveur a subit 4 attaques par Brute Force, plus de 20 tentatives de connexion, une IP reconnue par DSHIELD (donc un vilain qui a déjà été repéré auparavant) et tout ceci en l'espace d'une heure.

Cliquez sur une alerte pour voir tous les détails :

Image

Prelude receuille énormement d'informations lors d'une alerte. Comme on peut le voir ci-dessus, nous avons l'heure précise à laquelle l'alerte a été déclanchée, sur quel serveur, avec une description précise et un niveau de gravité. Il y aussi le service qui est atteint (ici il s'agit de SSH), les alertes corrélées...etc.

BONUS : Accéder à Prewikka avec Nginx

Code: Select all

ee /etc/local/etc/nginx/sites-enabled/prewikka.conf
Copier le texte ci dessous :
upstream prewikka-upstream {
server 127.0.0.1:8000 weight=1 fail_timeout=300s;
}

server {
listen 80;
server_name prelude.domain.tld;

location / {

proxy_set_header Host $host;
proxy_set_header Origin http://$host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;

proxy_redirect off;
proxy_read_timeout 5m;

proxy_pass http://prewikka-upstream;

}

}
Puis redémarrez Nginx :

Code: Select all

service nginx restart
Pensez à créer un CNAME auprès de votre registrar et vous pourrez ensuite vous connecter avec une adresse sympa genre :
http://prelude.domain.tld/

Image

Ossec est un HIDS (Host-based Intrusion Detection System), son rôle est de détecter une intrusion en temps réel au sein d'un système informatique en s'appuyant sur différentes techniques comme l'analyse des logs, la vérification d'intégrité des fichiers système et des fichiers de configuration, en détectant les rootkits...etc.
C'est aussi un IPS (Intrusion Prevention System), il peut ainsi détecter les robots/scripts qui scannent les ports du serveur, les attaques de type Brute Force sur des services comme SSH, FTP, Nginx, Apache, Postfix...etc Il analyse aussi automatiquement toutes les requêtes HTTP(s) (POST/GET/PUT/DELETE) pour repérer l'exploitation de faille XSS, SQL en les comparant avec des patterns d'attaques connues.
Les adresses IP suspectes sont identifiées et bloquées automatiquement par "active response" et "firewall drop". Ossec ne fait pas dans la douceur
Ossec peut aussi fonctionner en mode Manager/Agents. Le manager correspond au serveur central de votre architecture qui détient toutes les règles de sécurité et la configuration principale de votre système et recueil les informations, les évènements, les tests d'intégrité et les audits provenant de tous agents associés au serveur maitre.

Installation d'Ossec

Liens utiles :
http://www.ossec.net/
http://en.wikipedia.org/wiki/OSSEC
http://ossec-docs.readthedocs.org/en/latest/index.html

Exécutez les commandes suivantes :

Code: Select all

cd /tmp
wget https://bintray.com/artifact/download/ossec/ossec-hids/ossec-hids-2.8.3.tar.gz
tar xzf ossec-hids-2.8.3.tar.gz
cd ossec-hids-2.8.3/
Ajout du support de Prelude

Code: Select all

cd src && make setprelude && cd ..
Puis lancez le script d'installation :

Code: Select all

./install.sh
Lors de l'installation, répondez à toutes les questions :
OSSEC HIDS v2.8.1 Script d'installation - http://www.ossec.net
Vous êtes sur le point d'installer OSSEC HIDS.
Vous devez avoir une compilateur C préinstallé sur votre système.
Si vous avez des questions ou des commentaires, envoyez un email
à dcid@ossec.net (ou daniel.cid@gmail.com).
- Système: Linux scofield 3.2.0-4-686-pae
- Utilisateur: root
- Hôte: hostname

-- Appuyez sur Entrée pour continuer ou Ctrl-C pour annuler. --

1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? serveur
- Installation du serveur choisie.

2- Définition de l'environnement d'installation.
- Choisissez votre répertoire d'installation de OSSEC HIDS [/var/ossec]:
- L'installation sera faite sur /var/ossec .

3- Configuration de OSSEC HIDS.

3.1- Voulez-vous une alerte par email ? (o/n) [o]: o
- Quel est votre adresse email ? admin@domain.tld
- Nous trouvons votre serveur SMTP sur: mail.domain.tld.
- Voulez-vous l'utiliser ? (o/n) [o]: o
--- Serveur SMTP utilisé : mail.domain.tld.

3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: o
- Lancement de syscheck (démon de vérification d'intégrité).

3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]: o
- Lancement de rootcheck (détection de rootkit).

3.4- La réponse active vous permet d'éxécuter des commandes
spécifiques en fonction d'évènement. Par exemple,
vous pouvez bloquer une adresse IP ou interdire
l'accès à un utilisateur spécifique.
Plus d'information sur :
http://www.ossec.net/en/manual.html#active-response
- voulez-vous démarrer la réponse active ? (o/n) [o]: o
- Réponse active activée.
- Par défaut, nous pouvons activer le contrôle d'hôte
et le pare-feu (firewall-drop). Le premier ajoute
un hôte dans /etc/hosts.deny et le second bloquera
l'hôte dans iptables (sous linux) ou dans ipfilter
(sous Solaris, FreeBSD ou NetSBD).
- Ils peuvent aussi être utilisés pour arrêter les scans
en force brute de SSHD, les scans de ports ou d'autres
formes d'attaques. Vous pouvez aussi les bloquer par
rapport à des évènements snort, par exemple.
- Voulez-vous activer la réponse pare-feu (firewall-drop) ? (o/n) [o]: o
- pare-feu (firewall-drop) activé (local) pour les levels >= 6
- liste blanche (white list) par défaut pour la réponse active :
- xxx.xxx.xxx.xxx
- xxx.xxx.xxx.xxx
- Voulez-vous d'autres adresses IP dans votre liste (white list) ? (o/n)? [n]: n

3.5- Voulez-vous activer fonctionnalité syslog (port udp 514) ? (o/n) [o]: o
- Fonctionnalité syslog activé.

3.6- Mise en place de la configuration pour analyser les logs suivants :
-- /var/log/messages
-- /var/log/auth.log
-- /var/log/syslog
-- /var/log/mail.info
-- /var/log/dpkg.log
-- /var/log/nginx/access.log (apache log)
-- /var/log/nginx/error.log (apache log)
- Si vous voulez surveiller d'autres fichiers, changez
le fichier ossec.conf en ajoutant une nouvelle valeur
de nom de fichier local.
Pour toutes vos questions sur la configuration,
consultez notre site web http://www.ossec.net .
Une fois la compilation terminée, vous devriez avoir ceci :
- Le Système est Debian (Ubuntu or derivative).
- Script d'initialisation modifié pour démarrer OSSEC HIDS pendant le boot.
- Configuration correctement terminée.
- Pour démarrer OSSEC HIDS:
/var/ossec/bin/ossec-control start
- Pour arrêter OSSEC HIDS:
/var/ossec/bin/ossec-control stop
- La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf

Merci d'utiliser OSSEC HIDS.
Si vous avez des questions, suggestions ou si vous trouvez
un bug, contactez nous sur contact@ossec.net ou en utilisant la
liste de diffusion publique sur ossec-list@ossec.net
( http://www.ossec.net/en/mailing_lists.html ).
Plus d'information peut être trouver sur http://www.ossec.net
Configuration d'Ossec

Ossec est déjà opérationnel car il a été pré-configuré par le script d'installation. Il suffit juste de lancer tous les agents locaux avec la commande service ossec start pour voir Ossec en action

Le fichier de configuration principal est stocké dans le répertoire /var/ossec/etc/ossec.conf. C'est un fichier XML qui permet de définir les règles à inclure, le/les adresses emails de notification, les fichiers à surveiller..etc

La configuration des alertes par email et des IPs White-listées se fait dans le block Global :
<global>
<!-- Notifications par email -->
<email_notification>yes</email_notification>
<email_to>admin@domain.tld</email_to>
<smtp_server>mail.domain.tld.</smtp_server>
<email_from>ossecm@domaine.tld</email_from>

<!-- White List -->
<white_list>127.0.0.1</white_list>
<white_list>^localhost.localdomain$</white_list>
<white_list>xxx.xxx.xxx.xxx</white_list>
</global>
Vous devez installer un serveur smtp pour que les alertes puissent être envoyés par Ossec, allez voir l'installation de postfix dans ce tutoriel.

active-response : Scripts exécutés par le module Active-response, par exemple firewall-drop.sh permettant de ban les ips suspectes. Les réponses actives sont configurées dans des blocs nommé "active-response", on va prendre un exemple pour mieux comprendre :
<active-response>
<command>firewall-drop</command>
<location>local</location>
<level>6</level>
<timeout>600</timeout>
</active-response>

<command>
<name>firewall-drop</name>
<executable>firewall-drop.sh</executable>
<expect>srcip</expect>
<timeout_allowed>yes</timeout_allowed>
</command>
Cette réponse active exécute la commande local firewall-drop pour TOUS les évènements de niveau >= 6. Le script firewall-drop.sh ban les IPs associées à ces évènements pour une durée de 600 secondes (10 minutes).

Pour voir les adresses ip drop, vous pouvez utiliser ipfw :

Code: Select all

ipfw table all list
Un exemple de ce qu'affiche le Firewall, les IP restant blacklistés 10 mn

Code: Select all

root@test:/ # ipfw table all list
---table(1)---
77.51.73.91/32 0
85.95.218.81/32 0
root@test:/ #
Pour débannir une adresse IP, exécutez l'un de ces deux scripts

Code: Select all

/var/ossec/active-response/bin/host-deny.sh delete - ADRESSE IP
/var/ossec/active-response/bin/firewall-drop.sh delete - ADRESSE IP
Il ne manque plus qu'une chose à configurer, les fichiers de log à surveiller. Vous devez spécifier le format du fichier de log et son chemin :
<localfile>
<log_format>syslog</log_format>
<location>/var/log/messages</location>
</localfile>

<localfile>
<log_format>syslog</log_format>
<location>/var/log/auth.log</location>
</localfile>

<localfile>
<log_format>apache</log_format>
<location>/var/log/nginx/access.log</location>
</localfile>

<localfile>
<log_format>apache</log_format>
<location>/var/log/nginx/error.log</location>
</localfile>

...etc
Les niveaux de gravité
  • - 00 : À ignorer => Pas d'action à entreprendre
    - 01 : N/S
    - 02 : Notification système, non pertinant vis à vis de la sécurité du système
    - 03 : Événements réussis / autorisés
    - 04 : Les erreurs liées à une mauvaise configuration
    - 05 : Erreurs générées par l'utilisateur
    - 06 : Attaque à faible pertinence
    - 07 : Événements non classés avec une certaine pertinence en matière de sécurité
    - 08 : Événements se produisant pour la première fois
    - 09 : Sources invalides (connexions répétées avec un user qui n'existe pas)
    - 10 : Erreurs générés par plusieurs utilisateurs
    - 11 : Erreurs d'intégrité système
    - 12 : Événements de haute importance (erreurs kernel, attaques spécifiques...)
    - 13 : Détection d'une ou de plusieurs attaques critiques
    - 14 : Détection d'une ou de plusieurs attaques critiques avec correlation (outch hmm)
    - 15 : Extrème gravité, faux positif impossible, action à entreprendre immédiatement
    - 16 : Le serveur a été compromis, vous avez perdu la partie. Vous pouvez recommencer si vous le souhaitez mais je vous conseil de vous reconvertir en tant que jardinier au Tibet, par exemple dans le région de Xizang. C'est très paisible là-bas, pas de serveur à surveiller, le pieds quoi
Ajouter Ossec en tant que sonde de Prelude

On commence par modifier le fichier de configuration d'Ossec, /var/ossec/etc/ossec.conf, en ajoutant les 3 lignes suivantes dans la section Global :
<global>
<!-- Configuration de prelude -->
<prelude_output>yes</prelude_output>
<prelude_profile>ossec</prelude_profile>
<prelude_log_level>4</prelude_log_level>
</global>
Ensuite on ajoute un nouveau profil. C'est toujours le même principe qu'avez les autres sondes, il faut exécuter les deux commandes ci-dessous en parallèle :

Code: Select all

prelude-admin registration-server prelude-manager
prelude-admin register ossec "idmef:rw admin:r" localhost --uid ossec --gid ossec
Puis onredémarre les services :

Code: Select all

service prelude-manager restart
/var/ossec/bin/ossec-control restart
Normalement vous devriez voir un nouvel agent apparaître sur Prewikka :
Image

OSSEC Web User Interface

Ossec dispose aussi d'une interface web assez sommaire mais très utile pour visualiser les alertes. L'installation est très simple, exécutez les commandes suivantes :

Code: Select all

cd /usr/local/www
# Normalement le User-Agent est facultatif mais le site d'Ossec bloque les requêtes qui n'en n'ont pas...

Code: Select all

wget --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/31.0" http://www.ossec.net/files/ossec-wui-0.8.tar.gz
tar -xzf ossec-wui-0.8.tar.gz
mv ossec-wui-0.8 ossec
rm -rf ossec-wui-0.8.tar.gz
chown -R www:www ossec
usermod -a -G ossec www
chmod -R 770 /var/ossec/tmp
chgrp www /var/ossec/tmp
Ensuite ajoutez un nouveau vhost Nginx :

Code: Select all

server {

   listen          80;
   server_name     ossec.domain.tld;
   root            /var/www/ossec;
   index           index.php;
   charset         utf-8;

   auth_basic "Ossec WEB UI";
   auth_basic_user_file /etc/nginx/passwd;

   location / {
      try_files $uri $uri/ index.php;
   }

   location ~* \.php$ {
        include         fastcgi_params;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
   }

}
Redémarrez Nginx :

Code: Select all

service nginx restart
Vous pouvez maintenant accéder l'interface web d'Ossec :

Image

On va en rester là pour l'instant avec Ossec, il vous reste encore pleins de choses à découvrir. N'hésitez pas à aller voir la documentation sur le site officiel pour en apprendre plus afin de créer vos propres règles, vos réponses actives, vos scripts...etc :

http://ossec-docs.readthedocs.org/en/la ... index.html

A vous !!

Enjoy ;)

laster13
PowerUser
PowerUser
Posts: 996
Joined: 01 Jun 2013 19:15
Location: France-Marseille
Status: Offline

Configuration serveurs client et Travaux pratiques

#2

Post by laster13 » 08 Nov 2015 19:17

Nous allons voir comment monitorer des serveurs distants appelés agents. Cela pourra tout aussi bien être un poste Debian, UNIX, ou Windows. Nous terminerons par un exo pratique genre TP en situation réelle ;) ? une fois n'est pas coutume!

Je vais prendre des raccourcis dans mes explications sachant que la majorité des difficultés ont été abordées dans le post précédent. Nous allons simplement installer "libprelude" et "prelude-lml", créer une sonde "prelude-lml" et enfin configurer OSSEC sur le poste client. Montre en main il ne faut pas plus de 15 mn.

Pour l'exemple on va utiliser une autre Jail, n'ayant pas d'autre postes à disposition mais l'installation reste complètement identique quelque soit le système choisi. Dans l'éventualité d'un poste Debian, c'est iptable qui sera exploité.

On crée tout d'abord une Jail sur le même modèle que précédemment et on configure le firewall de la même manière. On installe "libprelude" et "prelude-lml", et on oublie pas d'importer les règles de prelude-lml. Normalement tout ceci ne devrait vous poser aucun problèmes.

On importe également le fichier de démarrage et on renseigne le fichier /etc/rc.conf"

Code: Select all

cd /etc/rc.d
wget https://dl.dumptruck.goldenfrog.com/p/EVX-MXv4hj/prelude-lml
echo 'prelude_lml_enable="YES"' >> /etc/rc.conf
chmod +x prelude-lml
Il faut rajouter l'adresse du serveur maître dans le fichier de configuration de libprelude et prelude-lml

Code: Select all

ee /usr/local/etc/prelude/default/client.conf
[prelude]
server-addr = IP_SERVEUR_MAITRE

Code: Select all

ee /usr/local/etc/prelude-lml/prelude-lml.conf
[prelude]
server-addr = IP_SERVEUR_MAITRE
On crée ensuite une sonde prelude-lml ainsi, en exécutant les deux commandes ci-dessous en parallèle :

Sur le client

Code: Select all

prelude-admin register "prelude-lml" "idmef:w" IP_MAITRE --uid 0 --gid 0
Sur le serveur

Code: Select all

prelude-admin registration-server prelude-manager
On vérifie que la sonde a été crée :

Code: Select all

prelude-admin list -l
Profile     UID  GID  AnalyzerID       Permission Issuer AnalyzerID
---------------------------------------------------------------
prelude-lml root root 1672461677318569 idmef:w 520495613878801
On modifie le fichier "prelude-manager.conf"

Code: Select all

ee /usr/local/etc/prelude-manager/prelude-manager.conf
listen = 0.0.0.0
Installation OSSEC

On installe OSSEC de la même manière sauf qu'au lieu de "serveur", vous tapez "agent". Ensuite il va vous demander l'ip du serveur maitre et vous lui communiquez.

Le principe, maintenant va consister à associer OSSEC client avec OSSEC serveur et pour ce faire nous allons utiliser une clé de confiance.

On lance sur le serveur maître (celui qui monitorera les agents) la commande suivante :
(server)# /var/ossec/bin/manage_agents

****************************************
* OSSEC HIDS v0.8 Agent manager. *
* The following options are available: *
****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.
Choose your actions: A,E,R or Q: //On choisi alors l'action a réaliser. On choisi d'ajouter un agent (option A):
- Adding a new agent (use ‘q’ to return to main menu).
Please provide the following:
* A name for the new agent: Linux01 // On choisi le nom qu'on veut donné a notre agent, par exemple Linux01
* The IP Address for the new agent: 192.168.2.32 // On entre l'adresse IP du serveur

* An ID for the new agent[001]:
Agent information:
ID:001
Name:linux1
IP Address:192.168.2.32

Confirm adding it?(y/n): y
Added.
Voila l'agent est ajouté. Seulement pour sécuriser les transferts il faut créer un clé de confiance entre les deux entités.
Toujours du coté serveur on tape :
(server)# /var/ossec/bin/manage_agents

****************************************
* OSSEC HIDS v0.8 Agent manager. *
* The following options are available: *
****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.
Choose your actions: A,E,R or Q: e // On choisi cette option pour créer la clef

Available agents:
ID: 001, Name: linux1, IP: 192.168.2.32
ID: 002, Name: obsd1, IP: 192.168.2.10
Provide the ID of the agent you want to extract the key: 001 // On choisi notre premier agent

Agent key information for ‘001′ is:
CDAxIGxpbnX4MSAxOTIuMTY4LjAuMzIgOWM5MENlYzNXXXYYYZZZZZ==

** Press ENTER to continue
Il faut copier cette clé et la coller dans l'agent.
Maintenant du coté agent on fait ceci :
(agent)# /var/ossec/bin/manage_agents

****************************************
* OSSEC HIDS v0.8 Agent manager. *
* The following options are available: *
****************************************
(I)mport key for the server (I).
(Q)uit.
Choose your actions: I or Q: i // On choisi d'insérer une clef

* Provide the Key generated from the server.
* The best approach is to cut and paste it.
*** OBS: Do not include spaces or new lines.

Paste it here: CDAxIGxpbnX4MSAxOTIuMTY4LjAuMzIgOWM5MENlYzNXXXYYYZZZZZ== // On colle la clé créer avec le serveur

Agent information:
ID:001
Name:linux1
IP Address:192.168.2.32

Confirm adding it?(y/n): y

Added.
** Press ENTER to continue.

****************************************
* OSSEC HIDS v0.8 Agent manager. *
* The following options are available: *
****************************************
(I)mport key for the server (I).
(Q)uit.
Choose your actions: I or Q: q

manage_agents: Exiting ..
Voila notre agent est configuré sur le serveur. On peut lancer OSSEC sur le client.

Code: Select all

/var/ossec/bin/ossec-control start
Pour afficher la liste des agents actifs on saisis dans un terminal :

Code: Select all

root@prelude:/ # /var/ossec/bin/agent_control -lc
OSSEC HIDS agent_control. List of available agents:
ID: 000, Name: prelude.local (server), IP: 127.0.0.1, Active/Local
ID: 001, Name: patrick, IP: 192.168.0.105, Active

root@prelude:/ #
Pour interroger le status d'un agent on tape :

Code: Select all

root@prelude:/ # /var/ossec/bin/agent_control -i 001
OSSEC HIDS agent_control. Agent information:
Agent ID: 001
Agent Name: patrick
IP address: 192.168.0.105
Status: Active

Operating system: FreeBSD test.local 10.1-RELEASE-p14 FreeBSD 10.1-REL..
Client version: OSSEC HIDS v2.8.3
Last keep alive: Sun Nov 8 18:14:04 2015

Syscheck last started at: Sun Nov 8 12:05:09 2015
Rootcheck last started at: Sun Nov 8 12:08:51 2015
root@prelude:/ #
C'est terminé pour la mise en place, place à la simulation en réelle

Pour ce faire nous allons au préalable créer deux entrée SSH dans nos jail histoire de créer une faille que les petits malins vont tenter d'exploiter.
Vous adapter la commande avec les paramètres de votre configuration.

Code: Select all

cp /var/etc/ssh/sshd_config /mnt/pool1/Jail/prelude/etc/ssh/

Code: Select all

jexec prelude csh
echo 'sshd_enable="YES"' >> /etc/rc.conf
ee /etc/ssh/sshd.conf
Vous en profitez pour modifier le port, mettez 23 par exemple.
On lance le service ssh :

Code: Select all

/etc/rc.d/sshd start
Et pour terminer on génére le "log" nécessaire à prelude pour qu'il puisse travailler :

Code: Select all

ee /etc/syslog.conf
Vous rajoutez cette ligne à la fin du fichier, vous enregistrez et quittez.

Code: Select all

local3.*                                        /var/log/sshd.log
Faites la même chose dans l'autre jail en précisant le port 22 ou 24 (n'oubliez pas d'ouvrir les ports dans votre box)

Voilà, reste plus qu'à relancer les jails et se positionner sur prewikka
ip_jail_serveur:8000
Mais comme on a envie de tout voir en même temps et en temps reel, voila ce qu'on va faire. Bien sur c'est juste pour l'occasion, après vous ne le ferez plus. On va lancer plusieurs fenêtres ssh avec les commandes suivantes. Les deux 1eres vont vous permettre de voir en temps réel un intrus tenter de pénétrer sur votre serveur

Code: Select all

jexec prelude csh
tail -f /var/log/sshd.log

Code: Select all

jexec client csh
tail -f /var/log/sshd.log
On va ensuite ouvrir une fenetre ssh pour visualiser le travail D'OSSEC en temps reel toujours :

Code: Select all

tail -f /var/ossec/logs/alerts/alerts.log
ou

Code: Select all

tail -f /var/ossec/logs/ossec.log
Apres pour le luxe 2 dernieres fenetres ssh pour visualiser les ip bannies en temps reel :

Code: Select all

jexec prelude csh
ipfw table all list
et sur le client

Code: Select all

jexec prelude csh
ipfw table all list
Voila 6 fenetres ssh ouvertes sur votre bureau avec des log vivant, de quoi vous divertir et réaliser la frequence avec laquelle nos Nas4free font l'objet de tentatives d'intrusion.

Pour terminer sachez que tous les "log" présents sur votre système peuvent être surveiller par prelude et Ossec. il suffit de renseigner les fichiers
/usr/local/etc/prelude-lml/prelude-lml.conf
et
/var/log/ossec/etc/ossec.conf
A vous

Enjoy ;)

Locked

Return to “Tuto”