Server HTTP: tempo di risposta sulla richiesta di accesso

7

Ho un sito su cui vorrei impedire a un utente malintenzionato non autenticato di sapere se esiste un account. Sul sito, le password vengono sottoposte a hash con bcrypt, quindi le richieste di accesso devono eseguire un confronto bcrypt (forza 12), che richiede tempo alla CPU.

La mia preoccupazione: il tempo di risposta del server varia a seconda che l'account utente sia stato trovato o meno. Se l'account è stato trovato, viene eseguito il confronto con bcrypt per verificare la password; in caso contrario, la funzione può tornare immediatamente. Sul mio computer locale, ricevo un tempo di risposta di ~ 600ms quando viene rilevato l'account, mentre ricevo il tempo di risposta di ~ 30ms quando non lo è. In produzione, aggiungi solo la latenza di rete a entrambi.

In breve, come cliente, potrei determinare se esiste un account.

La mia domanda: è qualcosa di cui dovrei preoccuparmi? E se sì, qual è la soluzione migliore: un'attesa artificiale? Una forza di crittografia inferiore? Un algoritmo di hash più veloce?

    
posta Dev Chakraborty 19.05.2015 - 20:12
fonte

3 risposte

5

Sì, dovresti essere preoccupato per questo. È un possibile canale laterale e rivela informazioni sul tuo sistema. Alcune possibili difese (che vengono utilizzate) sono:

  • Usa un ritardo minimo di attesa pseudo casuale. (ciò significa che una risposta valida o non valida richiederà circa lo stesso tempo)
  • ha una risposta non valida esegue tutti i passaggi di calcolo di una risposta valida (solo con un valore di ritorno non valido). questo è un uso intensivo della CPU, ma spesso utilizzato per ignoranza. (gli ingegneri fanno in modo che tutto passi attraverso tutti i passaggi)
  • Ritardo Incrementale (ogni tentativo raddoppia un fattore di ritardo), ad esempio l'iPhone lo usa.
  • Utilizzare un servizio di autenticazione centrale che impiega qualche difesa contro questo. attraverso il traffico o altri mezzi.
risposta data 20.05.2015 - 00:32
fonte
1

Penso che Linux usi un ritardo crescente per gli accessi non validi. Ad esempio, se accedi con una password errata o , c'è qualcosa come un ritardo di 1 secondo al tuo primo tentativo, 2 secondi al tuo prossimo tentativo, 4 sul tuo terzo, ecc ... Questo sia nasconde il ritardo di calcolo che ti interessa oltre a rallentare le persone che cercano di estrarre il tuo processo di autenticazione per i dati.

La combinazione di questo ritardo con la chiamata a bcrypt anche per un nome utente errato dovrebbe fornire una discreta protezione contro gli attacchi temporali.

    
risposta data 19.05.2015 - 20:56
fonte
-2

Di solito non è un problema che un utente malintenzionato sappia se il login esiste o meno, quindi se non sai se è importante per te allora molto probabilmente non lo è. Ma se vuoi ancora nascondere il fatto che l'accesso non esiste, ti suggerirei di aggiungere un po 'di ritardo. Probabilmente il modo migliore sarà di controllare effettivamente alcuni hash (e infine restituire 'false' in ogni caso) in modo che il tempo di attesa dipenda effettivamente dal carico della CPU del server web, dalla forza di bcrypt, ecc.

    
risposta data 19.05.2015 - 20:19
fonte

Leggi altre domande sui tag