Brute Force

Pubblicato da Coda il 29 giugno 2009
Sicurezza Informatica

Come promesso ecco un nuovo articolo sulla sicurezza informatica. Oggi ti parlerò di una tecninca fra le più usate per recuperare password, abbastanza semplice (per chi già smanetta un po) ma purtroppo lenta: la brute force.

brute force attack

Ma che cosa è praticamente questa forza bruta? In parole povere è una tecnica che serve per recuperare quasi tutti i tipi di password provandole tutte. Proprio per questo motivo è molto lenta, bisogna fare centinaia, se non migliaia di tentativi prima di riuscire a scovare la password. Detta così può sembrare banale, ma pensa, se implementata correttamente, può diventare una vera e propria arma d’assalto. Infatti, la brute force che prova tutte le password possibili è solo una delle varie sottotecniche. Ne esistono moltissime, decisamente più veloci, come la brute force tramite dizionario, quella tramite tavole di confronto, quella che utilizza le Raimbow Tables (che a parer mio è il giusto compromesso tra velocità e spazio occupato dalle tabelle) o le Thunder Tables, quella che utilizza FPGA e la ultima nata (grazie alla nVidia e alle sue schede grafiche) la brute force che sfrutta la tecnologia CUDA.

Oggi proverò a spiegarti la brute force classica,  tramite dizionario e da tabella. Mi riservo di spiegarti quella tramite confronto e le ultime due (più giovani e potenti) in un prossimo articolo. Ma iniziamo dal principio

Brute Force classica

Questa sub-tecnica praticamente si basa sui bits: il programma inizia a provare tutte le password in ordine crescente inserendo in ordine i vari bits nel campo della password. Esempio:

1° tentativo: 0

2° tentativo: 1

3°tentativo 10

4°tentativo: 11

5° tentativo 100

E così via… Come vedi il programma va in ordine decrescente dal bit che vale 0 (sia in decimale che in binario), quindi prova il numero 1, poi il 2 (bin: 10), quindi il 3 (bin: 11) ecc.. Questo metodo è in assoluto il più lento e dispendioso che esista. Altri programmi invece sfruttano direttamente l’intero, o parte, del codice ASCII, un codice, collegato biunivocamente a un numero binario, un byte (8 bit, 8 zero/uno, esempio 10100101) che racchiude tutti i simboli che è possibile scrivere sul computer. Altri programmi invece usano solo i tasti che ci sono nella tastiera, il cosìdetto ASCII 64 (ovvero solo alcuni valori del codice ascii: alfabeto inglese maiuscolo e miniscolo, numeri, punteggiatura e spazio). Ma, se alle superiori hai studiato il calcolo combinatorio, facendo due conti si intisce che anche questo metodo è abbastanza lento:

Siccome la password potrebbe essere formata da lettere che si ripetono (esempio: “casa” si ripete la “a” 2 volte) e ovviamente conta l’ordine (infatti “casa” è diverso da “asac”) per calcolare il numero possibile di passwords si usano le disposizioe con ripetizione (D’n,k), e funzionano così:

(numero_di_caratteri_inseribili)(numero _di_caratteri_della_password)

Nel caso dell’ascii 64, se la password fosse di 8 caratteri, il numero di tentativi dovrà essere 648=2,8×1014, ovvero 28 seguito da 13 zeri. E questo solo se sappiam che la password è di un tot di caratteri (magari vediamo digitarla e contiamo gli asterischi che appaiono sullo schermo). Ma se non sappiamo quanti caratteri sono? Bisogna addizionare le varie disposizioni: (D’ 64,1)+(D’ 64,2)+(D’ 64,3)+…+(D’ 64,8). Così però, anche se abbiamo un computer superveloce ultimo modello con un core i7 montato non ce la faremo mai… Quindi le soluzioni sono 2: o miglioriamo la potenza di calcolo (tramite l’uso di un vero supercomputer o di dispositivi quali schede grafiche all’ultimo pixel o FPGA oppure botnets) oppure affiniamo la tecnica.

I programmi più famosi che fanno questo sono Cain & Abel (forse il più famoso e ricco di funzioni, solo per Windows), Jhon the Ripper (un vero e proprio programma suino nel suo compito: forza bruta pura, semplce e per questo facilmente implementabile)  e Crack (un po’ più complesso di Jhon, in quanto più personalizzabile e in grado di creare botnets per far lavorare assieme più macchine allo stesso tempo)

attack_alternatives

Brute force tramite Dizionario

Un’altro metodo è quello di usare un vero e proprio dizionario: tutte le parole (o quasi) di una lingua, di un certo ambito, raccolte in ordine alfabetico in colonna. Ma come si fa a creare un dizionario? Semplice: basta o estrarre tutt le parole da un vocabolario digitale oppure basta avviare wycd, un programma che è in grado di analizzare i vari files (documenti in formato doc, pdf, txt, foto jpg, musica in wav e mp3) e creare una wordlist personalizzata. Questo perchè molto spesso la gente mette password facili da ricordare: una data, un nome particolare. E queste cose molto spesso sono facilmente reperibili tra i files personali (tanto, in teoria, non ce li guarda nessuno). Non è così?

Il compito del programma è provare ogni singola password. Tra i software che adoperano questa tecnica, oltre a quelli già citati sopra aggiungo Hydra (che ha anche un interfaccia grafica)

Brute Force tramite Raimbow Tables e Thunder Tables

Ed in caso che abbiamo già l’hash in mano? se ci siamo già collegati sulla macchian tremota e abbiamo estratto il database delle password? Cosa facciamo? In questo caso la miglio cosa è usare le tabelle Arcobaleno e Tuono. In un vecchio articolo avevo spiegato come un computer salvava le password (se non ti ricordi, dagli una scorciata). Noi quindi possediamo l’hash della password e non la vera e propria password. Ma pensiamo un attimo una cosa: se dovessimo usare la tecnica dizionario il nostro programma dovrebbe leggere, dal file di testo, la password, convertirla in hash e confrontarla. Ma questo processo è relativamente lungo. L’hard disk ha una velocità di lettura/scrittura lenta (SATA 1,5 Gbps), così come le penne USB (2.0 480Mbps).. Ci serve qualcosa di più veloce… come i blocchi di RAM (in dual channel) in grado di raggiungere velocità quali 1,5 Gbps (DDR3) x2, per un totale di 3 giga al secondo massimi!Inoltre per diminuire drasticamente i tempi di conversione della password da provare in hash da confrontare le Tables, oltre ad avere la colonna di vocaboli, a fianco hanno anche la colonna di hash già convertiti. Percio il programma precaricherà il dizionario all’interno della RAM, quindi ci sarà un confronto ultraveloce, in modo randomico (quindi non ci sono tempi di accesso o ritardi causati dalla deframmentezione dei files, come nell’hard disk), alla ricerca della password giusta. Questa tecnica però ha 2 pecche:

1) Vale solo per un tipo di hash: essendoci solo una conversione password in chiaro–>hash è possibile attaccare un solo tipo di sistema. Per questo esistono le tabelle per l’md5 (utilizzato dai database MySQL e da alcuni sistemi Linux), quelli per il LM (utilizzati da Windows Xp), quelli per il NTLM (utilizzati da Vista e Seven), quelli per il DES (utilizzati da bsd, e i restanti Linux), ecc

2)Visto che gli hash (come ho spiegato qua) sono (più) lunghi sempre un tot, indipendentemente dalla lunghezza della password, lo spazio occupato dalle tabelle è enorme e aumenta a dismisura a secondo della lunghezza: le mie Raimbow Tables personali sono da 1 a 14 caratteri (basati su dizionario) per Windows Xp e sono grandi 700Mb. Ma normalmente una tabella supera, anche di molto, i 10 Giga, aggirandosi addirittura attorno ai 50Gb. Le tabelle serie poi sfiorano il tera…

Tra i programmi citabili che utilizzano le Raimbow Tables troviamo Raimbow Crack (che è in grado anche di generare le tabelle) e Ophcrack (che implementa, oltre alle Raimbow Tables, una tecnica di Brute Force tramite dizionario che vienne avviata durante il precaricamento in RAM delle tavole).

Per oggi è tutto. Nel prossimo articolo spiegherò la brute force per confronto, tramite FPGA e CUDA. Spero di essere stato chiaro ed esauriente. Alla prossima!

Articoli Correlati:

  • Nessun articolo correlato.

Nessun commento

Lascia un commento

WP_Big_City

Please don't insert text in the input below. If you do it you can't comment.