IDS Snort

De wikilivois
Révision datée du 3 avril 2011 à 07:32 par Christophe (discussion | contributions) (→‎/etc/snort/snort.conf)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche


http://www.snort.org

Installation

Snort

Snort est l’outil de détection d’intrusion.

Package Gentoo: snort +flexresp2 +inline +ipv6

#emerge snort
#rc-update add snort default

Le mode inline permet l'utilisation du firewall iptables par snort. Trois nouvelles actions deviennent possibles:

  • drop - The drop rule type will tell iptables to drop the packet and log it via usual Snort means.
  • reject - The reject rule type will tell iptables to drop the packet, log it via usual Snort means, and send a TCP reset if the protocol is TCP or an icmp port unreachable if the protocol is UDP.
  • sdrop - The sdrop rule type will tell iptables to drop the packet. Nothing is logged.

Remarque : Pour utiliser l’option flexresp qui permet de couper (avec des tcp-reset) des connexions jugées suspectes, il faut utiliser la bibliothèque libnet. Cette bibliothèque existe en 2 versions et peut poser un problème lors de l’installation. Une solution est alors de désactiver flexresp dans le ebuild.

Remarque : En mai 2009, gentoo passe de snort-2.6 à snort-2.8, l'utilisation de snortsam n'est plus possible juste avec un flag 'use'. De plus, dans la catégorie reset automatique de connexion, flexresp devient flexresp2.

Remarque : En 2011, gentoo passe de snort-2.8 à snort-2.9, il faut compiler avec l'utilisation d'ipv6 pour utiliser la variable ipvar dans snort.conf.

Barnyard

Barnyard libére snort de l’ « output » des alertes. Snort gagne alors en performances. Le package fait partie de la distribution gentoo mais il est masqué.

Package Gentoo: barnyard

#emerge barnyard
#rc-update add barnyard default

Oinkmaster

http://oinkmaster.sourceforge.net/

Oinkmaster est un script qui permet de faire des mises à jour intelligentes et automatiques des règles snort.

Package Gentoo: oinkmaster

Configuration

Snort

/etc/snort/snort.conf

Le fichier snort.conf se décompose en 4 parties :

  • La définition de variables pour les règles
  • La configuration des preprocesseurs
  • La configuration de « l’output » - dont barnyard:

<licode file=/etc/snort/snort.conf> output log_unified: filename snort.log, limit 128 </licode>

  • Le choix des règles (A EXPLIQUER)

Spécificités

  • Arrêter les alertes : stream5: Limit on number of overlapping TCP packets reached
 Mettre 0 au paramètre  overlap_limit de stream5_tcp

<licode file=/etc/snort/snort.conf> reprocessor stream5_tcp: policy linux, detect_anomalies, require_3whs 180, \

  overlap_limit 0, small_segments 3 bytes 150, timeout 180, \

</licode>

  • Arrêter les alertes http_inspect: LONG HEADER
Mettre 0 au paramètre max_header_length 0 \

<licode file=/etc/snort/snort.conf> preprocessor http_inspect_server: server default \

   chunk_length 500000 \
   server_flow_depth 0 \
   client_flow_depth 0 \
   post_depth 65495 \
       oversize_dir_length 500 \
   max_header_length 0 \
   max_headers 100 \

</licode>

Limiter la mémoire

http://www.snort.org/docs/faq/3Q06/node86.html

A partir de snort 2.6, la configuration par défaut de snort utilise beaucoup de mémoire. Décommenter la ligne config detection pour diminuer la mémoire utilisée par snort:

<licode file=/etc/snort/snort.conf>

  1. Use a different pattern matcher in case you have a machine with very limited
  2. resources:

config detection: search-method lowmem </licode>

Toutefois, il existe des configurations intermédiaires (cf documentation de snort sur config detection).

/etc/conf.d/snort

<licode file=/etc/conf.d/snort> IFACE=eth0

  1. Make sure this matches your IFACE

PIDFILE=/var/run/snort_$IFACE.pid

  1. You probably don't want to change this, but in case you do

LOGDIR="/var/log/snort"

  1. Probably not this either

CONF=/etc/snort/snort.conf

  1. This pulls in the options above

SNORT_OPTS="-D -A FULL -u snort –g snort -i $IFACE -l $LOGDIR -c $CONF" </licode>

Explication:

  • -D : fait tourner snort en “démon”
  • -A FULL : permet d’inscrire le « payload » dans les logs
  • -u snort :snort a les droits de l’utilisateur snort
  • -g snort : snort a les droits du groupe snort
  • -i $IFACE : snort écoute sur l’interface $IFACE, càd eth0 ici
  • -l $LOGDIR : indique le répertoire des logs snort
  • -c $conf : indique l’emplacement du fichier de configuration

debuggage au lancement

#snort  -A FULL -u snort –g snort -i eth0 –c /etc/snort/snort.conf

Barnyard

/etc/conf.d/barnyard.conf

  • -c $conf : indiquer l’emplacement du fichier de configuration
  • -w : permet à barnyard de repartir là où il s’est arrêté

<licode file=/etc/snort/barnyard.conf> config daemon config localtime config hostname <fw-xxxxx> config interface output log_acid_db </licode>

debuggage

Désactiver config daemon de /etc/snort/barnyard.conf

#barnyard –c /etc/snort/barnyard.conf –f snort.log

Remarque : l’option –o (oneshot) permet de traiter un fichier de log en entier. Ensuite barnyard s’arrête.

Oinkmaster

oinkmaster.conf
Le fichier de configuration est très bien documenté. On peut désactiver et modifier des règles avec les commandes modifysid et disablesid.

Ne pas oublier de mettre à jour l'url de téléchargement de snort et des règles utilisées L'url change régulièrement avec les nouvelles version de snort donc il est bon de se mettre à jour via la page https://www.snort.org/account/oinkcode

<licode file=/etc/oinkmaster.conf> url = http://www.snort.org/pub-bin/oinkmaster.cgi/<oinkcode>/snortrules-snapshot-<version>.tar.gz

  1. Example for Community rules

url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules.tar.gz </licode>

Tester avec la ligne de commande

#su –c  "/usr/bin/oinkmaster.pl -o /etc/snort/ -C /etc/oinkmaster.conf -c"


L’option –c (careful) permet de ne mettre à jour aucune règle.

La mise à jour automatique (crontab)

Déposer le script snort.cron dans /etc/cron.daily

Lui donner les droits d’exécution.

#chmod u+x /etc/cron.daily/snort.cron


<licode file=/etc/cron.daily/snort.cron>

  1. !/bin/bash

echo "snort.cron" su -c "/usr/bin/oinkmaster.pl -o /etc/snort/rules -C /etc/oinkmaster.conf >> /var/log/snort/oinkmaster.log" su -c "/usr/bin/create-sidmap.pl /etc/snort/rules > /etc/snort/sid-msg.map"

/etc/init.d/barnyard stop /etc/init.d/barnyard zap /etc/init.d/snort stop /etc/init.d/mysql stop /etc/init.d/snort zap /etc/init.d/mysql zap /etc/init.d/snort start myisamchk -r -s /var/lib/mysql/snort_db/*.MYI /etc/init.d/mysql start /etc/init.d/barnyard start </licode>

Remarque:

La version CVD de oinkmaster permettrait aussi de mettre à jour les so_rules

emerging threats

http://doc.emergingthreats.net/

<licode file=/etc/snort/snort.conf> include $RULE_PATH/emerging-attack_response.rules ... </licode>

<licode file=/etc/oinkmaster.conf> url = http://emergingthreats.net/rules/emerging.rules.tar.gz </licode>

Snortsam

http://www.snortsam.net/index.html

Snortsam permet de dynamiser la configuration des firewall à partir des alertes snort.

BASE

http://sourceforge.net/projects/secureideas/

Cf gestion des logs

Administration

La définition de règles

(cf règles existantes et SnortUserManual chez http://www.snort.org/docs/)

Utilisation

Statistiques

Les commandes suivantes permettent toutes les deux d‘envoyer les statistiques de snort dans /var/log/message :

#/bin/kill –SIGUSR1 <pid de snort>
#/bin/killall –USR1 snort

Nettoyer la base mysql

myisamchk permet de vérifier, réparer et optimiser des tables (.MYI et .MYD) les tables par défaut de mysql sont des tables MYISAM :

  • .frm sont les définitions (forms) de tables
  • .MYI sont les tables INDEX
  • .MYD sont les tables DATA

myisamchk *.MYI vérifie toutes les tables du répertoire.
il crée une copie de .MYD, ligne par ligne.
il remplace l'ancien .MYD par le nouveau

les options :

  • -v mode verbeux
  • -i donne des informations statistiques
  • -r corrige les erreurs
  • -a analyse la distribution des clefs - améliore la performance des "join"
  • -d décrit la table

<licode file=/etc/contab> 35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI </licode>

#myisamchk --analyze table.MYI
#myisamchk -r *.MYI
#mysqladmin refresh

Copyright

© 2006-2011 Christophe de Livois

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL.