wep attacks
TRANSCRIPT
Sicurezza dei Sistemi Informatici IIC.d.L. in Informatica ApplicataUniversità degli Studi di Catania
Emilio PaviaMatr. A40/000107
Vulnerabilità del protocollo WEP
Colui al quale confidate il vostro segreto, diventa padrone della vostra libertà.(François de La Rochefoucauld)
Introduzione
Negli ultimi anni la mobilità è stata la protagonista indiscussa nello sviluppo delle tecnologie informatiche e delle telecomunicazioni; basti pensare alla diffusione dei telefoni cellulari e dei computer portatili. Inoltre nell'era di Internet la condivisione delle informazioni ha assunto un ruolo centrale, sia nell'ambito economicolavorativo, che in quello socioculturale. Nonostante le reti informatiche esistano da diversi anni, l'avvento dei dispositivi portatili ha messo un crisi le tradizionali tecnologie di rete, le quali presuppongono una postazione fissa all'interno di una struttura preventivamente cablata. Per superare questo limite l'industria ha presentato diverse soluzioni per la realizzazione di reti senza fili che alla fine hanno portato alla definizione dello standard IEEE 802.11 meglio noto con il nome di WLAN o WiFi.Le wireless LAN hanno il grande vantaggio di offrire connettività a tutti i dispositivi che si trovano nel raggio d'azione delle onde radio (che nel caso di reti 802.11 è comunque limitato ad una decina di metri) indipendentemente dalla loro posizione. Tuttavia questa rappresenta anche la più grande debolezza di questa tecnologia poiché espone più facilmente gli utenti a delle violazioni nella riservatezza delle comunicazioni da parte di attaccanti esterni. Infatti, mentre nelle LAN tradizionali è possibile impedire fisicamente l'accesso al mezzo trasmissivo, nel caso di reti wireless chiunque si trovi nelle vicinanze può intercettare le onde radio attraverso un'antenna.Per rendere più sicure le comunicazioni che avvengono tramite reti wireless sono stati ideati dei protocolli di sicurezza. L'idea è semplice: utilizzare dei sistemi crittografici per rendere indecifrabile ai non autorizzati ciò che per la natura stessa del mezzo trasmissivo non può essere nascosto. Il primo tentativo ha portato alla definizione del sistema WEP (Wired Equivalent Privacy) incluso nello standard IEEE 802.11 e ratificato nel 1999. Tuttavia già nel 2001 Fluher, Mantin e Shamir presentarono un attacco al cifrario RC4 utilizzato dal WEP. Per porre rimedio a questa falla di sicurezza nacque un nuovo sistema che venne incluso nello standard IEEE 802.11i e ratificato nel 2004. Questo nuovo sistema è stato implementato in parte nel protocollo WPA (WiFi Protected Access) e completamente nella sua versione successiva WPA2.Nonostante ne sia stata dimostrata l'inadeguatezza e siano state sviluppate delle alternative più sicure, il WEP è ancora oggi il sistema di protezione più utilizzato [1]. Questo può essere attribuito sia all'incompetenza degli utenti che nella maggior parte dei casi sono ignari dei rischi che corrono, sia al fatto che non si vuole investire per acquistare i dispositivi conformi al nuovo standard.
Regione WEP WPA WPA2
Londra 76 20 4
Seattle 85 14 1Tabella 1. Percentuale dei sistemi di sicurezza utilizzati nelle reti wireless protette.
Nella prossima sezione verranno analizzati i principi che stanno alla base del WEP e del cifrario in
esso utilizzato: RC4. Nelle due successive invece verranno trattati i due attacchi più importanti messi in atto contro il cifrario RC4 (Fluhrer, Mantin e Shamir, e Klein), e ne verrà discussa l'applicabilità al protocollo WEP. Infine verrà introdotto l'attacco attualmente più performante (in termini di tempo di esecuzione) contro il protocollo WEP e la tecnica dell'ARP reinjection.Il presente lavoro non ha la pretesa di essere esaustivo sugli aspetti crittografici dei vari attacchi (per eventuali approfondimenti si rimanda alla lettura dei riferimenti bibliografici). Tuttavia si vuole dare un'idea di quali siano le debolezze intrinseche di RC4 e del WEP, e in che modo sia possibile sfruttarle.
RC4 e WEP
Alla base del protocollo di sicurezza WEP c'è RC4, uno stream cipher ideato da Ron Rivest nel 1987 e tenuto segreto fino al 1994, anno in cui venne pubblicato su internet in forma anonima. Uno stream cipher è un cifrario simmetrico in cui i byte del testo in chiaro vengono combinati (con una operazione di OR esclusivo) con una sequenza pseudocasuale di byte generata dal cifrario.RC4 si compone quindi di due parti: la prima prende come parametro una chiave k (che farà da seed per il generatore) e inizializza il cifrario; la seconda genera pseudocasualmente un byte modificando lo stato interno del cifrario.
RC4KeySetup(K)for i = 0 to 255 do S[i] = ij = 0for i = 0 to 255 do j = j + S[i] + K[i mod len(K)] mod 256 swap(S[i], S[j])i = j = 0
RC4GeneratePseudorandomByte()i = i + 1 mod 256j = j + S[i] mod 256swap(S[i], S[j])return S[S[i] + S[j] mod 256]
Nel dettaglio lo stato del cifrario è dato da un array S e da due indici i e j. L'inizializzazione crea in funzione della chiave k una permutazione S della sequenza ordinata {0,1,...,255} e imposta a 0 gli indici i e j. Il generatore incrementa di volta in volta l'indice i di 1 e calcola j in funzione di S[i], scambia in S i valori alle posizioni i e j, quindi restituisce il valore S[S[i] + S[j]]. Tutte le operazioni descritte vengono ovviamente eseguite in mod N (dove N è la dimensione dell'array S, tipicamente 256).
Il protocollo WEP funziona nel modo seguente: tutti gli host della rete wireless condividono una chiave segreta k di 104 bit (in una prima versione era di 40 bit a causa delle restrizioni imposte dal governo degli Stati Uniti sui sistemi crittografici) usata per cifrare e decifrare il contenuto dei pacchetti.Il protocollo prende il plaintext M che deve essere spedito, ne calcola il checksum c(M) (usato solamente per rilevare eventuali errori di trasmissione) e concatena le due quantità, ottenendo M∙c(M). Quindi genera un vettore di inizializzazione IV (“unico”1 per ogni pacchetto) di 24 bit e gli concatena la chiave k, ottenendo la quantità IV∙k di 128 bit. Questa quantità viene utilizzata per
1 Molto spesso si tratta di un semplice contatore che potrebbe essere resettato (ad esempio) a seguito di un crash o ogni volta che viene reimpostata una connessione. L'unicità non è intesa come assenza di duplicati, ma come condizione per cui viene generato un nuovo IV per ogni pacchetto.
inizializzare il cifrario RC4 e il crittotesto viene ottenuto facendo l'OR esclusivo del messaggio con i byte generati dal cifrario:
C = M⋅c M XOR RC4 IV⋅k
Infine nel pacchetto viene spedita la quantità IV∙C. Notare che è necessario inviare in chiaro il vettore di inizializzazione per permettere al ricevente di inizializzare il cifrario e quindi di decifrare il messaggio eseguendo la stessa procedura.
L'attacco di Fluhrer, Mantin e Shamir
Fluhrer, Mantin e Shamir hanno descritto un attacco passivo contro il cifrario RC4 [2]. Essi hanno mostrato come sia possibile ricavare l'intera chiave utilizzata per inizializzare il cifrario conoscendone soltanto una parte. Il WEP è vulnerabile a quest'attacco in quanto una porzione della chiave (il vettore di inizializzazione) è spedita in chiaro al destinatario.In particolare questo attacco per ogni IV∙k sfrutta soltanto il primo byte di output del cifrario: analizzando il codice di RC4GeneratePseudorandomByte() mostrato precedentemente si nota che il primo byte generato dipende solo da tre valori: prima della chiamata alla funzione sia i che j valgono 0, quindi dopo la prima esecuzione si avrà i = 1, j = S[1] e il valore ritornato sarà S[S[1] + S[S[1]]].
1 X X+YX Y Z
Figura 1. Rappresentazione del vettore di stato S; Z è il primo byte di output.
Inoltre è stato dimostrato dagli autori che se in fase di inizializzazione l'algoritmo raggiunge uno stato in cui i è maggiore o uguale a 1, a X e a X+Y, allora con una probabilità maggiore di e3 0.05≈ nessuno di questi tre elementi prenderà parte ad ulteriori scambi. Gli autori definiscono questa situazione una resolved condition.Sebbene sembri improbabile, è abbastanza semplice procurarsi il primo byte di output del cifrario. Le reti wireless infatti utilizzano il protocollo LLC [3] (definito dallo standard IEEE 802.2) a livello data link, che prevede l'incapsulamento dei pacchetti IP in un ulteriore frame con un header SNAP (subnetwork access protocol) che ha sempre il valore 0xAA come primo byte. Facendo quindi uno XOR tra il primo byte del crittotesto e il valore 0xAA si ottiene il primo byte di output del cifrario. Inoltre, poiché il vettore di inizializzazione è per packet, il cifrario verrà inizializzato ad ogni pacchetto inviato, il quale quindi conterrà sempre il primo byte generato da RC4.Nell'articolo vengono definiti deboli quegli IV che lasciano trasparire informazioni utili ad individuare parte della chiave contenuta nel primo byte di output del cifrario. Essi sono nella forma (A+3, N1, X)2, dove A è il byte della chiave segreta che si vuole individuare, N è il modulo utilizzato dall'algoritmo (nel caso del WEP uguale a 256) e X è un valore arbitrario compreso tra 0 e 255.
2 In realtà anche altri IV che non sono in questa forma possono essere utilizzati ai fini dell'attacco. E' sufficiente per ogni IV ricevuto effettuare un test per verificare se quel valore determina una resolved condition.
Sia K la chiave in cui i primi 3 byte sono formati dall'IV e i restanti dalla chiave segreta. Supposto che si conoscano i primi A byte della chiave segreta (con A inizialmente uguale a 0), ovvero K[3]...K[A+2], si vuole individuare il valore K[A+3]. Vediamo come si comporta l'algoritmo RC4KeySetup()3 con un IV del tipo (A+3, N1, X): alla prima iterazione del secondo ciclo vengono impostati i = 0 e j = K[0] e viene fatto lo swap dei valori in S alle posizioni i e j.
0 1 2 3 A+3A+3 N1 X k[3] k[A+3]i0 j0
A+3 1 2 0Figura 2. Sopra è rappresentata la chiave di inizializzazione K, mentre sotto è rappresentata la
permutazione S dopo la prima iterazione del ciclo for nella funzione di inizializzazione.
All'iterazione successiva i viene incrementato di 1, mentre
j = K [0] S[1] K [1] = A3 1 N−1 = A3
e quindi viene fatto lo swap tra S[1] e S[A+3].
0 1 2 3 A+3A+3 N1 X k[3] k[A+3]
i1 j1
A+3 0 2 1Figura 3. Sopra è rappresentata ancora la chiave di inizializzazione k, mentre sotto è rappresentata
la permutazione S dopo la seconda iterazione del ciclo for.
Da questo punto in poi l'algoritmo di inizializzazione proseguirà differentemente in base al particolare IV in quanto i verrà ancora incrementato di 1 e j dipenderà dal valore X:
j = A3 S [2] K [2 ] = A3 2 X
Tuttavia l'attaccante conosce X (perché fa parte del vettore di inizializzazione) e conosce anche i valori k[3]...k[A+2] (per l'ipotesi sopra formulata), quindi eseguendo l'algoritmo ne può prevedere il comportamento fino al passo A+3. A questo punto l'attaccante conoscerà il valore jA+2 e il valore della permutazione SA+2. Se i primi due valori di S saranno diversi da A+3 e 0 (cioè se sono stati coinvolti in ulteriori swap) allora l'attaccante scarterà quel pacchetto e ne proverà un altro, altrimenti si avrà:
j A3 = j A2 SA2[ A3] K [ A3]
3 Anche se non specificato d'ora in avanti tutte le operazioni verranno considerate in modulo N.
ovvero
K [A3 ] = jA3 − j A2 − SA2[ A3]
Poiché i e j verranno scambiati in SA+2, si avrà che SA+3[A+3] = SA+2[jA+3], ovvero jA+3 sarà la posizione in SA+2 in cui appare il valore SA+3[A+3]. Inoltre iA+3 (uguale a A+3) avrà raggiunto la resolved condition (con riferimento alla figura 1 abbiamo infatti X = 0 e X+Y = A+3) e quindi, con una probabilità p > e3 0.05, ≈ SA+3[A+3] sarà proprio il primo byte di output del cifrario. Analizzando circa 60 IV questa probabilità sale già a 0.5. A questo punto si hanno tutti gli elementi per calcolare k[A+3], e iterando questo procedimento per tutti i valori di A l'attaccante è in grado di ricostruire l'intera chiave segreta.
L'attacco di Klein
Per recuperare un'intera chiave con l'attacco precedentemente descritto occorrono da 1.000.000 a 5.000.000 di pacchetti [4], in quanto non tutti i pacchetti contengono un IV che determina una resolved condition. Un netto miglioramento si è avuto a seguito degli studi di Andreas Klein su RC4 [5]. Egli ha dimostrato l'esistenza di una forte correlazione tra i valori osservabili i e S[S[i]+S[j]] e i valori j, S[i] e S[j] relativi allo stato interno del cifrario. Per semplicità di notazione indichiamo con k il valore S[i]+S[j], cosicché l'output del cifrario sarà dato dal valore S[k], mentre con K indichiamo la chiave di inizializzazione del cifrario.
Klein ha dimostrato4 che fissato un valore i minore di n:
P S [ j ] S[k ] ≡n i =2n
Per capire come sfruttare questa probabilità analizziamo i primi due passi dell'algoritmo di inizializzazione di RC4. Inizialmente S[i] = i per ogni valore di i; al primo passo dell'algoritmo si ha i = 0 e j = K[0], e lo scambio di S[i] con S[j].
i0 K[0]K[0] 1 2 0
Figura 4. Lo stato dell'array S dopo il primo ciclo dell'algoritmo di inizializzazione.
Al secondo passo j viene incrementato della quantità S[1] + K[1], e viene fatto lo scambio tra S[1] e S[j]. Poiché inizialmente S[i] = i, possiamo affermare che con il secondo scambio (dato che fino a quel momento sono stati cambiati solo due valori in S0) otteniamo S[1] = S[j] = j = K[0] + 1 + K[1], tranne nei seguenti casi:
a) K[0] = 1 e K[1] = 0In questo caso al primo passo j = 1, quindi viene fatto lo scambio tra S[0] e S[1], ovvero si
4 La dimostrazione prende il nome di Teorema 1 nell'articolo originale.
avrà S[0] = 1 e S[1] = 0. Al secondo passo j = K[0] + S[1] + K[1] = 1 + 0 + 0 = 1, quindi dopo lo scambio si avrà S[1] = S[j] = S[1] = 0.
b) K[0] = 1 e K[1] != 0, n1Dopo il primo passo ci troviamo nello stesso stato del caso precedente. Al secondo passo però j = K[0] + S[1] + K[1] = K[0] + K[1], e poiché questa quantità è diversa da 0 e da 1 avremo S[1] = S[j] = K[0] + K[1] (perché tutti per tutti i valori di j > 1 S[j] = j).
c) K[0] != 1 e K[1] = n1In questo caso dopo il primo passo avremo S[0] = K[0], S[K[0]] = 0 e S[1] = 1. Al secondo passo j = K[0] + S[1] + K[1] = K[0] + 1 + n1 = K[0] (perché operiamo in modulo n), e quindi S[1] = S[j] = S[K[0]] = 0.
d) K[0] != 1 e K[0] + K[1] = n1Dopo il primo passo siamo nella stessa configurazione del caso precedente. Al secondo passo j = K[0] + S[1] + K[1] = K[0] + 1 + K[1] = n1+1 = 0, e quindi S[1] = S[j] = S[0] = K[0]5.
In ogni caso il valore di S[1] dopo il secondo passaggio è una funzione di K[0] e K[1]. Inoltre Klein ha dimostrato che S[1] non verrà modificato nei passi successivi dell'inizializzazione (ovvero che j non raggiungerà mai più il valore 1) con probabilità 1/≈ e.Quando viene generato il primo byte dal cifrario abbiamo i = 1, j = S[1] e lo scambio tra S[1] e S[j]. Visto che noi siamo interessati a S[1] (per trovare K[1]) dobbiamo recuperare il valore di S[j]. Allo scopo ci viene in aiuto il teorema 1 il quale afferma che con probabilità pari a 2/n, S[j] = 1 – S[k], dove S[k] è il primo byte di output di RC4. Mettendo assieme le due probabilità otteniamo:
P S [1] = 1 −S [k ] ≈ 1.36n
La probabilità che S[1] sia un altro valore è minore di 1/n (per ogni valore degli altri n1). L'attacco quindi avviene nel seguente modo: per un certo numero di pacchetti con IV distinti viene catturato il primo byte di output del cifrario S[k] e viene calcolato S[1] = 1 – S[k]. Di tutti i possibili n valori che otteniamo, quello che si ripeterà con più frequenza sarà il valore corretto. La complessità di questa procedura è stata calcolata da Klein ed è 17≈ nln(n) che (per n = 256) equivale a circa 25.000 pacchetti (di gran lunga inferiore alla complessità dell'attacco di FMS).Si noti che in questo attacco è previsto che l'attaccante indovini K[0] affinché possa recuperare K[1] (infatti S[1] è funzione di entrambi). Nel caso del WEP però questa condizione è facilmente raggiungibile in quanto i primi 3 byte della chiave vengono sempre mandati in chiaro.
Estendiamo adesso l'attacco a tutti i byte della chiave: dopo aver ottenuto K[0] e K[1] supponiamo di voler recuperare K[2]6. Analogamente a prima abbiamo che nella fase di inizializzazione del cifrario S[2] = f(K[0], K[1], K[2]) e che con probabilità 1/≈ e non verrà più modificato negli n – 3 passi
5 L'articolo originale riporta a pagina 6 punto d S[1] = K[1], ma seguendo la logica dell'algoritmo sembra essere un'inconguenza.
6 In realtà nel caso del WEP anche K[2] è già disponibile, me per analogia questo ragionamento può essere esteso a tutti i K[i].
successivi. Osservando il secondo byte di output del generatore (grazie al teorema 1) possiamo procurarci S[j], che al secondo passo sarà uguale a S[2] e quindi, grazie a f (poiché abbiamo già i primi due byte della chiave) possiamo calcolare K[2]. Iterando questo procedimento possiamo recuperare l'intera chiave K con una complessità totale pari a O((k1)nln(n)).
L'attacco di Tews, Weinmann e Pyshkin
Con l'attacco di Klein abbiamo visto come sia possibile ricavare in maniera iterativa l'intera chiave segreta. Lo svantaggio di questo approccio però è che se il byte K[i] che abbiamo recuperato è sbagliato, tutti gli gli altri K[j] (j > i) saranno errati e devono quindi essere ricalcolati. Tews, Weinmann e Pyshkin hanno presentato un attacco che permette di ricavare ogni byte della chiave indipendentemente dagli altri [6].Con Sk viene indicato lo stato dell'array S dopo k iterazioni dell'algoritmo RC4. Analogamente jk è il valore della variabile j dopo k iterazioni. Con S1[j] si indica la posizione in S in cui si trova il valore j, ovvero se S[i] = j allora S1[j] = i. Infine con X indichiamo l'output del generatore.Facendo delle sostituzioni e sviluppando la formula ottenuta da Klein, gli autori di questo attacco hanno determinato la seguente formula:
σ i ≈n S3i−1 [3i −X [2i ] ] − j3∑
l=3
i3
Sl [l ] = Ai
dove σ i = ∑l=3
i3
K [ l ] ovvero la somma dei primi i byte della chiave segreta (i primi 3 byte di K
sono l'IV). La probabilità che questo valore trovato sia quello corretto (come dimostrato da Klein) abbiamo visto essere 1.36/≈ n. Come si può notare però σi dipende dai valori S3, ..., Si+3. Tews, Weinmann e Pyshkin hanno dimostrato che sostituendo ogni occorrenza di S con S3 la probabilità di prendere il valore corretto diminuisce meno dello 0.2% rispetto a quella originale. Questa approssimazione ha però il vantaggio di portare alla seguente:
σ i ≈n S3−1[3i −X [2i ]] − j3∑
l=3
i3
S3[ l ] = Ai
Come si può notare adesso σi dipende solamente da S3, il quale a sua volta dipende solamente da K[0], K[1] e K[2] che nel caso del WEP sono valori spediti in chiaro e quindi a disposizione dell'attaccante senza alcuno sforzo.
L'attacco avviene nel seguente modo: per ogni σi viene calcolato Ai con la formula appena descritta. Ogni volta che troviamo il valore Ai diremo che esso ha ricevuto un voto. In tabelle separate (una per ogni σi ) vengono conservati tutti i valori calcolati, e alla fine del processo come valore corretto di σi verrà preso quello che ha ottenuto il maggior numero di voti. Infine verrà calcolato K[3] = σ0 e K[i+3] = σi – σi1 (i > 3). E' necessario fare un'osservazione: la formula appena descritta presuppone la conoscenza dei primi 16 byte (per tutti i 128 bit della chiave) di output del cifrario (il vettore X), il che equivale a conoscere i primi 18 byte del plaintext del pacchetto per poter fare lo
XOR con il crittotesto. Questo attacco non è quindi applicabile a tutti i pacchetti, ma solo a quelli con un determinato header noto, come ad esempio i pacchetti del protocollo ARP (come spiegato nella sezione successiva).
I risultati sperimentali forniti dagli autori di quest'attacco mostrano come con soli 40.000 pacchetti sia possibile raggiungere un tasso di successo nel ritrovamento della chiave del 50%.
Incrementare il traffico dei pacchetti utilizzabili
Per incrementare il traffico dei pacchetti da sfruttare nell'attacco, Tews, Weinmann e Pyshkin hanno proposto la tecnica dell'ARP reinjection. Quando un host A vuole mandare un messaggio a B specifica nel pacchetto in uscita l'indirizzo IP di quest'ultimo. Tuttavia gli indirizzi IP hanno senso soltanto a livello network, quindi affinché il frame ethernet possa raggiungere lo strato data link del destinatario è necessario conoscere il suo indirizzo fisico (detto anche MAC address). A tale scopo è stato ideato il protocollo ARP (Address Resolution Protocol): quando un host vuole conoscere l'indirizzo fisico di un altro host manda in broadcast a tutta la sottorete una ARP request specificando l'indirizzo IP del destinatario e il proprio indirizzo fisico. Tutti gli host ascolteranno questa richiesta ma soltanto l'host con l'indirizzo IP specificato invierà una ARP response con il proprio indirizzo fisico. Poiché nella request è già incluso l'indirizzo fisico del mittente, il destinatario della richiesta avrà tutte le informazioni necessarie per inviare la propria risposta.Sia le request che le response ARP sono dei pacchetti di dimensione fissa, e quindi sono facilmente riconoscibili nel traffico in quanto il WEP non nasconde le dimensioni originali dei pacchetti. I pacchetti ARP hanno un header LLC (Logical Link Control) fisso di 8 byte uguale a “AA AA 03 00 00 00 08 06” e i primi 8 byte del payload sono uguali a “00 01 08 00 06 04 00 01” per le richieste e “00 01 08 00 06 04 00 02” per le risposte (cambia solo l'ultimo byte). Inoltre poiché WEP non nasconde l'indirizzo fisico del destinatario e facile distinguere le richieste (mandate in broadcast) dalle risposte (mandate in unicast), quindi è possibile riconoscere tutti i pacchetti ARP in transito nella sottorete e di questi se ne conoscono i primi 16 byte del plaintext.In definitiva catturando ogni pacchetto ARP e facendo lo XOR tra i primi 16 byte del pacchetto e questi valori noti si hanno a disposizione i primi 16 byte generati dal cifrario. In più è disponibile il vettore di inizializzazione perché è mandato in chiaro.
L'ARP reinjection consiste nel rispedire tutte le richieste ARP così come sono state intercettate. Ogni reinjection generalmente produce 3 nuovi pacchetti a causa dei relay effettuati dall'access point, e poiché ognuno di essi ha un vettore di inizializzazione diverso il numero di pacchetti utilizzabili ai fini dell'attacco aumenta considerevolmente. Tuttavia questa tecnica trasforma l'attacco da passivo ad attivo rendendo possibile l'utilizzo di sistemi anti intrusione.
Implementazioni
NOTAGli strumenti descritti in questa sezione sono stati inseriti come esempi di implementazione degli attacchi analizzati finora, e hanno un fine esclusivamente didattico. Essi non devono in alcun modo essere utilizzati per violare reti wireless senza autorizzazione.
Aircrackng (http://www.aircrackng.org) è una raccolta di strumenti utili per recuperare le chiavi di cifratura delle reti protette con i protocolli di sicurezza WEP/WPA. E' multipiattaforma (Unix/Linux, Windows, Mac OS X) ed è rilasciato con licenza GNU GPL 2. Tuttavia per poter essere utilizzato occorre avere una scheda di rete in grado di mettersi in modalità passiva (detta anche monitor mode) per catturare il traffico e in grado da fare l'inject dei pacchetti qualora si volesse utilizzare questa tecnica (l'elenco delle schede di rete compatibili è reperibile nel sito internet del progetto).
Questo prodotto comprende una serie di strumenti che è possibile utilizzare per eseguire i vari attacchi:
● Airmonng: questo script viene utilizzato per attivare la modalità monitor in una scheda di rete compatibile.
utilizzo: airmon-ng <start|stop> <interface> [channel]
Tra i parametri si può specificare se attivare o disattivare la modalità monitor, l'interfaccia di rete da utilizzare ed eventualmente il canale su cui sintonizzarsi.
● Airodumpng: questo tool viene utilizzato per catturare i frame 802.11 e salvare il risultato all'interno di un file.
utilizzo: airodump-ng <options> <interface>[,<interface>,...]
E' possibile specificare più interfacce di rete da cui intercettare i pacchetti, mentre tra le opzioni è possibile specificare:
--ivs
Per catturare solamente i vettori di inizializzazione--netmask <netmask>
Per catturare solamente i pacchetti relativi ad una particolare sottorete--bssid <bssid>
Per catturare solamente i pacchetti relativi alla rete con un particolare BSSID--encrypt <suite>
Per catturare solamente i pacchetti relativi alle reti che utilizzano una particolare suite crittografica
● Aircrackng: questo tool utilizza i pacchetti catturati da Airodump per recuperare le chiavi.
Come attacco predefinito utilizza il PTW (Pyshkin, Tews, Weinmann), ma è possibile selezionare anche altri attacchi tra cui il FMS (Fluhrer, Mantin, Shamir) o quello a dizionario. Per avere ulteriori dettagli sull'utilizzo di questo tool e sulle opzioni che è possibili specificare si consulti la relativa pagina di manuale.
Quello che si ottiene eseguendo il programma è la seguente schermata (per brevità viene considerato un esempio in cui viene attaccata una chiave WEP da 40 bit):
Aircrack-ng 0.9
[00:01:18] Tested 0/140000 keys (got 30680 IVs) KB depth byte(vote) 0 0/ 1 12( 170) 35( 152) AA( 146) 17( 145) 86( 143) F0( 143) AE( 142) C5( 142) D4( 142) 50( 140) 1 0/ 1 34( 163) BB( 160) CF( 147) 59( 146) 39( 143) 47( 142) 42( 139) 3D( 137) 7F( 137) 18( 136) 2 0/ 1 56( 162) E9( 147) 1E( 146) 32( 146) 6E( 145) 79( 143) E7( 142) EB( 142) 75( 141) 31( 140) 3 0/ 1 78( 158) 13( 156) 01( 152) 5F( 151) 28( 149) 59( 145) FC( 145) 7E( 143) 76( 142) 92( 142) 4 0/ 1 90( 183) 8B( 156) D7( 148) E0( 146) 18( 145) 33( 145) 96( 144) 2B( 143) 88( 143) 41( 141)
KEY FOUND! [ 12:34:56:78:90 ] Decrypted correctly: 100%
Nella colonna di sinistra sono elencati i byte della chiave segreta a cui si riferisce la riga. Nella matrice di destra sono elencati per ogni riga i candidati per quel particolare byte della chiave, ordinati per voto.
● Aireplayng: questo tool può essere utilizzato per fare l'inject dei pacchetti all'interno di una sottorete (necessita una scheda di rete compatibile).
Bibliografia
1. Andrea Bittau, Mark Handley, and Joshua Lackey. The final nail in WEP's coffin. In IEEE Symposium on Security and Privacy, pages 286400. IEEE Computer Society, 2006.
2. Scott R. Fluhrer, Itsik Mantin and Adi Shamir. Weakness in the key scheduling algorithm of RC4. In Serge Vaudenay and Amr M. Youssef, editors, Selected Areas in Cryptography 2001, volume 2259 of Lecture Notes in Computer Science, pages 124. Springer, 2001.
3. Andrew S. Tanenbaum. Reti di calcolatori. Quarta edizione. Pearson – Prentice Hall, 2003.4. Adam Stubblefield, John Ioannidis and Aviel D. Rubin. A key recovery attack on the
802.11b wired equivalent protocol (WEP). ACM Transactions on Information and System Security, 7(2):319332, May 2004.
5. Andreas Klein. Attacks on the RC4 stream cipher. submitted to Designs, Codes and Cryptography, 2007.
6. Erik Tews, RalfPhilipp Weinmann, and Andrei Pyshkin. Breaking 104 bit WEP in less than 60 seconds.