Ldfa Posté(e) le 6 février 2021 Posté(e) le 6 février 2021 Cet article détaille l’installation et configuration de l’IDS Suricata sur un Raspberry Pi pour surveiller votre réseau local. Afin de surveiller l’ensemble des équipements de votre réseau local, nous utiliserons la fonctionnalité “port mirroring” d’un switch manageable ainsi qu’un petit routeur Wifi connecté à ce switch. Au sommaire : Présentation Suricata est un IDS (Intrusion Detection System) réseau basé sur des détections par signatures. Il analyse le trafic réseau afin d’y détecter des activités anormales et les tentatives d’intrusion. Un Raspberry Pi est un hôte parfait pour Suricata dans le cadre d’un petit réseau local. Afin de surveiller tous les équipements de votre réseau, l’IDS doit être en mesure d’en analyser tout le trafic. Ceci est possible grâce à l’utilisation d’un switch manageable supportant la fonction « port mirroring » permettant de dupliquer le trafic de tous les équipements et de l’envoyer vers l’IDS. Afin de pouvoir également surveiller le trafic des équipements sans fil, il est nécessaire d’utiliser un petit routeur Wifi. Ce routeur doit être relié à un port du switch afin que le trafic Wifi soit également dupliqué vers l’IDS par la fonction « port mirroring ». Matériel nécessaire Raspberry Pi 3B ou Pi 4 – Modèle B Switch manageable avec port mirroring Zyxel GS1200 Routeur Wifi TP-LINK TL-WR902AC Architecture L’IDS doit être capable d’analyser les trames provenant de tous les équipements de votre réseau. Pour cela il faut que tous vos équipements soient reliés au switch qui utilise la fonction port mirroring pour transmettre toutes les trames reçues des « mirrored port » vers le « analysis port ». Le Raspberry Pi sur lequel l’IDS Suricata est installé est bien entendu relié sur cet « analysis port ». Si vous souhaitez également surveiller vos équipement connectés via le réseau Wifi, il ne faudra pas les connecter au réseau Wifi de la box internet mais utiliser un petit routeur Wifi également connecté au switch sur un « mirrored port ». Mon réseau local est le 192.168.1.0/24 et tous mes équipements y compris ceux qui sont connectés via le point d’accès Wifi appartiennent à ce réseau local. Installation de Suricata sur votre Raspberry Pi Installez Raspberry Pi OS ou Raspberry Pi OS Lite sur votre Raspberry Pi (Modèle 3B ou 4) disponible sur le site https://www.raspberrypi.org/software/ Installer l’IDS open source Suricata Préparer l’installation en installant les dépendances nécessaires : sudo apt install libpcre3 libpcre3-dbg libpcre3-dev build-essential libpcap-dev libyaml-0-2 libyaml-dev pkg-config zlib1g zlib1g-dev make libmagic-dev libjansson-dev rustc cargo python-yaml python3-yaml liblua5.1-dev sudo apt install libpcre3 libpcre3-dbg libpcre3-dev build-essential libpcap-dev libyaml-0-2 libyaml-dev pkg-config zlib1g zlib1g-dev make libmagic-dev libjansson-dev rustc cargo python-yaml python3-yaml liblua5.1-dev Télécharger les sources de Suricata : wget https://www.openinfosecfoundation.org/download/suricata-6.0.1.tar.gz wget https://www.openinfosecfoundation.org/download/suricata-6.0.1.tar.gz Décompresser les sources : tar -xvf suricata-6.0.1.tar.gz tar -xvf suricata-6.0.1.tar.gz Se placer dans le dossier Suricata : cd $HOME/suricata-6.0.1/ cd $HOME/suricata-6.0.1/ Configurer l’installation du logiciel : ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua Compiler suricata : Installer suricata : sudo make install sudo make install Se placer dans le dossier suricata-update : cd $HOME/suricata-6.0.1/suricata-update/ cd $HOME/suricata-6.0.1/suricata-update/ Compiler suricata-update : sudo python setup.py build sudo python setup.py build Installer suricata-update : sudo python setup.py install sudo python setup.py install Se placer dans le dossier Suricata : cd $HOME/suricata-6.0.1/ cd $HOME/suricata-6.0.1/ Finaliser l’installation de suricata en y incluant ses règles : sudo make install-full sudo make install-full Mettre à jour les règles de suricata : sudo suricata-update sudo suricata-update Configurer Suricata Configurer suricata en éditant le fichier suricata.yaml : sudo vi /etc/suricata/suricata.yaml sudo vi /etc/suricata/suricata.yaml Modifier la variable HOME_NET afin qu’elle contienne votre réseau local, par exemple : HOME_NET: "[192.168.0.0/24]" HOME_NET: "[192.168.0.0/24]" Lancer Suricata Lancer suricata avec la commande suivante : sudo suricata -c /etc/suricata/suricata.yaml -i eth0 -S /var/lib/suricata/rules/suricata.rules sudo suricata -c /etc/suricata/suricata.yaml -i eth0 -S /var/lib/suricata/rules/suricata.rules -c <chemin> : fichier de configuration à utiliser -i <interface> : interface Ethernet à surveiller -S <chemin> : fichier contenant les règles à utiliser Tester Suricata Afin de tester le bon fonctionnement de suricata, il est utile de rajouter une règle qui affiche un avertissement à chaque réception d’un ICMP Echo (ping). Il faudra supprimer cette règle après ce test. Ajouter la règle suivante dans /var/lib/suricata/rules/suricata.rules alert icmp any any -> any any (msg: "ICMP Packet found";) alert icmp any any -> any any (msg: "ICMP Packet found";) Afficher le contenu du fichier de log : sudo tail -f /var/log/suricata/fast.log sudo tail -f /var/log/suricata/fast.log Vous devriez voir dans le fichier de log l’alerte suivante : 01/23/2021-21:22:26.898963 [**] [1:0:0] ICMP Packet found [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.1.16:8 -> 192.168.1.25:0 01/23/2021-21:22:26.898963 [**] [1:0:0] ICMP Packet found [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.1.16:8 -> 192.168.1.25:0 Voici d’autres façons de tester le bon fonctionnement de Suricata : Aller sur ce site avec un navigateur depuis un équipement de votre réseau local : http://testmyids.com/ Doit produire l’alerte suivante : 02/03/2021-16:13:42.020071 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 31.3.245.133:80 -> 192.168.1.10:46196 02/03/2021-16:13:42.020071 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 31.3.245.133:80 -> 192.168.1.10:46196 Lancer la commande suivante depuis un shell Linux : dig a 3wzn5p2yiumh7akj.onion dig a 3wzn5p2yiumh7akj.onion Doit produire l’alerte suivante : 02/03/2021-16:19:40.496621 [**] [1:2022048:3] ET MALWARE Cryptowall .onion Proxy Domain [**] [Classification: A Network Trojan was detected] [Priority: 1] {UDP} 192.168.1.10:37423 -> 192.168.1.1:53 02/03/2021-16:19:40.496621 [**] [1:2022048:3] ET MALWARE Cryptowall .onion Proxy Domain [**] [Classification: A Network Trojan was detected] [Priority: 1] {UDP} 192.168.1.10:37423 -> 192.168.1.1:53 Utiliser Suricata en mode service Afin de pouvoir utiliser Suricata en tant que service, il faut créer le fichier « /etc/systemd/system/suricata.service » : sudo vi /etc/systemd/system/suricata.service sudo vi /etc/systemd/system/suricata.service Avec le contenu suivant : # Sample Suricata systemd unit file. [Unit] Description=Suricata Intrusion Detection Service After=network.target syslog.target [Service] ExecStartPre=/bin/rm -f @e_rundir@suricata.pid ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 -S /var/lib/suricata/rules/suricata.rules --pidfile @e_rundir@suricata.pid ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target # Sample Suricata systemd unit file.Description=Suricata Intrusion Detection ServiceAfter=network.target syslog.targetExecStartPre=/bin/rm -f @e_rundir@suricata.pidExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 -S /var/lib/suricata/rules/suricata.rules --pidfile @e_rundir@suricata.pidExecReload=/bin/kill -HUP $MAINPIDExecStop=/bin/kill $MAINPIDWantedBy=multi-user.target Et ensuite activer ce nouveau service avec la commande : sudo systemctl enable suricata.service sudo systemctl enable suricata.service Nous pouvons maintenant utiliser Suricata en tant que service, et le démarrer avec la commande : sudo systemctl start suricata.service sudo systemctl start suricata.service Pour le stopper : sudo systemctl stop suricata.service sudo systemctl stop suricata.service Pour le relancer : sudo systemctl restart suricata.service sudo systemctl restart suricata.service Pour vérifier l’état du service : sudo systemctl status suricata.service sudo systemctl status suricata.service Le service se lancera maintenant automatiquement au démarrage du Raspberry Pi. Éviter la perte de paquets Suricata peut nécessiter quelques optimisations afin de fonctionner de façon optimale sur votre réseau. Cela dépend bien entendu du nombre d’équipements à surveiller et du traficgénéré. Vérifier que la variable capture.kernel_drops dans le fichier /var/log/suricata/stats.log ne soit pas trop élevée. Idéalement elle doit rester à 0 et donc ne pas être affichée dans la liste des compteurs. Dans le cas ci-dessus, 21617 paquets sur 2310188 ont été perdus, soit environ 1 %. C’estacceptable mais cette perte peut être évitée. Vous pouvez par exemple augmenter la valeur de la variable “ring-size” dans le fichier de configuration “/etc/suricata/suricata.yaml“. Attention, il faut bien entendu supprimer le “#” devant la variable dans le fichier suricata.yaml. Cette modification est en général suffisante pour éviter de perdre des paquets. Modifier la valeur de ring-size en changeant la ligne suivante dans le fichier /etc/suricata/suricata.yaml : #ring-size: 2048 #ring-size: 2048 par : ring-size: 30000 ring-size: 30000 Après avoir augmenté cette variable à 30000, je n’observe plus de perte de paquets, même avec 7.8 millions de paquets reçus. Je vous invite à lire la documentation de Suricata pour régler finement les paramètres de configuration ayant un impact sur lesperformances du logiciel Exploiter les fichiers de logs de Suricata Suricata génère des fichiers de log dans le répertoire /var/log/suricata. En plus du trafic réseau et des activités suspectes qu’il détecte, Suricata logue également des informations de service et des statistiques sur le trafic réseau. Sur un Raspberry Pi il faudra prêter attention à la taille des logs générés qui peuvent rapidement saturer la carte SD utilisée pour leur stockage. Il faudra mettre en place un mécanisme de rotation de log afin d’éviter tout problème. Les différents fichiers de logs Voici les 4 fichiers de log générés par Suricata : suricata.log : messages de démarrage de Suricata stats.log : statistiques sur votre trafic réseau fast.log : activités suspectes découvertes par Suricata eve.json : trafic de votre réseau local ainsi que les activités suspectes au format JSON Fichier de log des activités suspectes Pour visualiser en direct les activités suspectes détectées par Suricata, il suffit de jeter un œil au fichier fast.log : sudo tail -n 100 -f /var/log/suricata/fast.log sudo tail -n 100 -f /var/log/suricata/fast.log Voici un exemple d’activités suspectes détectées par Suricata enregistrées dans le fichier fast.log : 01/29/2021-19:25:45.132975 [**] [1:2025012:3] ET MALWARE Powershell commands sent B64 3 [**] [Classification: A Network Trojan was detected] [Priority: 1] {TCP} XXX.XXX.XXX.XXX:80 -> 192.168.1.22:45986 01/29/2021-19:26:10.183249 [**] [1:2013147:3] ET SHELLCODE Possible %u4141%u4141 UTF-16 Heap Spray Attempt [**] [Classification: Executable code was detected] [Priority: 1] {TCP} XXX.XXX.XXX.XXX:80 -> 192.168.1.22:45986 01/31/2021-10:08:08.889128 [**] [1:2002157:12] ET CHAT Skype User-Agent detected [**] [Classification: Potential Corporate Privacy Violation] [Priority: 1] {TCP} 192.168.1.2:53937 -> XXX.XXX.XXX.XXX:80 01/29/2021-19:25:45.132975 [**] [1:2025012:3] ET MALWARE Powershell commands sent B64 3 [**] [Classification: A Network Trojan was detected] [Priority: 1] {TCP} XXX.XXX.XXX.XXX:80 -> 192.168.1.22:4598601/29/2021-19:26:10.183249 [**] [1:2013147:3] ET SHELLCODE Possible %u4141%u4141 UTF-16 Heap Spray Attempt [**] [Classification: Executable code was detected] [Priority: 1] {TCP} XXX.XXX.XXX.XXX:80 -> 192.168.1.22:4598601/31/2021-10:08:08.889128 [**] [1:2002157:12] ET CHAT Skype User-Agent detected [**] [Classification: Potential Corporate Privacy Violation] [Priority: 1] {TCP} 192.168.1.2:53937 -> XXX.XXX.XXX.XXX:80 Rotation des fichiers de logs La taille du fichier de log eve.json peut devenir rapidement très importante et occuper tout l’espace de la carte SD. L’utilisation du mécanisme logrotate intégré à Linux est très utile pour éviter ceci. Nous allons le configurer pour qu’il journalise les log de Suricata pendant 10 jours tout en limitant la taille de chaque fichier à 1 GB. Ainsi les logs ne pourront pas occuper plus de 10 GB sur la carte SD tout en ayant un historique sur les 10 derniers jours. Les historiques plus anciens sont automatiquement supprimés.Créer un fichier « /etc/logrotate.d/suricata » ayant le contenu suivant : /var/log/suricata/*.log /var/log/suricata/*.json { daily maxsize 1G rotate 10 missingok nocompress create sharedscripts postrotate systemctl restart suricata.service endscript } /var/log/suricata/*.log /var/log/suricata/*.json daily maxsize 1G rotate 10 missingok nocompress create sharedscripts postrotate systemctl restart suricata.service endscript Afin de vérifier que la rotation est correctement configurée et qu’elle fonctionne, vous pouver la forcer manuellement avec la commande : sudo logrotate -f /etc/logrotate.conf sudo logrotate -f /etc/logrotate.conf Vous devriez alors bien voir les logs journalisés dans le répertoire /var/log/suricata/ pi@raspberrypi3:~ $ ls -l /var/log/suricata/ total 30024 drwxr-xr-x 2 root root 4096 Jan 23 18:17 certs -rw-r--r-- 1 root root 0 Feb 2 15:03 eve.json -rw-r--r-- 1 root root 5162813 Feb 2 15:03 eve.json.1 -rw-r--r-- 1 root root 19174088 Feb 2 14:44 eve.json.2 -rw-r--r-- 1 root root 0 Feb 2 15:03 fast.log -rw-r--r-- 1 root root 354 Feb 2 14:45 fast.log.1 -rw-r--r-- 1 root root 1944 Feb 2 14:35 fast.log.2 drwxr-xr-x 2 root root 4096 Jan 23 18:17 files -rw-r--r-- 1 root root 0 Feb 2 15:03 stats.log -rw-r--r-- 1 root root 550978 Feb 2 15:03 stats.log.1 -rw-r--r-- 1 root root 5810640 Feb 2 14:44 stats.log.2 -rw-r--r-- 1 root root 965 Feb 2 15:03 suricata.log -rw-r--r-- 1 root root 1737 Feb 2 15:03 suricata.log.1 -rw-r--r-- 1 root root 1740 Feb 2 14:44 suricata.log.2 pi@raspberrypi3:~ $ ls -l /var/log/suricata/total 30024drwxr-xr-x 2 root root 4096 Jan 23 18:17 certs-rw-r--r-- 1 root root 0 Feb 2 15:03 eve.json-rw-r--r-- 1 root root 5162813 Feb 2 15:03 eve.json.1-rw-r--r-- 1 root root 19174088 Afficher l’article complet
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.