it-swarm-eu.dev

L'uso di haveibeenpwned per convalidare la sicurezza della password è razionale?

Ho sentito sempre di più che elenco password immesso è un buon modo per verificare se una password è abbastanza forte da usare o meno.

Sono confuso da questo. La mia comprensione è che l'elenco che è stato generato proviene da account che sono stati compromessi, sia perché sono stati memorizzati in testo semplice, utilizzando un codice debole, o per qualche altro motivo. Questo sembra avere poco a che fare con la forza della password per me. Potrebbero esserci password molto forti che sono state memorizzate in testo semplice, e quindi compromesse, e sarebbe davvero bello usarle fintanto che non fossero usate in combinazione con l'email/nome utente originale. Il fatto che i loro hash siano noti (ma è noto qualsiasi hash di una determinata password!) Non importa se il luogo in cui li memorizzi è salato. Anche se davvero non fa male escludere queste password, come forse un hacker inizierebbe con questo elenco quando viene forzato brutalmente, ed è facile sceglierne un'altra.

Ma l'inverso è quello che mi preoccupa: ci saranno sempre delle password molto facili da decifrare che non sono nella lista. "longishpassword" al momento non ha un account che utilizza questa password che è stata colpita da una perdita. Ciò non significa tuttavia che se dovesse verificarsi una perdita di hash, questa password sarebbe sicura. Sarebbe molto facile da rompere.

Qual è la logica alla base del controllo di una password (senza e-mail/nome utente) rispetto all'elenco visualizzato per vedere se è degno di essere utilizzato? È un buon uso dell'elenco o è errato?

modificare:

È troppo tardi per cambiare l'ambito della domanda ora, ma volevo solo essere chiaro, questa domanda veniva dal punto di vista del controllo delle password di altre persone (ad esempio quando gli utenti si registrano sul tuo sito Web o vengono fornite persone nella tua organizzazione Account AD) non per convalidare la forza di una password personale. Quindi qualsiasi commento che dice "usa solo un gestore di password" non mi è stato utile.

È sicuramente uno dei tuoi passaggi di convalida, ma non puoi fidarti completamente.

Dato che la maggior parte degli utenti riutilizza le password e crea le password utilizzando una base di parole relativamente piccola, un attacco del dizionario è un mezzo particolarmente efficace per indovinare le password. Poiché HIBP viene aggiornato regolarmente, avrà molte password in uso frequente e quindi probabili candidati che un utente malintenzionato di dizionario cercherebbe. Pertanto, è un buon punto di partenza da verificare. Tuttavia, solo perché la tua password non è nell'elenco, ciò non significa che la tua password non verrà indovinata facilmente. È solo che le password conosciute sarebbero in cima alla loro lista di password da provare insieme a testo estratto da Internet, combinazioni di parole con cifre/simboli, trasposizioni, ecc. Man mano che si verificano più perdite di password, HIBP e altri strumenti simili diventano più utili, e gli elenchi di password degli hacker per provare a diventare più efficaci anche per loro.

Sono stato piuttosto sorpreso di vedere alcune password che conosco sono abbastanza facili da indovinare e vengono sicuramente utilizzate in più siti, non nell'elenco HIBP, quindi posso garantire che non è il fattore determinante della validità della password (proprio come nell'esempio nella domanda ). Tuttavia, se mi è venuta in mente quella che penso sia una password complessa, ed è nell'elenco, sicuramente non la userei.

27

"Forte" ha sempre avuto l'intenzione di significare "non indovinabile". Lunghezza e complessità aiutano a rendere una password più "non indovinabile", ma una password lunga, complessa, ma comunemente usata è altrettanto debole di Pa$$w0rd.

Se una password è nell'elenco HIBP, gli aggressori sanno che la password ha una maggiore probabilità di essere scelta da persone, quindi potrebbe essere riutilizzata. Quindi quelle liste verranno colpite per prime.

Quindi, se la tua password è nella lista, allora è "indovinabile".

Se la tua password non è nell'elenco, quindi da un approccio di attacco del dizionario, è meno indovinabile e non quello che gli altri hanno scelto, e per implicazione (per quanto valga la pena), è "meno indovinabile ". Molti altri fattori, ovviamente, possono rendere la tua password "più indovinabile", anche se non è nell'elenco HIBP.

Come sempre, una password generata casualmente è la più "non indovinabile" e una lunghezza massima e una password generata casualmente è estremamente difficile da forzare. E se lo stai generando in modo casuale, perché non andare alla massima lunghezza?

69
schroeder

Per rispondere correttamente a questa domanda, devi pensare come l'hacker che vuole elaborare la tua password.

Ma per evitare di dover immergerci direttamente in un modo matematico di pensare, iniziamo invece pensando a un concorrente nello show di gioco Lego Movie "Dove sono i miei pantaloni?"

Ovviamente, quando il concorrente vuole trovare i propri vestiti, la prima cosa che faranno è andare nel proprio guardaroba. Se ciò non si rivela fruttuoso, potrebbero controllare i loro cassetti, seguiti dalla sedia nell'angolo della stanza, seguita dal cesto della biancheria e forse dal cesto del cane se il cane è del tipo cattivo che ruba i pantaloni. Succederà tutto prima che inizino a guardare in frigo.

Quello che sta succedendo qui è ovviamente che il concorrente guarderà prima nei posti più probabili. Avrebbero potuto sistematicamente passare tutti i piedi quadrati della casa in una griglia, nel qual caso avrebbero dovuto controllare in media metà della casa. D'altra parte, con questa strategia hanno buone probabilità di farlo al primo tentativo, e certamente non si aspetterebbero di coprire metà della casa.

Un hacker vuole idealmente fare la stessa cosa. Supponiamo che sappiano che la password che stanno cercando è lunga 8 lettere minuscole. Potrebbero provare a lavorarci uno alla volta, ma ci sono 208.827.064.576 opzioni possibili, quindi una determinata ipotesi completamente casuale ha circa 1 su 208 miliardi di probabilità di avere ragione. D'altra parte, è risaputo che "password" è la password più comune. (eccetto quando è vietato) In effetti, guardando i dati di haveibeenpwned, la possibilità che la risposta giusta sia "password" è circa 1 su 151. Non 151 miliardi, solo 151. Quindi è oltre un miliardo di volte più probabile di qualche ipotesi casuale e sarebbero stupidi a non cominciare. (E ovviamente, poiché vuoi che la tua password non venga trovata, vuoi evitare di scegliere con cosa iniziare)

Ora, la domanda è se questo va oltre la "password". Ne vale la pena mentre si lavora attraverso un elenco di password trapelate? Per un po 'di informazioni, considera questa citazione da la versione originale ha scritto .

Sono passato all'elenco Anti Pubblico che conteneva 562.077.488 righe con 457.962.538 indirizzi e-mail univoci. Ciò mi ha fornito ulteriori 96.684.629 password uniche non già presenti nei dati Exploit.in. Guardandolo dall'altra parte, l'83% delle password di quel set era già stato visto prima.

Ciò che ci dice è che, in termini approssimativi, una password selezionata casualmente ha una probabilità superiore all'80% di comparire nell'elenco. L'elenco ha alcune centinaia di milioni di voci, rispetto a poche centinaia di miliardi di opzioni per password casuali di 8 lettere. Quindi, parlando approssimativamente del nostro hacker che prova password di 8 lettere avrebbe una probabilità dello 0,1% senza la lista nel tempo in cui potrebbe ottenere una probabilità dell'80% con la lista. Ovviamente vorrebbero usarlo. E ancora, potresti anche evitarlo. Dopotutto, hai ancora centinaia di miliardi di opzioni tra cui scegliere e puoi ottenere migliaia di miliardi semplicemente andando a nove lettere!

Questa è la giustificazione per controllare l'elenco.

Ora la tua prima preoccupazione è che "ci saranno sempre molto facili da decifrare le password che non sono nella lista". Questo potrebbe essere vero. Ad esempio, "kvym" non è nell'elenco. Sono solo 4 lettere. Ci sono solo mezzo milione di password che sono 4 lettere minuscole o più brevi, quindi se è probabile che le persone preferiscano password brevi, un hacker le attraverserebbe in una frazione del tempo necessario per completare l'elenco delle perdite. È probabile che provino entrambi.

La risposta è ovvia. Usa entrambe le regole. Non utilizzare una password che è apparsa in una violazione e non utilizzare una password molto breve. Se hai una password casuale di qualsiasi lunghezza significativa, hai opzioni più che sufficienti che un hacker non ha modo di trovare scorciatoia.

30
Josiah

Altri spiegano perché è una buona idea. Prenderò una direzione diversa.

Da un punto di vista della conformità, i pertinenti standard NIST, Pubblicazione speciale NIST 800-63, Linee guida per l'identità digitale richiedono specificamente che quando gli utenti impostano le loro password, devono devono essere verificati rispetto a un elenco di password precedentemente compromesse. La sezione pertinente è SP 800-63B, Autenticazione e gestione del ciclo di vita, sezione 5.1.1.2 , che dice

Durante l'elaborazione delle richieste per stabilire e modificare i segreti memorizzati, i verificatori DEVONO confrontare i potenziali segreti con un elenco che contiene valori noti per essere comunemente usati, previsti o compromessi. Ad esempio, l'elenco PUO 'includere, ma non è limitato a:

  • Password ottenute da precedenti corpus di violazione.
  • Parole del dizionario.
  • Caratteri ripetitivi o sequenziali (ad esempio "aaaaaa", "1234abcd").
  • Parole specifiche del contesto, come il nome del servizio, il nome utente e i relativi derivati.

Se il segreto scelto viene trovato nell'elenco, il CSP o il verificatore DEVONO avvisare l'abbonato che devono selezionare un segreto diverso, DEVONO fornire il motivo del rifiuto e DEVONO che l'abbonato scelga un valore diverso.

Per definizione, qualsiasi cosa trovata tramite l'API Pwned Passwords è "valori noti per essere [...] compromessi".

Se l'organizzazione deve preoccuparsi della conformità, tenere presente che i due standard principali per le password sono incompatibili. Lo standard di sicurezza digitale (PCI-DSS) del settore delle carte di pagamento afferma che le password devono essere cambiate ogni 30 giorni, devono essere una combinazione di lettere maiuscole, minuscole, numeri e simboli, ecc., Mentre lo standard NIST afferma che le password non dovrebbero scade arbitrariamente in base alle date e non dovrebbe avere regole complesse sulla classe di caratteri consentita, ma dovrebbe essere abbastanza flessibile da consentire agli utenti di utilizzare qualsiasi combinazione di classi di caratteri.

Spetta alla tua organizzazione determinare a quali standard attenersi, ovviamente.

Se stai sviluppando per un'agenzia sotto il Dipartimento del Commercio degli Stati Uniti, devi seguire gli standard NIST, punto e basta. È la legge. (E con tutto ciò che riguarda la legge, verifica con l'ufficio legale della tua organizzazione, non fidarti ciecamente di me.)

Se stai lavorando su qualsiasi sistema che elabora le informazioni di pagamento, sei fortemente incoraggiato a seguire il PCI-DSS. Se hai solo un negozio web e stai utilizzando un processore di pagamento di terze parti, questo non si applica a te. Non ha il peso della legge, ma dovresti verificare con i tuoi avvocati, poiché il mancato rispetto del PCI-DSS potrebbe esporti negligente se le cose vanno male.

Se nessuno di questi si applica, quindi per me gli standard NIST hanno più senso. Discuti in modo approfondito con il tuo team di sicurezza, fai ricerche e scopri cosa ha più senso per te.

Come esempio per capire cosa ha più senso per te, nella mia organizzazione, non rifiutiamo le password che hanno avuto meno di 10 hit nell'API Pwned Passwords. Mostriamo ancora un messaggio di avviso che informa l'utente che, anche se la password è stata vista in una violazione, l'abbiamo ancora accettata. E, che dovrebbero prendere in considerazione il passaggio all'utilizzo di un gestore di password per generare password veramente casuali. Sono abbastanza fortunato da essere in un'organizzazione in cui possiamo parlare con gli utenti e possiamo avere discussioni oneste sulla gestione delle password. Altri dovranno adattare i loro approcci per soddisfare le esigenze della propria organizzazione.

14
Ghedipunk

Facciamo la matematica:

Supponiamo che finora ogni persona sulla terra abbia usato circa 1000 password. Ciò rende circa 10 trilioni di password, che è ~ 243 se non mi sbaglio. Scegliere any la password esistente a caso è quindi buona quanto una password di carattere sensibile al maiuscolo/minuscolo di 8-9 caratteri. Non molto bene. Vedi questa risposta .

Ciò significa fondamentalmente che, in teoria, non solo non si dovrebbe riutilizzare una password, non si dovrebbe riutilizzare una password che è mai stata usata da nessuno Le password che sono state utilizzate in precedenza sono fondamentalmente un grosso attacco di dizionario in attesa di accadere.

4
kutschkem

Devo ammettere che sono un po 'perso in ciò che significa forte al giorno d'oggi. Mi piace pensare che forte significhi una password complessa e lunga. Ma ciò non costituisce una buona password poiché può essere ancora facilmente intuibile.

Come già notato: "un hacker inizia con questo elenco quando viene forzato". Quindi, se la tua password compare in questo elenco, la tua password verrà rapidamente indovinata e questo significa che non è una buona password.

C'è una spiegazione sul sito Web quando si inserisce una stringa che non è nell'elenco:

Questa password non è stata trovata in nessuna delle password Pwned caricate in Have I Been Pwned. Ciò non significa necessariamente che sia una buona password, ma semplicemente che non è indicizzata su questo sito.

L'utilizzo dell'elenco HIBP è un modo per verificare la facilità con cui verrà indovinata la password, ma non indica la sua forza. A tale scopo è necessario utilizzare un controllo della sicurezza della password, che spesso non controlla gli elenchi delle password trapelate. Elenco delle password HIBP e un controllo della sicurezza della password si completano a vicenda.

2
LVDV

Una volta che la password viene inviata a un sito di controllo password casuale, è non più sicuro. L'uso di tali siti non è sicuramente una buona idea con le password che userete.

Non c'è nulla che impedisca a tale sito di aggiungere la password che hai testato direttamente nella lista di parole e poi venderla agli hacker.

Ancora: usare tali siti con password reali è IMHO pessima idea.

1
Firzen

Ci sono molte buone risposte in questa pagina, ma non vedo nessuno considerare il concetto di ripieno di credenziali .

Si basa sul fatto che molti utenti hanno lo stesso nome utente (indirizzo e-mail, in realtà) e password su più siti. Quindi puoi prendere un elenco di nome utente/password (simile a quello che utilizza HIBP) e semplicemente sparare tutte le coppie dell'elenco contro il sito web in cui vuoi entrare.

Assicurando che nessuno dei tuoi utenti abbia password presenti in nessuno degli elenchi noti a HIBP, blocchi in modo molto efficace questo attacco.

1
Geir Emblemsvag

Ma l'inverso è quello che mi preoccupa: ci saranno sempre delle password molto facili da decifrare che non sono nella lista. "longishpassword" al momento non ha un account che utilizza questa password che è stata colpita da una perdita. Ciò non significa tuttavia che se dovesse verificarsi una perdita di hash, questa password sarebbe sicura. Sarebbe molto facile da rompere.

Hai ragione al 100% che l'assenza dal database Pwned Passwords di HIBP non garantisce che una password sia sicura. Tuttavia, penso che tu stia sottovalutando l'enorme valore del controllo delle password rispetto al database HIBP. Il punto è che il caso di cui ti preoccupi - una password debole che non è nel database di HIBP - è considerevolmente meno comune delle password deboli che sono nell'elenco.

Troy Hunt (il creatore di HIBP) scrive ampiamente sui suoi progetti e il suo blog del 2018 "86% of Passwords are Terrible (and Other Statistics)" dà ciò che penso dovrebbe essere estremamente aperto esempio (modificato per brevità):

Ma mi sono sempre chiesto: che tipo di percentuale di password bloccherebbe [Pwned Passwords]? Voglio dire, se avevi 1 milione di persone nel tuo sistema, è un quarto di loro che utilizza password precedentemente violate? Metà? Di Più? Ciò di cui avevo bisogno per testare questa teoria era una violazione dei dati che conteneva password in chiaro, ne aveva un volume significativo e doveva essere una che non avevo mai visto prima e che non faceva parte delle fonti che usavo per creare il Pwned Elenco delle password in primo luogo.

E poi è arrivato CashCrate [una grande violazione e una perdita].

Di quei record di 6,8 milioni, 2.232.284 delle password erano in chiaro. Quindi, alla grande domanda sollevata in precedenza, quanti di questi erano già presenti in Pwned Passwords? O in altre parole, quanti abbonati CashCrate utilizzavano terribili password già note per essere state violate?

In totale, c'erano già 1.910.144 password su 2.232.284 nel set Pwned Passwords. In altre parole, l'86% degli abbonati utilizzava password già trapelate in altre violazioni dei dati e disponibili per gli aggressori in testo semplice.

Quindi, mentre hai ragione nel pensare che Pwned Passwords non risolva l'intero problema, il volume di frutta a basso carico che affronta è enorme. Combinalo con un controllo della sicurezza della password scientificamente fondato come zxcvbn e mordi un altro grosso pezzo:

password:               longishpassword
guesses_log10:          8.09552
score:                  3 / 4
function runtime (ms):  2
guess times:
100 / hour:   centuries (throttled online attack)
10  / second: 5 months (unthrottled online attack)
10k / second: 3 hours (offline attack, slow hash, many cores)
10B / second: less than a second (offline attack, fast hash, many cores)

E dopo aver buttato giù il frutto basso probabilmente hai colpito rendimenti in rapida diminuzione.

1
Luis Casillas