Che cos'è un attacco di dizionario?

Per autenticarsi su un sito Web, è necessario fornire un nome utente e una password. Il sito controlla quindi i dettagli di autenticazione che hai fornito confrontandoli con i dettagli che ha memorizzato nel suo database. Se i dettagli corrispondono, l'accesso è concesso. Se i dettagli non corrispondono, l'accesso viene negato.

Sfortunatamente, le violazioni dei dati sono un evento relativamente comune. Le violazioni dei dati possono essere un grosso problema perché uno dei bit di dati più comunemente presi di mira sono i dati dell'utente, in particolare l'elenco di nomi utente e password. Se le password vengono archiviate così come sono, in testo normale, chiunque abbia accesso al database può quindi accedere all'account di qualsiasi altro utente. È come se ricevessero un portachiavi con la chiave di ogni porta di un condominio.

Sebbene in primo luogo sia necessario un grande sforzo per prevenire le violazioni dei dati, si consiglia una strategia di difesa approfondita. In particolare, i consigli di sicurezza sostengono che le password dovrebbero essere sottoposte ad hashing, con solo l'hash della password mai memorizzato. Una funzione hash è una funzione unidirezionale che converte sempre lo stesso input nello stesso output. Anche un piccolo cambiamento nell'input, tuttavia, produce un output completamente diverso. Criticamente, non c'è modo di invertire la funzione e trasformare l'hash emesso nell'input originale. Quello che puoi fare, tuttavia, è hash un nuovo input e vedere se l'output corrisponde all'hash memorizzato nel database. Se lo fa conosci la password abbinata, senza mai conoscere la password effettiva.

Utilmente, questo significa anche che se un utente malintenzionato viola il database, non ottiene un elenco di password immediatamente utili, ma ottiene invece hash. Per poter utilizzare questi hash devono essere craccati.

Cracking degli hash delle password con intelligenza

Il cracking di un hash della password è il processo per capire qual è la password originale rappresentata dall'hash. Perché non c'è modo di invertire la funzione hash e trasformare l'hash nella password. L'unico modo per decifrare un hash è indovinare la password. Un metodo consiste nell'usare un attacco di forza bruta. Ciò implica letteralmente provare ogni possibile password. Ciò significa partire dalla “a”, provando ogni lettera, in entrambi i casi, e ogni numero e simbolo. Quindi l'attaccante deve provare tutte le combinazioni di due caratteri, le combinazioni di tre caratteri e così via. L'aumento delle possibili combinazioni di caratteri è esponenziale ogni volta che si aggiunge un carattere. Ciò rende difficile indovinare in modo efficiente password lunghe anche quando vengono utilizzati algoritmi di hashing veloci con potenti piattaforme di cracking della GPU.

Alcuni sforzi possono essere risparmiati osservando i requisiti della password del sito e non provando password che sarebbero troppo brevi per essere consentite o che non presentano un numero, ad esempio. Ciò farebbe risparmiare un po' di tempo e si adatta comunque alla classe di un attacco di forza bruta che prova tutte le password consentite. Gli attacchi di forza bruta mentre sono lenti, se lasciati abbastanza a lungo con molta potenza di elaborazione, alla fine decifrano qualsiasi password poiché verranno provate tutte le possibili combinazioni.

Il problema con gli attacchi di forza bruta è che non sono molto intelligenti. Un attacco dizionario è una variante molto più mirata. Invece di provare solo qualsiasi possibile password, prova un elenco di password specificate. Il successo di questo tipo di attacco dipende dall'elenco delle password e dal dizionario in questione.

Fare ipotesi plausibili

I dizionari delle password in genere sono creati da password precedentemente violate da altre violazioni dei dati. Questi dizionari possono contenere migliaia o milioni di voci. Questo si basa sul concetto che le persone non sono brave a creare password univoche. Le prove delle violazioni dei dati dimostrano che anche questo è il caso, sfortunatamente. Le persone usano ancora variazioni sulla parola "password". Altri argomenti comuni sono squadre sportive, nomi di animali domestici, nomi di luoghi, nomi di società, odio per il proprio lavoro e password basate sulla data. Quest'ultimo tende specificamente a verificarsi quando le persone sono costrette a cambiare regolarmente le proprie password.

L'utilizzo di un dizionario delle password riduce notevolmente il numero di ipotesi da effettuare rispetto a un attacco di forza bruta. I dizionari di password tendono anche a contenere sia password brevi che lunghe, il che significa che alcune password potrebbero essere provate che non verrebbero raggiunte nemmeno con anni o ipotesi di forza bruta. Anche l'approccio si rivela vincente. Le statistiche variano in base alla violazione dei dati e alle dimensioni e alla qualità del dizionario utilizzato, ma le percentuali di successo possono superare il 70%.

Le percentuali di successo possono essere ulteriormente aumentate con algoritmi di manipolazione delle parole. Questi algoritmi prendono ogni parola nel dizionario delle password e poi la modificano un po'. Queste modifiche tendono ad essere sostituzioni di caratteri standard e l'aggiunta di numeri o simboli finali. Ad esempio, è normale che le persone sostituiscano la lettera "e" con un "3" e la "s" con un "$" o aggiungano un punto esclamativo alla fine. Gli algoritmi di manipolazione delle parole creano duplicati di ciascuna voce nel dizionario delle password. Ogni duplicato ha una variazione diversa di queste sostituzioni di caratteri. Ciò aumenta notevolmente il numero di password da indovinare e aumenta anche la percentuale di successo, in alcuni casi superiore al 90%.

Conclusione

Un attacco dizionario è una variazione mirata di un attacco di forza bruta. Invece di tentare tutte le possibili combinazioni di caratteri, viene testato un sottoinsieme di combinazioni di caratteri. Questo sottoinsieme è un elenco di password che sono state trovate in precedenza e, se necessario, violate in precedenti violazioni dei dati. Ciò riduce enormemente il numero di ipotesi da effettuare coprendo le password che sono state utilizzate in precedenza e, in alcuni casi, viste spesso. Un attacco dizionario non ha una percentuale di successo così alta come un attacco di forza bruta. Ciò, tuttavia, presuppone che tu abbia tempo e potenza di elaborazione illimitati. Un attacco con dizionario tende a ottenere un tasso di successo abbastanza alto molto più velocemente di quanto possa fare un attacco di forza bruta. Questo perché non perde tempo in combinazioni di personaggi estremamente improbabili.

Una delle cose principali che dovresti fare quando ti viene in mente una password è assicurarti che non appaia in un elenco di parole. Un modo per farlo è creare una password complessa, un altro è creare una password lunga. In genere, l'opzione migliore è creare una password lunga composta da poche parole. È solo importante che quelle parole non formino una frase reale in quanto potrebbe essere indovinata. Dovrebbero essere completamente indipendenti. Si consiglia di scegliere una password di oltre 10 caratteri con 8 come minimo assoluto.