Perché dovresti preoccuparti ogni volta che il database delle password di un servizio è fuoriuscito
"Il nostro database delle password è stato rubato ieri. Ma non preoccuparti: le tue password sono state crittografate. "Vediamo regolarmente dichiarazioni come questa in linea, tra cui ieri, da Yahoo. Ma dovremmo davvero prendere queste assicurazioni al valore nominale?
La realtà è che i compromessi del database delle password siamo una preoccupazione, non importa come una società possa provare a farla girare. Ma ci sono alcune cose che puoi fare per isolarti, indipendentemente da quanto siano pessime le pratiche di sicurezza di un'azienda.
Come si devono memorizzare le password
Ecco come le aziende dovrebbero archiviare le password in un mondo ideale: si crea un account e si fornisce una password. Invece di memorizzare la password stessa, il servizio genera un "hash" dalla password. Questa è un'impronta digitale unica che non può essere invertita. Ad esempio, la password "password" potrebbe trasformarsi in qualcosa che assomiglia più a "4jfh75to4sud7gh93247g ...". Quando inserisci la tua password per accedere, il servizio genera un hash da esso e controlla se il valore hash corrisponde al valore memorizzato nel database. In nessun caso il servizio salva la password su disco.
Per determinare la tua vera password, un utente malintenzionato con accesso al database dovrebbe pre-calcolare gli hash per le password comuni e quindi verificare se esistono nel database. Gli aggressori fanno questo con le tabelle di ricerca: enormi elenchi di hash che corrispondono alle password. Gli hash possono quindi essere confrontati con il database. Ad esempio, un utente malintenzionato conosce l'hash per "password1" e quindi verifica se gli account nel database utilizzano tale hash. Se lo sono, l'attaccante sa che la loro password è "password1".
Per evitare ciò, i servizi dovrebbero "salare" i loro hash. Invece di creare un hash dalla password stessa, aggiungono una stringa casuale alla parte anteriore o alla fine della password prima di cancellarla. In altre parole, un utente inserirà la password "password" e il servizio aggiungerebbe salt e hash una password che assomiglia più a "password35s2dg". Ogni account utente dovrebbe avere il proprio sale unico, e questo assicurerebbe che ogni account utente avrebbe un valore hash diverso per la propria password nel database. Anche se più account utilizzavano la password "password1", avrebbero avuto diversi hash a causa dei diversi valori di sale. Ciò potrebbe sconfiggere un utente malintenzionato che ha tentato di eseguire il pre-calcolo degli hash per le password. Invece di essere in grado di generare hash che si applicavano ad ogni account utente nell'intero database in una volta, avrebbero dovuto generare hash univoci per ogni account utente e il suo sale unico. Ciò richiederebbe molto più tempo di calcolo e memoria.
Questo è il motivo per cui i servizi spesso dicono di non preoccuparsi. Un servizio che utilizza procedure di sicurezza appropriate dovrebbe dire che stavano usando gli hash delle password salate. Se stanno semplicemente dicendo che le password sono "hash", è più preoccupante. LinkedIn ha cancellato le loro password, ad esempio, ma non le ha saltate, quindi è stato un grosso problema quando LinkedIn ha perso 6,5 milioni di password con hash nel 2012.
Pratiche di password errate
Questa non è la cosa più difficile da implementare, ma molti siti Web riescono ancora a rovinarlo in vari modi:
- Memorizzazione di password in testo normale: Piuttosto che preoccuparsi dell'hashing, alcuni dei peggiori trasgressori potrebbero semplicemente scaricare le password in un semplice modulo di testo in un database. Se tale database è compromesso, le tue password sono ovviamente compromesse. Non importa quanto fossero forti.
- Hashing le password senza salarli: Alcuni servizi possono cancellare le password e rinunciare, scegliendo di non usare i sali. Tali database di password sarebbero molto vulnerabili alle tabelle di ricerca. Un utente malintenzionato può generare gli hash per molte password e quindi verificare se sono presenti nel database - potrebbero farlo per ogni account in una sola volta se non è stato utilizzato sale.
- Riutilizzo dei sali: Alcuni servizi potrebbero utilizzare un salt, ma potrebbero riutilizzare lo stesso sale per ogni password dell'account utente. Questo è inutile: se lo stesso sale fosse usato per ogni utente, due utenti con la stessa password avrebbero lo stesso hash.
- Usando i sali corti: Se vengono utilizzati sali di poche cifre, è possibile generare tabelle di ricerca che incorporano ogni possibile sale. Ad esempio, se una singola cifra fosse utilizzata come sale, l'utente malintenzionato potrebbe facilmente generare elenchi di hash che includevano ogni possibile sale.
Le aziende non ti diranno sempre l'intera storia, quindi anche se dicono che una password è stata sottoposta a hash (o hash e salata), potrebbero non utilizzare le migliori pratiche. Scambia sempre sul lato della cautela.
Altre preoccupazioni
È probabile che il valore salt sia presente anche nel database delle password. Questo non è poi così male, se per ogni utente è stato utilizzato un valore di sale unico, gli hacker dovrebbero spendere enormi quantità di potenza della CPU per rompere tutte quelle password.
In pratica, così tante persone usano password ovvie che sarebbe probabilmente facile determinare le password di molti account utente. Ad esempio, se un utente malintenzionato conosce il tuo hash e conosce il tuo sale, può facilmente verificare se stai utilizzando alcune delle password più comuni.
Se un utente malintenzionato ce l'ha con te e vuole crackare la tua password, può farlo con la forza bruta purché conoscano il valore del sale, che probabilmente fanno. Con l'accesso locale e offline ai database delle password, gli aggressori possono utilizzare tutti gli attacchi di forza bruta che desiderano.
Altri dati personali potrebbero anche fuoriuscire quando viene rubato un database di password: nomi utente, indirizzi email e altro. Nel caso della fuga di Yahoo, sono state trapelate anche domande e risposte sulla sicurezza, che, come tutti sappiamo, rendono più facile rubare l'accesso all'account di qualcuno.
Aiuto, cosa dovrei fare?
Qualunque cosa un servizio dice quando viene rubato il suo database delle password, è meglio presumere che ogni servizio sia completamente incompetente e agisca di conseguenza.
Innanzitutto, non riutilizzare le password su più siti Web. Utilizzare un gestore di password che generi password univoche per ciascun sito Web. Se un utente malintenzionato riesce a scoprire che la propria password per un servizio è "43 ^ tSd% 7uho2 # 3" e la si utilizza solo su quel sito Web specifico, non ha appreso nulla di utile. Se si utilizza la stessa password ovunque, potrebbero accedere agli altri account. Questo è il modo in cui gli account di molte persone vengono "hackerati".
Se un servizio è compromesso, assicurati di cambiare la password che usi lì. Dovresti anche cambiare la password su altri siti se la riutilizzi lì - ma non dovresti farlo in primo luogo.
Dovresti anche considerare l'utilizzo dell'autenticazione a due fattori, che ti proteggerà anche se un utente malintenzionato impara la tua password.
La cosa più importante è non riutilizzare le password. I database delle password compromessi non possono farti male se si utilizza una password univoca ovunque, a meno che non memorizzino qualcos'altro importante nel database, come il numero della carta di credito.
Immagine di credito: Marc Falardeau su Flickr, Wikimedia Commons