CrowdSec, le Fail2Ban moderne et collaboratif

L’outil CrowdSec est une sorte de Fail2Ban moderne et communautaire. L’idée est de pouvoir protéger efficacement ses services Web, mais également de prévenir les autres utilisateurs des adresses IP malveillantes, des attaques en cours… et cela de manière automatisée, afin de mettre en place des contre-mesures efficaces rapidement !

CrowdSec

Projet des Français Philippe Humeau et Thibault Koechlin, CrowdSec est un système de prévention des intrusions open source, gratuit et collaboratif. Il analyse les comportements, répond aux attaques et partage les informations au sein de la communauté afin de protéger votre/vos serveurs et services exposés sur Internet. C’est un peu le « Waze » de la cybersécurité !

Son principe de fonctionnement est plutôt simple, il est composé de 2 parties, d’un côté CrowdSec qui fait « serveur et agent » et les bouncers (ou videurs en français).

? CrowdSec, « Serveur et Agent » fonctionne sur ces 5 principes :
01 – Lecture des journaux
On récupère les journaux d’information via différentes sources (syslog, cloudtrails, SIEM, etc.).

02 – Les Parsers
Ces journaux sont analysés par des « parsers ».

02 – Les Scénarios
Ces journaux sont comparés à des « scénarios » que vous avez définis afin d’identifier les cybermenaces ou attaques.

03 – Déclenchement d’un scénario
Un scénario est « déclenché » quand il « match » sur un des journaux analysés. CrowdSec génère alors une « alerte » et éventuellement une ou plusieurs « décisions » associées. Une décision indique les mesures à prendre contre l’IP/l’utilisateur… au comportement suspect. Cette décision est de courte durée – par défaut 4h – ( mise en place d’un captcha, bannissement temporaire… ).

04 – API locale et Base de données
Ces informations (l’alerte et les décisions) sont ensuite envoyées à l’API locale de Crowdsec et stockées dans la base de données. Cela est mis en forme par l’agent Crowdsec qui va accompagner l’IP d’informations complémentaires, comme la géolocalisation de l’IP.

05 – Utiliser la liste de blocage IP de la communauté
Partagez et bénéficiez d’un système de renseignement sur les cybermenaces grâce au côté collaboratif de CrowdSec.

? Les « Bouncers » sont là pour appliquer les actions (décisions) des scénarios. Il s’installe par exemple sur la machine qui sert de reverse proxy et/ou sur le routeur. Ils peuvent consulter les décisions (via l’API locale) et appliquer une contre-mesure (Bannissement de l’IP, mise en place d’un captcha, etc.) directement sur la machine.

Source : Crowdsec – Traduit pour l’article

Les Collections

Les collections ont un rôle important dans le fonctionnement de CrowdSec, ce sont des ensembles de « Parsers » et de « Scénarios » préconfigurées ! Elles sont disponibles sur le hub CrowdSec : https://hub.crowdsec.net/author/crowdsecurity/collections

Prenons exemple de la collection nginx, idéale pour la protection au travers d’un reverse proxy nginx :

La page d’information de la collection nous donne des informations par exemple, une brève description de la collection, et un exemple sur la méthode d’acquisition des logs nécessaires à son bon fonctionnement.

Elle contient, un « parsers » qui se nomme nginx-logs. Il sera chargé d’analyser les logs nginx et un « scénarios » détectera par exemple une tentative d’intrusion, de Deni de service (ddos) suivant sa configuration. Un clic sur l’élément (Parsers, Scenarios) nous permet d’avoir plus de détails sur sa fonction et son mode de fonctionnement, exemple pour nginx-req-limit-exceeded :

La description nous informe directement sur l’utilité du scénario, dans notre exemple : détecte et banni l’adresse ou les adresses IP qui abusent de la limite de requêtes définie dans nginx plus de 5 fois en une minute ! Une collection peut également faire appel à d’autres collections et ainsi de suite.

Les Bouncers

Les bouncers sont des « services » qu’on installe par exemple sur un routeur OpenWRT ou sur la machine qui sert de reverse proxy… Ils sont chargés d’agir en fonction des décisions prisent par CrowdSec, comme le blocage d’une adresse IP, la mise en place d’un captcha… Dans le cas de la protection d’un reverse proxy nginx, le bouncers « nginx » vérifiera chaque adresse IP inconnue (au travers de l’API locale) avant de laisser passer ou non, il pratique donc une surveillance en temps réel. Un bouncers « pare-feu » mettra à jour à intervalle régulier les adresses IP malveillantes sur liste noire (par exemple avec iptables ou nftables).

La liste des bouncers disponible est visible dans le Hub officiel de CrowdSec à cette adresse, actuellement au nombre de 17. On retrouve entre autres des bouncers pour : caddy, les pare-feu, haproxy, nginx, php, wordpress ou encore traefik.

Si vous avez un reverse proxy via SWAG de chez Linuxserver, l’intégration du bouncer nginx est déjà prévue, vous trouverez sur le Forum-des-NAS un tutoriel à ce sujet.

Le Tableau de Bord

CrowdSed propose (via Metabase) l’installation d’un tableau de bord local pour consulter au travers d’une interface Web diverses informations, comme le nombre d’IP actuellement bloquées, le nombre d’alertes (activité suspecte), la provenance géographique des attaques… Son installation n’est pas aussi facile que Crowdsec, car il n’existe pas d’image Docker toute prête (pour le moment).

Vue globale du Tableau de Bord
Vue sur le type d’attaque et l’appartenance des IPS
Résumé des dernières alertes

Le tableau de bord est uniquement pour de la consultation, il ne sera pas possible d’agir sur les décisions (comme bannir ou dé-bannir une adresse IP). Pour ceux souhaitant installer ce Tableau de Bord, il vous faut compiler l’image Docker vous-même (cela reste accessible). Vous trouvez une explication également dans mon tutoriel sur Forum-des-NAS.

Les Notifications

CrowdSec propose tout un tas de solutions afin de pouvoir être notifié en temps réel de ses décisions. Dans la liste des services pris en charge, vous trouverez les emails, Slack, Splunk, Microsoft Teams mais aussi Elasticsearch et Telegram !

Exemple de notification d’un blocage via CrowdSec sur Discord

Il sera aussi possible d’utiliser le plugin HTTP pour par exemple faire des notifications vers Discord, comme l’explique cet article du blog de Linuxserver (en anglais) ou même pour les développeurs de concevoir leur propre plugin (en langage Go).

La Console

CrowdSec propose une console de gestion en ligne accessible via https://app.crowdsec.net. Une fois inscrit, on peut rattacher à notre compte une ou plusieurs instances CrowdSec et superviser le tout depuis cette console. Elle permet donc depuis un seul endroit de contrôler que tout se passe bien, mais pas seulement !

Visualiser les tentatives d’intrusion.

 

Regarder vos alertes en détail pour en apprendre plus sur vos attaquants.

 

Consulter les informations de la communauté via le système de réputation des IPS signalées. (pays, système autonome, niveau d’agressivité, type d’attaque, etc.)

Il sera également possible de filtrer (par type, par date/période, par pays…) les données et de les exporter dans un fichier au format CSV.

Financement

La source de financement de CrowdSec est simple et ce base sur 3 offres. Une offre gratuite, une offre « Pro » pour petite et moyenne entreprise à 99$ par mois et une offre « Entreprise » destinée aux plus grosses structures !

La principale différence entre les offres, c’est le support ! L’offre gratuite ne propose pas de support, il vous faudra donc (de la mise en place à l’utilisation) vous aider des documentations ou de l’aide de la communauté, là où les offres payantes proposent un support dédié.

Sur les offres payantes, la liste communautaire est complète, alors que dans l’offre gratuite, elle ne sera basée que sur vos scénarios actifs. Dans la console, 1 seul utilisateur sera autorisé et l’historique des alertes sera limité à 7 jours ou 500 alertes. La version « Pro » permet 5 utilisateurs et repousse la limite d’historisation des alertes à 30 jours ou 20000 alertes ! Autre différence sur l’offre gratuite, la liste de blocage de la communauté est mise à jour toutes les deux heures contre toutes les minutes pour la version « Entreprise ».

Conclusion

CrowdSec est une solution impressionnante ! C’est d’une efficacité redoutable, la mise en place bien qu’elle ne soit pas à la portée du premier venu, est loin d’être complexe. La documentation (en anglais) est complète et la communauté, principalement sur leur serveur Discord est très active.

J’utilise pour le moment CrowdSec uniquement sur mon reverse proxy (mon routeur sous OpenWRT n’est pas compatible avec le bouncer CrowdSec à cause de son processeur). Cependant, j’ai prévu son remplacement bientôt, pour pallier à cela. CrowdSec fonctionne tellement bien qu’on l’oublie vite. Les scénarios proposent une protection très performante et la liste de la communauté permet de se protéger des grosses menaces, voir d’avertir les autres utilisateurs et tout cela sans action de notre part !

Même s’il est souvent présenté comme un remplaçant pour Fail2Ban, je trouve que c’est un bon complément à celui-ci. Il serait dommage de désactiver Fail2Ban au profit de CrowdSec. Fail2Ban se concentre principalement sur les attaques par brute-force et même si CrowdSec le permet également, les deux peuvent pleinement cohabiter ! Et par les temps qui courent, deux protections valent mieux qu’une 😛