Password cracking tramite Rainbow Tables
Pagina 1 di 3
Abbiamo appena installato una nuova copia del nostro Windows, spendendo ore di lavoro per aggiornarlo con quel cumulo di patch comunemente detto Windows Update; scelta una robusta password alfanumerica cediamo a Morfeo, sicuri che il nostro sistema sia inviolabile.
Sicuramente molti si riconosceranno in questo esempio in cui si susseguono ore e ore spese per installare, configurare e aggiornare un sistema. A protezione del nostro lavoro poniamo diligentemente una password di dieci o più caratteri che ricordiamo a fatica perchè, consci di quanto sia rapido violare una password comune, abbiamo scelto una stringa difficile quale
%%3N1rvAn@!--Un buon lavoro, meritorio di un giusto riposo; eppure questo sistema soffre di una debolezza che ne rende le password prone a un rapido cracking.
In questo articolo discuteremo il password cracking tramite rainbow tables, una tecnica che permette di velocizzare il cracking di credenziali di certi sistemi di diversi ordini di grandezza, presentandone le peculiarità e i limiti.
Password e Hash
Prima di tutto, riflettiamo un attimo su come vengono generalmente memorizzate le nostre password: ovviamente non è desiderabile che queste informazioni sensibili siano conservate in chiaro pertanto tipicamente si preferisce utilizzare algoritmi di hashing che codificano le nostre password mediante funzioni matematiche non invertibili. Per coloro digiuni di analisi matematica, si ricorda che una funzione non invertibile è un'associazione tra due oggetti per cui non è possibile ottenere il dato di partenza tramite il solo risultato; riportato al nostro caso significa che non è possibile ottenere la password possedendo solo il valore generato dall'algoritmo di hashing (detto hash).
Sebbene molti pensino il contrario, un hash è tutt'altro che univoco e, al contrario, esistono infiniti valori che producono lo stesso hash; tuttavia in un buon algoritmo di hashing la probabilità che si trovino due stringe che producano lo stesso hash è minima, un valore infinitesimale, giustamente (in senso statistico) approssimabile a zero. Questo comporta che individuare una stringa che è codificata nello stesso hash in cui è codificata la nostra password è assolutamente improbabile.
Quando digitiamo la nostra password viene ricalcolato l'hash, mediante lo stesso algoritmo, ed è questo valore e non la password ad essere confrontata. In tal modo possiamo tranquillamente mantenere su file i nostri hash, sicuri che tra le centinaia di migliaia di miliardi di combinazioni possibili la nostra password sia inviolabile. Ovviamente un attacco che miri ad esaurire tutte le possibilità (detto "spazio delle chiavi") arriverà indubbiamente a trovare una stringa capace di produrre il nostro stesso hash ma, da quanto appena detto, la nostra assicurazione è che le combinazioni sono in numero tale da non permettere questa operazione in tempi ragionevoli.
Rainbow Tables
Introduciamo le rainbow tables; l'idea fu concepita negli anni ottanta dal matematico americano Martin Hellman, ma ha avuto la sua vera diffusione attraverso i successivi studi di Philippe Oechslin.
Alla base vi è una considerazione piuttosto semplice e intuitiva: "perchè calcorare ogni volta tutte i possibili hash sino a ricavarne uno che corrisponda alla password cercata?" Se avessi anzitempo calcolato e memorizzato ogni possibile combinazione in una sorta di elenco telefonico dell'algoritmo, potremmo in maniera più agile eseguire una ricerca nell'archivio e trovare l'hash giusto. Difatti il costo di un password cracking è principalmente funzione del calcolo degli hash, che ricordiamo essere prodotto di complessi algoritmi matematici; rispetto a quest'ultimo, il confronto tra stringhe per determinare se l'hash (la fase di ricerca) è corretto costituisce un costo temporale irrisorio.







