1. Le Hub et les collections #
Le contenu prêt à l’emploi.
Une collection, c’est quoi ? #
Une collection regroupe ce qu'il faut pour protéger un service : parsers, scénarios et parfois d'autres collections. Installez-la plutôt que d'assembler les pièces à la main. Le Hub les recense.
sudo cscli hub update
sudo cscli collections install crowdsecurity/nginx
sudo cscli collections list
sudo cscli scenarios list
sudo cscli parsers list
sudo systemctl reload crowdsec
# Mises à jour régulières
sudo cscli hub update && sudo cscli hub upgrade| Collection | Protège |
|---|---|
crowdsecurity/linux | Base Linux, avec crowdsecurity/sshd |
crowdsecurity/nginx | Nginx |
crowdsecurity/traefik | Traefik |
crowdsecurity/base-http-scenarios | Scanners, sondes, brute force HTTP |
crowdsecurity/http-cve | Exploitation de failles connues |
crowdsecurity/whitelist-good-actors | Exclut des acteurs légitimes connus |
2. Les parsers #
Comprendre chaque ligne.
Trois étapes #
Chaque ligne traverse trois étapes : s00-raw extrait le message, s01-parse reconnaît le service, s02-enrich ajoute date, pays ou champs HTTP. Le résultat est un événement, avec des champs comme evt.Meta.source_ip.
cscli explain : l’outil indispensable #
Pourquoi cette ligne n'a-t-elle rien déclenché ? cscli explain montre son trajet. 🟢 : le parser a réussi. 🔴 : il ne concerne pas cette ligne.
sudo cscli explain --log "Nov 7 08:58:22 srv sshd[9]: Failed password for root from 203.0.113.70 port 5 ssh2" --type syslogline: Nov 7 08:58:22 srv sshd[9]: Failed password for root from 203.0.113.70 port 5 ssh2
├ s00-raw
| └ 🟢 crowdsecurity/syslog-logs (+12 ~9)
├ s01-parse
| ├ 🔴 crowdsecurity/nginx-logs
| └ 🟢 crowdsecurity/sshd-logs (+9 ~1)
├ s02-enrich
| ├ 🟢 crowdsecurity/dateparse-enrich (+2 ~2)
| ├ 🟢 crowdsecurity/geoip-enrich (+9)
| └ 🔴 crowdsecurity/http-logs
├-------- parser success 🟢
├ Scenarios
├ 🟢 crowdsecurity/ssh-bf
├ 🟢 crowdsecurity/ssh-slow-bf
└ 🟢 crowdsecurity/ssh-time-based-bf3. Les scénarios #
Reconnaître un comportement.
Le seau percé #
Une rafale déborde vite. Un visiteur qui se trompe une fois de temps en temps ne remplit jamais son seau : c'est ce qui distingue une attaque d'une erreur humaine.
| Type | Déclenche quand… |
|---|---|
leaky | Le seau déborde, le cas le plus courant |
trigger | Dès le premier événement correspondant |
counter | Un nombre atteint sur une durée fixe |
conditional | Une condition sur le contenu du seau |
Écrire son scénario #
Détectons un brute force sur notre formulaire de connexion. Créez /etc/crowdsec/scenarios/local-login-bf.yaml :
type: leaky
name: local/login-bf
description: "Détecte le brute force sur le formulaire de connexion"
filter: "evt.Meta.service == 'http' && evt.Parsed.verb == 'POST' && evt.Meta.http_path == '/login' && evt.Meta.http_status == '401'"
groupby: evt.Meta.source_ip
capacity: 4
leakspeed: 10s
blackhole: 1m
labels:
remediation: true
service: http
behavior: http:bruteforce
label: "Brute force sur /login"| Champ | Rôle |
|---|---|
filter | Quels événements comptent |
groupby | Un seau par valeur, ici par IP |
capacity | Taille du seau |
leakspeed | Vitesse à laquelle il se vide |
blackhole | Silence après un débordement, pour éviter les doublons |
labels.remediation | true : l’alerte peut produire un blocage |
sudo systemctl reload crowdsec
sudo cscli scenarios list
sudo cscli alerts listTester sans risque : la simulation #
En simulation, le scénario crée une alerte et une décision marquée (simul), que les bouncers n'appliquent pas. Idéal pour mesurer les faux positifs.
sudo cscli simulation enable local/login-bf
sudo systemctl reload crowdsec
sudo cscli simulation status
sudo cscli decisions list
# Ip:192.0.2.77 | local/login-bf | (simul)ban
sudo cscli simulation disable local/login-bf