WEP: perchè è vulnerabile

Il WEP (ovvero Wired Equivalent Privacy) rappresenta il primo sistema standardizzato (IEEE 802.11) per la protezione delle reti wi-fi.  Poichè deve garantire un’elevata velocità di cifratura/decifratura, esso si basa sul cifrario a flusso RC4, ereditandone inevitabilmente i punti deboli. Ma in realtà ad essere vulnerabile non è l’RC4 in quanto tale, ma la sua implementazione nell’ambito del WEP. Ecco allora che può risultare conveniente spiegare come avviene la cifratura mediante tale sistema e successivamente analizzarne le vulnerabilità.

Sostanzialmente la cifratura WEP fa in modo che il testo in chiaro venga “xorato” byte per byte con il keystream (il quale, in teoria, funge da one time pad). Se però la chiave in ingresso allo pseudo random byte generator è sempre la stessa, verrà prodotto in output sempre lo stesso keystream e di conseguenza si arriverà sempre alla stessa cifratura. E’ quindi necessario usare, oltre alla chiave, un vettore di inizializzazione (IV) da 24 bit, da dare in pasto al generatore di byte pseudo casuali, ovviamente insieme alla chiave stessa. In definitiva, nel caso di WEP-128, avrò una chiave da 104 bit + i 24 bit dell’IV.

Una prima osservazione che si potrebbe fare riguarda le dimensioni effettive della chiave: spesso, infatti, si parla di 64 bit, di 128 bit o di 256 bit, ma questo è fondamentalmente sbagliato. Infatti, nel caso di WEP-128 la chiave ha dimensione, come già descritto in precedenza, pari a 104 bit e discorso analogo vale per WEP-64 (chiave da 40 bit) e WEP-256 (chiave 232 bit).  I rimanenti 24 bit, quindi, rappresentano sempre il vettore di inizializzazione.

Vediamo ora come avviene l’invio dei pacchetti nell’ambito delle reti wireless che sfruttano il WEP.

Per prima cosa concateno il pacchetto in chiaro al CRC-32 (Cyclic Redundancy Check a 32 bit) calcolato sullo stesso, in modo da garantirne (in teoria) l’integrità. 

(M || CRC(M))

dove || rappresenta l’operatore di concatenazione.

Successivamente cifro tale quantità con RC4 ed otterrò il pacchetto cifrato C

(M || CRC(M)) XOR RC4(IV || K) = C

dove K rappresenta la chiave.

Adesso invio il pacchetto cifrato C insieme all’IV, il quale però dovrà rimanere in chiaro (senza di esso l’utente non sarebbe in grado di decifrare C). Da notare che L’IV verrà anteposto a C, come mostrato in figura:

 

WEP.jpg

Una prima vulnerabilità del WEP sta proprio nell’uso dell’IV. Come già detto in precedenza, esso non è altro che un contatore a 24 bit. Il numero massimo di IV diversi che posso generare è 2^24 e la probabilità di trovare due IV che collidono (ovvero identici) è di 2^12 (per il paradosso del compleanno). Inoltre, gli IV aventi valori più bassi sono quelli più probabili (per via di eventuali reset della scheda). Ma cosa succede se trovo due IV coincidenti? Vediamo questo semplice esempio:

C1 XOR C2 = M1 XOR k XOR M2 XOR k

dove C1 e C2 sono i due pacchetti cifrati aventi lo stesso IV,  M1 ed M2 sono i pacchetti in chiaro e k è il keystream (in questo caso si è assunto per semplicità che i due pacchetti cifrati abbiano anche lo stesso keystream).

Successivamente calcolo k XOR k che da come risultato 0 (è una proprietà fondamentale dello XOR), ed infine calcolo M1 XOR 0 che da come risultato proprio M1 (in quanto lo 0 rappresenta l’elemento neutro dello XOR). Ecco allora che sono riuscito a decifrare il messaggio criptato.

Un altro punto debole del WEP riguarda l’integrità. Infatti, il CRC è un sistema di controllo che può essere facilmente eluso, in quanto presenta le seguenti limitazioni:

1) CRC(A XOR B) = CRC(A) XOR CRC(B) (proprietà di linearità);

2) non soddisfa la proprietà di resistenza alle collisioni (sia forte che debole);

3) può essere facilmente calcolato mediante circuiti elementari.

Supponiamo ad esempio di creare un pacchetto alterato, dato dallo XOR tra il pacchetto originario ed una certa quantita Q

M’ = M XOR Q.

Lo invierò in questo modo:

((M XOR Q) || CRC (M XOR Q)) XOR RC4(IV || K) = ((M XOR Q) || CRC(M) XOR CRC(Q)) XOR RC4(IV || K) = (M || CRC(M) XOR Q || CRC(Q)) XOR RC4 (IV || K)

dove (M || CRC(M)) rappresenta il pacchetto originario (comprensivo di integrity check) e Q || CRC(Q) rappresenta la quantità da me aggiunta arbitrariamente (compresinva di integrity check).  In tal modo, in fase di decifratura, il messaggio verrà considerato integro (anche se in realtà non lo è). Da notare inoltre che ((M XOR Q) || CRC (M XOR Q)) XOR RC4(IV || K) = ((M XOR Q) || CRC(M) XOR CRC(Q)) XOR RC4(IV || K) proprio a causa della linearità del CRC.

Tipi di attacco

Nel corso degli anni sono stati documentati diversi tipi di attacco perpetrati contro le reti WEP, i quali hanno decretato il completo fallimento di tale sistema per la sicurezza delle reti wi-fi, condannato ormai a scomparire. 

In particolare, nel 2001, Fluher, Martin e Shamir (coideatore dell’RSA), individuarono una vulnerabilità intrinseca al WEP che avrebbe consentito di carpire il primo byte del keystream per poi ricostruirlo interamente in modo incrementale e scoprire infine la chiave. Tale tipo di attacco si basa sull’utilizzo di pacchetti aventi tutti lo stesso header, ovvero i pacchetti LLC (Logical Link Control – standard 802.2). Nella fattispecie, il preambolo (denominato SNAP) associato a tali pacchetti è sempre il seguente: 0xAA. Basta quindi “xorare” ogni pacchetto cifrato di questo tipo con il pacchetto LLC in chiaro per ottenere il primo byte del keystream.  L’unica limitazione relativa a questo attacco consiste nell’elevato numero di IV necessari per portarlo a termine, ovvero da 500000 fino ad oltre 1000000. Capite bene che per ottenere un numero così alto di vettori di inizializzazione serve molto traffico, cosa che non sempre si verifica.

Successivamente, un altro tipo di attacco fu scoperto da Klein, che ridusse il numero di IV  a soli 25000. A Klein seguirono Tews e Weinmann, i quali misero a punto il cosiddetto attacco PWT. Esso si basa il protocollo ARP (che mappa gli indirizzi IP con i rispettivi MAC address), il quale non prevede alcun meccanismo di controllo. Proprio per questa ragione, posso forzare la rete a produrre molti pacchetti ARP, effettuando il cosiddetto ARP reinjection (prendo una ARP request e la moltiplico all’infinto reimmettendola continuamente nella rete). Però anche questo tipo di attacco ha i suoi punti deboli:

– non tutte le schede supportano il reinjection;

– è un attacco attivo (poichè fa aumentare il traffico della rete).

L’ultimo tipo di attacco che mi accingo a mensionare è denominato ChopChop. Esso permette di decriptare i messaggi senza ricostruire prima la chiave ed è l’unico tra quelli descritti a non essere stato messo a punto in ambito accademico (ecco perchè possiede scarsa documentazione).

Una volta scoperte le diverse vulnerabilità che affliggono il WEP si è deciso di correre ai ripari, implementando il cosiddetto WPA (Wi-Fi Protected Access). Anch’esso si basa sul cifrario a flusso RC4 e prevede due modalità di funzionamento: TKIP oppure PSK (Pre-Shared Key).

La modalità più sicura è certamente TKIP: per generare la chiave da cui ricavare il keystream, vado a calcolare l’hash della chiave condivisa K, della chiave di sessione Sk (ricavata dalla chiave K) e del MAC address appartenente al destinatario:

HASH(K, Sk, MAC)

L’11 novembre del 2008 è stata scoperta una vulnerabilità associata al WPA che consente di ricostruire alcune porzioni del keystream. Tale vulnerabilità affligge il servizio QoS (Quality of Service) e può essere in qualche modo limitata alzando la frequenza di ricambio della chiave di sessione Sk e disabilitando il QoS.

Anche per questa ragione, ben presto il WPA verrà abbandonato, in quanto lo standard 802.11i prevede l’uso del WPA2, basato su una variante di AES, ovvero CCMP, considerato completamente sicuro.

Nel prossimo post parlerò dell’ARP poisoning, tecnica utilizzata per gli attacchi man in the middle. A presto.

WEP: perchè è vulnerabileultima modifica: 2009-01-25T16:05:45+01:00da nazarenolatella
Reposta per primo quest’articolo

2 pensieri su “WEP: perchè è vulnerabile

  1. Molto interessante questo articolo. Complimenti. Anche io mi sono interessato all’argomento moltissimo (anche se ora, chiaramente sto puntando molto più sul wpa/wpa2).
    Se ti va di dare un’occhiata ad una guida, diciamo, “creata direttamente sul campo” ti segnalo il link all’ebook che ho creato. Insieme ad un amico ho cercato di essere il più completo e semplice possibile riguardo le procedure per il cracking delle reti wep utilizzando Backtrack, il software più diffuso per lo scopo e le tecniche di wep cracking più efficaci.
    Fammi sapere cosa ne pensi 😉

  2. Grazie per i complimenti 🙂 Beh si, in effetti la distro Backtrack è la più completa per questo genere di cose. In realtà per fare dei test sulla mia wireless ho utilizzato aircrack-ng ed airodump-ng, il primo per decifrare la chiave, il secondo per intercettare gli IVs. Per quanto riguarda il tuo ebook fammici dare un’occhiata, credo che mi potrà tornare utile. Ciao.

I commenti sono chiusi.