Nota: i contenuti di questa lezione, sebbene potenzialmente funzionanti, non sono più aggiornati. HashCat è comunque oggetto della Guida al Password Cracking di HTML.it. Si rimanda alla lezione relativa ad HashCat per contenuti più aggiornati.
HashCat è un software freeware multi-piattaforma in grado di recuperare password crittografate, sfruttando il proprio processore, la versione corrente è la 0.40 ed è attestata come la più veloce al mondo nel recupero delle password.
Esistono altre due versioni di HashCat in grado di sfruttare la GPU anziché la CPU, oclHashcat-plus e oclHashcat-lite, questi software sono consigliati nel caso vogliate elaborare grandi elenchi di Hash grazie alla possibilità di suddividerne il carico.
In questo articolo ci concentreremo sulla versione storica di HashCat in grado di sfruttare esclusivamente il nostro processore, installeremo il software nella distribuzione Linux Ubuntu e vi dimostreremo come recuperare la vostra password mediante un attacco di forza brutta (Brute Force) o un attacco a dizionario. Infine faremo un breve accenno alle versione GUI, con interfaccia grafica, sicuramente più confortevole per i meno esperti.
Installazione e Primo Avvio
Attraverso il sito internet ufficiale (http://hashcat.net) scarichiamo l'ultima release disponibile, al momento della stesura dell'articolo è disponibile la versione 0.40 rilasciata il 5 Agosto 2012, procediamo a scompattare l'archivio e rendiamo eseguibili i file binari del software attraverso il seguente comando:
$ chmod +x *.bin
Possiamo quindi avviare il programma con il seguente comando:
$ ./hashcat-cliXX.bin
Andremo a sostituire il campo "XX" con il valore "32" se abbiamo un sistema a 32Bit oppure il valore "64" per i sistemi a 64Bit, aggiungendo l'opzione --help è possibile consultare la guida in linea del software.
Senza avviare la guida il software ci riporterà i parametri fondamentali per eseguire un attacco:
$ hashcat [options] hashfile [mask|wordfiles|directories]
Nei due esempi successivi vi illustreremo le opzioni disponibili, l'utilizzo delle maschere e dei dizionari di parole.
Attacco Brute Force
L'attacco a forza brutta è sicuramente il più metodo più completo per ricercare una password smarrita ma necessita di grandi risorse e di molto tempo per portare i primi frutti, è pertanto fondamentale conoscere al meglio tutte le opzioni che il software ci rende disponibili. È importante configurare correttamente i Chartsets e le relative maschere di implementazione.
HashCat incorpora otto tipi di Charsets ma ci permette di crearne dei nuovi a nostro piacimento, ogni charset ufficiale è identificato da un punto interrogativo seguito da una lettera; nello specifico:
?l = abcdefghijklmnopqrstuvwxyz
?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d = 0123456789
?s = !"#$%&'()*+,-./:;??@[]^_'{|}~
?h = 8 bit characters da 0xc0 - 0xff
?D = 8 bit characters dall'alfabeto Tedesco
?F = 8 bit characters dall'alfabeto Francese
?R = 8 bit characters dall'alfabeto Russo
Per creare dei set di caratteri personalizzati possiamo sfruttare i Charset di default oppure inserendo manualmente i caratteri che vogliamo implementare. Per ottenere un Charset completo è consigliabile abbinare i caratteri alfanumerici (le lettere minuscole dalla a alla z, le maiuscole dalla A alla Z e i numeri da 0 a 9) e i simboli, andremo quindi a creare il nostro set di caratteri personalizzati sfruttando i Charset di default che abbiamo riportato in precedenza.
--custom-charset1=?l?u?d?s
Attraverso questa opzione abbiamo definito un set di caratteri completo che spazia dalle lettere, ai numeri e ai simboli. Un set paragonabile alla codifica ASCII definito grazie all'integrazione di più Charset predefiniti, abbiamo infatti usato l'opzione "?l" che ci permette di identificare le lettere minuscole, "?u" le lettere maiuscole, "?d" i numeri e "?s" i simboli.
Terminata la premessa sui set dei caratteri possiamo affrontare il nostro primo attacco di forza brutta, HashCat supporta tantissimi algoritmi crittografici tra i principali troviamo MD5, SHA, MySQL, PHPass, ecc con anche la possibilità di determinare il salt dell'algoritmo.
In questo esempio affronteremo il recupero di una password crittografata mediante l'algoritmo MD5, memorizzata nel file hash.txt e riporteremo l'ouput della nostra analisi nel file risultato.txt.
$ ./hashcat-cliXX.bin -m 0 -a 3 --custom-charset1=?l?u?d?s --pw-min 3 --pw-max 6 hash.txt ?1?1?1?1?1?1 -o risultato.txt
Il comando lanciato si compone di diverse opzioni, inizialmente specifichiamo il tipo di algoritmo che vogliamo analizzare attraverso l'opzione "-m" nel nostro caso l'algoritmo MD5 corrisponde al valore 0, con l'opzione "-a" il tipo di attacco da effettuare, il valore 3 riferisce al software che deve effettuare un Brute Force, troveremo successivamente il Custom-Charset che vi abbiamo illustrato prima, mentre con le opzioni "--pw-min" e "--pw-max" imputiamo la lunghezza minima e massima della password.
Maggiore attenzione va riportata alla maschera, "?1?1?1?1?1?1", tale parametro permette di rendere più specifico l'attacco garantendoci di personalizzare le combinazioni di chiavi da usare per ogni singola lettera. Nel nostro esempio sfruttiamo per ogni lettera il Charset personalizzato precedentemente creato, ma supponiamo di conoscere la composizione della password da recuperare (es. cognomeXX) di essa sappiamo che i primi sette caratteri sono lettere e i rimanenti due numerici. Potremo quindi sfruttare la maschera "?l?l?l?l?l?l?l?d?d" per velocizzare notevolmente il processo, grazie all'opzione "?l" ripetuta sette volte specifichiamo che i primi caratteri solo lettere minuscole mentre con l'opzione "?d" ripetuta due volte al termine della maschera specifichiamo che gli ultimi caratteri sono numerici.
Al termine della procedura di recupero il software salverà nel file risultato.txt le password recuperate con successo, in caso di esito negativo dovremo perfezionare il sistema di bruteforcing variando le opzioni precedentemente impostate.
Attacco Dizionario
L'attacco a dizionario è indubbiamente meno complesso in termini di opzioni e comandi da imputare al software ma per ottenere un risultato soddisfacente dobbiamo possedere dei dizionari completi i quali pesano diverse centinai di mega appesantendo pertanto il carico di lavoro in fase di recupero. Possiamo trovare diversi dizionari, anche in lingua Italia, attraverso Google e i tracker di Torrent.
$ ./hashcat-cliXX.bin -m 0 -a 0 hash.txt dizionario.txt -o risultato.txt
Attraverso il precedente comando avviamo un attacco dizionario grazie alla specifica del parametro "-a" valorizzato a 0, l'opzione "-m" ci permette di specificare l'algoritmo da decifrare e successivamente valorizziamo il file contente gli hash, il dizionario e il file di output con i risultati.
Al termine della procedura il sofware ci riporterà quanti hash sono stati recuperati salvandogli nel file risultato.txt.
Interfaccia Grafica
Per usufruire dell'interfaccia grafica di HashCat dobbiamo scaricare dal sito ufficiale in pacchetto "hashcat-gui", successivamente procediamo a scompattare l'archivio e rendiamo eseguibili i file binari del software attraverso il seguente comando:
$ chmod +x *.bin
Possiamo quindi avviare il programma con il seguente comando
$ ./hashcat-guiXX.bin
Prestiamo attenzione a sostituire il campo "XX" con il valore "32" se abbiamo un sistema a 32Bit oppure il valore "64" per i sistemi a 64Bit.
Si avvierà quindi una comoda interfaccia grafica nella quale possiamo specificare il file contenente gli hash, il metodo di attacco, la maschera per il brute force o il dizionario, il tipo di algoritmo e tutte le altre opzioni gestibili anche da riga di comando. Per avviare il recupero della password premiamo il pulsante "Start" e si aprirà una nuova schermata su riga di comando con l'elaborazione degli hash e i relativi risultati.