Snort et Swatch – IDS et alertes e-mail

Nous allons voir dans cet article comment mettre en place l’IDS Snort, son installation, sa configuration, ainsi que Swatch, un viewer de logs. (Système Debian Etch)

Snort est un IDS (Intrusion detection system), il permet de détecter d’eventuelles attaques portées envers votre serveur. Il doit être utilisé, couplé à  un Firewall (iptables), et tous les ports ouverts devront êtres “sniffés” par snort. Celui-ci permettra de détecter entre autres les scans de ports, les DOS… etc.
Swatch est un parseur de logs, qui va permettre au serveur d’envoyer des mails d’alertes dès qu’une alerte de haute prioritée sera détectée dans les Logs de Snort.

I – Installation de Snort
Nous allons commencer par Installer une base MySQL

# apt-get install mysql-server

Puis nous allons installer Snort compilé pour envoyer les logs vers MySQL:

# apt-get install snort-mysql

Un tutorial apparait. Entrer les paramêtres:

– réseau sous surveillance: any

– paramétrage de la base de données: non

Dans le fichier de conf /etc/snort/snort.conf, vous avez une liste commentée de toutes les règles (rules) de detection d’intrusions de snort. Vous devez décommenter celles qui serviront, et commenter les autres (Par exemple, si vous n’hebergez pas de service pop3, vous pouvez laisser la ligne pop3.rules commentée).

Vous avez ici un exemple pour un serveur Web:

#Dans /etc/snort/snort.conf:
include $RULE_PATH/local.rules
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/scan.rules
# include $RULE_PATH/finger.rules
# include $RULE_PATH/ftp.rules
# include $RULE_PATH/telnet.rules
# include $RULE_PATH/rpc.rules
# include $RULE_PATH/rservices.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
# include $RULE_PATH/tftp.rules
include $RULE_PATH/web?cgi.rules
include $RULE_PATH/web?coldfusion.rules
# include $RULE_PATH/web?iis.rules
# include $RULE_PATH/web?frontpage.rules
include $RULE_PATH/web?misc.rules
include $RULE_PATH/web?client.rules
include $RULE_PATH/web?php.rules
include $RULE_PATH/sql.rules
# include $RULE_PATH/x11.rules
# include $RULE_PATH/icmp.rules
# include $RULE_PATH/netbios.rules
# include $RULE_PATH/misc.rules
# include $RULE_PATH/attack?responses.rules
# include $RULE_PATH/oracle.rules
include $RULE_PATH/mysql.rules
# include $RULE_PATH/snmp.rules
# include $RULE_PATH/smtp.rules
# include $RULE_PATH/imap.rules
# include $RULE_PATH/pop2.rules
# include $RULE_PATH/pop3.rules
# include $RULE_PATH/nntp.rules
# include $RULE_PATH/other?ids.rules
# include $RULE_PATH/web?attacks.rules
# include $RULE_PATH/backdoor.rules
# include $RULE_PATH/shellcode.rules
# include $RULE_PATH/policy.rules
# include $RULE_PATH/porn.rules
# include $RULE_PATH/info.rules
# include $RULE_PATH/icmp?info.rules
# include $RULE_PATH/virus.rules
# include $RULE_PATH/chat.rules
# include $RULE_PATH/multimedia.rules
# include $RULE_PATH/p2p.rules

#include $RULE_PATH/experimental.rules

Configuration de la base de données MySQL
Ajoutez un mot de passe pour l’utilisateur root MySQL:

#mysqladmin ?u root password PASSWORD

Créez la base de données MySQL et les tables pour recevoir les logs de Snort:

#mysql ?u root ?p
>create database snort;

Comme il est dangereux d’accéder la base de données avec l’utilisateur root, il est nécessaire de créer un utilisateur avec des permissions sur la base de données snort uniquement:

>grant all on snort.* to snort@localhost identified by 'snort';
Rechargez les privilèges MySQL:

>flush privileges;
>exit;

Maintenant, nous devons créer les tables dans la base de données snort:

Par chance, les tables sont déjà créées et nous devons juste les trouver et les installer dans la base de données: Recherchez le fichier create_mysql.gz qui est normalement situé dans le dossier /usr/share/doc/snort?mysql.

Dézippez le fichier:

#gzip –d /usr/share/doc/snort?mysql/create_mysql.gz

Importez les tables MySQL:

#mysql ?u root ?p snort < /usr/share/doc/snort?mysql/create_mysql

Maintenant nous allons tuner MySQL, pour lui allouer plus de mémoire.

Ouvrez le fichier de configuration de mysql situé ici : /etc/mysql/my.cnf, modifiez les lignes suivantes:

Key_fuffer = 64M
Max_allowed_packet = 64M
Thread_stack = 128k
Thread_cache_size = 16

Configuration de SNORT pour MySQL

Nous devons dévier les logs de Snort dans la base de données (Snort inscrira alors ses logs dans la base MySQL, mais il pourra également logger ses alertes dans les logs si nous lui spécifions dans la commande de démarrage):

Ceci est déjà fait en installant le package snort?mysql, il est juste nécessaire de configurer le login et mot de passe pour accéder à la base de données snort.

Dans le fichier /etc/snort/snort.conf, nous devons modifier les lignes entre (#DBSTART#) et (#DBEND#):

output database: log, mysql, user=snort password=snort dbname=snort host=localhost
Toujours dans le même fichier, décommentez les lignes suivantes:
ruletype redalert
{
type alert
output alert_syslog: LOG_AUTH LOG ALERT
output database: log, mysql, user=snortuser password=snort dbname=snort host=localhost
}

Il est grand temps de lancer Snort !! (Avec un niveau d’alerte maximale)

snort ?u snort ?A full ?l /var/log/snort ?c /etc/snort/snort.conf

Cela veut dire que snort est démarré avec l’utilisateur snort et va charger la configuration stockée dans le fichier /etc/snort/snort.conf. Pour des raisons de sécurité, il est toujours mieux de démarrer des programmes sans l’utilisateur root.
Si vous voyez la bannière Snort (avec un petit cochon :-), cela veut dire que Snort est correctement chargé, si ce n’est pas le cas, regarder attentivement le message d’erreur.

Pour lancer snort automatiquement au démarrage du système, ajouter une ligne dans le fichier /etc/init.d/rc.local, a la fin de la fonction do_start()
#Demarrage de snort
snort ?u snort ?A full ?l /var/log/snort ?c /etc/snort/snort.conf

L’installation de Snort est maintenant terminée !

II – Installation de Swatch

Références sur le net :

http://www.linuxsecurity.com/content/view/117377/171/

http://www.faqs.org/docs/Linux-HOWTO/Snort-Statistics-HOWTO.html#SWATCH-CONFIG

Swatch est un ‘log viewer’, il est capable de parser un fichier de log et d’envoyer des alertes.

Après avoir dit à snort de loger les alertes, nous pouvons mettre en place Swatch.

Pré-requis : postfix et mailx. (apt-get postfix mailx)

On crée un dossier Swatch :

mkdir /home/swatch/
cd /home/swatch

Se rendre à cette adresse :

http://www.oit-ucsb.edu/~eta/swatch/

Copier l’adresse de téléchargement de Swatch, puis le télécharger :

wget ADDRESS_DU_tar.gz_SWATCH

On le décompresse :

tar -xvzf swatch*

On rentre dans le dossier que l’on vient de dézipper puis:

perl Makefile.PL

S’il affiche des warnings, comme ceux-ci:

Warning: prerequisite Date::Calc 0 not found at (eval 1) line 219.
Warning: prerequisite Date::Parse 0 not found at (eval 1) line 219.
Warning: prerequisite File::Tail 0 not found at (eval 1) line 219.
Warning: prerequisite Time::HiRes 1.12 not found at (eval 1) line 219.

Copiez les noms des librairies perl manquantes, puis rendez-vous a cette adresse:

http://search.cpan.org/

Collez le nom des libraires manquantes, et téléchargez-les.
Extraire les archives puis exécuter les commandes suivantes pour installer les paquets:

perl Makefile.PL
make
make test
make install
make realclean

Puis pour Swatch, refaire les mêmes commandes : (Normalement, ici Swatch ne génère plus d’erreur)

perl Makefile.PL
make
make test
make install
make realclean

On crée un fichier de configuration pour Swatch, nommé .swatchrc :

touch .swatchrc
vim .swatchrc

Collez ceci dans .swatchrc:

################## configuration SWATCH / SNORT ##################
#
# Si l'on decommente les lignes si dessous: 5 bips (haut parleur PC) se feront entendre
# puis 'throttle' limite le nombre de fois ou le modele rencontre dans les logs doit
# apparaitre afin de declencher l'alerte. Ceci est utile en effet si vous ne souhaitez
# pas que pour chaque paquet recu sur un port specifique, un mail ne soit emis ou une
# pop?up affichee...
#
# watchfor /Priority\: 1/
# bell 5
# throttle 00:00:10
#
#
# Si dessous meme syntaxe..
# mais on envoie un mail.
# bold sert a ecrire en gras dans les logs..
watchfor /Priority\: 1/
echo bold
exec /etc/snort/snort?check $0
throttle 00:00:10
#
#########################################################

On crée un fichier de snort-check dans /etc/snort pour relayer .swatchrc et envoyer des mails :

touch /etc/snort/snort?check
vim /etc/snort/snort?check

Collez ceci dans snort-check:


#!/bin/sh
# Script to be run from within swatch to send alerts in multiple formats
# inspired from script on www.snort.org by Bill Richardson
# recipientfile holds the addresses of all recipients in a single file,
# seperated by newline

recipientfile=”/etc/snort/recipients”
# if a recipient file exists

if [ ?s “$recipientfile” ] ; then
# generate the recipientlist with email adresses.

for i in `cat $recipientfile` ; do

recipients=”$recipients “$i

done

echo “Alerte IDS de priorité 1” | mailx ?s “ALERTE IDS de niveau 1” “$recipients”

fi

On crée un fichier ‘recipients’ dans /etc/snort qui contiendras tous les destinataires des mails
d’alertes :

touch /etc/snort/recipients
vim /etc/snort/recipients

Collez ceci:

#/etc/snort/recipients
#Destinataires des alertes de priorité 1 de Snort
snort@toto.fr

On édite maintenant le fichier /etc/init.d/rc.local pour relancer snort et swatch à chaque
redemarrage automatiquement :
Nous allons ajouter les lignes suivantes à la fin de la fonction do_start() :


#Demarrage de snort
snort -u snort -A full -l /var/log/snort -c /etc/snort/snort.conf

#demarrage de Swatch (alertes mails de snort)

/home/swatch/swatch-3.2.3/swatch -c /home/swatch/swatch-3.2.3/.swatchrc -t /var/log/snort/alert

Vous obtenez normalement ceci : (Le contenu du début de la function do_start peut changer)


do_start() {
if [ ?x /etc/rc.local ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
/etc/rc.local
ES=$?

[ “$VERBOSE” != no ] && log_end_msg $ES
return $ES
fi

#Demarrage de snort

snort -u snort -A full -l /var/log/snort -c /etc/snort/snort.conf

#demarrage de Swatch (alertes mails de snort)

/home/swatch/swatch-3.2.3/swatch -c /home/swatch/swatch-3.2.3/.swatchrc -t /var/log/snort/alert

}

Nous allons maintenant démarrer snort (si ce n’était déjà fait) :

snort -u snort -A full -l /var/log/snort -c /etc/snort/snort.conf
Nous démarrons snort avec l’utilisateur snort, avec un niveau d’alerte FULL dans /var/log/snort et le
fichier de configuration /etc/snort/snort/conf.
Pour information :

Ses quatre niveaux d’alertes sont :

-A fast : mode d’alerte rapide, affiche l’alerte dans un format simple avec
l’horaire, le message d’alerte, les adresses IP et les ports sources et
destinations

-A full : c’est aussi le mode d’alerte par défaut, donc si vous ne spécifiez rien
ceci sera automatiquement utilisé

-A unsock : envoie les alertes à une socket UNIX qu’un autre programme peut
écouter

-A none : arrête les alertes

On peut maintenant démarrer Swatch !
/home/swatch/swatch-3.2.3/swatch -c /home/swatch/swatch-3.2.3/.swatchr -t /var/log/snort/alert
Cette ligne démarre le script Swatch, avec la configuration de .swatchrc, et lis le fichier de log
/var/log/snort/alert en mode ‘tail’; donc dès qu’une alerte est écrite dans ce fichier, Swatch envoi
un mail.

Vous avez maintenant l’IDS Snort qui tourne, ainsi que Swatch qui parse les logs de snort et vous envoi des alertes !atch qui parse les logs de snort et vous envoi des alertes !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *