Password, hash e bruteforce

È stato pubblicata la nuova tabella relativa ai tempi necessari per un attacco di bruteforce ad un hash MD5 di password. Qualche commento qui: https://www.linkedin.com/posts/telmon_are-your-passwords-in-the-green-activity-6907960956568375296-OL2y
Per chi invece non sapesse di cosa si tratta, un minimo di spiegazione.
Quando volete autenticarvi e inserite una password, il sistema al quale vi autenticate ha bisogno di un’informazione per verificare quella password. Una possibilità è che memorizzi una copia della password e faccia il confronto. Il problema è che in questo caso, chi abbia accesso al sistema, legittimamente o perché lo ha compromesso, può avere accesso al database di tutte le password degli utenti di quel servizio.
Così, molti anni fa si è deciso che fosse buona pratica non memorizzare le password, ma gli hash delle password. Una funzione hash è una funzione “unidirezionale”: data una password è veloce calcolare l’hash, mentre dato l’hash è “troppo complesso” calcolare la password. Se si è memorizzato l’hash di una password quindi, al momento in cui poi l’utente cerca di autenticarsi, per verificare la password inserita, se ne calcola l’hash e lo si confronta con quello memorizzato. Veloce ed efficace.
Il vantaggio è che in questo modo, chi avesse accesso al sistema, non vedrebbe un database di password, ma un database di hash, dai quali, essendo la funzione “unidirezionale”, non si possono calcolare le password.
Si sono sviluppate quindi due tecniche di attacco ai database di hash. La prima è di bruteforce (forza bruta): si provano tutte le password possibili per indovinare quella giusta. Qual è lo scopo, visto che ho già accesso al sistema? Lasciando stare le ragioni “storiche” degli ambienti Unix, il problema principale gli utenti riutilizzano le password su diversi sistemi e servizi, quindi dall’avere compromesso un sistema, magari poco protetto, posso recuperare delle password che gli stessi utenti utilizzano su un sistema più protetto al quale non riuscirei altrimenti ad avere accesso.
Con un attacco di bruteforce quindi, se le password sono corte, ad esempio di quattro caratteri, non devo fare altro che calcolare l’hash di tutte le combinazioni di quattro caratteri, per vedere quale coincide con quello memorizzato nel database, e così scopro qual è la password “giusta”.
Questo è appunto l’argomento della notizia, ovvero: quanto deve essere lunga e complessa una password perché questa operazione di forza bruta richieda a sua volta troppo tempo?
È chiaro che se io ho una password composta solo di due cifre, con cento tentativi l’attaccante può provare tutte le possibilità e gli ci vuole pochissimo. Se ho una password di 18 cifre, gli ci vogliono 10^18 tentativi, che porta via un po’ di tempo. Se ho una password causale di 18 caratteri stampabili, con un buon processore attuale gli ci vuole un numero pauroso di anni per recuperare una singola password.
Nella pratica però, anche quando si ha accesso ad un database di password, si può usare un’altra tecnica, enormemente più efficiente, che sono gli attacchi “di vocabolario”. Il punto è che le persone non scelgono password casuali, perché non riescono a ricordarle. Scelgono generalmente password che derivano da un vocabolario, o variazioni di queste. Ad esempio, possono scegliere un nome proprio, o un nome comune come “camino”, o modificarlo in modi abbastanza tipici come “cam1n0”, “camino123”, “camino.01”, “camino2022”, “camino-1965” e simili. Ci sono programmi che prendono un vocabolario di una lingua, un database di nomi propri, e provano tutte queste combinazioni. Il numero di tentativi necessario per password anche lunghe è enormemente più basso rispetto a una password casuale, e la percentuale di successo comunque altissima, anche se non del 100%. Quando si ha accesso a un database di password, non ho presente quale sia la percentuale attuale, ma se ricordo bene l’ultima volta che ho guardato, si riuscivano a recuperare almeno il 70% delle password usando vocabolari e combinazioni molto semplici, quindi in tempi molto rapidi anche per password lunghe. Di solito, è più che sufficiente per qualsiasi necessità dell’attaccante.
Tutto questo naturalmente se, ripeto, si ha già avuto accesso al database delle password. Se ad esempio si è fatto un attacco che permetta di recuperarlo (ad esempio, di SQL injection) e si sono scaricati gli hash delle password di un servizio online, allora in questo modo di possono attaccare le password di altri utenti dello stesso servizio e probabilmente anche quella dell’amministratore del servizio, cosa che permette di aumentare l’ampiezza della compromissione. Per gli altri commenti rimando al post su linkedin: https://www.linkedin.com/posts/telmon_are-your-passwords-in-the-green-activity-6907960956568375296-OL2y

This entry was posted in Uncategorized and tagged , , . Bookmark the permalink.