Snort

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine IDS/IPS réseau
Approche Analyse de paquets à base de signatures
Détecte DDoS, buffer overflow, attaques CGI, scans de ports, sondes SMB
Voir aussi Suricata · Bro (Zeek) · Psad

Snort est un IDS/IPS réseau qui analyse les paquets en temps réel pour détecter les paquets malveillants. À partir de règles (signatures), il repère notamment les attaques par déni de service (DDoS), les dépassements de tampon (buffer overflow), les attaques CGI, les balayages de ports et les sondes SMB. Il peut journaliser dans un fichier, en syslog ou en base de données.

Installation (Debian, sortie base de données)

aptitude install snort-mysql

Création d'une base pour recevoir les journaux :

mysql -u root -p
CREATE DATABASE snort;
GRANT ALL ON snort.* TO 'snortuser'@'localhost' IDENTIFIED BY 'motdepasse';
FLUSH PRIVILEGES;
EXIT;

Importer le schéma fourni par le paquet :

dpkg -L snort-mysql
gzip -d /usr/share/doc/snort-mysql/create_mysql.gz
mysql -u root -p snort < /usr/share/doc/snort-mysql/create_mysql

Configurer la sortie base de données dans /etc/snort/snort.conf :

output database: log, mysql, user=snortuser password=motdepasse dbname=snort host=localhost

Puis décommenter le type d'alerte :

ruletype redalert
{
    type alert
    output alert_syslog: LOG_AUTH LOG_ALERT
    output database: log, mysql, user=snortuser password=motdepasse dbname=snort host=localhost
}

Démarrage et lancement au boot :

snort -u snort -c /etc/snort/snort.conf

# via cron
crontab -e
# @reboot root snort -u snort -c /etc/snort/snort.conf >> /dev/null

Configuration

Dans /etc/snort/snort.conf (ou /usr/local/etc/snort/snort.conf) :

var HOME_NET [192.168.0.0/24]
var SSH_PORTS 22
include $RULE_PATH/bleeding-all.rules

Mettre alors en commentaire les autres lignes include "$RULE_PATH" superflues.

Mise à jour des règles

Télécharger les nouvelles règles depuis le site officiel (https://www.snort.org) et les placer dans /usr/local/etc/snort/rules.

Analyse des journaux

tail -f /var/log/snort_inline/snort_inline-full

Plusieurs interfaces web permettent d'exploiter les alertes : BASE (Basic Analysis and Security Engine), acidbase, snorby, aanval… BASE requiert la bibliothèque ADOdb, à déployer dans /var/www/base.

Installation alternative (CentOS 7, sortie fichier)

yum install -y epel-release
yum install -y libdnet

yum install https://www.snort.org/downloads/archive/snort/daq-2.0.6-1.f21.x86_64.rpm
yum install https://www.snort.org/downloads/archive/snort/snort-2.9.9.0-1.centos7.x86_64.rpm

ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1

Dans /etc/snort/snort.conf :

var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules

Commenter preprocessor reputation, décommenter la journalisation unifiée, puis ne garder qu'un include vers les règles locales :

output log_unified2: filename snort.log, limit 128, nostamp
include $RULE_PATH/local.rules

touch /etc/snort/rules/local.rules

# Vérifier la configuration
snort -T -c /etc/snort/snort.conf

mkdir -p /usr/local/lib/snort_dynamicrules
chown -R snort:snort /usr/local/lib/snort_dynamicrules
chmod -R 700 /usr/local/lib/snort_dynamicrules

Écriture de règles

# /etc/snort/rules/local.rules
alert tcp 10.0.0.10 any <> $HOME_NET any (msg:"BAD ACTOR CONNECTION"; sid:10000001; rev:001;)
alert tcp any any -> $HOME_NET 80 (msg:"Incoming web request"; sid:10000002; rev:001;)

Vérifier puis démarrer, et provoquer du trafic de test :

snort -T -c /etc/snort/snort.conf
systemctl start snortd

curl 10.0.0.10
cat /var/log/snort/alert

Voir aussi

  • Suricata — moteur IDS/IPS multithread, compatible avec les règles Snort
  • Bro (Zeek) — supervision de sécurité réseau et journaux enrichis
  • Psad — détection de balayages de ports (réutilise les signatures Snort)