Marvin Pascale

[B.Log]

19 Febbraio 2025

Crowdsec Appsec

WAF Negli ultimi anni, la sicurezza delle applicazioni web è diventata una delle principali sfide per amministratori di sistema e sviluppatori. Gli attacchi sono sempre più sofisticati, e mitigare le minacce richiede strumenti avanzati. Tra le soluzioni emergenti, CrowdSec AppSec si distingue per il suo approccio collaborativo e open-source. In questo articolo vedremo come installarlo e configurarlo per proteggere le nostre applicazioni web.

Cos’è CrowdSec AppSec?

CrowdSec AppSec è un modulo di sicurezza per applicazioni web che estende CrowdSec un IPS/IDS collaborativo che analizza e blocca traffico malevolo in tempo reale. L’obiettivo di AppSec è fornire protezione avanzata contro attacchi come SQL Injection, XSS, LFI, RCE e altre vulnerabilità comuni.

Mani in pasta

Per installare CrowdSec AppSec seguiamo questi passaggi; sarà necessario avere un reverse proxy e il bouncer associato.

Prenderemo come riferimento una Debian 12 e NGINX come reverse proxy.

1. Installare CrowdSec

Se non hai ancora installato CrowdSec, esegui:

# curl -s https://install.crowdsec.net | sh
# apt install crowdsec -y

Verifica che il servizio sia attivo:

# systemctl status crowdsec

2. Installare il modulo AppSec

Scarichiamo e installiamo CrowdSec AppSec:

# cscli collections install crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules
# systemctl reload crowdsec

Dopo l’installazione, attiviamo il modulo AppSec nel file di configurazione di CrowdSec:

# mkdir -p /etc/crowdsec/acquis.d/

e creiamo il file /etc/crowdsec/acquis.d/appsec.yaml

appsec_config: crowdsecurity/appsec-default
labels:
  type: appsec
listen_addr: 127.0.0.1:7422
source: appsec

In questo caso il componente AppSec sarà in ascolto su 127.0.0.1 porta 7742.

Riavviamo il servizio.

# systemctl restart crowdsec

3. Configurare il Bouncer

Per bloccare le richieste dannose, installiamo il bouncer per il nostro web server. Nel nostro caso NGINX:

# apt install nginx lua5.1 libnginx-mod-http-lua luarocks gettext-base lua-cjson -y
# apt install crowdsec-nginx-bouncer -y

Se installiamo il bouncer dopo aver installato crowdsec, il primo dovrebbe inizializzarsi da solo ma nel caso manchi l’api key nel file di configurazione possiamo generarla manualmente

# cscli bouncers add nginx

Modifichiamo la configurazione del bouncer /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf:

API_URL=127.0.0.1:8080
API_KEY=<CROWDSEC_LAPI_KEY>
# bounce for all type of remediation that the remediation can receive from the local API
BOUNCING_ON_TYPE=all
# when the remediation receive an unknown remediation, fallback to this remediation
FALLBACK_REMEDIATION=ban
MODE=stream
REQUEST_TIMEOUT=1000
# exclude the bouncing on those location
EXCLUDE_LOCATION=
# Cache expiration in live mode, in second
CACHE_EXPIRATION=1
# Update frequency in stream mode, in second
UPDATE_FREQUENCY=10
#those apply for "ban" action
# /!\ REDIRECT_LOCATION and BAN_TEMPLATE_PATH/RET_CODE can't be used together. REDIRECT_LOCATION take priority over RET_CODE AND BAN_TEMPLATE_PATH
BAN_TEMPLATE_PATH=/var/lib/crowdsec/lua/templates/ban.html
REDIRECT_LOCATION=
RET_CODE=
#those apply for "captcha" action
#valid providers are recaptcha, hcaptcha, turnstile
CAPTCHA_PROVIDER=
# default is recaptcha to ensure backwards compatibility
# Captcha Secret Key
SECRET_KEY=
# Captcha Site key
SITE_KEY=
CAPTCHA_TEMPLATE_PATH=/var/lib/crowdsec/lua/templates/captcha.html
CAPTCHA_EXPIRATION=3600

## Application Security Component Configuration
APPSEC_URL=http://127.0.0.1:7422
#### default ###
APPSEC_FAILURE_ACTION=passthrough  
APPSEC_CONNECT_TIMEOUT=100        
APPSEC_SEND_TIMEOUT=100            
APPSEC_PROCESS_TIMEOUT=1000        
ALWAYS_SEND_TO_APPSEC=false        
SSL_VERIFY=true
################

E riavviamo il servizio:

# systemctl restart nginx

Verifica della protezione

Possiamo testare la protezione simulando un attacco, ad esempio richiesta del file .env:

http://[IP_SERVER]/.env

Possiamo verificare che la richiesta sia stata correttamente processata

# cscli metrics show appsec
╭───────────────────────────────────────╮
│ Appsec Metrics                        │
├─────────────────┬───────────┬─────────┤
│ Appsec Engine   │ Processed │ Blocked │
├─────────────────┼───────────┼─────────┤
│ 127.0.0.1:7422/ │ 1         │ 1       │
╰─────────────────┴───────────┴─────────╯
╭─────────────────────────────────────────────╮
│ Appsec '127.0.0.1:7422/' Rules Metrics      │
├─────────────────────────────────┬───────────┤
│ Rule ID                         │ Triggered │
├─────────────────────────────────┼───────────┤
│ crowdsecurity/vpatch-env-access │ 1         │
╰─────────────────────────────────┴───────────╯

Conclusioni

Con CrowdSec AppSec possiamo migliorare significativamente la sicurezza delle nostre applicazioni web. Il suo approccio collaborativo e open-source lo rende una soluzione potente per chi vuole protezione avanzata senza costi elevati. Installarlo e configurarlo è relativamente semplice, e la protezione in tempo reale può fare la differenza contro gli attacchi informatici.

Se vuoi approfondire, visita la documentazione ufficiale e sperimenta le funzionalità avanzate!


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: