← Torna al blog

Attacchi Brute Force al Login del Sito: Come Funzionano e Come Bloccarli

Cosa Succede Quando gli Attaccanti Prendono di Mira il Tuo Login

Ogni sito web con un modulo di login e un bersaglio. Non importa se gestisci una piccola azienda a Lugano o un'operazione multinazionale. Strumenti automatizzati scansionano internet alla ricerca di pagine di login 24 ore su 24, 7 giorni su 7. Quando ne trovano una, iniziano a provare password.

Non si tratta di un rischio teorico. Akamai ha registrato oltre 193 miliardi di attacchi credential stuffing nel solo 2020. Cloudflare blocca milioni di tentativi brute force al giorno sulla propria rete. Il tuo sito fa parte di quella superficie di attacco, che tu lo sappia o meno.

Il motivo per cui questi attacchi persistono e semplice: funzionano. Credenziali predefinite, password deboli e rate limiting assente danno agli attaccanti vittorie facili. Un singolo pannello admin compromesso puo portare a furto di dati, defacement del sito, iniezione di malware o distribuzione di ransomware.

Questo articolo analizza esattamente come funzionano gli attacchi brute force e credential stuffing, presenta statistiche reali sui tentativi automatizzati di login e illustra ogni contromisura che dovresti avere in atto.

Come Funzionano gli Attacchi Brute Force

Un attacco brute force e la forma piu semplice di cracking delle password: provare ogni possibile combinazione finche una non funziona. In pratica, gli strumenti brute force moderni sono molto piu sofisticati del provare "aaaaaa" e poi "aaaaab." Usano strategie ottimizzate per trovare credenziali valide piu velocemente.

Brute Force Puro

L'attaccante prova ogni possibile combinazione di caratteri per una data lunghezza. Per una password di 6 caratteri con lettere minuscole, sono 308 milioni di combinazioni. Per una password di 8 caratteri con maiuscole, minuscole, numeri e simboli, sono oltre 6 quadrilioni di combinazioni.

Il brute force puro e lento contro password forti. Ma contro quelle deboli (come "admin1" o "password"), funziona in pochi secondi.

Attacchi a Dizionario

Invece di provare ogni combinazione, gli attacchi a dizionario usano liste di password comuni. Queste wordlist contengono milioni di voci compilate da precedenti violazioni di dati. Le password piu usate appaiono praticamente in ogni database di violazioni:

  • 123456 (usata da oltre 23 milioni di account nei database di violazioni)
  • password
  • 123456789
  • qwerty
  • 12345678
  • admin
  • welcome
  • letmein

Gli attacchi a dizionario sono veloci perche saltano le combinazioni improbabili e si concentrano sulle password che le persone usano realmente. Una wordlist di 10 milioni di password comuni puo essere testata contro un login web in poche ore, a seconda del rate limiting in atto.

Credential Stuffing

Il credential stuffing e la variante piu efficace. L'attaccante prende coppie username-password da una precedente violazione di dati (LinkedIn, Adobe, Dropbox, o una qualsiasi delle migliaia di violazioni che hanno esposto miliardi di credenziali) e le prova sul tuo sito.

Perche funziona? Perche le persone riutilizzano le password. Gli studi dimostrano costantemente che il 60-65% delle persone usa la stessa password su piu servizi. Se il tuo dipendente ha usato la stessa password per il suo account LinkedIn e per il pannello admin WordPress della tua azienda, una violazione di LinkedIn da all'attaccante accesso al tuo sito web.

Il credential stuffing e piu difficile da rilevare rispetto al brute force perche ogni tentativo di login usa un username dall'aspetto valido e una password plausibile. Non ci sono pattern di tentativi sequenziali da segnalare.

Attacchi Ibridi

Gli attacchi ibridi combinano parole del dizionario con modifiche comuni: aggiungere numeri (password1, password123), sostituire lettere con simboli (p@ssw0rd), mettere la maiuscola alla prima lettera (Password). Questi catturano gli utenti che pensano di essere furbi facendo modifiche minori a parole comuni.

Gli Strumenti Usati dagli Attaccanti

Non serve essere un hacker esperto per lanciare attacchi brute force. Gli strumenti sono gratuiti, open source e ben documentati:

  • Hydra: Un cracker di login parallelizzato che supporta decine di protocolli tra cui form HTTP, SSH, FTP e SMTP. Puo eseguire migliaia di tentativi al minuto contro un login web.
  • Burp Suite: Una piattaforma di test di sicurezza web con un modulo Intruder progettato per attacchi automatizzati al login. L'edizione community e gratuita.
  • WPScan: Uno scanner specifico per WordPress che include capacita brute force per wp-login.php e endpoint XML-RPC.
  • Sentry MBA, OpenBullet: Strumenti di credential stuffing che usano "config" condivise nei forum underground. Ogni config e personalizzata per il modulo di login di un sito specifico.

La barriera d'ingresso e estremamente bassa. Un adolescente con un portatile e una wordlist puo lanciare un attacco brute force in pochi minuti.

Statistiche sui Tentativi Automatizzati di Login

La portata degli attacchi automatizzati al login e impressionante:

MetricaValoreFonte
Attacchi credential stuffing nel 2020193 miliardiAkamai
Percentuale di traffico login malevoloOltre il 90% su alcuni sitiShape Security
Costo medio di un attacco credential stuffing6 milioni USD l'annoPonemon Institute
Siti WordPress attaccati via brute force al giornoOltre 900.000Wordfence
Tempo per craccare "password123" con brute forceMeno di 1 secondoHive Systems
Percentuale di utenti che riutilizzano le password60-65%Google/Harris Poll

Se gestisci un sito WordPress, i dati Wordfence mostrano che gli attacchi brute force su wp-login.php e xmlrpc.php rappresentano uno dei primi tre vettori di attacco. Ogni sito WordPress che auditiamo per aziende in Ticino mostra evidenze di tentativi brute force nei log di accesso.

Perche le Credenziali Predefinite Restano il Vettore di Attacco Numero Uno

Sembra assurdo nel 2022, ma le credenziali predefinite sono ancora il modo piu efficace per entrare in un sistema. Ecco perche:

  • Installazioni CMS: Le installazioni WordPress, Joomla e Drupal spesso mantengono l'username predefinito "admin". L'attaccante conosce gia meta delle credenziali.
  • Apparecchiature di rete: Router, switch e dispositivi IoT vengono consegnati con credenziali predefinite (admin/admin, admin/password, root/root). Molti non vengono mai cambiati.
  • Ambienti di sviluppo: Server di staging, database di sviluppo e istanze di test usano spesso credenziali semplici che accidentalmente finiscono in produzione.
  • Plugin di terze parti: Alcuni plugin e temi WordPress creano account admin con password predefinite durante l'installazione.

La botnet Mirai, che ha messo fuori servizio servizi internet principali nel 2016, funzionava provando solo 62 combinazioni predefinite di username/password contro dispositivi IoT. Era sufficiente per costruire una botnet di oltre 600.000 dispositivi.

Contromisura 1: Rate Limiting

Il rate limiting e la tua prima linea di difesa. Limita il numero di tentativi di login da una singola sorgente entro una finestra temporale.

Come Implementare il Rate Limiting

A livello applicativo, traccia i tentativi di login falliti per indirizzo IP e per username. Dopo una soglia (ad esempio, 5 tentativi falliti in 15 minuti), aggiungi un ritardo crescente prima che il prossimo tentativo venga elaborato.

A livello server, strumenti come nginx possono applicare limiti su endpoint specifici:

limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

Questa configurazione limita ogni indirizzo IP a 5 richieste al minuto sull'endpoint di login. Gli utenti legittimi non raggiungeranno mai questo limite. Gli strumenti automatizzati saranno rallentati significativamente.

Limitazioni

Il semplice rate limiting basato su IP non e sufficiente da solo. Gli attaccanti sofisticati distribuiscono i loro tentativi su migliaia di indirizzi IP usando botnet o reti proxy. Servono livelli aggiuntivi.

Contromisura 2: CAPTCHA

Il CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) aggiunge una sfida facile per gli umani ma difficile per i bot.

Opzioni

  • reCAPTCHA v2: La casella "Non sono un robot". Funziona bene ma aggiunge frizione.
  • reCAPTCHA v3: Invisibile, assegna un punteggio a ogni richiesta da 0.0 a 1.0 basandosi sull'analisi comportamentale. Nessuna frizione per gli utenti, ma richiede la calibrazione della soglia.
  • hCaptcha: Un'alternativa a reCAPTCHA focalizzata sulla privacy. Particolarmente rilevante per le aziende svizzere preoccupate del trattamento dei dati sotto la nLPD.
  • Cloudflare Turnstile: L'alternativa CAPTCHA di Cloudflare. Gratuita, rispettosa della privacy e senza frizione nella maggior parte dei casi.

Quando Mostrare il CAPTCHA

Non mostrare il CAPTCHA a ogni tentativo di login. Questo infastidisce gli utenti legittimi. Mostralo dopo 2-3 tentativi falliti dallo stesso IP o per lo stesso username. In questo modo, gli utenti normali con un errore di battitura non vengono disturbati, ma gli strumenti automatizzati vengono bloccati dopo i primi tentativi.

Contromisura 3: Politiche di Blocco Account

Il blocco account disabilita temporaneamente un account dopo un numero di tentativi di login falliti.

Implementazione

  • Dopo 5 tentativi falliti, blocca l'account per 15 minuti.
  • Dopo 10 tentativi falliti, blocca per 1 ora.
  • Dopo 20 tentativi falliti, blocca fino a revisione manuale.

Il Rischio di Denial of Service

Il blocco account ha uno svantaggio significativo: un attaccante puo deliberatamente bloccare utenti legittimi provando password sbagliate contro i loro account. Questo e un attacco denial-of-service contro utenti specifici.

Per mitigare questo problema, combina il blocco con altri segnali. Blocca in base alla combinazione IP + username piuttosto che solo username. Invia email di notifica quando gli account vengono bloccati cosi gli utenti sanno cosa e successo. Fornisci un percorso alternativo di recupero (link di reset via email) che aggiri il blocco.

Contromisura 4: Blocco IP

Bloccare gli indirizzi IP che generano tentativi di login falliti in eccesso rimuove gli attori malevoli noti dall'equazione.

Blocco Statico

Mantieni una blocklist di range IP malevoli noti. Questo e utile per bloccare interi provider di hosting o regioni geografiche che generano costantemente attacchi ma nessun traffico legittimo.

Blocco Dinamico

Blocca automaticamente gli IP che superano una soglia di tentativi di login falliti. Qui entrano in gioco strumenti come fail2ban (trattato in dettaglio sotto).

Geo-Blocking

Se il tuo sito serve clienti solo in Svizzera, puoi limitare l'accesso al login agli indirizzi IP svizzeri. Questo elimina gli attacchi provenienti da altri paesi. Non e infallibile (esistono le VPN) ma riduce drasticamente la superficie di attacco.

Contromisura 5: fail2ban

fail2ban e uno strumento di prevenzione intrusioni a livello server che monitora i file di log alla ricerca di segni di attivita malevola e banna automaticamente gli indirizzi IP responsabili.

Come Funziona fail2ban

  1. fail2ban monitora i file di log (es. /var/log/auth.log, /var/log/nginx/access.log).
  2. Applica regole di filtro per identificare tentativi di login falliti.
  3. Quando un IP supera la soglia configurata (es. 5 fallimenti in 10 minuti), fail2ban aggiunge una regola firewall per bloccare quell'IP.
  4. Dopo un tempo di ban configurabile, l'IP viene automaticamente sbloccato.

Configurazione per Login Web

Per un sito WordPress, una configurazione jail di fail2ban appare cosi:

[wordpress-login] enabled = true filter = wordpress-login logpath = /var/log/nginx/access.log maxretry = 5 findtime = 300 bantime = 3600

Questo banna qualsiasi IP che genera 5 tentativi di login falliti entro 5 minuti (300 secondi) per 1 ora (3600 secondi). fail2ban opera a livello firewall, quindi gli IP bannati non possono nemmeno raggiungere il tuo server web. Questo e piu efficiente del blocco a livello applicativo perche la connessione viene interrotta prima che il server elabori la richiesta.

Perche fail2ban e Indispensabile per Siti Self-Hosted

Se ospiti il tuo sito su un VPS o server dedicato (comune per le aziende in Svizzera che vogliono la residenza dei dati), fail2ban dovrebbe essere installato e configurato per ogni servizio esposto: SSH, login web, FTP, SMTP. E leggero, gratuito e riduce drasticamente il volume degli attacchi automatizzati che raggiungono la tua applicazione.

Contromisura 6: Cloudflare WAF (Web Application Firewall)

Un WAF si posiziona tra internet e il tuo server web, filtrando il traffico malevolo prima che raggiunga la tua applicazione. Cloudflare e l'opzione piu diffusa, ma le alternative includono Sucuri, AWS WAF e Imperva.

Come Cloudflare WAF Ferma il Brute Force

  • Rilevamento bot: Cloudflare usa machine learning per distinguere gli strumenti automatizzati dai browser reali. Le firme bot conosciute vengono bloccate automaticamente.
  • Regole di rate limiting: Puoi creare regole personalizzate che limitano i tentativi di login per IP, per sessione o per altri criteri.
  • Ruleset gestiti: Cloudflare mantiene ruleset che bloccano pattern di attacco noti, inclusi gli strumenti brute force.
  • Pagine challenge: Il traffico sospetto riceve una sfida JavaScript o CAPTCHA prima di raggiungere la pagina di login.
  • Reputazione IP: Cloudflare mantiene un database di reputazione degli indirizzi IP. Gli IP associati ad attivita malevola su tutta la rete Cloudflare vengono automaticamente sfidati o bloccati.

Configurazione per la Protezione del Login

Nel pannello di Cloudflare, crea una regola firewall che mira al tuo URL di login (es. /wp-login.php o /admin/login). Applica un'azione "Managed Challenge" per tutte le richieste a questo URL. Poi crea una regola di rate limiting: se un IP fa piu di 5 richieste POST all'URL di login in 1 minuto, blocca per 1 ora.

Per le aziende in Ticino e in tutta la Svizzera, il piano gratuito di Cloudflare include funzionalita WAF di base. Il piano Pro (20 USD/mese) aggiunge il ruleset gestito completo. Questo e uno degli investimenti di sicurezza con il miglior rapporto qualita-prezzo per un sito web. Per una prospettiva piu ampia sulla sicurezza web per siti aziendali, leggi il nostro articolo sulla sicurezza dei siti web aziendali.

Contromisura 7: Autenticazione a Due Fattori (2FA)

L'autenticazione a due fattori e la singola difesa piu efficace contro brute force e credential stuffing. Anche se un attaccante ottiene la password corretta, non puo effettuare il login senza il secondo fattore.

Tipi di 2FA

  • TOTP (Time-based One-Time Password): App come Google Authenticator, Authy o Microsoft Authenticator generano un codice a 6 cifre che cambia ogni 30 secondi. Questa e la raccomandazione standard per la maggior parte dei siti web aziendali.
  • Chiavi di sicurezza hardware: Dispositivi fisici (YubiKey, Google Titan) che usano il protocollo FIDO2/WebAuthn. L'opzione piu sicura, immune al phishing.
  • Codici SMS: Un codice inviato via messaggio di testo. Meglio di nessun 2FA, ma vulnerabile agli attacchi di SIM swapping. Non raccomandato come metodo 2FA primario.
  • Codici email: Un codice inviato all'email dell'utente. Meglio di niente ma dipende dalla sicurezza dell'account email.

Implementazione 2FA su WordPress

Per WordPress, diversi plugin forniscono 2FA:

  • WP 2FA: Gratuito, supporta TOTP e codici email. Puo imporre il 2FA a tutti gli utenti o a ruoli specifici.
  • Two Factor Authentication (di Plugin Contributors): Leggero, supporta TOTP e codici di backup.
  • Wordfence: Include 2FA come parte della sua suite di sicurezza piu ampia.

Per applicazioni web personalizzate, esistono librerie per ogni framework: speakeasy per Node.js, pyotp per Python, OTPHP per PHP.

Perche il 2FA Risolve il Credential Stuffing

Il credential stuffing funziona perche le password rubate sono valide. Ma una password rubata combinata con il 2FA e inutile. L'attaccante ha la password ma non puo generare il codice TOTP. Questa singola misura elimina l'intero vettore di attacco credential stuffing.

Implementare la Sicurezza del Login Correttamente: Un Approccio a Livelli

Nessuna singola contromisura e sufficiente. L'approccio corretto e la difesa in profondita, dove piu livelli lavorano insieme in modo che un fallimento in un livello venga intercettato dal successivo.

Livello 1: Rete (WAF + Blocco IP)

Cloudflare WAF o equivalente filtra i bot conosciuti, applica limiti e blocca gli indirizzi IP con cattiva reputazione. Questo ferma la massa del traffico automatizzato prima che raggiunga il tuo server.

Livello 2: Server (fail2ban + Rate Limiting)

fail2ban monitora i log e blocca gli IP che aggirano il WAF. Il rate limiting a livello server (nginx o Apache) fornisce un ulteriore freno sugli endpoint di login.

Livello 3: Applicazione (CAPTCHA + Blocco Account)

Dopo alcuni tentativi falliti, l'applicazione mostra un CAPTCHA. Dopo altri fallimenti, l'account viene temporaneamente bloccato. Queste misure catturano gli attaccanti che hanno aggirato i livelli rete e server.

Livello 4: Autenticazione (2FA + Password Forti)

Anche se tutti gli altri livelli falliscono e l'attaccante indovina la password corretta, il 2FA impedisce il login. Questa e la tua ultima linea di difesa, ed e estremamente efficace.

Riepilogo della Configurazione Raccomandata

LivelloStrumentoConfigurazione
ReteCloudflare WAFManaged Challenge su URL login, rate limit 5 req/min
Serverfail2banBan IP dopo 5 fallimenti in 5 minuti, durata ban 1 ora
Servernginx rate limit5 richieste/minuto per IP su endpoint login
ApplicazioneCAPTCHAMostra dopo 3 tentativi falliti per IP o username
ApplicazioneBlocco accountBlocca dopo 10 fallimenti, sblocca dopo 15 minuti
Autenticazione2FA (TOTP)Obbligatorio per tutti gli account admin e editor

Misure di Hardening Aggiuntive

Rinominare o Nascondere l'URL di Login

Per WordPress, l'URL di login predefinito e /wp-login.php. Ogni bot su internet lo conosce. Plugin come WPS Hide Login permettono di cambiarlo in un URL personalizzato (es. /my-secret-login). Questo non fornisce vera sicurezza (sicurezza tramite oscurita), ma elimina un'enorme quantita di rumore automatizzato nei tuoi log.

Disabilitare XML-RPC

L'interfaccia XML-RPC di WordPress (xmlrpc.php) permette tentativi di login che aggirano le protezioni di wp-login.php. Gli attaccanti usano il metodo system.multicall per testare centinaia di password in una singola richiesta. A meno che tu non abbia specificamente bisogno di XML-RPC (per Jetpack o l'app mobile WordPress), disabilitalo completamente. Per saperne di piu sulle vulnerabilita specifiche di WordPress, leggi il nostro articolo su sicurezza e aggiornamenti WordPress.

Imporre Politiche di Password Forti

Richiedi password di almeno 12 caratteri e controllale contro database di violazioni noti (l'API HaveIBeenPwned fornisce questo servizio gratuitamente). Non imporre regole di complessita arbitrarie (deve includere maiuscola, numero, simbolo) perche portano a pattern prevedibili come "Password1!". La lunghezza conta piu della complessita.

Usare Username Unici

Non usare "admin" come username. In WordPress, non lasciare che il nome visualizzato corrisponda allo username di login. Usa il login basato su email dove possibile, poiche gli indirizzi email sono piu difficili da enumerare rispetto agli username.

Monitorare l'Attivita di Login

Registra tutti i tentativi di login (riusciti e falliti) con timestamp, indirizzi IP e username. Rivedi questi log regolarmente. Imposta alert per pattern insoliti: login riusciti da nuove posizioni, tentativi falliti multipli contro un singolo account, o login in orari insoliti.

Cosa Fare Se Sospetti un Attacco Brute Force in Corso

  1. Controlla i log di accesso. Cerca richieste POST ripetute al tuo URL di login dallo stesso IP o da molti IP diversi che puntano allo stesso endpoint.
  2. Attiva o stringi il rate limiting immediatamente. Se non hai rate limiting in atto, aggiungilo ora.
  3. Attiva la modalita "Under Attack" di Cloudflare se usi Cloudflare. Questo presenta una sfida JavaScript a ogni visitatore, bloccando la maggior parte degli strumenti automatizzati.
  4. Forza il reset delle password per tutti gli account admin e editor, specialmente se sospetti che le credenziali possano essere state compromesse.
  5. Attiva il 2FA su tutti gli account privilegiati se non e gia attivo.
  6. Controlla i login non autorizzati riusciti nei log della tua applicazione. Se ne trovi, tratta la situazione come un incidente di sicurezza e segui il tuo piano di risposta agli incidenti.

Il Costo del Non Fare Nulla

La difesa contro il brute force non e costosa. Il piano gratuito di Cloudflare copre la protezione di base. fail2ban e software open source gratuito. I plugin 2FA per WordPress sono gratuiti. Il costo totale dell'implementazione di tutte le contromisure descritte in questo articolo e vicino a zero per la maggior parte dei siti web.

Il costo di un attacco riuscito, d'altra parte, va dal defacement del sito (danno reputazionale, costi di pulizia) alla violazione completa dei dati (responsabilita legale sotto nLPD e GDPR, costi di notifica ai clienti, sanzioni regolamentari). Per una PMI svizzera, una violazione dei dati puo facilmente costare CHF 50.000-200.000 quando si considerano risposta all'incidente, spese legali, comunicazione ai clienti e perdita di affari.

Se gestisci un sito web aziendale e la tua pagina di login non ha rate limiting, nessun CAPTCHA, nessun 2FA e usa credenziali predefinite, non sei solo a rischio. Sei gia sotto attacco. L'unica domanda e se gli attaccanti hanno gia avuto successo.

Prossimi Passi

In Envestis a Lugano, effettuiamo valutazioni di sicurezza che includono il test delle protezioni del login contro attacchi brute force. Verifichiamo rate limiting, implementazione CAPTCHA, configurazione 2FA e difese a livello server. Poi implementiamo le correzioni, stratificate dal livello rete al livello applicativo.

Se vuoi sapere se il login del tuo sito web e adeguatamente protetto, o se hai bisogno di aiuto per implementare le contromisure descritte qui, contattaci. Un login che puo essere forzato con brute force non e una vulnerabilita teorica. E una porta aperta.

Vuoi sapere se il tuo sito è sicuro?

Richiedi un audit di sicurezza gratuito. In 48 ore ricevi un report completo.

Richiedi Audit Gratuito

Contatto Rapido