Le rainbow table permettono di decifrare le password a partire dal loro hash. Vediamo come funzionano, perché sono pericolose e come il salting le rende inutilizzabili.

L’avvento della crittografia e, in particolare, dell’hashing ha innovato profondamente la protezione dei dati sensibili nei sistemi. Sono tecnologie fondamentali per garantire la sicurezza delle password nei database, sempre più cruciali con l’aumentare delle minacce informatiche. Ma nella cybersecurity non esistono rimedi infallibili: le rainbow table rappresentano la principale minaccia proprio contro l’hashing delle password. Vale quindi la pena capire come funzionano e quali accorgimenti adottare per neutralizzarle.

  1. Cos’è una rainbow table
  2. Rainbow chain: come sono costruite
  3. La ricerca di una corrispondenza
  4. La difesa: il salting
  5. Conclusioni
Rainbow table attack: come funziona la decifrazione delle password tramite hash

Cos’è una rainbow table

Le rainbow table vengono utilizzate dagli attaccanti per decifrare le password salvate all’interno di un sistema. Nei sistemi moderni, infatti, le password non sono — o non dovrebbero essere — memorizzate in chiaro: è buona norma che il sistema esegua l’hashing della password e memorizzi solo il digest prodotto dalla funzione. Quando l’utente si autentica, il sistema esegue di nuovo l’hashing della password inserita e confronta i due digest. In questo modo le password restano protette anche in caso di data leakage.

Fondamentalmente, una rainbow table è una tabella precompilata di associazioni tra possibili password e i rispettivi hash. Una volta entrato in possesso dell’hash della password della vittima — passo preliminare all’interno della kill chain — all’attaccante basta confrontarlo con le voci della tabella per cercare una corrispondenza. Queste tabelle contengono un numero enorme di record, per massimizzare la probabilità di un match: vi si raccolgono le password più comuni, come in un attacco a dizionario, insieme a moltissime password generate casualmente.

Rainbow chain: come sono costruite

Ad ogni password non viene immediatamente associato il rispettivo hash, come si potrebbe pensare: si usa invece una tecnica di ottimizzazione basata sul concetto di rainbow chain. Le catene arcobaleno si fondano su due tipi di funzioni: le funzioni di hashing, che trasformano un testo di lunghezza variabile in una stringa di lunghezza fissa da cui non si può risalire all’originale; e le funzioni di riduzione, che al contrario mappano un hash in una stringa utilizzabile come password (per esempio troncando l’hash ai primi caratteri).

Una catena arcobaleno è quindi una sequenza alternata di testo in chiaro e cifrato: ogni catena inizia con una password, seguita dal suo hash, seguito da una nuova password ottenuta riducendo l’hash, e così via. Formalmente, data una password iniziale p, una funzione di riduzione r e una di hashing h, la catena si rappresenta come: p → h₁ = h(p) → p₂ = r(h₁) → h₂ = h(p₂) → … → hₙ = h(pₙ). Per ridurre le collisioni, a ogni passaggio di riduzione si usa una funzione diversa: è questo a dare il nome “arcobaleno”, perché si può immaginare ogni colonna di testo con un colore diverso, uno per funzione.

Il modo in cui un’applicazione gestisce e protegge le password è una delle prime cose che verifichiamo in un test di sicurezza. Il nostro Vulnerability Assessment, certificato ISO 27001, individua configurazioni deboli, hashing inadeguati e credenziali esposte nei vostri sistemi, prima che un attaccante possa sfruttarli.

Scoprite il Vulnerability Assessment

La ricerca di una corrispondenza

La ricerca di un hash in una rainbow table può essere computazionalmente molto costosa, soprattutto con le tabelle enormi usate negli attacchi reali. Per questo non viene memorizzata l’intera catena, ma solo i suoi due estremi: il record è la coppia <p, hₙ>. Quando si tenta di decifrare un hash, lo si confronta con gli hash finali presenti nella tabella; se coincide con uno di essi, si prende la password che ha dato inizio a quella catena e la si ripercorre fino a ottenere la stringa che ha generato l’hash cercato.

È qui che entra in gioco una proprietà essenziale sia delle funzioni di hash sia di quelle di riduzione: la velocità di calcolo. La catena, non essendo memorizzata per intero, dev’essere ricalcolabile rapidamente — una tecnica che sfrutta il cosiddetto compromesso tempo-memoria. L’hash target potrebbe però comparire come passo intermedio di una catena, non come estremo finale: in quel caso, per non generare un mismatch, l’hash viene ridotto e nuovamente hashato in un processo iterativo automatizzato, finché non si trova la corrispondenza. Più lunghe sono le catene, più hash vengono coperti dalla tabella — ma catene troppo lunghe penalizzano le prestazioni.

La difesa: il salting

Le rainbow table sono uno strumento pericoloso, capace di rendere trattabili computazioni che con la sola forza bruta sarebbero proibitive. Per fortuna esiste un accorgimento semplice che le rende del tutto inutilizzabili: il salting.

Il salting consiste nell’aggiungere una sequenza di caratteri generata casualmente al momento della creazione della password, prima di calcolarne l’hash. Il sistema memorizza così non l’hash della password, ma l’hash della password “salata”. Anche se un attaccante ottenesse il file degli hash, una rainbow table di sole password non basterebbe più: gli servirebbe una tabella costruita con quello specifico salt, cosa impraticabile se il salt è lungo e casuale. Il salting ha anche un effetto virtuoso: rafforza persino le password deboli. Perché sia efficace, però, servono due regole: usare un salt diverso per ogni password (altrimenti password uguali producono hash uguali) e conservare i salt in un archivio separato da quello degli hash.

Conclusioni

Le rainbow table rappresentano una minaccia concreta per le password protette da hashing: nelle mani di un attaccante in possesso di un file di hash, sono uno strumento potente per decifrarne il contenuto. Ma, come spesso accade in sicurezza informatica, esistono contromisure efficaci e alla portata di chi gestisce i sistemi. Il salting è la difesa più semplice e potente, e andrebbe affiancato all’uso di algoritmi di hashing pensati apposta per le password — come bcrypt o scrypt — e alla scelta di password complesse e diverse per ogni servizio. La sicurezza delle credenziali, in fondo, non dipende da un singolo accorgimento, ma dalla somma di più difese ben applicate.

La corretta gestione delle credenziali è una competenza tecnica che va verificata e mantenuta. La nostra Academy forma i team a comprendere e applicare le buone pratiche di sicurezza — dall’hashing robusto alla gestione delle password — trasformando la teoria in difese concrete per l’azienda.

Scoprite i corsi di formazione per le aziende


    Dichiaro di aver letto e compreso l'Informativa sul trattamento dei dati