WPA crack: strumenti e tecniche

12 luglio 2011

Introduzione

Il reverse engineering è la migliore tecnica per analizzare nel dettaglio il funzionamento di un qualsiasi codice del quale non si conosca il sorgente. In questo articolo applicheremo il reverse engineering agli access point di FastWeb e Alice per analizzare e ricavare l’algoritmo di assegnazione della chiave Wirelss WPA.

Il Reverse Engineering di Pirelli Fastweb

Accendendo l’access point il primo dato più evidente è l’SSID (il nome della rete Wireless), così formato: “Fastweb-Y-xxxxxxxxxxxx” dove Y può assumere il valore 1 o 2, le x rispecchiano il MAC Address della scheda wireless interna. Dalle prime 3 coppie del MAC è quindi possibile capire il produttore dell’Access Point. Noi analizzeremo un Access Point Pirelli identificabili dalle seguenti prime tre coppie di MAC Address: 00:08:27, 00:13:C8, 00:17:C2, 00:19:3E, 00:1C:A2, 00:1D:8B, 00:22:33, 00:23:8E, 00:25:53.

I passi svolti dall’algoritmo per generare la WPA predefinita partendo dal SSID sono i seguenti:

  • Estrae una sequenza di 6 byte dal SSID;
  • Inizializza i vettori MD5 (MD5Init);
  • Inserisce i 6 byte del SSID nella sequenza di cui calcola l’hash MD5 (MD5Update);
  • Ricalcola l’hash MD5 (dell’hash precedente) utilizzando una sequenza di 20 byte predefinita (MD5Update);
  • Finalizza l’hash MD5 (MD5Finish);
  • Dall’hash finale crea una sequenza binaria ottenuta considerando i primi 4 byte più significativi dell’hash.
  • Questa sequenza viene a sua volta suddivisa in 5 gruppi da 5 bit ciascuno. I bit in eccesso vengono scartati. Ed ogni gruppo di 5 bit viene riconvertito in esadecimale (*) riottenendo una sequenza di 5 byte.
  • Somma 0×57 ad ogni byte il cui valore sia >= 0xA (**).
  • La concatenazione di queste rappresentazioni (con lettere minuscole) genera la WPA di default.

(*) Una sequenza da 5 bit può assumere il valore compreso tra 0×00 e 0×1F.

(**) L’aggiunta della costante 0×57 avviene poiché i caratteri tra 0xA e 0×60 (estremi inclusi) non sono validi nello spazio chiavi considerato, per cui aggiungendo 0×57 a 0xA si ottiene, appunto, ox61 (primo carattere ammesso dopo 0×09).

I punti 2, 3 e 4 dell’algoritmo sono svolti dalla funzione cript_it; essa riceve in input una sequenza di 6 byte ottenuta dalla parte terminale del SSID raggruppando i byte in 6 gruppi da 2 cifre cadauno (00,12,34,56,78,90) e ne calcola MD5, algoritmo crittografico di hashing realizzato da Ronald Rivest nel 1991 e standardizzato con la RFC 1321.

Per migliorare l’algoritmo hanno aggiunto un salt (unk_100220D0), ovvero una sequenza speciale prefissata di 0×14 (20) byte, da inserire nella sequenza alterando in modo originale la creazione dell’hash MD5. Di seguito è riportato

un estratto della funzione in questione

(cript_it).

Cript_it
.text:00480FF8       la      $t9, atomac
.text:00480FFC       jalr    $t9 ; atomac
.text:00481000       move    $a0, $s0
.text:00481004       lw      $gp, 0xA8+var_98($sp)
.text:00481008       move    $s0, $v0
.text:0048100C       addiu   $a0, $sp, 0xA8+var_90
.text:00481010       beqz    $s1, loc_48109C
.text:00481014       la      $t9, MD5Init
.text:00481018       jalr    $t9 ; MD5Init
.text:0048101C       nop
.text:00481020       lw      $gp, 0xA8+var_98($sp)
.text:00481024       move    $a1, $s0
.text:00481028       addiu   $a0, $sp, 0xA8+var_90
.text:0048102C       la      $t9, MD5Update
.text:00481030       jalr    $t9 ; MD5Update
.text:00481034       li      $a2, 6
.text:00481038       lw      $gp, 0xA8+var_98($sp)
.text:0048103C       addiu   $a0, $sp, 0xA8+var_90
.text:00481040       li      $a2, 0x14
.text:00481044       la      $a1, 0x10020000
.text:00481048       la      $t9, MD5Update
.text:0048104C       jalr    $t9 ; MD5Update
.text:00481050       addiu   $a1, (unk_100220D0 - 0x10020000)
.text:00481054       lw      $gp, 0xA8+var_98($sp)
.text:00481058       addiu   $a0, $sp, 0xA8+var_20
.text:0048105C       la      $t9, MD5Final
.text:00481060       jalr    $t9 ; MD5Final

Conoscendo il delay slot, è evidente che l’indirizzo della sequenza segreta è unk_100220D0. A tale indirizzo troviamo:

0x22,0x33,0x11,0x34,0x02,0x81,0xFA,0x22,0x11,0x41,0x68,0x11,0x12,0x01,0x05,0x22,0x71,0x42,0x10,0x66

Un esempio pratico possiamo farlo con una rete avente SSID: FASTWEB-1-00193EA1B2C al stringa di 6 byte corrisponderà a: 00,19,3E,A1,B2,C3.

Si calcola l’hash MD5 di questi 6 byte secondo l’algoritmo sopracitato ottenendo: a37d4267f1d177f44d352978d95558a9. Di questo hash si considerano i primi 4 byte nella rappresentazione binaria, ovvero 10100011 01111101 01000010 01100111. Prendiamo questa sequenza e creiamo cinque gruppi di 5 bit ciascuno, ottenendo: 10100 01101 11110 10100 00100, che rappresentati in esadecimale diventano 0×14 0×0D 0×1E 0×14 0×04.

La chiave WPA che si ottiene da questa sequenza di byte confrontando ciascun byte con 0×0A, se risulta essere maggiore viene aggiunto il valore hex 0×57, sarà: 6b64756b04.

Se vuoi aggiornamenti su WPA crack: strumenti e tecniche inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su WPA crack: strumenti e tecniche

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy