User Account Guessing [duplicato]

0

Sto facendo qualche ricerca sull'indagine degli account utente e ho voluto fare una domanda su alcune "cattive pratiche".

Il mio pensiero è generalmente questo è un compromesso tra grande funzionalità utente / UX e sicurezza. Ad esempio, potrei creare un servizio web utente che controlla se esiste un'e-mail, e quando un utente sta tentando di registrarsi, posso (per comodità) far sapere loro che questo account esiste già (invece di dover passare attraverso intero processo solo per scoprire alla fine l'account è preso).

Inoltre, per un modulo di accesso, che dice all'utente "questo nome utente / password non è valido" invece di "quel nome utente non esiste" contribuirà a ridurre le possibilità di un attacco.

Alla fine della giornata (per la registrazione), il mio pensiero era che il suddetto servizio web è una cattiva idea, ma ci deve essere un modo per garantire che l'utente sappia che il nome è preso / disponibile.

Quali sono alcune tecniche che le persone fanno per garantire questo? Ho pensato che le richieste di servizio che limitano la velocità dal punto di vista del server siano una buona idea. È comune? Ad esempio, ho un qualche modo di sparare a quel servizio web usando un attacco di dizionario. Dopo un tempo sufficiente, potrei avere un intero elenco di indirizzi e-mail che sono validi e ora ho solo bisogno di indovinare le password anziché entrambe. Ma se il servizio è limitato in modo tale che dopo N richieste, la risposta rallenta, o richiede un CAPTCHA, sarebbe più difficile rimuoverlo (ora ho bisogno di usare indirizzi IP univoci, ecc.)

Volevo vedere se il mio pensiero fosse giusto qui o se qualcuno potesse aggiungerlo a questo.

A proposito, ho notato che Microsoft non lo fa! Quando vai su live.com e digiti un nome utente inventato, ti dice che il nome utente non esiste. Quando provi un nome utente valido ma una password errata, ti dice che la password è sbagliata! Non è una cattiva pratica? Quali sono alcuni motivi per cui consentono questo? Perché è un servizio popolare e ottenere un indirizzo e-mail dal vivo è abbastanza semplice? O forse quello combinato con un sacco di sicurezza del server?

    
posta TekResearcher 31.07.2014 - 16:14
fonte

2 risposte

1

La limitazione della velocità è probabilmente l'unico modo pratico per mitigare questi attacchi per la maggior parte delle applicazioni pubbliche. E tu hai ragione nel senso che è un compromesso sicurezza / UX.

Dato l'esempio del modulo di accesso da solo, "il tuo nome utente o la password non sono validi" è un modo più sicuro (espone meno informazioni) per presentare le informazioni, ma la maggior parte dei servizi pubblici ha altri endpoint per verificare la presenza di nomi utente in ogni caso.

L'autore dell'attacco può, ad esempio:

  • verifica la presenza di un "url profilo utente" se implementato nell'app (ad esempio / utenti / profilo / NOME)
  • o fai clic sul "crea un nuovo account" endpoint e ottieni "username / email esiste" da lì.
  • oppure crea un nuovo account e premi un (ad esempio) "invia un messaggio all'utente NAME" e ottieni informazioni da quella risposta.
  • ecc., ecc.

Se aggiungi la limitazione della velocità, questi attacchi richiederanno molto più tempo (al punto da risultare poco pratici - a seconda delle dimensioni della base utente e dei dettagli di limitazione della velocità), ma in teoria è quasi sempre possibile.

È possibile filtrare zero informazioni sugli account, ma ciò renderà l'esperienza per gli utenti reali molto più confusa.

Immagina che un utente esistente tenti di creare un nuovo account: devi accettare tutte le informazioni, mostrare una pagina "Account creato", rilevare che è un duplicato e inviare via email all'utente che "hai provato a creare un account, ma già ne aveva uno ".

    
risposta data 31.07.2014 - 16:35
fonte
0

La maggior parte delle ipotesi sono corrette.
L'idea generale (per quanto riguarda l'interfaccia utente) è:

  • dare all'utente malintenzionato meno informazioni possibili
  • rallenta l'aggressore

Se le persone devono registrarsi, non è possibile evitare il messaggio di errore "Questo utente esiste già".

Se gli utenti registrati devono effettuare il login, le precauzioni generalmente raccomandate sono in effetti:

  • Segnala solo una combinazione di id / password non valida
  • Limita il numero di tentativi di accesso, quindi blocca l'account. Se non vuoi farlo:
  • Introduci un ritardo più lungo per ogni tentativo. In alternativa: ritarda ogni tentativo. Per un utente che accede, 2 secondi in più non sono un grosso problema. Per un utente malintenzionato, lo è.

Ovviamente dovresti usare anche il ritardo per la fase di registrazione.

Non tutti seguono i consigli; -)

    
risposta data 31.07.2014 - 16:28
fonte

Leggi altre domande sui tag