Vietare le password specifiche?

12

Ci sono state un paio di domande su come applicare buone password, quindi ho pensato di aggiungere il mio:

Oltre a imporre un'entropia minima di Shannon, sarebbe generalmente buona norma vietare l'uso di password o elementi specifici a titolo definitivo, in base a criteri quali:

  • È apparso almeno una volta nell'elenco "Top 25" di SplashData ("password", "letmein", "qwerty")
  • Nome proprio di pubblico dominio ("parishilton", "hasselhoff")
  • "Interessante" nel campo della sicurezza IT ("correcthorsebatterystaple", "orpheanbeholderscrydoubt")
  • Qualsiasi password precedentemente utilizzata nel nostro sistema e nota per essere stata compromessa
  • ecc.

Queste sono ovviamente tutte scelte sbagliate per le password, eppure almeno la prima categoria è cattiva perché sono così comunemente usate. La lezione è ovvia; non permettere agli utenti di utilizzare queste password errate.

Sarebbe banale prendere una password inviata, spogliare spazi e convertire tutte le lettere in minuscolo, quindi eseguire un confronto "contiene" con gli elementi della lista nera, sovvertendo i tentativi di aggiungere entropia usando spazi, lettere maiuscole o aggiungendo lettere aggiuntive / numeri. Sarebbe un po 'più difficile, non impossibile, rilevare le sostituzioni delle lettere (forse una distanza minima di Levenshtein). Sarebbe anche facile memorizzare il motivo per cui la voce è bannata e restituirla all'utente, incoraggiandoli a provare qualcosa di sostanzialmente diverso e, si spera, più imprevedibile (anche se un motivo così specifico di rifiuto potrebbe fornire troppe informazioni se l'utente "è un attaccante).

Buono in teoria? Quali problemi potresti prevedere nella pratica?

    
posta KeithS 01.02.2013 - 21:53
fonte

3 risposte

10

La teoria è che ti piacerebbe eseguire gli stessi strumenti dell'attaccante. L'utente malintenzionato eseguirà un elenco di "password probabili" in base a ciò che conosce o suppone della psicologia degli utenti. John the Ripper è un noto software di cracking delle password che include molte "solite password" e regole comunemente utilizzate dagli utenti per derivare password spiritose.

Il tuo vantaggio è che il codice server ha accesso alla password stessa quando l'utente si è registrato. Contrariamente all'attaccante che deve eseguire ogni tentativo attraverso un processo di hashing potenzialmente costoso (e può essere pesante se fai girare il bcrypt l'iterazione conta alla massima potenza), il tuo codice può lavorare sulle cose reali e fare alcune ottimizzazioni come, come suggerisci, la normalizzazione in lettere minuscole.

Tuttavia penso che questa non sia una buona idea su base generale. L'autore dell'attacco non è limitato al software disponibile apertamente; egli può adattare il suo elenco di potenziali password al target effettivo (ad esempio utilizzando più derivazioni attorno ai nomi dei figli di un utente specifico la cui password è sotto il fuoco dell'attaccante). Anche tenere il passo con l'elenco delle "password deboli comuni" è probabile che sia un processo faticoso. Inoltre, l'utente stesso entrerà nel gioco: dal momento che le restrizioni delle password sono percepite come un fastidioso ostacolo da parte degli utenti, useranno tutta la loro creatività per trovare regole di generazione di password ancora più intelligenti che sfuggono ai test.

Applicare complesse regole di esclusione password sul server sta combattendo in qualche modo l'attaccante sul suo campo di battaglia e porterà l'utente alla festa; l'utente può sfortunatamente (e involontariamente) aiutare l'aggressore.

Pertanto, vorrei raccomandare contro tali regole. Ciò di cui hai bisogno è la collaborazione dell'utente, e lo avrai con trasparente sulle regole che usi; l'utente deve essere in grado di trovare una password che "supera il test" senza entrare in un processo trial-and-error. Niente è più fastidioso della scelta di dieci password successive fino a quando non viene finalmente accettato da un server rigido. Non si vuole infastidire l'utente, perché un utente infastidito aiuterà gli aggressori (non ci penserà in questo modo, ma questo è l'effetto netto). Le regole esplicite ("almeno 8 caratteri, almeno 1 cifra") sono molto meglio per la pedagogia.

E, naturalmente, niente batte l'educazione e la formazione degli utenti sui pericoli delle password non casuali.

    
risposta data 01.02.2013 - 22:10
fonte
4

Sembra buono oltre ad altre pratiche sensate (ad esempio, bcrypt).

Utilizzerei la più grande lista nera di password possibile. Se la tua password è in un elenco divulgato di 100000 password (o solo diversa da una password in tale elenco di uno o due caratteri), è una password errata e le GPU possono probabilmente sconfiggerla. È anche possibile che qualcuno stia riutilizzando quella password. L'unica buona ragione per rilassare questo criterio è se non si vuole frustrare i propri utenti che potrebbero rivolgersi a un concorrente che consente password deboli. (Anche per dichiarare l'ovvio, non usare le password dei propri sistemi per creare questo elenco di password nella lista nera - che sta memorizzando la password in chiaro un grande no.)

Inoltre, potresti voler creare una funzione di suggeritore della password che generi sempre una password che superi i tuoi criteri e che compaia quando la password fallisce. (Anche se è ancora necessario che l'utente lo digiti due volte.)

Mi assicurerei inoltre che il tuo schema non impedisca inavvertitamente passphrase forti. Ad esempio, fork scorn loss cope endow yin è una passphrase diceware grande creata casualmente e non dovrebbe essere vietata se una delle comuni password in blacklist è ridotta a fork (e la forcella è contenuta nella passphrase).

    
risposta data 01.02.2013 - 22:06
fonte
1

In realtà, Jeff Atwood sostiene questa pratica esatta nel suo post sul blog: link

Nel suo ruolo con Discourse, ha raccomandato di applicare una lunghezza minima di 10 caratteri e quindi di cercare le corrispondenze con le 10.000 password più popolari più lunghe di 10 caratteri.

Vedi il post del blog per altri buoni consigli.

    
risposta data 05.04.2017 - 03:10
fonte

Leggi altre domande sui tag