sabato 24 Agosto 2019
ip: 34.236.38.146

Download in corso

Softwareone.it

Password cracking tramite Rainbow Tables

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.

Abbiamo appena installato una nuova copia del nostro sistema per esempio windows, ore per aggiornarlo, il fantastico Windows Update.

Scelta una password alfanumerica, sicuri che il nostro sistema sia inviolabile.

Sicuramente si susseguono ore e ore spese per installare, configurare e aggiornare un sistema. A protezione del nostro lavoro poniamo diligentemente una password che ricordiamo a fatica, consci di quanto sia rapido violare una password comune, abbiamo scelto una stringa difficile

quale%%3N1rvAn@!--

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.

Una funzione non invertibile è un’associazione tra due oggetti per cui non è possibile ottenere il dato di partenza tramite il solo risultato, 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.

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.

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

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.

Accettata questa idea, sussiste un solo problema: un archivio tale da esaurire lo spazio delle chiavi di un algoritmo degno di questo nome sarebbe nell’ordine delle centinaia di terabyte (1 terabyte = 1024 gigabyte); un comune elaboratore non possiede nè sufficiente memoria nè sufficiente potenza per analizzarla.

L’idea di Oechslin

Philippe Oechsin, un esperto in sicurezza informatica, ha ideato un procedimento per ridurre un archivio di hash in una tabella molto decisamente più piccola e manegevole.

In questo contesto forniremo solo una semplificata idea di come funzioni il procedimento.

Iniziamo calcolando l’hash corrispondente alla nostra password, definiamo una formula di riduzione R tale che converta un hash in una stringa appartenente ad un certo insieme prestabilito (stringhe alfanumeriche di otto caratteri, stringhe con punteggiatura di sei caratteri, ecc…).

Ovviamente il valore generato non sarà la password di partenza in quanto abbiamo già ribadito l’impossibilità di invertire una funzione di hashing.

Iterando k volte il procedimento genereremo una catena “password -> hash -> password -> hash” di migliaia di elementi, tra tutti questi, memorizziamo su disco solo il primo e l’ultimo, in tal modo abbiamo ottenuto un risparmio di memoria pari a k volte.

La formula a seguire determina la nostra serie.

Pubblicità