Snort
| 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)