password-security-guideINFO

Che cos'è un attacco a dizionario? La lista non è un dizionario

Un attacco a dizionario indovina le password partendo da una lista preparata invece di provare tutte le combinazioni. Da dove arrivano davvero quelle liste, come le regole di trasformazione fanno di una parola migliaia di tentativi, e perché la lunghezza batte la complessità.

Di Eric Gerard · Editor · PwdFortress6 min di letturaPhoto: Pixabay

Probabilmente hai incontrato il termine accanto alla forza bruta, in un elenco di modi per violare le password. Quello che inganna è l'etichetta. Un attacco a dizionario non ha quasi nulla a che vedere con i dizionari, e capire che cosa contiene davvero la lista spiega perché certe password dall'aria solida cadono in pochi secondi.

Che cosa fa davvero l'attacco

Un attacco a dizionario indovina le password partendo da una lista preparata di candidate invece di percorrere tutte le combinazioni di caratteri possibili. L'attaccante prende un hash rubato, calcola l'hash di ogni candidata a turno e si ferma quando due coincidono.

È tutto il meccanismo, e la sua forza sta interamente nell'ordine. Un attacco di forza bruta è esaustivo e indifferente: troverà la tua password un giorno, e contro una password lunga, un giorno significa mai nella pratica. Un attacco a dizionario è selettivo. Spende ogni tentativo su qualcosa che un essere umano potrebbe plausibilmente avere scelto, quindi o vince presto o non vince affatto.

I due attacchi sono dunque limitati da proprietà diverse della tua password. La forza bruta è battuta dalla lunghezza. L'attacco a dizionario è battuto dall'imprevedibilità. Non sono la stessa cosa, e una password può essere forte contro l'uno e indifesa davanti all'altro.

Le liste non sono dizionari

Ecco la parte che viene lasciata fuori. Una lista d'attacco moderna non è costruita a partire da un dizionario di lingua. È costruita a partire dalle password che persone reali hanno già usato, raccolte da violazioni precedenti.

Ogni grande fuga diventa materia prima. Le voci vengono poi ordinate in base a quanto spesso ogni password è comparsa nei dati reali, così la lista non è alfabetica ma ordinata per verosimiglianza, dalla più comune alla più rara. Raccolte pubbliche assemblate così sono liberamente disponibili, e si usano con la stessa naturalezza nei test di sicurezza legittimi e negli attacchi.

Questo ha una conseguenza su cui vale la pena fermarsi. Una password comparsa in una qualsiasi violazione, ovunque, non è indebolita solo su quel sito. È entrata nella lista, e ora sta in testa alla coda per ogni attacco futuro contro chiunque. Ecco perché chiedersi se quella password sia stata esposta è più utile che chiedersi se sembri forte.

Una tastiera di portatile retroilluminata fotografata da vicino in bianco e nero, con i tasti numerici che mostrano chiocciola, cancelletto, dollaro e percentuale sopra le cifre.
Una tastiera di portatile retroilluminata fotografata da vicino in bianco e nero, con i tasti numerici che mostrano chiocciola, cancelletto, dollaro e percentuale sopra le cifre.

Le regole: come una parola diventa migliaia di tentativi

Gli strumenti di cracking non si fermano alle parole della lista. Applicano regole di trasformazione, modifiche applicate a ogni voce per generare varianti. Quelle comuni sono esattamente quelle che indovineresti, e il problema è proprio questo:

  • iniziale maiuscola
  • aggiunta di una cifra, di un anno o di 123
  • un ! in fondo
  • sostituzione di lettere con simboli somiglianti, a con @, e con 3, s con $
  • parola rovesciata, o ripetuta

Rileggi quell'elenco pensando a un sito che ti avvisa che la password deve contenere una maiuscola, un numero e un carattere speciale. Le regole esistono a causa di quel requisito. Sono la descrizione di come le persone lo soddisfano.

Password1! e P@ssw0rd non sono astute. Sono le prime due regole applicate alla parola più comune di ogni lista, e vengono provate nei primi istanti di un attacco, non alla fine. Un attacco ibrido o combinatorio va un passo oltre e unisce coppie di voci, il che porta a tiro anche le password di due parole.

Online e offline sono due situazioni diverse

La parola attacco copre due scenari che non si somigliano affatto.

Online, contro un modulo di accesso reale, l'attaccante indovina attraverso il sito stesso. Limitazione dei tentativi, blocco degli account e rilevamento rendono impraticabile un'indovinata prolungata, ed è per questo che chi vuole lavorare su larga scala passa piuttosto al credential stuffing o al password spraying: meno tentativi, distribuiti su molti account, per restare sotto la soglia d'allarme.

Offline, contro un archivio di hash rubato, nessuno di quei freni esiste. L'attaccante ha gli hash sul proprio hardware e può indovinare alla velocità che la funzione di hash consente. È quest'ultimo dettaglio a decidere l'esito. Funzioni di hash veloci e generiche come MD5 o SHA-1 senza sale si provano a ritmi enormi su hardware grafico comune. Funzioni progettate per essere deliberatamente lente e onerose in memoria, come bcrypt, scrypt o Argon2, abbattono quel ritmo di ordini di grandezza e trasformano un fine settimana di cracking in un'operazione non conveniente.

Non sei tu a scegliere quale abbia adottato il sito. Lo scopri dopo, ed è l'argomento per dare per scontato il caso peggiore.

Come difendersi davvero

La difesa non è più complessità. È meno prevedibilità, più non riutilizzare mai nulla.

Una password generata a caso da un software non ha alcun rapporto con nessuna lista e nessuna regola la produce, quindi l'attacco semplicemente non ha nulla da provare a parte la forza bruta esaustiva, dove è la lunghezza a prendere il posto della protezione. È la risposta pratica per quasi ogni account, ed è per questo che un gestore di password conta più di qualsiasi regola sui simboli.

Se vuoi qualcosa che puoi davvero digitare a memoria, una passphrase funziona, ma a una condizione: le parole devono essere scelte a caso da una macchina. Una frase composta da te segue le forme della tua lingua e le tue abitudini. Una frase presa da un verso di una canzone, da una battuta di un film o da un libro è già in circolazione come stringa intera. La casualità deve venire da fuori della tua testa.

E l'unicità fa il resto. Se ogni account ha la sua password, un sito che conserva male gli hash e viene violato ti costa esattamente un account invece di tutti.

Dove si colloca fra gli altri attacchi

  • Forza bruta: prova tutte le combinazioni, dal vivo. Battuta dalla lunghezza. Vedi che cos'è un attacco di forza bruta.
  • Attacco a dizionario: prova una lista ordinata di password probabili e le loro varianti da regole. Battuto dall'imprevedibilità.
  • Rainbow table: precalcola il lavoro di hash e lo consulta. Battuta dal salting. Vedi che cos'è una rainbow table.
  • Credential stuffing: riproduce coppie reali di nome utente e password trapelate. Battuto dall'unicità. Vedi che cos'è il credential stuffing.

Di solito vengono descritti come quattro tecniche. Si leggono meglio come quattro scommesse diverse su che aspetto abbia la tua password, e l'unico modo di farle perdere tutte e quattro è avere una password lunga, unica, che nulla e nessuno ha previsto.

Domande frequenti

Che cos'è un attacco a dizionario?

Un attacco a dizionario è un attacco che indovina le password percorrendo una lista preparata di password probabili invece di provare tutte le combinazioni di caratteri possibili. Ogni candidata viene sottoposta ad hash e confrontata con l'obiettivo. È molto più rapido della forza bruta perché spende il tempo su password che le persone scelgono davvero, e riesce o fallisce a seconda che la tua password somigli o no a una che qualcun altro ha già usato.

È la stessa cosa della forza bruta?

No, e la differenza è l'ordine di ricerca. Un attacco di forza bruta è esaustivo: percorre tutte le combinazioni e prima o poi riuscirà, con abbastanza tempo. Un attacco a dizionario è selettivo: prova una lista scelta e si arrende quando la lista finisce. La forza bruta è limitata dalla lunghezza della tua password, l'attacco a dizionario dalla sua prevedibilità, ed è per questo che una stringa corta e casuale può sopravvivere all'uno mentre una frase lunga e memorabile cade davanti all'altro.

Da dove prendono le liste gli attaccanti?

Soprattutto da violazioni precedenti, non da dizionari di lingua. Ogni grande fuga di password diventa materia prima, e le liste che ne risultano sono ordinate in base a quanto spesso ogni password è comparsa nei dati reali, così le candidate più comuni vengono provate per prime. Raccolte pubbliche costruite in questo modo sono liberamente disponibili e si usano abitualmente sia nei test di sicurezza sia negli attacchi. È anche il motivo per cui una password esposta in una qualsiasi violazione è di fatto bruciata ovunque.

Le regole di trasformazione rendono sicure le password complesse?

No. Gli strumenti di cracking applicano regole di trasformazione a ogni parola della lista: iniziale maiuscola, aggiunta di una cifra o di un anno, un punto esclamativo in fondo, sostituzione di lettere con simboli somiglianti. Quelle regole esistono proprio perché descrivono ciò che fanno le persone quando un sito pretende una maiuscola, un numero e un carattere speciale. Una password creata seguendo i requisiti di complessità sta di solito dentro lo spazio di ricerca, non fuori.

Come mi proteggo da un attacco a dizionario?

Rendi la tua password imprevedibile invece che complicata, e non riutilizzarla mai. Una stringa lunga generata a caso da un gestore di password non ha alcun rapporto con nessuna lista, e una password unica fa sì che una violazione su un sito non possa essere ripetuta su un altro. Se preferisci una passphrase, le parole devono essere scelte a caso da una macchina, perché una frase composta da te, o presa da una canzone o da un film, è già in circolazione.