Sicurezza nelle Reti Wi-Fi Davide Ceneda , Alessia Rebba
Sommario Introduzione Cifrario a flusso → RC4 Implementazione nei differenti algoritmi per il WI-Fi Debolezze Wep 3 attacchi al wep → FMS ,PTW e Chopchop Wpa e sue debolezze Attacco chop-chop modificato Una introduzione a Wpa2 Dimostrazione pratica con aircrack
Introduzione Sicurezza Con l'avvento delle connessione senza fili ci si è cominciato a preoccupare della loro sicurezza Connessioni attraverso l'etere sono meno sicure, Intercettabili da chiunque abbia un minimo di conoscenze Necessità di proteggere in una qualche maniera le connessioni Wireless.
Cifrari a Flusso Definizione Un cifrario a flusso sincrono ` una sestupla (P, C, K, L, E, D), e una funzione g Funzione g è importante in quanto da questa dipende la sicurezza del sistema. Nella forma più comune, si usano simboli binari (bit), e la sequenza chiave è combinata con il testo in chiaro usando l'operazione di or esclusivo (XOR). Questo è definito cifrario a flusso sincrono additivo.
Rc4 – Un po' di Storia Creato da Ron Rivest (RSA) nel 1987 Inizialmente segreto, fu pubblicato anonimamente nel 1994 Rc4 è un marchio registrato quindi la sua versione pubblica viene chiamata diversamente:ARCFOUR , ARC4 Molto diffuso a causa della sua semplicità e velocità, usato in SSL e Wep
Rc4 - Algoritmo Rc4 genera un flusso pseudo-random (dipendono dalla chiave) di bit che combinati con lo XOR con il Plaintext genera il testo cifrato La Decodifica avviene nello stesso modo, essendo lo XOR una operazione simmetrica Si compone di due parti : 1)KSA (Key Scheduling Algorithm) 2) PRGA (Pseudo-Random generation algorithm)
Rc4 – Algoritmo \2 Ksa (codifica in C): Ksa(char *key, int key_length) { for (i = 0; i < 256; i++) S[i] = i; for (i = j = 0; i < 256; i++) { j = (j + key[i % key_length] + S[i]) % 255; swap(S, i, j); }
Rc4 - Ksa PASSO KSA-0 Data la chiave :K[0]=23 K[1]=42 K[2]=232 Il vettore S viene riempito da 0 a 255 con numeri crescenti. I candidati allo scambio sono: i=0 j 1= j0 + S[0]+ K[0] = 0 + 0 + 23 = 23
Rc4 – Ksa \1 S[0] e S[23] vengono scambiati. I nuovi candidati allo scambio sono: i=1 j 2= j1 + S[1]+ K[1] = 23 + 1 + 42 = 66
Rc4 – Ksa \2 S[1] e S[66] vengono scambiati. I nuovi candidati allo scambio sono: i=2 j 3= j2 + S[2]+ K[2] = 66 + 2 + 232 = 300 = in modulo 256= 44
Rc4 – Ksa \3 E cosi’ via per 255 passi! In questo modo termina l’algoritmo RC4-KSA quando scambiamo anche l’ultimo elemento ottenendo il 256° elemento di S … Ora con questo vettore inizia la parte dell’algoritmo relativa al RC4-PRGA.
Rc4 - PRGA PRGA (i=j=0) Unsigned char rc4_prga() { i = (i + 1) & 255; j = (j + S[i]) &255; swap(S, i, j); return S[(S[i] + S[j]) & 255]; }
Rc4 - Prga\1 i = (i + 1) % 255; → 1 j = (j + S[i]) %255; →12 Ecco quindi il vettore creato dalla prima parte del KSA con i candidati allo SWAP evidenziati in rosso:
Rc4 - Prga\2 swap(S, i, j); Gli elementi del vettore sono aggiornati ed ora possiamo estrarre il primo valore X[0] del keystream: X[0]= S[ S[1] + S[12] ] = S[260] = S[4] = 85
Crittoanalisi Rc4 Non vedremo una analisi approfondita di Rc4 Ci limiteremo a far notare che Rc4 paga la sua semplicità in termini di sicurezza: questa è molto debole e l'algoritmo è violabile con relativa facilità e velocità tanto che il suo uso non è piu consigliabile. Un'altra debolezza è relativa alla forte correlazione che c'è fra la chiave ed il keystream tanto che nel 2005 è stato trovato un modo per violare una connessione wep in meno di un minuto Inoltre le debolezze di Rc4 derivano dalla sua errata implementazione nei protocolli di sicurezza Wep e Wpa
Wep - Introduzione -Algoritmo usato per la sicurezza di 802.11 Wi-Fi -Introdotto nel 1999 come standard di sicurezza nelle reti wireless - Usa Rc4 per Crittare i dati e Crc-32 per verificarne l'integrità - All'inizio chiave solo a 40 bit , poi estesa a 104 -Nel 2003 è stato dichiarato “deprecato” e il suo utilizzo è stato sconsigliato
Wep – Funzionamento Wep utilizza Rc4 con chiave statica per la sicurezza dei dati. Visto che la chiave è statica e che il CiphText è ottenuto come semplice xor tra la chiave e il PlainText, conoscendo un testo in chiaro e il corrispettivo testo cifrato , sarebbe semplice risalire alla chiave. Per questo vengono utilizzati degli IV che vengono uniti con la chiave statica per generare un Keystream sempre diverso
Wep - Funzionamento
Wep - IV Gli IV (initialization Vector) sono vettori della forma v= (x1,....x24) di 24 bit usato per rendere la chiave ogni volta diversa - Wep64 → 40 bit di chiave + 24 bit di IV - Wep128 → 104 bit di chiave + 24 bit IV
FMS - Introduzione - L'IV viene inviato sottoforma di plaintext allegato al ciphertext. Quindi chi possiede un software Ad-Hoc per la cattura di pacchetti wireless può facilmente leggerlo ottenendo così i primi tre byte del PRGA. - Vi sono il 5% di possibilità che i valori che risiedono da S[0] a S[3] non cambino dopo le prime quattro iterazioni del KSA. Quindi un qualsiasi cracker può indovinare cosa accadrà durante il processo del KSA con il 5%di probabilità di successo → attacchi probabilistici
Inoltre... - Il quarto byte del pacchetto crittografato è sempre un header SNAP che corrisponde ad 0xAA in esadecimale ed a 170 in decimale. Ciò significa che sniffando il primo byte del pacchetto crittato e mettendolo in XOR con 170, qualsiasi cracker può dedurre il rispettivo byte di output del PRGA. - È stato confermato che un determinato formato di IV rilascia informazioni su un determinato byte della chiave segreta. Questa tipologia di IV prende il nome di weak IV o IV debole. Su 16.000.000 di IV circa, più o meno solo 9000 possono presentarsi come deboli. Il formato di un IV debole è: IV=(B + 3, N - 1, X,....) dove B è il byte della chiave segreta che l'IV pone a rischio, ovvero di cui rilascia informazioni tali da poterlo crackare. X può assumere qualsiasi valore
FMS Attack Date queste premesse è possibile sviluppare un algoritmo per risalire alla chiave wep Nel 2001 Fuhler, Mantin e Shamir pubblicarono a riguardo un articolo. Con questo tipo di attacco ,dato un grande numero di weak-IV e conoscendo il valore di un m byte, si puo risalire al (m+1)esimo byte del keystream Il problema ora è trovare il valore del primo byte del keystream in modo da poter risalire agli altri → come detto però il primo byte del keystream è noto in quanto header SNAP
FMS in pratica Facciamo un esempio pratico: - N = 8 quindi S[] conterrà 256 elementi - Si supponga di aver catturato un IV = (3,255,7) (Che quindi ci da informazioni sul primo byte) - La chiave WEP utilizzata corrisponde a 22222 - Tutte le operazioni vanno fatte in modulo 256
Esempio Pratico \1 Il seguente è la rappresentazione di K dopo la cattura dell'IV. K[0] = 3 K[1] = 255 K[2] = 7 K[3] = ? K[4] = ? .. Ciclo n°1 KSA i=0 j=0 S[0] = 0 S[1] = 1 S[2] = 2 S[3] = 3 j = j + S[i] + K[i mod l] = 0 + S[0] + K[0] = 0 + 0 + 3 = 3 quindi j = 3. Swap (S[i], S[j]) quindi se S[0] = 0 e S[3] = 3 ne segue che Swap(S[0], S[3]) è uguale a S[0] = 3 e S[3] = 0. Come detto precedentemente vi sono il 5% di possibilità che i valori compresi tra S[0] e S[3] non cambino dopo i primi 4 cicli KSA/PRGA.
Esempio Pratico \2 Ciclo n°2 KSA I=1 j=3 S[0] = 3 S[1] = 1 S[2] = 2 S[3] = 0 j = j+ S[i] + K[i mod l] = 3 + S[1] + K[1] = 3 + 1 + 255 = 259 mod 256 = 3 quindi j = 3. i = 1. j = 3. Swap (S[i], S[j]) quindi se S[1] = 1 e S[3] = 0 ne segue che S[1] = 0 e S[3] = 1.
Esempio Pratico \3 Ciclo n°3 KSA I=2 j=3 S[0] = 3 S[1] = 0 S[2] = 2 S[3] = 1 j = j + S[i] + K[i mod l] = 3 + S[2] + K[2] = 3 + 2 + 7 = 12 quindi j = 12. i = 2. j = 12. Swap (S[i], S[j]) quindi se S[2] = 2 e S[12] = 12 ne segue che S[2] = 12 e S[12] = 2. Si noti che fino a questo punto sono stati usati solo i valori dell'IV e quindi valori conosciuti. Chiunque può riprodurre questo processo fino a questo punto. Nel prossimo ciclo però non si utilizzano più parametri conosciuti e quindi siamo costretti fermarci
Esempio Pratico \3 Ciclo n°4 KSA I=3 j = 12 S[0] = 3 S[1] = 0 S[2] = 12 S[3] = 1 S[12] = 2 j = j + S[i] + K[i mod l] = 12 + S[3] + K[3] = 12 + 1 + ? = ?. i = 3. j = ?. Swap (S[i], S[j]) quindi se S[3] = 1 e S[?] = ? ne segue che S[3] = ? e S[?] = 1. Come si puo notare dopo il terzo ciclo non sappiamo piu che valore assumerà j e di conseguenza non sarà possibile determinare il prossimo stato dell vettore S.
Esempio Pratico \4 Ma esiste una via per determinare il valore di j? Si. Con una semplice operazione di XOR, un malintenzionato può determinare il valore dalla prima ripetizione del processo del PRGA. Ora siccome lo XOR è invertibile, si può dedurre il primo byte del PRGA xorando il primo byte del ciphertext con il primo byte del plaintext. Nel seguente esempio sarà fornito il valore crittato del primo byte del pacchetto catturato (165 in decimale) che ovviamente cambia da pacchetto a pacchetto.La seguente equazione illustra il processo di XOR: z = 0xAA(SNAP) XOR Ciphertext byte 1 = 170 (decimale) XOR 165 (decimale) = 15 Z = 15. (primo valore del Keystream) Dopo aver dedotto che il valore del PRGA è 15 in base decimale, sir può utilizzare il processo di reverse engineering (ingegneria inversa) del processo del PRGA per ricavare il valore di j.
Esempio Pratico \5 PRGA passo 1 I=3 j = 12 1) Inizializzazione. 2) i = 0 3) j = 0 S[0] = 3 S[1] = 0 S[2] = 12 S[3] = 1 S[12] = 2 4) Generazione. 5) i = i + 1 = 0 + 1 = 1. 6) j = j + S[i] = 0 + S[1] = 0 + 0 = 0. 7) Swap (S[i], S[j]) quindi se S[1] = 0 e S[0] = 3 ne segue che S[1] = 3 e S[0] = 0. 8) z = S[S[i] + S[j]] = S[S[1] + S[0]] = S[3 + 0] = S[3] = ?. 9) ? = 15 quindi S[3] = 15 al 4 ciclo del KSA. Dal PRGA sappiamo che il primo byte del Keystream è S[3] = 15 (trovato in precedenza) Ora quindi possiamo ricavarci il valore di j nel 4° passo del KSA e arrivare così a trovare il primo byte della chiave
Esempio Pratico \6 Ciclo n°4 KSA I=3 j = 12 S[0] = 3 S[1] = 0 S[2] = 12 S[3] = 1 S[12] = 2 S[3] = 15, S[15] = 1. Si sa che l'ultimo passaggio del KSA consiste nell'operazione di swap dei valori. Dopo lo swap dovremmo avere S[3]=15 e S[15]=1 Prima dello swap allora avevamo S[3]=1 e S[15]=15 Tornando allora all'ultimo passo del KSA che era stato lasciato in sospeso abbiamo j = j + S[i] + K[i mod l] = 12 + S[3] + K[3] = 12 + K[3] + 1 = 15. Allora si puo scrivere K[3] = 15 – 12 – 1 = 2. Il quarto valore del KS ossia il primo della chiave statica è quindi 2
FMS - Conclusioni A partire da un byte del Keystream siamo risaliti al primo byte della Chiave Tutto ciò è stato possibile grazie a un particolare tipo di Vettore detto Weak-IV Servono molti IV A seconda della grandezza e della lunghezza della chiave bisogna catturare un quantitativo di IV veramente alto. Per una chiave da 40 bit bisogna catturare anche più di 300.000 IV mentre per una chiave da 104 bit a volte non bastano 1.000.000 di IV. Non è certo che anche se si catturino 1.000.000 o più IV l'attacco abbia successo. Non si assicura al 100% la riuscita dell'attacco poiché è sempre un attacco probabilistico.
Metodo per Acquisire IV ARP REQUEST INJECTION Effettuare quest'attacco è molto semplice. Il cracker sniffa pacchetti in etere e concentra la sua attenzione in quelli inviati in broadcast. Un ARP request ha sempre una lunghezza fissa di 68 byte. Quando un client vuole uscire dalla rete invia un ARP request in broadcast per conoscere l'indirizzo MAC del default gateway settato. Il gateway risponderà con un ARP reply, e quindi con un nuovo pacchetto contenente un nuovo IV. Se il cracker cattura la ARP request può reiniettarla forzando così il gateway a generare nuove ARP reply con nuovi IV ovviamente. A questo punto il cracker si limita a sniffare tutti i pacchetti per poi iniziare il processo di cracking.
Un secondo attacco : PTW Nel 2007, è stato pubblicato da Tews, Weinmann e Pyshkin una nuova generazione di attacchi WEP. Con questo tipo di attacco (attacco Klein) Un utente che ha accesso ad un oracolo Owep è in grado di recuperare la chiave segreta di Owep con un successo di probabilità del 50% con 43000 pacchetti, mentre con 70000 pacchetti la probabilità sale al 95%.
Ptw Attack L'idea dietro l'attacco di Klein è abbastanza semplice: Supponiamo che sappiamo K[0]...K[l-1] e si vuole recuperare K[l]. Siamo in grado di simulare i primi l passi. Nella fase successiva, il valore k= Sl[jl + Sl[l] + K[l]] e scambiato a Sl+1[l]. La conoscenza di k rivelerebbe K[l] (come avviene in FMS). Mi limiterò a prendere il valore di l dopo esattamente n-2 passi del restante RC4-KSA (n- l-1 passi eseguiti qui) e la RC4-PRGA (l-1 passi sono stati eseguiti, prima che i assume ancora il valore di l). Così Sl+1[l] sarà cambiato soltanto se viene colpito j, ciò avviene con una probabilità di (1/n)^n-2, mentre con una probabilità di 1- (1/n)^n-2, Sl+1[l] sarà modificato e fissato ad un valore differente rispetto a k.
Jenkins Ora utilizzando la correlazione di Jenkins' si distinguono due casi: 1) Sn+l-1[l] = k accade con probabilità (1/n)^n-2. Secondo la correlazione la probabilità per l - X[l - 1] = k in questo caso è: Prob (l - X[l - 1] = k | Sn+l-1[l] = k) = 2/n 2) Sn+l-1[l]≠ k accade con probabilità 1-(1/n)^n-2. Secondo la correlazione la probabilità per X[l - 1] = k in questo caso è: Prob(l-X[l-1]=k | Sn+l-1[l]≠k) = (n-2)/(n(n- 1))
Jenskins In totale, questo ci dà la probabilità seguente per X[l - 1] = k = Sl[jl + Sl[l] + K[l]]: Risolvendo questo per K[l] ci dà la seguente formula:
Esempio Pratico Un esempio pratico: Supponiamo che RC4 è usato con k = 12, 111, 28, 107, 226, 211, 232, 247. L'attaccante conosce il primo l=3 byte di k ed è interessato a K[l]. L'attaccante può simulare i primi 3 punti del RC4- KSA. Nel passo successivo: j4 = j3 + S3[3] + K[3] =154 + 3 + 107 =8 S3[3] = 3 e S3[8] = 8 sono ora invertite e S4[3] = 8. S[4] rimane invariato per il resto dell'RC4-KSA e l'inizio dell'RC4-PRGA.
Ptw – Esempio Pratico
Ptw – Esempio Pratico Quando X[2] è stato generato, jn+3 = 182 e X[2] = Sn+3[Sn+3[3]+Sn+3[182]] = 251 è l'uscita del RC4- PRGA. FKlein(12, 11, 28, 251) = S[3 - X[2]] - (S3[3] + j3) = S[3 - 251] - (3 + 154) = S[8] - 157 = 8 - 157 = 107 = K[3]
Ptw – Conclusioni e Differenze un attaccante che calcola avrebbe ottenuto il giusto valore di K[3]=107. Differenze: Se guardiamo l'attacco Klein rispetto all'attacco FMS, dovremmo notare alcune differenze: 1)L'attacco Klein è in grado di far uso di ogni singola sessione che riceviamo da Owep. Anche se la possibilità che F fms non restituisce un valore corretto è molto più alta della probabilità della funzione F klein, l'attacco Klein surclassa totalmente l'attacco FMS, perchè è in grado di raccogliere informazioni da ogni singola sessione.
Differenze 2)La probabilità di successo di F klein non dipende dalla chiave che viene attaccata. La FMS ha una probabilità di successo inferiore per i primi byte della chiave che per gli ultimi.
Sistema di Votazione delle Chiavi Criterio di classificazione (Ranking delle chiavi) Fin'ora, tutti gli attacchi che abbiamo visto, in qualche modo hanno cercato di indovinare un ignoto valore di K[l], di una chiave RC4, utilizzando un lotto di diverse sessioni con lo stesso valore di K [l], e con i valori da K[0] a K[l-1] noti all'attaccante. Il metodo utilizzato per decidere in merito a K[l] è sempre un processo di voto, dove tutte le sessioni disponibili all'attaccante o ad un sottoinsieme di loro sono esaminate ed ogni sessione può votare per K[l] che ha determinati valori. Dopo che tutti i voti sono stati contabilizzati, si prende una decisione per la K[l]. Ora che la K[l] è nota, l'attaccante può continuare a recuperare K[l+1]. Dal punto di vista astratto, questo può essere visto come una sorta di albero delle decisioni per la chiave segreta.
Key Ranking La prima decisione deve essere fatta per Rk[o]. Di solito si assume che il valore con il maggior numero di voti sarà il valore corretto per Rk[0] e così può continuare con la determinazione di Rk[1]. Questo si può fare se un numero elevato di sessioni sono a disposizione per l'attaccante. Purtroppo se il numero di sessioni è relativamente basso, il valore corretto per Rk[0] non è necessariamente il valore più votato, ma tenderà ad essere uno dei miglior voti dati.
Key Ranking Una semplice implementazione di un attacco, presuppone sempre che la chiave sia corretta. Naturalmente, un attaccante vorrebbe essere il grado si calcolare la chiave con un numero inferiore di sessioni disponibili. Invece di calcolare una sola chiave, un attaccante può calcolare un set di chiavi, seguendo alcuni percorsi alternativi. Ad esempio, un attaccante potrebbe supporre che Rk[0] sia il primo o il secondo valore votato e seguire entrambi i percorsi di calcolo. Un attaccante così può trovare la chiave giusta in questo set. Questo tipo di approccio è chiamato Key ranking. Inoltre ci sono alcune strategie che possono essere utilizzate indipendentemente dalla strategia key ranking, per migliorare l'efficacia dell'attacco:
Restrizioni per le chiavi RESTRIZIONE DELLO SPAZIO CHIAVi Partiamo dal presupposto che l'attaccante ha una certa conoscenza della chiave che viene utilizzato. Ad esempio, alcuni venditori forniscono punti di accesso con le chiavi di default che sono composti da caratteri ASCII che rappresentano numeri decimali. Questo significa che ogni Rk[l] avrà un valore compreso tra 48 e 57. Ad ogni punto di decisione in cui non risulterebbe 48 ≤ Rk [l] ≤ 57, si sceglie il prossimo valore, che si traduce in un valore valido per Rk [l].
BruteForce Attack Attacco a forza bruta per recuperare gli ultimi byte Perchè si usa: Perchè un processo di voto è molto più costoso in tempo di CPU che verificare di volta in volta una piccola quantità di chiavi Infatti un attaccante può saltare tutti i processi di voto per gli ultimi uno o due byte, e provare tutti i possibili valori.
Un Terzo Attacco : ChopChop Chophop (2004): Sia f una funzione, che prende un arbitrario pacchetto criptato e restituisce true, se il checksum del pacchetto criptato è corretto, altrimenti false. Se un attaccante ha un singolo pacchetto cifrato di lunghezza l e l'accesso a tale funzione, può decifrare gli ultimi m byte del pacchetto e recuperare gli ultimi m-byte del KeyStream utilizzato per crittografare il pacchetto, con in media m*128 tentativi e trascurabile sforzo computazionale.
Korek – Chop Chop Chop – Chop (taglia taglia) 2004 Si chiama cosi in quanto togliendo l'ultimo byte ad un pacchetto questo risulta corrotto. Esisterà un solo valore tra i 256 possibili che messo in xor con il pacchetto corrotto farà tornare lo stesso pacchetto integro. - Bisogna conoscere come funziona Crc32 - Questa operazione puo essere ripetuta m volte e trovare cosi il keystream utilizzato
Dimostrazione Matematica Una sequenza arbitraria di byte può essere interpretata come un elemento di Z2 [X] prendendo i bit della sequenza come coefficienti del polinomio. Sia P questo polinomio. P ha un checksum corretto, se e solo se l'equazione: P mod Rcrc= Rone Con Rone = x^31+x^30+....+x+1 E Rcrc = X^32 + X^26 + X^23 + X^22 + X^16 + X^12 +X^11 + X^10 + X^8 + X^7 + X^5 + X^4 + +X^2 + X + 1
Chop Chop Si noti che RCRC è irriducibile su Z2 [X] e Z2 [X] / (RCRC) è un campo finito. Vediamo adesso la versione di P troncata dell'ultimo byte P puo essere scritto come : P=X^8 *Q+ P7 (quoziente+resto) Dove p7 è proprio l'ultimo byte del plaintext Q Naturalmente ha piu un Checksum corretto Vogliamo sapere come possiamo fare per trovare una correzione che applicata a Q faccia tornare il messaggio corretto
Chop Chop Sappiamo che - P = Q · X^8 + P7 - P mod Rcrc= Rone Quindi da queste due equazioni deriva che Q * X^8 + P7 =Rone → Q*X^8= Rone +P7 Dobbiamo trovare l'inverso di (X^8) nel campo finito Z2 In modo da poter “isolare” Q e fare in modo che abbia CRC corretto Tutto in modulo Crc
Chop Chop Q = (Rone +P7 )*Rinv mod Rcrc Ma sappiamo anche che Q per avere un corretto checksum deve rispettare Q= Rone mod Rcrc Quindi il nostro Rcorr = (Rone +P7 )*Rinv + Rone Che sommato a Q fa in modo che il Crc sia corretto (Esempio Scilab)
Conclusioni Chop-Chop - Abbiamo visto che dato un pacchetto troncato di un byte , esiste un solo valore del plaintext che fa si che quel pacchetto torni valido - Trovato questo byte si puo ripetere l'operazione varie volte e trovare tutto il plaintext del pacchetto - Una volta a conoscenza del Ptxt si risale al keystream con un semplice Xor - Il keystream essendo valido si puo usare per creare Altri pacchetti validi e quindi fare injection oppure per attuare altri tipi di attcco come MITM o DoS
WPA Wep non garantisce una sicurezza adeguata sulle reti senza fili Necessita di sviluppare una nuova soluzione mantenendo al contempo la compatibilità con hardware datato Introduzione nel 2002 di WPA (3 anni dopo Wep)
WPA Wpa – Wifi Protected Access Due versioni: 1)WPA-TKIP (Temporal Key Integrity Protocol) 2)WPA2 (2004) – completamente differente da wpa e wep Utilizza “ccmp” un protocollo di cifratura basato su AES Non puo essere utilizzato su schede datate
Wpa - SCHEMA Msdu : Mac service data unit → dati ricevuti dal sotto-livello llc Mpdu : Mac protocol data unit → dati scambiati tra livelli mac e che effettivamente vengono passati al livello fisico per il loro invio Msdu puo essere piu grande mpdu → frammentazione Msdu puo essere piu piccolo mpdu → aggregazione di pacchetti
WPA vs Wep Differenze con Wep 1) Chiave Dinamica: ogni 10.000 pacchetti circa viene rinegoziata una nuova chiave. 2)IV : - Trasmesso crittografato e non piu in chiaro - Da 24 bit → 48 bit di cui solo 16 trasmessi in chiaro nell'header (nell'header entrano solo 24 bit quindi IV spezzato in 2)
WPA vs Wep 3) Non si usa piu CRC 4) Introduzione di MIC – Message Integrity Check - 12 bit contro i 4 bit del CRC Di cui 4 sono di ICV(Integrity Check Value) Gli 8 bit aggiuntivi sono generati da un algoritmo chiamato MICHAEL che usa il mac-mittente, destinatario e una chiave MIC-KEY
WPA vs Wep 5) Inroduzione TSC (Contatore di sequenza) - pacchetti fuori sequenza vengono scartati - Non si puo piu fare injection
Attacchi su WPA Gli attacchi a forza bruta o a dizionario sono sconsigliati in quanto impiegano tempi molto grandi Considerando password lunghe 8 caratteri e considerando solo lettere maiuscole e minuscole e processando 500.000 password/sec ci vogliono circa 4 anni per la ricerca esaustiva (52^8)/(500000*60*60*24*365) = 4 anni
Chop-Chop Modificato - Ideato da Erick Tews (2008) Poiché Wpa tiene conto dell'ordine di sequenza dei pacchetti (TSC) è difficile fare injection di pacchetti Si Sfrutta lo stesso attacco di Korek (Chop-Chop) con qualche piccola modifica QoS deve essere abilitato QoS serve a garantire una certa qualità del servizio Se il canale principale di comunicazione è occupato è possibile trasmettere su altri canali
Wpa Chop Chop L’attacker cattura i pacchetti in monitor mode fino a quando non abbiamo ottenuto degli ARP request. Questi pacchetti sono facilmente riconoscibili per la loro struttura intrinseca.(68 byte) L’attacker quindi conoscerà la maggior parte del plaintext eccetto: l’ultimo byte dell’indirizzo IP del mittente e del destinatario, gli 8 byte del MICHAEL-MIC e i 4 byte del checksum ICV.
Wpa Chop Chop In totale quindi bisogna scoprire 12 byte L’attacker lancia un attacco chop-chop modificato che operi su differenti canali diversi da quello di trasmissione. Possibilmente utilizza dei canali dove il TSC counter resta basso . In questo chopchop modificato si cerca di indovinare l’ultimo byte Se è sbagliato l’attacker deve aspettare il tempo di rinegoziazione ma il TSC counter non viene ulteriormente incrementato. In un tempo di 12 minuti è possibile decriptare ed ottenere gli ultimi 12 byte del plaintext che mancavano (8 del MIC e 4 del ICV-checksum).
Wpa Chop Chop Ora si puo’ reversare il MICHAEL e ottenere la MIC-KEY usata per proteggere i pacchetti. Il Michael è stato creato per essere veloce e non per non essere reversato. A questo punto l’attacker ha ottenuto la MIC ed il Keystream della comunicazione. Può ora mandare dei paccketti custom in tutti i canali supportati dove il TSC counter resta quasi fermo ( di solito 7 o più canali).In tal modo si possono recuperare altri keystream (in 4-5 minuti )
Wpa Chop Chop Infine conoscendo vari Keystream e potendo creare pacchetti customizzati si possono lanciare attacchi (sulla stessa linea del ChopChop per Wep) sui differenti canali utilizzati da QoS Ultimamente sono usciti vari attacchi basati su questo attacco Chop Chop modificato Maggior velocità Possibilità di funzionamento anche su reti senza QoS
Introduzione al Wpa2 WPA2 sta sostituendo WPA. Come avvenne per il WPA, il WPA2 richiede una fase di testing e la certificazione da parte dell'alleanza Wi-Fi. WPA2 implementa gli elementi opzionali dello standard 802.11i. In particolare introduce un nuovo algoritmo basato su AES, CCMP, che è considerato completamente sicuro. La certificazione è iniziata nel Settembre 2004. Dal 13 marzo 2006 la certificazione WPA2 è diventata opzionale per i nuovi dispositivi Wi-Fi.
Aes e CCMP L'AES, l'Advanced Encryption Standard, è un algoritmo di cifratura a blocchi utilizzato come standard dal governo degli Stati Uniti d'America. Data la sua sicurezza e le sue specifiche pubbliche si presume che in un prossimo futuro venga utilizzato in tutto il mondo come è successo al suo predecessore, il Data Encryption Standard (DES) che ha perso poi efficacia per vulnerabilità intrinseche. CCMP: Il CCMP, Counter-Mode/CBC-Mac Protocol, è un metodo di cifratura utilizzato per la gestione delle chiavi e dell'integrità dei messaggi. Il CCMP fa parte del programma di certificazione WPA2, che sostituisce l'insicuro WEP e rappresenta un'alternativa più sicura del metodo crittografico TKIP implementato nella prima versione WPA. Il CCMP è basato sul cifrario a blocchi AES
Funzionamento Funzionamento Nel CCMP l'AES viene utilizzato in una particolare modalità operativa in cui l'algoritmo crittografico, che opera in modalità Cipher Block Chaining (CBC) viene accoppiato un codice di autenticazione MAC
Mac MAC In crittografia un Message Authentication Code (MAC) è un piccolo blocco di dati utilizzato per autenticare un messaggio digitale. Un algoritmo MAC accetta in ingresso una chiave segreta ed un messaggio da autenticare di lunghezza arbitraria, e restituisce un MAC (alle volte chiamato anche tag). Il valore MAC protegge sia l'integrità dei dati del messaggio sia la sua autenticità permettendo al destinatario dello stesso (che deve anch'egli possedere la chiave segreta) di rilevare qualsiasi modifica al messaggio: ecco perché dovrebbe essere chiamato Message Authentication and Integrity Code, MAIC.
Mac\2 Il mittente (sender) deve inviare un messaggio (message) ad un destinatario (receiver). Prima di effettuare l'operazione si accorda col destinatario su una chiave segreta (key). Stabilita la chiave, utilizza una funzione di MAC (MAC Algorithm) per calcolare il MAC del messaggio ed infine invia entrambi al destinatario. Questi calcola il MAC del messaggio ricevuto e poi lo confronta con il MAC allegato al messaggio stesso: se coincidono, il messaggio è integro, altrimenti qualcosa è andato storto.
Autenticazione Wpa2 Autenticazione Il primo passo è la generazione di un codice di autenticazione per il pacchetto 802.11. Questo codice, definito MIC (Message Integrity Code), è creato nel modo seguente: 1) si cifra un primo blocco di 128 bit con l'AES ed una chiave di autenticazione; 2) si esegue uno XOR fra il risultato della precedente operazione ed i successivi 128 bit del messaggio; 3) si cifra nuovamente il risultato con l'AES e la stessa chiave di autenticazione; 4) si esegue uno XOR fra il risultato del passo precedente ed i successivi 128 bit del messaggio; 5) si continuano ad eseguire i punti 3 e 4 finché non si è operato su tutti i bit del messaggio da cifrare. 6) alla fine si troncano i 128 bit finali prendendone solo 64: questo è il MIC Contrariamente al WEP ed al WPA, il calcolo per l'integrità viene eseguito anche sui campi dell'intestazione del pacchetto.
Cifratura Cifratura L'intestazione del pacchetto CCMP contiene il valore iniziale del contatore utilizzato nel processo crittografico. La cifratura si esegue blocco per blocco secondo il seguente schema: si cifra il valore iniziale del contatore con l'AES e la chiave di cifratura; si esegue uno XOR tra il valore cifrato del contatore ed i 128 bit del blocco, ottenendo il primo blocco cifrato; si incrementa il contatore e si cifra con l'AES, sempre utilizzando la stessa chiave di cifratura; si esegue uno XOR fra il valore cifrato del contatore ed i 128 bit del blocco successivo, ottenendo un altro blocco cifrato; si continua dal punto 3 fino a che non sono stati trattati tutti i blocchi; per l'ultimo blocco, si conserva il risultato di un XOR fra il contatore e gli ultimi bit di dati.
Bibliografia e Fonti Wikipedia.it Pcpedia.it **“Practical Attacks against Wpa and Wep” di E. Tews - M. Beck ** “Attacks on Wep” di Fuhler Mantin Shamir ** “Breaking 104 bit WEP in less than 60 seconds” - E. Tews