CrowdSec
Crowdsec est un IDS (Intrusion Detection System) et un IPS (Intrusion Prevention System). C'est un outil de sécurité informatique doté de nombreuses fonctionnalités innovantes conçues pour protéger vos systèmes contre les menaces en temps réel. Il se distingue par sa capacité à détecter les comportements malveillants grâce à un moteur de détection performant qui analyse en continu les logs et les activités système. Lorsqu’un comportement suspect est identifié, Crowdsec peut automatiquement bannir les adresses IP malveillantes, empêchant ainsi toute nouvelle tentative d’attaque.
L’un des aspects les plus puissants de Crowdsec est son approche communautaire. Chaque utilisateur contribue à une base de données partagée des adresses IP malveillantes, ce qui renforce la sécurité collective. Plus la communauté grandit, plus la protection offerte par Crowdsec devient robuste et efficace.
Concepts Clés
Pour bien utiliser Crowdsec, il est essentiel de comprendre quelques concepts clés qui forment la base de son fonctionnement. Ces concepts permettent de saisir comment Crowdsec détecte, analyse et réagit aux menaces. Voici un tour d’horizon des éléments essentiels à connaître :
Scénarios
Les scénarios sont au cœur de la détection des comportements malveillants par Crowdsec. Un scénario définit un ensemble de règles et de conditions qui décrivent un comportement suspect. Par exemple, un scénario peut détecter des tentatives de brute force SSH en surveillant le nombre de tentatives de connexion échouées sur une période donnée.
Bouncer
Un bouncer est un composant chargé d’appliquer les décisions prises par Crowdsec. Il peut interagir avec divers services comme les pare-feux, les serveurs web ou les systèmes de gestion des accès pour mettre en œuvre les mesures de protection. Les bouncers garantissent que les décisions de sécurité sont effectivement appliquées. C'est le composant qui fait de Crowdsec un IPS.
Décisions
Les décisions sont les actions que Crowdsec prend lorsqu’un scénario détecte un comportement suspect. Une décision peut être de bannir une adresse IP, d’envoyer une alerte ou de déclencher une autre action préventive. Les décisions sont configurables et peuvent être adaptées en fonction des besoins de votre infrastructure.
Collections
Les collections sont des groupes de scénarios, de bouncers et de configurations réassemblés qui sont conçus pour faciliter le déploiement de solutions complètes adaptées à des environnements spécifiques. Les collections permettent aux utilisateurs de déployer rapidement un ensemble cohérent de configurations qui fonctionnent ensemble pour protéger efficacement leur infrastructure. Par exemple, une collection pourrait inclure des scénarios pour détecter des tentatives de brute force, des bouncers pour bloquer les IP malveillantes et des configurations spécifiques pour ajuster le comportement du système en fonction des besoins de sécurité.
Acquisition
La configuration d’acquisition définit les flux d’informations que Crowdsec doit traiter. Un flux d’information peut être un fichier, un journal d’événements journald, un flux cloudwatch, ou tout autre type de flux comme un sujet Kafka. La configuration d’acquisition contient toujours un flux et un label pour taguer les logs entrants avec un type spécifique.
Stages
Le concept de stages est central à l’analyse des données dans Crowdsec. Il permet d’avoir plusieurs “étapes” de parsing. Tous les parsers appartiennent à un stage donné. Les stages permettent de structurer et d’organiser le traitement des logs en étapes successives.
Parsers
Les parsers sont utilisés pour analyser et normaliser les logs afin qu’ils puissent être exploités et analysés. Un parser est un fichier de configuration YAML qui décrit comment une chaîne de caractères doit être analysée. Les parsers peuvent également référencer des modules d’enrichissement pour permettre un traitement spécifique des données.
Enrichers
Les enrichers sont des parsers qui ajoutent un contexte supplémentaire à un événement de log pour que Crowdsec puisse prendre une meilleure décision par la suite. Par exemple, un enrichisseur peut ajouter des informations géographiques à un événement en utilisant des données GeoIP.
PostOverflows
Les postoverflows sont des parsers appliqués sur les overflows (résultats des scénarios) avant que la décision ne soit écrite dans la base de données locale ou poussée vers l’API. Ils sont utilisés pour des processus d’enrichissement/parsing coûteux que l’on ne souhaite pas exécuter sur tous les événements entrants, mais plutôt sur une décision sur le point d’être prise.
Hubs
Les hubs de Crowdsec sont des dépôts où les utilisateurs peuvent trouver et partager des scénarios, des bouncers et d’autres configurations. Le hub centralisé de Crowdsec facilite la découverte et l’utilisation de ressources communautaires pour enrichir et adapter votre installation de Crowdsec.
Réputation IP
L’un des avantages de Crowdsec est sa capacité à maintenir une réputation IP basée sur les rapports communautaires. Les adresses IP identifiées comme malveillantes par plusieurs utilisateurs sont ajoutées à une liste noire globale, ce qui aide à prévenir les attaques avant même qu’elles ne se produisent.
API
Crowdsec dispose d’une API riche qui permet aux développeurs et aux administrateurs de créer des intégrations personnalisées et d’automatiser les interactions avec l’outil. L’API facilite l’extension des fonctionnalités de Crowdsec et son intégration dans des écosystèmes de sécurité plus larges.
Configuration type
Les éléments techniques décrits par la suite permettent de mettre en oeuvre une configuration simple et efficace qui consiste à :
- Installer Crowdsec;
- Installer le bouncer IPtables pour appliquer les décisons et bannir les IP malveillantes;
- Vérifier que les services exposés sur votre serveur (SSH, serveur Web, SMTP...) sont protégés. En effet, lors de l'installation, CrowdSec va analyser votre machine afin de détecter les services présents et télécharger les collections associées. Cependant, suivant votre environnement, vous pouvez être amené à ajouter des collections entières ou seulement des parsers et gérer l'acquisition des logs.
1. Mise à jour du système
Avant de commencer l'installation, assurez-vous que votre système est à jour.
2. Installation de CrowdSec
1) Ajouter le dépôt CrowdSec
Téléchargez et ajoutez la clé GPG pour vérifier l'intégrité du dépôt :
2) Installer CrowdSec
Installez le package CrowdSec :
3) Vérifier l'installation
Assurez-vous que CrowdSec est correctement installé et en cours d'exécution :
3. Activer la complétion de la commande cscli
La complétion de commande rend l'utilisation de cscli plus efficace en permettant l'auto-complétion des commandes et options disponibles.
1) Installer les scripts de complétion
Pour bash, vous pouvez utiliser le script de complétion fourni par CrowdSec. Tout d'abord, assurez-vous que bash-completion est installé :
2) Activer la complétion
Installez le script de complétion pour cscli :
3) Recharger la configuration de bash
Rechargez votre configuration de bash pour que la complétion soit prise en compte :
4) Vérifier la complétion
Testez la complétion automatique en tapant cscli
suivi de Tab
pour voir les options disponibles.
4. Installation du Bouncer Iptables
Le bouncer iptables permet à CrowdSec de bloquer les adresses IP malveillantes directement au niveau du pare-feu. C'est lui qui applique les décisions prises par CrowdSec.
1) Télécharger et installer le bouncer iptables
2) Configurer le bouncer
L'installation crée un fichier de configuration par défaut à /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.
vous pouvez vérifier et modifier ce fichier selon vos besoins.
3) Démarrer et activer le bouncer
Assurez-vous que le bouncer est activé au démarrage et qu'il est en cours d'exécution :
4) Vérifier le bouncer
Vérifiez que le bouncer est correctement installé et en cours d'exécution :
iptables & Docker
Pour iptables si conteneurs Docker : il faut ajouter la chaine (ensemble de règles) DOCKER-USER
pour faire passer les règles de Crowdsec avant celles de Docker.
Dans le fichier /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
, décommentez la ligne DOCKER-USER
dans la section iptables_chains
.
iptables_chains:
- INPUT # Cette chaîne est utilisée pour contrôler le trafic réseau entrant sur l'hôte. Toutes les connexions qui arrivent sur votre machine passent par cette chaîne (ICMP, SSH, serveur Web, etc.).
- DOCKER-USER # Trafic entrant vers les conteneurs Docker !
# - FORWARD # Cette chaîne est utilisée pour contrôler le trafic réseau qui est routé à travers l'hôte (routage).
5. Vérification de l'intégration
Pour vérifier que tout fonctionne correctement, vous pouvez consulter les journaux de CrowdSec et du bouncer iptables :
6. Configuration bantime
Par défaut, la décision qui est appliqué par le bouncer iptables est un ban de 4h. Bien évidement, il est possible de modifier ce comportement. Exemple pour passer cette durée à 24h :
1) Editez le fichier /etc/crowdsec/profiles.yaml
2) Recharger le service crowdsec
7. Enrôlement de la console
(option) Modification du port de l'API si port 8080 utilisé.
Par défaut CrowdSec utilise le port TCP 8080 pour accéder à son API. Si ce port est déjà utilisé sur votre serveur, il est important de modifier la configuration de CrowdSec pour que l'API en utilise un autre.
Exemple pour utiliser le port TCP 6660 à la place du TCP 8080 :
Modifiez le fichier /etc/crowdsec/config.yaml
Modifiez le fichier /etc/crowdsec/local_api_credentials.yaml
Modifiez le fichier /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
Redémarrez les services CrowdSec :
Il est possible d'enrôler CrowdSec sur https://app.crowdsec.net/ pour avoir un joli tableau de bord et une visualisation globale. L'autre intérêt, va être la possibilité d'ajouter des listes d'IP malveillantes maintenues par CrowdSec à nos instances.
1) Créer un compte sur https://app.crowdsec.net/
Validez votre compte en vous authentifiant sur la plateforme
2) Rendez vous dans le menu Security Engines > Engines
Cliquez sur Add Security Engine.
3) Exécutez la commande d'enrôlement sur votre serveur
Dans un contexte d'automatisation, il est possible de spécifier le nom d'hôte :4) Acceptez l'enrôlement sur la plateforme web de CrowdSec
5) (option) Autorisez la gestion des décisions depuis la console :
6) Redémarrez le service crowdsec sur le serveur
8. Configuration des Notifications
Vous pouvez configurer Crowdsec pour envoyer des notifications en cas de détection d’événements critiques.
1) Editez le fichier /etc/crowdsec/profiles.yaml
pour décommenter cette section, ce qui activera le plugin :
/etc/crowdsec/notifications/email.yaml
. Exemple :
email:
smtp_host: smtp.example.com
smtp_port: 587
smtp_user: your_email@example.com
smtp_pass: your_password
from: alert@example.com
to:
- admin@example.com
subject: "[Crowdsec] Alert: {alert.name}"
body: |
Alert Name: {alert.name}
Source IP: {alert.source_ip}
Details: {alert.description}
3) Testez :
9. (option) Installation de collections supplémentaires
Lors de l'installation, CrowdSec va analyser votre machine afin de détecter les services présents et télécharger les collections associées. Vous pouvez vérifier en listant les collections installées :
Installation de la collection sshd pour protéger les accès SSH
La collection “crowdsecurity/sshd” est une collection préconfigurée qui permet de détecter et de répondre aux tentatives de brute force SSH sur votre serveur comme le ferait Fail2Ban. Cette collection inclut des scénarios, des parsers et d’autres configurations nécessaires pour surveiller et sécuriser les connexions SSH.
1) Installer et configurer cette collection sur votre système :
2) Une fois la collection installée, vous pouvez vérifier que tous les composants nécessaires sont en place en listant les collections installées :
3) Gestion des parsers
Les parsers sont utilisés pour analyser les logs SSH et extraire les informations nécessaires pour les scénarios. La collection inclut des parsers spécifiques pour les logs SSH. Vérifiez leur présence avec :
Par exemple, vous pouvez installer le parser pour la gestion des logs Docker :
4) Configuration des Scénarios
Les scénarios sont essentiels pour détecter des comportements spécifiques. Crowdsec utilise des fichiers YAML pour définir les scénarios. Les scénarios par défaut sont stockés dans le répertoire /etc/crowdsec/scenarios/
.
Pour installer un scénario, utilisez la commande cscli :
5) Personnalisation des Scénarios
Crowdsec permet de personnaliser les scénarios pour répondre aux besoins spécifiques de votre environnement. Vous pouvez modifier les scénarios existants ou créer vos propres scénarios. Les fichiers de scénarios se trouvent généralement dans le répertoire /etc/crowdsec/scenarios/.
Le contenu du fichier ssh-bf.yaml :
# ssh bruteforce
type: leaky
name: crowdsecurity/ssh-bf
description: "Detect ssh bruteforce"
filter: "evt.Meta.log_type == 'ssh_failed-auth'"
leakspeed: "10s"
references:
- http://wikipedia.com/ssh-bf-is-bad
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
service: ssh
confidence: 3
spoofable: 0
classification:
- attack.T1110
label: "SSH Bruteforce"
behavior: "ssh:bruteforce"
remediation: true
---
# ssh user-enum
type: leaky
name: crowdsecurity/ssh-bf_user-enum
description: "Detect ssh user enum bruteforce"
filter: evt.Meta.log_type == 'ssh_failed-auth'
groupby: evt.Meta.source_ip
distinct: evt.Meta.target_user
leakspeed: 10s
capacity: 5
blackhole: 1m
labels:
service: ssh
remediation: true
confidence: 3
spoofable: 0
classification:
- attack.T1589
behavior: "ssh:bruteforce"
label: "SSH User Enumeration"
10. Gestion des décisions
Les décisions sont les actions prises par Crowdsec en réponse aux comportements malveillants détectés par les scénarios. La gestion des décisions est essentielle pour assurer une protection efficace et réactive de votre infrastructure. Dans cette section, je vais expliquer comment consulter, ajouter, supprimer et gérer les décisions de Crowdsec.
Pour lister les décisions :
Cette commande affiche des informations telles que l’adresse IP, la raison du bannissement, la durée et le scenario à l’origine de la décision.Il peut être nécessaire de supprimer des décisions, par exemple si une adresse IP a été bannie par erreur ou si vous souhaitez lever un bannissement avant la fin de la durée prévue.
cscli decisions delete --ip 1.2.3.4
# Supprimer toutes les décisions :
sudo cscli decisions delete --all
11. Création de Rapports
Crowdsec permet également de créer des rapports basés sur les données collectées par les scénarios. Ces rapports peuvent fournir des informations précieuses sur les tendances de sécurité et l’efficacité des scénarios déployés.
Pour générer un rapport :
12. Tests
Scan HTTP
Vérifiez que votre site web est accesible via la commande curl
( plus pratique et parlant que de passser par un navigateur web) :
Depuis une machine distante, déclenchez un scan à destination de votre site web via l'outil Nikto :
Nikto va rechercher des vulnérabilités sur votre serveur Web, Crowdsec doit alors réagir, vérifiez les décisions via la commande :Vous pouvez afficher les raisons de cette décision via la commande :
Si l'adresse IP de machine distante est bannie, vous pouvez re-tester avec curl
, vous devriez recevoir une réponse négative de type "forbidden".
13. Diagnostic et tips
Les chemins d'acquisitions des logs se trouvent dans le fichier /etc/crowdsec/acquis.yaml
Exemple :
#Generated acquisition file - wizard.sh (service: ssh) / files :
journalctl_filter:
- _SYSTEMD_UNIT=ssh.service
labels:
type: syslog
---
#Generated acquisition file - wizard.sh (service: linux) / files : /var/log/syslog /var/log/kern.log
filenames:
- /var/log/syslog
- /var/log/kern.log
labels:
type: syslog
---
#HAProxy
filenames:
- /var/log/haproxy.log
labels:
type: haproxy
---
Lire les logs Crowdsec stockés par défaut dans /var/log
:
Lire les listes ipset
contenant les IP bannies utilisées par iptables
:
Si Nextcloud, installer le parser nextcloud-whitelist :
Vous pouvez créer des listes blanches afin q'une IP ou un réseau ne soit jamais banni :
# Créer la liste
sudo cscli allowlists create my_whitelist -d "Liste blanche des IP de confiance"
# Ajouter des IP
cscli allowlist add my_whitelist 1.2.3.4/29 10.10.10.10 IP3 IP4
# Lister le contenu de la liste
cscli allowlists instpect my_whitelist
# Supprimer des IP
cscli allowlists remove my_whitelist 1.2.3.4
Références
https://blog.stephane-robert.info/docs/securiser/reseaux/crowdsec/
https://slash-root.fr/crowdsec-installation-avec-bouncer-iptables-sur-debian-12/