Domanda:
Non è sicuro mostrare il messaggio che il nome utente / account non esiste all'accesso?
styfle
2017-04-25 17:41:56 UTC
view on stackexchange narkive permalink

Secondo le Linee guida per l'autenticazione OWASP, "Un'applicazione dovrebbe rispondere con un messaggio di errore generico indipendentemente dal fatto che l'ID utente o la password non fossero corretti. Inoltre, non dovrebbe fornire alcuna indicazione sullo stato di un account. "

Tuttavia, ho riscontrato che molte app web popolari violano questa linea guida mostrando un messaggio che indica che l'account non esiste.


google


microsoft


slack


Allora cosa sta succedendo qui? Google, Microsoft e Slack stanno facendo qualcosa di insicuro o le linee guida OWASP sono inutili?

Nota che tutti questi richiedono solo le tue credenziali di autenticazione (ad es. Password) * dopo * che hai inserito il nome utente.
Corretta.Sembra che siano gentili con l'utente che digita erroneamente il proprio account per farglielo sapere immediatamente, ma viola chiaramente le linee guida OWASP.
Variazioni su questa domanda sono state poste [molte volte.] (Https://security.stackexchange.com/q/62661/56961) C'è anche un tag per [tag: user-enumeration]
["Informa l'utente quando la sua email non esiste"] (https://blog.codinghorror.com/the-god-login/)
Oltre al compromesso sicurezza / usabilità c'è anche il punto che tutti hanno comunque un account in quei servizi.
Come utente di molti diversi siti Web online con molti nomi utente e indirizzi e-mail diversi, voglio sicuramente sapere se il nome utente / indirizzo e-mail che sto tentando di utilizzare viene riconosciuto dal tuo sistema, indipendentemente dalla password che sto inserendo.Come utente che fatica ad accedere, è fondamentale per me sapere se è il mio nome utente o la password che è sbagliato, altrimenti mi sento frustrato.
tieni inoltre presente che almeno alcuni di essi (gmail) memorizzeranno la tua email / nome utente in un cookie di testo in chiaro, quindi tu (o chiunque ne venga a conoscenza) non dovrai nemmeno preoccuparti di controllare - sapranno per impostazione predefinita esattamente quale sia il tuo nome utenteè.
Non vale la pena rispondere, ma consiglio di leggere [questo post del blog del team di mailchimp] (https://blog.mailchimp.com/social-login-buttons-arent-worth-it/).Si concentra sui problemi riscontrati dagli utenti durante l'accesso e su come li hanno affrontati.Uno dei punti riguarda la tua stessa domanda.Messaggi di errore generici e specifici durante l'accesso.** TLDR **: costa agli utenti.Hanno deciso, proprio come i grandi giocatori, che per loro la sicurezza extra non vale la perdita di utenti in cui incorre.
Se vuoi scoprire se esiste un account, prova a registrarti con quel nome utente.
Tieni presente che l '"URL del team" su Slack _non_ è il tuo nome utente.Dopo aver selezionato un server slack, ti viene chiesto di inserire la tua coppia nome utente / password personale.
Con i provider di posta elettronica potresti semplicemente inviare un'e-mail e attendere la risposta.Se ricevi un errore di consegna della posta, significa che il nome utente non è registrato.
Nota che tutti forniscono 2FA.
Sette risposte:
Sjoerd
2017-04-25 18:20:44 UTC
view on stackexchange narkive permalink

Questa è una considerazione tra sicurezza e usabilità, e quindi non c'è davvero una risposta giusta qui. Quindi ecco la mia opinione.

Se puoi mantenere segreti i nomi utente, fallo. In questo caso non c'è modo di capire se esiste un nome utente e il login reagisce allo stesso modo indipendentemente dal fatto che un utente esista o meno. Tieni presente che questo significa anche impiegare la stessa quantità di tempo per restituire un messaggio di errore.

Questo comportamento potrebbe non essere possibile. Ad esempio, se gli utenti possono registrarsi e scegliere il proprio nome utente, è necessario avvisarli quando un nome utente esiste già nel sistema. In tal caso, rendere il login il più semplice possibile fornendo il messaggio di errore più dettagliato. Se qualcuno riesce a capire se un utente esiste utilizzando la funzione di registrazione, non serve nasconderlo al login.

_ "Se qualcuno può capire se un utente esiste utilizzando la funzione di registrazione, non serve nasconderlo all'accesso." _ - puoi farlo anche tramite la funzione di reimpostazione della password o dall'elenco dei profili pubblici (Twitter)o inviando e-mail ed è possibile ottenere l'errore "messaggio non recapitabile" dal server di posta (Gmail)
"Se qualcuno riesce a capire se un utente esiste utilizzando la funzione di registrazione, non serve nasconderlo all'accesso", a meno che la registrazione non sia controllata da un captcha e il login non lo sia.
@JanDvorak Quindi questo è un problema separato e piuttosto serio con il login per cominciare.Se non c'è un modo per limitare i tentativi di accesso, allora hai già problemi molto più seri del semplice "capire i nomi utente".
Anche se presumo che i miei utenti abbiano password complesse e mi assicuro che lo facciano davvero?Voglio dire, del tipo che impiega quaranta miliardi di anni per indovinare, il doppio del tempo che KeePass genera normalmente e pieno di vari ASCII?Diciamo che i miei limiti di velocità mi proteggono dagli attacchi dos ma non molto altro?
@JanDvorak Questo è il motivo per cui la maggior parte di quei siti che mostrano se l'account esiste o meno all'accesso inizieranno a eseguire un captcha all'accesso dopo alcuni tentativi falliti, quindi ottieni un paio di tentativi in cui potresti essere in grado di raccogliere nomi utente validi, madopodiché vengono rallentati dal captcha.
Accetto questa risposta perché questa riga riassume "Se puoi mantenere segreti i nomi utente, fallo".In alcuni sistemi aziendali, la funzione di registrazione non è disponibile al pubblico, quindi ci sono scenari in cui è possibile seguire OWASP.Negli esempi che ho fornito sopra, questi account potrebbero essere facilmente trovati al di fuori della pagina di accesso.
@user11153, sui sistemi in cui faccio in modo che la schermata di accesso nasconda se il nome utente non era corretto o solo la password, faccio anche in modo che la funzione di reimpostazione della password dica sempre che viene inviata un'e-mail all'indirizzo registrato, anche se non c'è un indirizzo registrato.Non ho mai realizzato sistemi che includessero server di posta, ma sono sicuro che in quei casi è possibile configurare almeno alcuni server di posta per non rivelare se i nomi utente esistono o meno (oltre al greylisting per rallentare gli attacchi di enumerazione).
Silver
2017-04-25 18:23:42 UTC
view on stackexchange narkive permalink

Non è l'unica linea guida OWASP che non è seguita dai grandi giocatori. OWASP si concentra spesso sulla sicurezza e ignora l'usabilità. Può essere una valida scelta di progettazione se combinato con una politica delle password decente, protezione brute-force (lockout, captcha, ..), MFA, monitoraggio dei tentativi di accesso non riusciti, ecc.

Prendi in considerazione l'enumerazione degli utenti non è solo il problema di essere in grado di indovinare gli account utente che puoi successivamente forzare per l'autenticazione. Alcuni siti dovrebbero proteggere la privacy dei propri utenti (adulti, partiti politici, appuntamenti, ...). Se desidero controllare se il mio capo utilizza un sito web per adulti, posso utilizzare in modo improprio una vulnerabilità dell'enumerazione degli utenti per sapere quali siti sta utilizzando.

+1 per il secondo paragrafo che solleva un ottimo punto una volta che conosci l'accesso di qualcuno
Arminius
2017-04-25 20:48:40 UTC
view on stackexchange narkive permalink

Non puoi impedirlo. (A meno che tu non sia pronto a sacrificare una quantità significativa di usabilità.)

L'enumerazione degli utenti può essere indesiderabile e ci sono effettivamente implicazioni sulla sicurezza (ad esempio, se un utente malintenzionato scopre che esiste un account valido denominato admin a cui potrebbe tentare di accedere). Ma per i siti di grandi dimensioni è qualcosa che non puoi impedire che accada.

Anche se durante l'accesso non riveli che un utente non esiste, dovrai eventualmente avvisare i nuovi utenti quando tentano registrare un nome già preso o con un indirizzo e-mail già utilizzato .

Non esiste un modo semplice per aggirare questo:

Create your Google Account

Un indirizzo e-mail già utilizzato non è sicuramente un problema se si invia semplicemente una e-mail all'indirizzo indicato dicendo che qualcuno ha tentato di creare un account e se ce n'è già uno per quell'indirizzo.Ma ciò non impedirà loro di scoprire se il nome utente è in uso, anche se l'e-mail lo rallenterebbe piacevolmente.Se non ti dispiace dare loro suffissi numerici casuali da aggiungere ai loro nomi, allora non possono nemmeno sondare i nomi esistenti.
Dipende anche dal servizio.Su un portale di tipo Ashley Madison non vuoi confermare se un indirizzo e-mail è connesso o meno.Per un nome utente "tom" questo è un problema minore.
C'è un modo per fermare anche l'enumerazione "crea utente".Puoi consentire nomi utente duplicati.ad es. enumera gli utenti con una chiave surrogata e consenti lo stesso nome utente a utenti diversi.E poi incrocia le dita che due utenti non sceglieranno la stessa password :).Piuttosto una soluzione orribile, ma possibile.
@grochmal Ecco perché ho detto "no * user-friendly * way".Il punto principale è che questo problema non dovrebbe essere una priorità assoluta per la maggior parte delle applicazioni.Consentire l'enumerazione degli utenti e degli indirizzi di posta elettronica in un modo o nell'altro è accettato da tutte le principali piattaforme che conosco.
@grochmal: Questo non ha alcun senso.Come invierai un'email a una persona se qualcun altro può acquisire esattamente lo stesso indirizzo email?
@user21820 - Non ho menzionato affatto le e-mail.Sono solo nomi utente e ID utente.L'utente quindi può o non può aggiungere un'e-mail a cui può essere contattato per reimpostazioni della password e cose simili.L'ho visto implementato (ed era ancora orribile).
@grochmal: Ah, va bene.Pensavo stessi rispondendo alla risposta, che riguarda l'email, così come la domanda.Dato che non lo sei, sono d'accordo che sia possibile (anche se sciocco).
... o rimandare il messaggio di errore all'ultimo punto possibile nel processo di registrazione per rendere l'enumerazione il più imbarazzante possibile ... neanche user friendly ...
Per essere onesti, potrebbe essere utile avere un account fittizio denominato "admin", senza alcun privilegio, in modo che il sito possa tenere traccia di chiunque tenti di accedervi.
Ben Aveling
2017-04-25 19:07:30 UTC
view on stackexchange narkive permalink

La sicurezza è relativa. È leggermente più sicuro non fornire informazioni sull'esistenza o meno dell'account. Ma ciò non significa che non sia sicuro fornire tali informazioni. È solo meno sicuro, e solo leggermente.

Questo è particolarmente vero negli esempi che dai; ci sono altri modi per trovare i nomi degli account, quindi non c'è alcun vantaggio nel cercare di nascondere se l'account esiste o meno.

Come con qualsiasi forma di sicurezza tramite oscurità, nascondere l'account names è un controllo di sicurezza debole e sono necessari altri controlli.

Mike Ounsworth
2017-04-25 19:14:41 UTC
view on stackexchange narkive permalink

Sono d'accordo con la risposta di @ Silver, ma voglio espandere. Tieni a mente il contesto; le linee guida OWASP sono intese come regole pratiche per gli sviluppatori che non sono esperti di sicurezza. Se una società di sviluppo software ha un team di architetti di sicurezza di talento, non è necessario che segua ciecamente le regole pratiche fintanto che comprendono l'intenzione dietro le regole e mitigano i rischi in altri modi.

Analogia: dovresti cambiare l'olio della tua auto ogni 3 mesi o 5.000 km, ma i meccanici spesso spingono più a lungo quando sanno che le loro abitudini di guida sono state buone. E va benissimo.


Per quanto riguarda le specifiche qui, non sono un esperto di vuln di enumerazione degli utenti, né sono al corrente del motivo per cui Google e Microsoft hanno preso le decisioni che hanno fatto, ma presumo che hanno in atto limiti di velocità e blacklist per prevenire attacchi di enumerazione degli utenti su larga scala e hanno altrimenti deciso che la comodità dell'utente vale il rischio aggiuntivo.

amonsec
2017-04-25 18:13:09 UTC
view on stackexchange narkive permalink

Probabilmente è troppo difficile dire che violano le linee guida OWASP, perché per applicazioni e servizi come Google, Microsoft, devono essere il più possibile "conformi agli utenti".

Inoltre, hanno tutti o offrire protocolli 2FA.

Probabilmente è troppo difficile parlare di violazione quando è solo una linea guida.)
Douglas Held
2017-04-27 12:07:03 UTC
view on stackexchange narkive permalink

Lo scopo di non divulgare l'identificatore utente attivo è impedire l'enumerazione di un gran numero di account.

A rigor di termini, potresti proteggerti consentendo account duplicati, ma questo è un progetto terribile e ti porterà a tutti i tipi di problemi.

Un altro modo per farlo è assegnare agli utenti un identificatore, costruendone uno inutilizzato. Ma questa è un'esperienza di usabilità così scarsa che potrebbe non valerne la pena *.

Il modo sensato per mitigare il rischio è implementare qualsiasi anti -funzione di enumerazione - ad esempio, un captcha di buona qualità, per rallentare qualsiasi tentativo di enumerazione. Quindi il design è ragionevolmente sicuro.

Il rischio residuo è quindi che lasci aperta la verifica di un account di valore molto elevato, ad esempio barack .obama @ gmail.com. Quindi mitighi questo rischio implementando anche un controllo contro i tentativi di cracking delle password, ecc.


* Salzer e Shroeder, The Protection of Information in Computer Systems, Section IA3 ) h) Accettabilità psicologica: è essenziale che l'interfaccia umana sia progettata per la facilità d'uso, in modo che gli utenti applichino regolarmente e automaticamente i meccanismi di protezione in modo corretto. Inoltre, nella misura in cui l'immagine mentale dell'utente dei suoi obiettivi di protezione corrisponde ai meccanismi che deve utilizzare, gli errori saranno ridotti al minimo. Se deve tradurre la sua immagine delle sue esigenze di protezione in un linguaggio di specifica radicalmente diverso, commetterà errori.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...