Tempo è tuo amico.
Pensa a cosa succede quando ricaverai i soldi da "la tua macchina bancaria media" .
- Scheda inserimenti utente (leggi: email / nome / altro),
- La macchina dice "ciao, per favore inserisci il codice PIN" (leggi: password / qualunque)
- L'utente può ora inserire il codice PIN corretto entro 3 tentativi. Se fallisce, la carta viene ritirata e l'utente dovrà attendere il giorno successivo per richiedere personalmente una nuova carta e un codice PIN, spiegando alla sua banca cosa è successo.
Ora, nella tua situazione probabilmente non vuoi che le persone vengano a bussare alla tua porta perché non hanno inserito il codice corretto. Per evitare ciò, devi semplicemente rimuovere la "venuta e presentare una nuova carta" e quello che rimane è "aspetta fino a domani".
Quindi, se dai a un utente 3 tentativi di verificare se stesso e lui / lei non riesce ... fallo aspettare un'ora prima che lui / lei possa riprovare.
Se qualcuno provasse ancora a fare un attacco di forza bruta, gli avrebbe permesso di provare ("3 tentativi all'ora" massimo x "24 ore al giorno" massimo = 3 x 24 =) 72 tentativi al giorno.
A seconda di cosa sta provando a fare la forza bruta, 72 tentativi al giorno (che sono 26280 tentativi in un anno di 365 giorni) sono troppo lenti.
In questo modo - e fino a quando "reverse engineering" per trovare una backdoor non è un'opzione - il tuo "software" dovrebbe essere al riparo da qualsiasi forza bruta.
Aggiorna
Un piccolo aggiornamento, basato sui commenti a questa risposta ...
Ora, per quanto riguarda le persone che vengono bloccate perché una o più persone malintenzionate abusano del nome utente di un membro specifico e cercano semplicemente di assicurarsi che un utente non possa accedere perché hanno inserito semplicemente una password errata per 3 volte?
Giusto, sembra un attacco di tipo "Denial of Service". Ma questo non ti impedirà di farlo in questo modo, in quanto tali attacchi possono essere elusi facilmente. Tutto quello che devi fare è assicurarti di non dimenticare un secondo livello di sicurezza per questi casi.
Ricorda che ci sono cose come "domande di sicurezza". Qualcuno potrebbe essere in grado di conoscere o indovinare il tuo nome utente, ma ci vorrà un sacco di tempo per aggirare una domanda di sicurezza quando è bloccata ... a meno che tu non conosca la risposta. La domanda di sicurezza potrebbe essere limitata semplicemente a "sbloccare" l'area di accesso "bloccata".
Pensa a come Google e Co. lo fanno:
- accedi con nome utente / email e password,
- fallisce più volte dà un blocco,
- rispondere alla domanda di sicurezza solleva correttamente il blocco.
Usa un captcha ai punti (1) e (3) per rallentare qualsiasi tentativo di forza bruta e tutto è pronto.
Se non vuoi usare esplicitamente un captcha (che mi fa chiedere il perché), dovrai implementare un'implementazione di "user-ip", "time-of-access" e rallentare l'accesso al sistema per un casuale da 1 a 2 secondi. Questo non dovrebbe essere un problema in quanto sarebbe un'implementazione simile alla procedura di blocco, solo che non blocchi, ma rallenti le cose in certi punti, quindi un attacco a forza bruta richiede tempo . Un rallentamento di 1 secondo su 1 pagina limiterà la forzatura bruta a 60 tentativi al minuto, mentre blocchi il brute-forcer dopo 3 tentativi falliti. Lo stesso vale per la domanda di sicurezza: rallenta. Il bruto-forcer dovrà essere abbastanza intelligente da occuparsi di entrambi i punti e dovrà eseguire la forza bruta di entrambi nello stesso momento ... rubare le sue preziose risorse e il tempo necessario a causare il caos.
Comunque lo fai. Se lo fai in questo modo, non c'è bisogno che l'amministratore lasci la macchina da caffè mentre tutto sta succedendo, e risolve tutti i problemi che pensi di aver scoperto in merito al "blocco degli utenti legittimi con un attacco simile al DOS" .
Diamo un'occhiata all'esempio iniziale che ho fornito sopra in (3):
If that fails, the card is withdrawn and the user will have to wait for the next day to personally apply for a new card and pincode, explaining to his bank what happened.
Bene, l'opzione "domanda di sicurezza" per consentire agli utenti legittimi di rimuovere il blocco è come essere costretti a visitare personalmente e parlare con la banca. Semplicemente più facile.
Inoltre, questa procedura di "sblocco" può essere utile per l'amministratore / sysop come un semplice file di registro che mostra il numero di "tentativi" può aiutare l'amministratore a rintracciare i tentativi di un attacco definitivo. Ogni bambino di script potrebbe provare a bloccare gli utenti inserendo la password errata per 3 volte ... ma se qualcuno non risponde più volte alla domanda di sicurezza, c'è qualcosa di brutto.
E per ultimo ma non meno importante: proprio come una cipolla, questi livelli di sicurezza possono persino essere racchiusi l'uno nell'altro (se ha senso, come negli ambienti ad alta sicurezza).
Il semplice trucco è quello di rendere difficile per le persone fare confusione con le cose, mantenendo al contempo l'utente normale.
Posso solo ripetere: tempo è tuo amico ... (il resto è semplice logica)