39 0 87KB
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 configuration /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
ou #zcat /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, il sagit du fichier 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. Le répertoire init.d contient les processus qui démarrent avec le démarrage du système, init est le premier processus qui lance d'autres processus qui se trouvent dans /etc/init.d/ ou /etc/rc*.d/, le PID du processus init est 1
Pour lancer snort automatiquement au démarrage du système, ajouter une ligne dans le fichier /etc/init.d/rc.local, à 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: Warning: 219. Warning: Warning: 219.
prerequisite Date::Calc 0 not found at (eval 1) line 219. prerequisite Date::Parse 0 not found at (eval 1) line prerequisite File::Tail 0 not found at (eval 1) line 219. prerequisite Time::HiRes 1.12 not found at (eval 1) line
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 make make make make
Makefile.PL test install realclean
Puis pour Swatch, refaire les mêmes commandes : (Normalement, ici Swatch ne génère plus
d'erreur) perl make make make make
Makefile.PL test install 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 [email protected] 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/swatch3.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 !