Uno scenario CrowdSec per individuare richieste HTTP potenzialmente automatizzate provenienti da indirizzi esterni all’Unione europea, escludendo Svizzera e Regno Unito. Il filtro combina assenza di Referer, codici HTTP selezionati e User-Agent sospetti o obsoleti. Di seguito configurazione, spiegazione e controlli da eseguire prima di attivarlo in produzione.
Scenario YAML
Salvare il file in /etc/crowdsec/scenarios/http-404-no-referrer-extraeu.yaml:
type: trigger
name: custom/http-404-no-referrer-extraeu
description: "Rileva richieste HTTP sospette extra UE senza Referer"
filter: |
evt.Meta.log_type == 'http_access-log' &&
evt.Meta.source_ip != nil &&
evt.Enriched.IsInEU == 'false' &&
evt.Enriched.IsoCode not in ['CH', 'GB'] &&
evt.Parsed.referrer == '-' &&
(
evt.Meta.http_status in ['301', '404'] ||
(
evt.Meta.http_user_agent != nil &&
(
evt.Meta.http_user_agent matches 'Chrome/([1-9]|[1-9][0-9]|100)[.]' ||
evt.Meta.http_user_agent matches 'Firefox/([1-9]|[1-9][0-9]|100)[.]' ||
evt.Meta.http_user_agent matches 'MSIE [6-9][.]' ||
evt.Meta.http_user_agent contains 'MSIE 10.' ||
evt.Meta.http_user_agent contains 'Trident/7.0' ||
evt.Meta.http_user_agent == '-' ||
evt.Meta.http_user_agent == '' ||
evt.Meta.http_user_agent matches '(?i)(sqlmap|nikto|masscan|python-requests|python-urllib|go-http-client|curl/|wget/)'
)
)
)
groupby: evt.Meta.source_ip
blackhole: 720h
labels:
remediation: true
classification:
- attack.T1595
behavior: "http:suspicious-extraeu"
service: http
Come funziona il filtro
http_access-loglimita l’analisi alle richieste registrate negli access log, escludendo gli error log Apache/Nginx. Evita falsi positivi causati, per esempio, dai messaggi di timeout di un bouncer.IsInEUeIsoCodeusano l’arricchimento GeoIP per applicare il controllo agli IP non UE, con esclusione esplicita diCHeGB.evt.Parsed.referrer == '-'seleziona richieste senza intestazione Referer, un segnale che da solo non prova un attacco.- Il ramo
301/404intercetta risorse inesistenti o richieste che producono redirect; l’altro ramo riconosce browser molto vecchi e alcuni tool automatici. type: triggerproduce un evento al primo match.groupbysepara gli IP eblackholeimpedisce alert ripetuti per lo stesso bucket durante l’intervallo indicato.
Attenzione ai falsi positivi
Questa è una regola aggressiva: un normale browser può richiedere un URL errato o seguire un redirect senza inviare un Referer. Anche curl, wget e python-requests sono usati da monitoraggi leciti. Prima di abilitarne la remediation, conviene osservare gli alert e, se necessario, restringere il filtro a URL notoriamente scansionati o passare a uno scenario a soglia (type: leaky).
Il campo evt.Enriched.IsInEU va verificato con cscli explain sulla versione e sulla pipeline in uso: l’esempio usa il confronto testuale 'false' previsto dalla configurazione di partenza. Se nei propri eventi è un booleano effettivo, occorre usare false senza apici. Non fare supposizioni sui tipi dei campi. Analogamente il codice HTTP deve essere disponibile nel formato atteso dal parser.
Nota: blackhole: 720h non imposta la durata del ban; quest’ultima dipende dai profili decisionali configurati. Un blackhole molto lungo sopprime nuovi alert per lo stesso IP: va dimensionato secondo le necessità.
Verifica della configurazione
sudo crowdsec -t
sudo cscli scenarios list | grep http-404-no-referrer-extraeu
sudo cscli explain --file /var/log/apache2/access.log --type apache2 --verbose
sudo cscli alerts list
sudo cscli decisions list
Per evitare di rielaborare un intero log in produzione, estrarre una o più righe rappresentative in un file temporaneo e provarle con cscli explain. Testare anche casi leciti: browser moderno, accessi dal Regno Unito/Svizzera, Referer presente, error log e redirect applicativi.
Attivazione e rollback
sudo crowdsec -t && sudo systemctl reload crowdsec
# Disattivazione rapida dello scenario:
sudo mv /etc/crowdsec/scenarios/http-404-no-referrer-extraeu.yaml /etc/crowdsec/scenarios/http-404-no-referrer-extraeu.yaml.disabled
sudo crowdsec -t && sudo systemctl reload crowdsec
La configurazione va considerata un punto di partenza da validare, non un criterio universale per riconoscere bot malevoli. Per riferimento: formato degli scenari e espressioni e campi degli eventi nella documentazione ufficiale CrowdSec.