Supponiamo che CAPTCHA sia abilitato con il controllo del blocco degli account (dopo cinque tentativi continui falliti, l'account verrà bloccato per 15 minuti) su un sistema.
La forza bruta è ancora una probabile minaccia?
Le protezioni che descrivi sono buone che dovresti prendere in considerazione, ma ci possono ancora essere dei punti deboli:
Forse.
dipende da come definisci la "forza bruta".
Un blocco dopo X tentativi errati è ottimo per proteggere un account dove un attaccante sta andando dopo un singolo bersaglio.
C'è un altro scenario in cui l'autore dell'attacco ha selezionato alcune password comuni "password, password123, ecc." E invece di attaccare un singolo utente, provano le loro 4 password comuni su un account ogni che conoscono nel tuo sistema.
User: Jim
PW: password, password123, letmein, secret
User: Bob
PW: password, password123, letmein, secret
User: Alice
PW: password, password123, letmein, secret
Questo è più comune negli scenari in cui gli aggressori stanno cercando di raccogliere credenziali per la rivendita sulla darknet, o effettuare spostamenti laterali ad altri servizi in cui le password potrebbero essere state riutilizzate.
Suggerisco di aggiungere qualcosa per contare il tasso di accessi non validi complessivi, piuttosto che solo per account o livello IP.
È una minaccia in un senso diverso. Se blocchi account per 15 minuti dopo 5 tentativi falliti, hai effettivamente integrato un meccanismo DoS.
Supponiamo che io non voglia davvero intromettermi, ma sto bene solo causando caos, nessun problema. Fai solo qualche migliaio di accessi al secondo con nomi utente casuali. Ehi, non mi preoccuperò nemmeno di fare il CAPTCHA, a chi importa. Tutto quello che voglio è fail e lock up .
Una strategia migliore di una quantità di tempo fissa dopo un numero fisso di errori potrebbe essere una crescita quadratica (o esponenziale). Alcuni router AVM lo fanno. Primo errore di accesso, hai un blocco di 15 secondi, il prossimo errore ne hai 30, ecc. Ecc. Questo è molto meno fastidioso per gli utenti legittimi e molti altri problemi per gli aggressori.
Per rendere il DoS più difficile, è necessario un tipo di ricetta che includa l'indirizzo IP e il nome dell'account, limitando il massimo ritardo per account-coppia IP a un valore tollerabile. Altrimenti, un utente legittimo può ancora essere eseguito facilmente e indefinitamente. La crescita esponenziale affronta meglio il problema del "numero infinito di tentativi", tuttavia.
In realtà trovare una coppia di username / password online da forza bruta è, beh, assumendo che le persone non siano stupide, praticamente senza speranza. Sfortunatamente, le persone sono stupide, quindi non puoi presumere che non abbiano una delle dieci password più carine e devi presumere che sia fattibile. Quindi, sì, c'è anche un po 'di minaccia. In particolare, anche se può essere difficile indirizzare un utente su un server, su un sistema di controllo basato esclusivamente sul nome utente, è possibile indirizzare un migliaio di utenti sullo stesso server in parallelo senza problemi (ogni solo punteggio un singolo errore!) e puoi farlo su un migliaio di server in parallelo. Inoltre, non ti costa nulla mantenere questo script in esecuzione per settimane (mesi, anni ...), riprovando ogni 15-20 minuti.
Quindi, mentre per l'account individuale le tue probabilità di attaccante sono molto piccole, poiché i numeri si sommano, beh, virtualmente infinito sei destinato a colpire qualcuno, da qualche parte , alla fine, è inevitabile. Poiché altrimenti è banale provare migliaia di utenti in parallelo, dovrebbe essere chiaro che anche devono prendere in considerazione gli indirizzi IP nel calcolo. Anche così, non fornisce una protezione al 100% contro una botnet con poche migliaia di bot, ma di certo rende l'attacco un po 'meno efficace, richiedendo più lavoro e gestione. Più lavoro è buono.
Non puoi vincere la gara quando sei un bersaglio serio, ma più duro esegui il lavoro di un attaccante, più è probabile che l'attaccante scelga qualcun altro (che è un bersaglio più facile) per cominciare.
È quasi la stessa cosa che bloccare la porta principale invece di lasciarla aperta. Un ladro può facilmente rompere la finestra e non c'è infine nulla che tu possa fare per impedire a qualcuno di entrare. Ma data la scelta di una porta aperta a casa del vicino e di dover distruggere la tua finestra, probabilmente sceglierà il modo più semplice. Meno spese, stesso profitto.
Sì, è ancora una minaccia, perché:
Idee per migliorare ciò che hai proposto:
15 * 2^n
minuti con un limite di 2 ore, dove n
è il numero di blocchi precedenti nelle ultime 24 ore (il primo tentativo è un blocco di 15 minuti, il secondo è 30, il terzo è 60, il quarto e il successivo sono 120). Esiste un attacco di forza bruta a bassa velocità, progettato specificamente per entrare negli account con timeout o blocchi.
Se l'attaccante è in grado di calcolare le soglie (che può eseguire con le esecuzioni di prova), può scrivere un bot per rimanere appena sotto tale soglia.
Ovviamente, questo limita il numero di combinazioni che può provare in un determinato periodo di tempo, motivo per cui questi tipi di attacchi spesso vengono eseguiti per mesi o anni e difficilmente possono compromettere gli account con password abbastanza lunghe.
Quindi, in combinazione con una politica di password sensata (che è un argomento diverso, qui dirò solo la complessità! = sicurezza e lunghezza > complessità) e una solida implementazione del sistema descritto, è possibile ridurre la probabilità di un compromesso considerevole. Nella maggior parte dei casi, è sufficiente che il rischio rimanente si trovi entro i limiti di accettazione del rischio.
Gli accessi ai limiti tariffari, il blocco degli account, ecc. sono buoni per fermare qualsiasi attacco di forza bruta economicamente fattibile contro una schermata di accesso, ma questo non è necessariamente il modo in cui l'attacco è stato eseguito.
Molto spesso gli account sono compromessi perché l'attacco brute force non viene eseguito contro la schermata di login stessa (che è limitante) ma contro una copia dei dati. Se un utente malintenzionato può accedere ai dati tramite un server compromesso o altri mezzi, l'attacco brute force consiste essenzialmente nel scaricare account e password e quindi rompere la crittografia su una macchina molto più potente.
La forza bruta non ha bisogno di usare molta "forza". La forza bruta potrebbe funzionare per giorni ed essere una goccia minuscola, ma persistente dopo goccia dopo goccia. Prenderò in considerazione il captcha come un problema per qualsiasi aggressore determinato.
Anche con i tuoi vincoli hai sottinteso che questi limiti si applicano solo a un singolo account. Quindi, se so che ci sono più account, posso ancora automatizzare il processo per continuare a provare.
Non riuscirò a forzare l'intero spazio delle chiavi con i vincoli, ma potrò forzare le prime 1000 password per account entro poco più di 2 giorni.
Dato che un elenco di password top-1000 probabilmente coprirà una percentuale ragionevole dei tuoi utenti, dovresti essere in grado di accedere al tuo sistema abbastanza presto.
Quindi puoi difenderti?
Limita la prova per IP? - > Vettore per evitarlo: botnet / VPN
Quindi aggiungiamo "viaggio impossibile" alla lista? (L'utente effettua l'accesso da Germania e Stati Uniti entro un minuto)
Quindi, perché lo stesso IP prova diversi utenti?
Una cosa da considerare è il valore della risorsa che si tenta di proteggere e quali passi aggiuntivi si desidera intraprendere per proteggerlo. Un'altra aggiunta abbastanza sicura alla forza del tuo sistema è un secondo fattore. Ma questi possono causare un costo aggiuntivo per te, a seconda di cosa usi e su quante autenticazioni devi realizzare. Ad esempio, come servizio autonomo, Azure addebiterà 1,4 $ per 10 autenticazioni. Oppure puoi utilizzare qualche tipo di servizio gratuito o un sistema "Grid" con dati univoci per utente.
Is brute force still a probable threat?
"Probabile" dipende da quanto è gustoso un bersaglio. Se sei un obiettivo desiderabile, allora sì, sono una minaccia.
Mentre un timeout con un limite di velocità e un lockout si prenderà cura della forza bruta, dato che otterrebbero solo X tentativi in Y minuti, è un grosso problema poiché consente agli aggressori esterni di bloccare i tuoi utenti quasi senza sforzo.
In questo caso puoi scegliere tra le minacce. Stai decidendo che in cambio della protezione dei singoli account, un utente malintenzionato può bloccare gli utenti. È un attacco diverso dal rubare / cambiare i dati, ma è comunque un attacco.
Una soluzione migliore sarebbe quella di richiedere password complesse e autenticazione a due fattori, senza blocco.
Se esegui entrambe le operazioni, i tuoi account saranno ragionevolmente sicuri e gli utenti non saranno bloccati.
La vulnerabilità qui è ridotta in modo significativo poiché l'hacker dovrà rubare e rompere il database delle password e i segreti 2FA per ottenere l'accesso, ma quando sono abbastanza in profondità per farlo, non hanno effettivamente bisogno dell'utente account più.
Questo dipende tutto da cosa stai proteggendo. Se si tratta di un blog Wordpress e gli utenti non possono commentare il tuo ultimo post, non è un grosso problema. Se il tuo sito contiene documenti finanziari o medici o di sicurezza, è un grosso problema.
Leggi altre domande sui tag authentication captcha brute-force