Quali sono gli svantaggi della limitazione della richiesta di accesso?

11

In un'applicazione web, un modo per proteggersi dagli attacchi di indovinare la password è bloccare gli account dopo un determinato numero di accessi non riusciti. Questo potrebbe essere fatto sia sull'indirizzo IP sia sul nome utente di origine.

Ad esempio, la seguente tabella mostra cosa succede quando vengono rilevati tentativi ripetuti. Il sistema è impostato per bloccare gli account dopo 3 accessi non riusciti in una finestra di 5 minuti, per 5 minuti.

IP             Time       Username           Creds Correct?  Message Given

203.0.113.1    10:00:00   [email protected]    N               Bad username or password
203.0.113.1    10:00:01   [email protected]    N               Bad username or password
203.0.113.1    10:00:02   [email protected]    N               Bad username or password
203.0.113.2    10:00:03   [email protected]    N               Bad username or password
203.0.113.1    10:00:04   [email protected] N               Login locked from your location
203.0.113.2    10:00:05   [email protected] Y               Welcome!
203.0.113.2    10:00:06   [email protected]    N               Account locked
203.0.113.2    10:00:07   [email protected]    Y               Welcome!
203.0.113.1    10:01:00   [email protected] Y               Login locked from your location
203.0.113.1    10:05:03   [email protected] Y               Welcome!

I tentativi di accesso vengono conteggiati solo quando le credenziali vengono convalidate (il processo deve verificare il blocco prima di convalidare le credenziali - se bloccato, quindi le credenziali non sono convalidate).

Come puoi vedere dai seguenti, un utente malintenzionato (con IP 203.0.113.3 ) può bloccare un account che causa un Denial of Service indovinando ripetutamente la password sbagliata di proposito:

IP             Time       Username           Creds Correct?  Message Given

203.0.113.3    10:06:00   [email protected]    N               Bad username or password
203.0.113.3    10:06:01   [email protected]    N               Bad username or password
203.0.113.3    10:06:02   [email protected]    N               Bad username or password
203.0.113.3    10:06:03   [email protected]    N               Account locked
203.0.113.10   10:07:00   [email protected]    Y               Account locked
203.0.113.10   10:07:04   [email protected]    Y               Account locked
203.0.113.10   10:07:08   [email protected]    Y               Account locked
203.0.113.10   10:07:15   [email protected]    Y               Account locked
203.0.113.10   10:07:25   [email protected]    Y               Account locked

... impedendo al vero utente di 203.0.113.10 di accedere.

Un'alternativa a questo è ritardare artificialmente la risposta HTTP. Pronuncia i primi ritardi di accesso non riusciti di 1 secondo, il secondo di 2 secondi, il terzo di 4 e così via fino a un totale di 16 secondi. Se il loro account viene attaccato, l'utente vedrà un cerchio che gira nel proprio browser mentre attendono la risposta HTTP alla loro richiesta di accesso.

Ci sono degli svantaggi? Quanto sopra sarebbe ora il seguente (diciamo che c'è un ritardo di 1 secondo come predefinito, a causa delle iterazioni di bcrypt):

IP             Req Time   Resp Time Username           Creds Correct?  Message Given

203.0.113.3    10:06:00   10:06:01  [email protected]    N               Bad username or password
203.0.113.3    10:06:01   10:06:03  [email protected]    N               Bad username or password
203.0.113.3    10:06:03   10:06:08  [email protected]    N               Bad username or password
203.0.113.3    10:06:08   10:06:17  [email protected]    N               Bad username or password
203.0.113.10   10:06:18   10:06:35  [email protected]    Y               Welcome!

Si noti che il ritardo artificiale (quando attivo) avviene attraverso i thread, il che significa che l'attaccante non può inviare richieste da un singolo IP a una velocità maggiore. Un accesso da un IP diverso non viene accodato, sebbene possa ancora verificarsi un ritardo artificiale generato da tentativi errati sul nome utente.

Come puoi vedere, l'accesso a 203.0.113.10 non viene negato all'accesso - devono semplicemente attendere 17 secondi per completare il login, mentre l'attaccante deve ritardare il loro attacco. Pertanto è efficace nel prevenire gli attacchi indovinatori di password.

La mia domanda è quali sono gli aspetti negativi di questo approccio e perché non vedi questo tipo di approccio più spesso piuttosto che il blocco totale che può causare il rifiuto del servizio per gli utenti?

    
posta SilverlightFox 11.06.2015 - 16:07
fonte

4 risposte

6

Per trasformare lo scenario di attacco di 90 gradi; considera l'attaccante che, anziché utilizzare un elenco di password contro un singolo utente, utilizza invece una singola password contro un elenco di utenti. Immaginiamo che (come l'attaccante) non mi importi a quale account accedo, voglio semplicemente accedere a qualsiasi account (ad esempio, un conto bancario). Invece di provare a forzare un singolo utente (che è probabile che fallisca), provo la stessa password (una comune, ad esempio "CorrectHorseBatteryStaple") contro un elenco di utenti che ho precedentemente ottenuto (la maggior parte dei siti usa l'e-mail indirizzi per nomi utente, che non sono segreti in alcun modo).

In questo scenario, ottieni solo un singolo colpo contro ogni nome utente, ma dovresti comunque limitare i miei tentativi. Nessuna delle tue difese proposte protegge da questo scenario così com'è.

Le tue difese dovrebbero essere focalizzate nell'altro modo, invece di limitare i tentativi di accesso con un nome utente, dovresti limitare i tentativi contro gli indirizzi IP. Credo che Google lo faccia al momento. Ad esempio, se blocco il tuo account, dovresti comunque essere in grado di accedere dal tuo normale indirizzo IP (I.E. Diverso dagli aggressori).

    
risposta data 11.06.2015 - 17:20
fonte
3

I difetti che vedo da questo approccio sono:

  • Più complicato da implementare, soprattutto su una piattaforma scalabile, cross thread.
  • Potrebbe non essere efficace su server con bilanciamento del carico.
  • Gli utenti potrebbero aver bisogno di essere pazienti.

Per i motivi sopra esposti non è ampiamente implementato.

    
risposta data 11.06.2015 - 16:07
fonte
2

Non sono sicuro del motivo per cui sarebbe più difficile da implementare rispetto al blocco dell'account, o perché il bilanciamento del carico rs avrebbe alcun effetto. Entrambi gli approcci richiedono un coordinamento centralizzato su cosa fare (lock vs delay).

Penso che la ragione principale sia che si tratta di uno strano comportamento e che il tuo sito Web sembra rotto (non penso che sia semplicemente la pazienza). I ritardi sono comuni e le persone sono addestrate a pensare "il sito web è rotto" perché normalmente è il caso piuttosto che "oh, è solo ritardare il mio login perché ho digitato la password sbagliata", che è molto insolito. In altre parole, tutti vengono addestrati su cosa aspettarsi dal comportamento del sito web secondo le norme di funzionamento dei siti Web in generale.

L'altro motivo è che le persone hanno un potenziale limitato per riprovare semplicemente password diverse. Se hai provato ad accedere 10 volte a un sito e hai fallito, hai dimenticato la tua password a quel punto, e probabilmente un 11 °, 12 ° e 13 ° tentativo non saranno utili. La maggior parte delle persone si arrenderebbe forse al 5-7. Quindi a quel punto è il tempo di azzeramento, e aspettare altri 17 secondi non aiuterà nessuno tranne un aggressore.

    
risposta data 11.06.2015 - 17:57
fonte
0

La tua soluzione dipenderà dalla variabile a cui si accede dal sistema di autorizzazione (AD, ldap, ...).

L'applicazione menzionata è l'unica ad utilizzare il servizio di autenticazione?

  • Se si : la limitazione funzionerà correttamente. Potresti avere utenti che sono sorpresi dalla lentezza dell'applicazione (come percepito da loro) ma questo potrebbe non essere importante (il tuo la strozzatura dovrebbe essere strongmente esponenziale in modo che i primi 3-5 tentativi siano quasi gli stessi, in termini di tempo, quindi inserire una curva di ritardo molto elevata)

  • Se not : devi fare lo stesso presupposto per ogni sistema di preoccupazione. Ciò potrebbe significare che alcune delle applicazioni non lo sono il controllo potrebbe non avere il meccanismo di ritardo che hai menzionato. Questo significa anche che devi avere uno stretto controllo su quali applicazioni usa il tuo meccanismo di autenticazione (che potrebbe non essere ovvio se lo è esposto a, diciamo, tutti gli ambienti DMZ come servizio DMZ)

Ho una strong antipatia per il throttling nel caso di applicazioni perché devi codificarlo nel meccanismo di autenticazione (che dovrebbe rimanere semplice) o fare affidamento sulla limitazione del firewall. Ciò è dovuto anche al fatto che di solito ho un sacco di applicazioni che interrogano il servizio di autenticazione da vari punti e la limitazione non è né pratica né applicabile. In questo caso devi assolutamente avere una buona password poichè sono inclini agli attacchi di forza bruta.

    
risposta data 29.06.2015 - 16:39
fonte