Zoom Icon

How To Attack a WEP/WPA Protected Wireless Network

From UIC Archive

Written by: Quequero

Uic translate.png
This page has been translated to English Flag uk.gif.

Un aiuto a completare il documento è ben accetto, grazie!

In questa guida cercheremo di esporre le varie vulnerabilità che affliggono i protocolli WEP e WPA. Vi mostreremo anche alcune tecniche che si possono utilizzare per aggirare questo tipo di protezioni. Sentitevi liberi di aggiungere al post tutte le domande che mancano. Grazie :)

Greetings: c0sm4ky, bender0, CyberPK, Giulia e Buffer, Rageman.

Contents

Cosa sono WEP, WPA e WPA2? Quali sono le differenze?

WEP è l'acronimo di Wired Equivalent Privacy, ovvero Privacy Equivalente al Cavo, un acronimo sfortunato come sappiamo oramai tutti, ed è l'implementazione dello standard per le comunicazioni senza cavo IEEE 802.11. Il funzionamento del WEP si basa su una chiave segreta, conosciuta soltanto dai client che si possono collegare alla rete, e dal relativo Access-PointIl componente che consente ai client di inviare i pacchetti dalla rete wireless alla rete cablata, e vice-versa. Tale chiave viene utilizzata per inizializzare uno stream RC4 che serve a cifrare il contenuto dei pacchetti, al fine di garantirne la privacy.

WPA è invece l'acronimo di Wi-Fi Protected Access, nato in risposta al fallimento del WEP, e come alternativa tampone in attesa dello standard, oramai completo, IEEE 802.11i. L'algoritmo di cifratura utilizzato è nuovamente RC4, ma questa volta il vettore di inizializzazione è di 48-bit (sul WEP è di 24-bit). È stato introdotto un protocollo (TKIP) in grado di modificare dinamicamente la chiave ogni pochi minuti, e l'algoritmo per l'integrità dei pacchetti è stato cambiato dal precedente CRC al nuovo Michael, in grado di evitare molti attacchi che erano comuni sul WEP. Si tratta di un sistema sicuramente più robusto del WEP, ma che se osservato nel dettaglio non è poi troppo dissimile dal suo predecessore.

WPA2 è invece l'implementazione dello standard IEEE 802.11i, si differenzia dai precedenti per l'algoritmo di cifratura, non più RC4 ma AES (Advanced Encryption Standard, il fratellino di Rijndael, l'unica differenza è che Rijndael gestisce blocchi dati di dimensione variabile, mentre AES opera solo su blocchi di 128-bit), utilizza tecnologie simili a quelle in uso sulle VPN per garantire la segretezza dei dati e la loro integrità e per identificare univocamente il mittente. Introduce anche tecnologie per tenere traccia delle autenticazioni ed un nuovo protocollo di autenticazione a 4 vie. WPA2 si divide in due famiglie principali:

WPA2-Personal: detto anche WPA2-PSK, dove PSK è l'acronimo di Pre-Shared Key. Viene utilizzato nelle reti SoHo (in ambito casalingo o nelle piccole aziende). La password è unica e condivisa tra tutti gli utenti; se viene scelta una stringa casuale come password la sicurezza della rete wireless è equiparabile a quella di una rete su cavo.
WPA2-Enterprise: come sistema di autenticazione utilizza non più una PSK ma un server RADIUS, è anche possibile utilizzare certificati e chiavi pubbliche. Questa modalità è la scelta principale nelle grandi e media aziende, dove non è consigliato utilizzare una singola PSK, e dove è necessario un sistema centralizzato di autenticazione, capace di gestire una mole di dati che sarebbe eccessiva per un Access-Point.

Che scheda wireless devo comprare?

La scheda che andiamo ad acquistare deve usare un chipset che permetta ALMENO la Monitor mode ed opzionalmente anche l'injection di pacchetti creati ad hoc, funzionalità utile di cui parleremo dopo.
Al momento in cui scrivo i chipset che supportano entrambe le modalità sono:

  • Atheros
  • Prism 2/3
  • PrismGT
  • Ralink (rt2500 / rt2570 / rt61 / rt73)
  • RTL8180 (UNSTABLE)
  • RTL8187L

Visto il rapido fiorire di driver per linux adatti allo scopo vi consiglio di visitare periodicamente questa lista di compatibilità.

La mia scheda è supportata, cosa faccio?

Se non usi una distro live predisposta devi patchare i driver.

Poi per usare il packet injection devi imparare ad usare aireplay-ng, le opzioni sono molte per cui DEVI leggere la man page se vuoi capirci qualcosa.

Come si costruisce un'antenna esterna?

Ne abbiamo parlato in questo thread del forum.

Di che sistema operativo ho bisogno?

Sicuramente non di Windows, perché ci sono dei problemi che sono difficili (e alle volte impossibili) da superare, l'ideale è disporre di una distribuzione di Linux.

Si ma... Non voglio installarlo sul mio portatile!

Problemi tuoi! No dai scherzo... Esistono numerose distribuzioni live, cioe' dei CD con cui bootare che contengono una distribuzione che viene caricata in RAM senza toccare il disco.

  1. Troppix (arrivata fino alle 1.2, ed ora discontinued per problemi di licenza)
  2. nUbuntu
  3. BackTrack
  4. Auditor

Scarica la ISO, masterizzala su un CD/DVD, infilalo nel lettore, spegni il pc, riaccendi il pc... E quella parte. Ma ricorda, alcune non contengono i driver aggiornati e funzionanti per il tuo chipset. Ti capiterà di doverli installare ad ogni avvio della distribuzione live. Oppure puoi provare a modificare la distro e personalizzarla per i tuoi usi...

Non è vero, non parte!

Parte parte... Magari accedi alla configurazione del BIOS e vedi se tra le periferiche di boot è presente anche il lettore CD/DVD, quest'ultimo deve esser controllato PRIMA del disco rigido.

Cos'e' il BIOS?

Coff coff... Ti propongo un affare: ripassa qui tra... 3 - 4 anni e ti daremo tutte le risposte ok? :)

Ok ho bootato con la distribuzione XYZ ed ora?

Ora devi accendere la tua scheda wireless. Per vedere se il tuo sistema l'ha riconosciuta prova a fare così: apri un terminale e dai questo comando: $ /sbin/iwconfig lo no wireless extensions.

eth0 no wireless extensions.

eth1 unassociated ESSID:off/any Nickname:"ipw2100" Come vedi le prime due interfacce, lo e eth0, non sono schede wireless mentre la terza, eth1, lo è, in questo caso si tratta di una ipw2100.

Se la tua scheda non viene riconosciuta, prova un'altra distribuzione, prova ad installare i driver nuovi, smanetta un po'... Non posso mica avere tutte le risposte :).

Ci sono problemi con la Intel PRO/Wireless 3945 A/B/G?

La Intel 3945 viene riconosciuta correttamente da BackTrack 2 e successive, a patto di avviare un demone che si chiama "Intel 3945 Daemon", e che si trova comunque all'interno del menù di BackTrack. Dopo di che potrai usarla anche per fare l'injection del traffico. Se non usi BackTrack dovrai invece patchare i driver, come è già stato spiegato in precedenza.

Scheda riconosciuta, ora ci facciamo una birra?

Se me la offri volentieri, altrimenti dovrai cercare le reti wireless che sono presenti intorno a te. Avrai bisogno di un software apposito. I più famosi sono:

Entrambi sono installati di default su tutte le distribuzioni sopra citate e presentano procedure diverse.
Non dimenticare di mettere la scheda in Monitor mode!!!
Se è disponibile la suite Aircrack-ng potrai usare lo script "airmon-ng" altrimenti puoi oppure provare la sintassiiwconfig XXX mode monitor con al posto di XXX la tua scheda.
Dopo verifica che ciò sia andato a buon fine eseguendo di nuovo iwconfig e controllando che la tua scheda risulti in Monitor mode. A questo punto sei pronto per avviare il programma che più ti piace per catturare pacchetti. Nel caso scegliessi Kismet, ricordati di avviarlo dal menu di sistema. Non farlo da riga di comando altrimenti distribuzioni come BackTrack non avvieranno gli script di riconoscimento automatico... Se invece non hai l'entry nel menu di sistema, usa la riga di comando ;p.

Kismet impiegherà qualche secondo prima di dirti quali reti sono disponibili, a questo punto dovrai identificare l'algoritmo di cifratura utilizzato.

Come faccio a scoprire l'algoritmo usato?

Te lo stavo per dire... Premi la lettera s sulla finestra di Kismet per aprire il menù di ordinamento dei network, poi premi f per ordinarli cronologicamente rispetto alla data di scoperta. Avrai una barretta che potrai spostare su e giu tra i vari network, scegline uno e premi i, ti apparirà questa schermata, i dati in grassetto sono quelli di cui hai bisogno, prendine nota su un foglietto. SSID  : Bubba Server  : localhost:2501 BSSID  : 00:40:15:E4:C3:25 Manuf  : Unknown Max Rate: 11.0 BSS Time: 1f6b97f6463 First  : Wed Nov 8 17:33:30 2006 Latest  : Wed Nov 8 17:34:41 2006 Clients : 1 Type  : Access Point (infrastructure) Channel : 3 Privacy : Yes Encrypt : WEP Decryptd: No Beacon  : 25600 (26.214400 sec) Packets : 135

  Data    : 1
  LLC     : 133
  Crypt   : 1
  Weak    : 0
  Dupe IV : 0
Data    : 0B
Signal  :
  Power   : -47 (best -45)
  Noise   : 0 (best 0)
IP Type : TCP (4 octets)
IP Range: 192.168.1.2

Come puoi vedere dal campo Encrypt questa rete utilizza come algoritmo il WEP. Le altre soluzioni attualmente possibili sono: WPA, WEP TKIP WPA, NONE.

Ho scoperto l'algoritmo ora come lo cracko?

Dobbiamo analizzare alcune strategie differenti a seconda della cifratura utilizzata. Se la rete che stai esaminando non è cifrata (Encrypt: NONE) puoi saltare questa parte.

Se si tratta di WEP abbiamo molte soluzioni a nostra disposizione ma per prima cosa dobbiamo loggare il traffico su disco.

Come loggo il traffico?

Puoi utilizzare Kismet o AiroDump-NG che fa parte del pacchetto di AirCrack-NG.
Nel primo caso, visto che lo stai gia usando non devi far altro che spostarti col cursore sul network che ti interessa e premere L in modo da bloccare lo sniffing sul canale dove si trova quella rete. Nel secondo caso dovrai avviare AiroDump-NG in questo modo: airodump-ng -c <canale> --ivs --write <file di output> <interfaccia wireless>

nel nostro caso (da root):

airodump-ng -c 3 --ivs --write dump.pcap eth1 I pacchetti di tipo Beacons scorreranno presumibilmente molto in fretta... Non te ne curare perché non serviranno ai nostri scopi. L'opzione --ivs cattura solo gli IV, se dopo aver trovato la chiave vuoi anche curiosare nel traffico che hai dumpato, devi rimuovere questa opzione.

Quanto traffico devo loggare?

Devi loggare da un minimo di 300.000 ad un massimo di 1.500.000 pacchetti. Se la rete è utilizzata, farai in fretta (magari in un'ora) altrimenti ci vorrà del tempo.

Come faccio a fondere in un singolo file tanti dump ottenuti in tempi diversi?

Puoi utilizzare ivtools che fa parte della suite di AirCrack-NG, fai così: ivstools --merge <ivs file 1> <ivs file 2> .. <output file>

ad esempio:

ivstools --merge dump1.pcap dump2.pcap dump3.pcap final_dump.pcap Altrimenti puoi usare mergecap che fa parte del pacchetto di WireShark (la vecchia Ethereal): mergecap [options] -w <outfile|-> <infile> ...

esempio:

mergecap -T ieee-802-11 -w final_dump.pcap dump1.pcap dump2.pcap dump3.pcap Se qualcosa non dovesse andare, rimuovi l'opzione: -T ieee-802-11... O leggi la man page.

Ok ho fuso i pacchetti ed il cervello, ora come si cracka la chiave?

Con AirCrack-NG, ti farò degli esempi ma DEVI leggere l'help del programma perché alcune funzioni sai soltanto tu se serviranno o meno. Basta fare così: aircrack-ng -a <algoritmo> -e <essid> -b <bssid> dump

esempio:

aircrack-ng -a 1 -e Bubba -b 00:40:15:E4:C3:25 final_dump.pcap Attendi un po', il cracking può prendere da pochi istanti ad alcune ore, ma se è WEP ed hai catturato abbastanza pacchetti, la chiave verrà fuori sicuramente. Più pacchetti catturi, più chance hai di trovare la chiave in fretta. Ci sono degli aggiustamenti da fare, ad esempio se sai quanto è lunga la chiave di cifratura puoi specificare il parametro -n. Ad esempio, se sei sicuro che la chiave è di 128bit, fai: aircrack-ng -a 1 -n 128 -e Bubba -b 00:40:15:E4:C3:25 final_dump.pcap Puoi diminuire il fudge factor tramite l'opzione -f, il cracking prenderà meno tempo ma le probabilità di ottenere una falsa chiave saranno più alte. Alzando il fudge factor aumenterai il livello di profondità del bruteforce, impiegherai più tempo ma le probabilità di ottenere una chiave valida saranno più alte. Se hai un buon numero di pacchetti prova ad usare -f 3 o -f 4. Comunque LEGGI la man page di AirCrack-NG, è molto importante!

Se invece la mia rete usa il WPA?

È un po' più incasinato, il WEP è vulnerabile agli attacchi statistici, il WPA no, quindi dovrai bruteforzare la chiave, il procedimento è identico a prima, avrai però bisogno di un dizionario (puoi scaricarlo da internet o generarlo con JohnTheRipper): aircrack-ng -a 2 -b 00:40:15:E4:C3:25 -e Bubba -w dictionary.txt final_dump.pcap Attento che cambia anche l'opzione -a.

Cos'è la vulnerabilità di WPA che è stata scoperta nel 2008?

Nel Novembre 2008 è stata trovata una vulnerabilità nel protocollo WPA, tuttavia per poterla sfruttare dobbiamo fare tre assunzioni:

  1. Conosciamo il range di IP della rete che stiamo attaccando (es: 192.168.0.x)
  2. L'intervallo di re-keying è di almeno un'ora
  3. Il supporto per il QoS è abilitato sulla rete

Mentre le prime due condizioni sono piuttosto comuni, la terza lo è un po' meno, specie in ambito home o dove si utilizza un vecchio router WiFi. Come procediamo? Al momento Aircrack-NG non include una procedura automatizzata per questo genere di exploit, quindi dovremo fare tutto a mano. Per prima cosa dobbiamo catturare un ARP-request, ed è abbastanza semplice riconoscerlo all'interno di un dump dal momento che la lunghezza è fissa, la struttura e' nota e l'indirizzo MAC di destinazione è sempre il broadcast: ff:ff:ff:ff:ff:ff. Dalle assunzioni fatte sopra sappiamo che soltanto pochi byte dell'ARP-request sono cifrati, ovvero:

  • 1 byte, l'ultimo, dell'indirizzo IP del client
  • 8 byte del MIC
  • 4 byte dell'ICV

Come possiamo decifrarli? Utilizzando un semplice attacco ChopChop, ma dobbiamo stare attenti dal momento che con WPA sono stati introdotti due meccanismi di protezione per rendere inutile questo genere di attacchi:

  1. Se un pacchetto contiene un ICV non valido, viene scarcato, se invece l'ICV è corretto ma il MIC è sbagliato, l'AP invia un MIC failure fram ed il pacchetto viene scartato. Se piu' di due pacchetti con MIC errati vengono ricevuti in 60 secondi, la connessione viene sospesa e le chiavi rinegoziate.
  2. Se il pacchetto viene ricevuto con successo, il TSC per quel canale viene incrementato, quindi se successivamente viene ricevuto un TSC piu' basso di quello che dovrebbe essere allora il pacchetto viene scartato.

Comunque queste protezioni non sono sufficienti per bloccare il ChopChop, ma sono soltanto utili a rallentarlo. Se il QoS è abilitato sulla rete allora possiamo decifrare 12 byte in 12 minuti, il tredicesimo byte e gli altri possono essere derivati direttamente sulla macchina dell'attaccante visto che abbiamo a disposizione l'ICV decifrato. Oltretutto sappiamo che il MIC non e' una funzione di hash, pertanto possiamo invertirla per derivare direttamente la chiave. A questo punto possiamo iniettare un nuovo pacchetto valido su tutti i canali QoS disponibili, e fare quello che desideriamo. E' anche possibile eseguire questo attacco su reti che non hanno il QoS abilitato, tuttavia la procedura è decisamente piu' lenta di quanto appena visto.

E se la rete che voglio attaccare non produce traffico, cosa devo fare?

In questo caso dovrai fare un replay-attack, cioe' dovrai catturare UN pacchetto contenente una ARP request e rimandarlo N volte all'access point.
In questo modo il router ti risponderà con un N pacchetti che però saranno differenti perché contengono IV diversi.
Bada bene che alcune schede wireless non sono in grado di stare in modalità monitor mentre trasmettono, quindi avrai bisogno di DUE schede wireless, una per effettuare il replay ed una per ascoltare il traffico. E' possibile fare cio' con una sola scheda se questa monta chipset Atheros o Ralink r61 (probabilmente anche con altri).

E se ho la scheda del Centrino?

Qualche mese fa sono uscite le patch per i driver ipw2200 che permettono di fare una packet injection "parziale". Ovviamente devi usare l'ultima versione della suite aircrack-ng. Con "parziale" intendo che è possibile iniettare solo data frame sul canale dell'AP al quale la scheda è associato (quindi devi essere in Managed mode). Non è un grosso problema questo perché il 99% degli AP permettono di associarti anche se non hai una chiave valida (open key, al contrario del sistema shared key che però è mooolto piu debole..). Una discussione a riguardo in questo thread del forum.

A cosa servono gli altri tool della suite di AirCrack-NG?

  • airdecap-ng: decritta un pacchetto WEP/WPA data una chiave valida.
  • kstats: data una chiave valida, ed un dump, dice quale attacco statistico funziona meglio.
  • ivstools: combina dei file pcap o ne estrae gli IV.
  • makeivs: genera un file pcap di test per provare il cracking con aircrack-ng.
  • packetforge-ng: forgia un pacchetto in modo da poterlo usare con aireplay-ng.
  • airmon-ng: mette una scheda wireless in Monitor mode.
  • aireplay-ng: inietta del traffico artificiale nella rete.
  • aircrack-ng: cracka la chiave WEP/WPA.
  • airodump-ng: ascolta il traffico e lo logga su file.

Come si aggira un filtro sul MAC address?

È piuttosto semplice, devi trovare il MAC address di un client connesso, lo copi e lo setti uguale sulla tua scheda wireless. Stando attento che il client da cui hai copiato il MAC non sia attivo (può essere collegato alla rete, ma sarebbe meglio che non fosse attivo). In Kismet seleziona la rete che ti interessa e premi c per mostrare i client collegati, otterai qualcosa di simile: T MAC Manuf Data Crypt Size IP Range Sgn Nse 00:0B:6B:4E:A6:19 WistronN 1 0 91B 0.0.0.0 0 0 00:15:D6:15:41:28 Unknown 1 0 50B 0.0.0.0 0 0 00:00:5E:BB:F8:A3 Unknown 4 0 2k 0.0.0.0 0 0 00:0B:6B:4E:3D:AE WistronN 1 0 91B 0.0.0.0 0 0 00:00:5E:BB:0E:84 Unknown 0 0 0B 0.0.0.0 0 0 00:0B:6B:36:7C:B5 WistronN 1 0 106B 0.0.0.0 0 0 Scegli il MAC address che ha trasmesso meno byte e, in un terminale linux, da root, fai: ifconfig ethX hw ether nuovo_mac

esempio:

ifconfig eth1 hw ether 00:00:5E:BB:0E:84 Sotto windows invece dovrai usare programmini come MacMakeup dell'italianissimo Marcello Gorlani.

Come mi associo all'access point una volta avuta la chiave?

Dipende!
1) Se la rete è open non c'è nessuna chiave, quindi la domanda non si pone ;)

2) Se la rete utilizza WEP puoi usare iwconfig in questo modo: iwconfig eth1 key <chiave> iwconfig eth1 essid "essid della rete" dove eth1 è l'interfaccia associata alla tua scheda wireless ed essid è il nome della rete. Poi, per vedere se l'associazione è avvenuta correttamente, da riga di comando fai: iwconfig eth1 Se la risposta è questa: eth1 unassociated ESSID:off/any Nickname:ipw2100

         Mode:Managed  Channel=0  Access Point: Not-Associated

Allora la chiave è errata, oppure c'è un altro layer di autenticazione. Altrimenti vedrai qualcosa del genere: eth1 IEEE 802.11b ESSID:Bubba Nickname:ipw2100

         Mode:Managed  Frequency:2.432 GHz  Access Point: 00:0A:CA:3C:B4:70

3) Se la rete utilizza WPA devi usare wpa_supplicant. Prima bisogna configurarlo, quindi edita il file /etc/wpa_supplicant.conf (potrebbe anche non essere in /etc/ ma di solito è lì) e aggiungere una cosa di questo tipo: network={

       ssid="STUDENTI.MATH"
       key_mgmt=WPA-EAP
       identity="tuo_username"
       password="tua_password"

} e poi avviare wpa_supplicant con un comando del genere: wpa_supplicant -Dwext -ieth1 -c/etc/wpa_supplicant.conf dove eth1 è la tua scheda wireless, il parametro -D può essere cambiato se hai altri tipi di schede, ma di solito wext funziona (o almeno, con i chipset Atheros va). Questi sono gli altri driver supportati:

  • hostap: (default) Host AP driver (Intersil Prism2/2.5/3). (this can also be used with Linuxant DriverLoader).
  • hermes: Agere Systems Inc. driver (Hermes-I/Hermes-II).
  • madwifi: MADWIFI 802.11 support (Atheros, etc.).
  • atmel: ATMEL AT76C5XXx (USB, PCMCIA).
  • ndiswrapper: Linux ndiswrapper.
  • broadcom: Broadcom wl.o driver.
  • ipw: Intel ipw2100/2200 driver.
  • wired: wpa_supplicant wired Ethernet driver
  • bsd: BSD 802.11 support (Atheros, etc.).
  • ndis: Windows NDIS driver.

In ogni caso, alla fine devi avviare un client dhcp per ricevere un IP dalla rete, quindi fai: dhcpcd eth1 dove eth1... abbiamo capito, e tutto dovrebbe andare a meraviglia.

E se la rete usa WPA-PSK?

Nel tuo wpa_supplicant.conf aggiungi: network={ ssid="<ssid>" psk="<key>" }

dove <ssid> è l'SSID della rete e <key> la chiave che hai trovato con AirCrack-NG. Poi dovrai avviare wpa_supplicant con il comando visto sopra: wpa_supplicant -Dwext -ieth1 -c/etc/wpa_supplicant.conf

Quali sono le principali vulnerabilità del WEP?

Premesso che il brute-forzing non è escludibile a priori, ma la sua attuazione dipende dalla disponibilità delle risorse necessarie (tempo, potenza di calcolo), esistono metodologie che, date determinate condizioni, facilitano il lavoro a chi deve decrittare abusivamente.
Queste sono:

  • Keystream Reuse: supponiamo di intercettare due pacchetti cifrati, C1 e C2, criptati utilizzando lo stesso keystream (collisione di IV). Eseguendo uno xor tra i due otterremmo: C1 XOR C2 = P1 XOR keystream XOR P2 XOR keystream = P1 XOR P2. Quindi conoscendo un ciphertext e il rispettivo plaintext saremmo in grado di decrittare qualsiasi pacchetto cifrato con il medesimo keystream. Effettivamente, P1 XOR C1 = P1 XOR P1 XOR keystream = keystream.
  • Checksum linearity: questa vulnerabilità si basa sul fatto che CRC32 sia una funzione unkeyed e lineare, ciò implica che CRC(x XOR y) = CRC(x) XOR CRC(y). L'attaccante può inoltrare messaggi se riesce a far sì che il loro ICV ritorni un valore corretto. Sia P1 un plaintext valido e C1 = P1 XOR keystream il corrispondente ciphertext. Supponiamo di ottenere un nuovo plaintext come: P2 = P1 XOR v, dove v è un valore scelto arbitrariamente. C2 = C1 XOR (v + CRC(v)), estendendo C1 otteniamo: C2 = keystream XOR (P1 + CRC(P1)) XOR (v + CRC(v)). Da cui, xorando tra loro le coppie P1, v e CRC(P1), CRC(v), si ha: C2 = keystream XOR (P2 + CRC(P2)).
  • Traffic injection: data una coppia (C1, P1) è possibile ottenere il keystream semplicemente xorando tra loro i due valori. Si è ora in grado di crittare un plaintext arbitrario, concatenarlo all'IV (estraibile da C1) e inoltrarlo all'AP.
  • Traffic reinjection: è possibile inoltrare verso l'AP uno stesso messaggio crittato un numero indefinito di volte (non esistono contromisure ai replay attacks). Questa mancanza permette l'ARP request reinjection, un attacco attivo particolarmente efficace su cui amplieremo il discorso in un successivo paragrafo.
  • Authentication Spoofing: questo attacco sfrutta l'ipotetica intercettazione dei dati trasmessi durante l'autenticazione (SKA, Shared Key Authentication) del client wireless (initiator) con l'AP (responder). L'initiator invia un messaggio non crittato all'AP (authentication request management frame) dove specifica che vuole autenticarsi mediante la SKA e il responder inoltra al client wireless una stringa random di 128 byte (authentication challenge management frame). A questo punto l'initiator riceve il challenge e lo rinvia all'AP cifrandolo con il Wep. Il responder può ora decifrare il messaggio e verificarne l'ICV.
  • Ip redirection: per l'attuazione di questo tipo di attacco si necessita di un AP disponente di una connessione internet e degli indirizzi ip di origine (AP) e destinazione (client).Intercettato un C arbitrario, si sostituisce all'indirizzo ip del destinatario l'indirizzo dell'aggressore sfruttando il Checksum Linearity e si inoltra nuovamente il pacchetto all'AP. Esso provvederà a decrittare il messaggio e ad inviarlo all'attaccante. Per fare in modo che l'ICV resti invariato bisogna compensare le modifiche dell'ip di destinazione sfruttando l'ip d'origine (che non assume una rilevanza marcata). Sia src_ip (ip di origine) = x1.x2.x3.x4, che, diviso in due word da 16 bit risulta essere: src_ip h = x1*256 + x2 e src_ip l = x3*256 + x4 ("h" e "l" stanno rispettivamente per "high" e "low"). Lo stesso vale per l'ip di destinazione originario e quello modificato: dst_ip = y1.y2.y3.y4, dst_ip h = y1*256 + y2, dst_ip l = y3*256 + y4 e newdst_ip = z1.z2.z3.z4, newdst_ip h = z1*256 + z2, newdst_ip l = z3*256 + z4. Per far tornare i conti si sottrae dalla word di ordine inferiore dell'ip di origine newdst_ip h + newdst_ip l - dst_ip h - dst_ip l (src_ip l = src_ip l - (newdst_ip h + newdst_ip l - dst_ip h - dst_ip l)).
  • Table-based Attack: si basa sulla possibilità di costruire un'apposita tabella contenente una serie di keystream indicizzati mediante ogni possibile valore dell'IV.
  • Reaction Attack: quando un'autenticazione all'AP ha esito positivo esso risponde con un pacchetto apposito detto di acknowledgement. Si tratta di un pacchetto di lunghezza prevedibile, che offre quindi l'opportunità ad un attaccante di capire quali siano i pacchetti dotati di ICV valido. Successivamente, sfruttando una vulnerabilità del Cyclic Redundancy Check, si è in grado di modificare il pacchetto valido a patto che P[i] XOR P[i+16]=1 ("i" è scelto a caso). Dato un testo cifrato C1, sia C2 = C1 XOR v (v vale 1 nella posizione i e i+16, 0 nelle altre posizioni). Al fine di ottenere maggiori informazioni su come è strutturato il plaintext ci si serve della seguente proprietà delle somme mod(2^16 -1) (valida sotto la condizione enunciata all'inizio): P[i] XOR v P mod(2^16 -1).

E per quanto riguarda FMS e Chopchop?

FMS (Fluhrer, Mantin e Shamir)

Il FMS è un attacco passivo di natura statistica, prende il nome dalle iniziali dei suoi tre ideatori ed è formalizzato nel paper Weakness in the Key Scheduling Algorithm of RC4.
In questo articolo i tre autori esplicano l' "Invariance Weakness" (che afferma l'esistenza di particolari chiavi che causano la trasformazione, da parte di KSA, di pattern nella chiave K in pattern nella permutazione iniziale dell'array S) e l' "IV Weakness" (relativo al modo usale di costruire il seed negli stream ciphers). Qui di seguito verrà descritto FMS senza particolari pretese o formalismi rigorosi, si rimanda al paper ufficiale per maggiori approfondimenti.
FMS sfrutta le vulnerabilità presenti nel KSA e l'impiego di IV deboli (Weak IVs), che lasciano trasparire informazioni utili ad individuare parte della chiave contenuta nel primo byte del keystream.
Se si raccoglie un numero sufficiente di Weak IVs (si tenga conto che la stessa chiave viene usata con molteplici IV deboli) e si ha a disposizione il primo byte del keystream è possibile risalire alla WepKey.
Essendo noto il primo byte di un generico frame 802.11 (perchè corrispondente al primo byte dell'header 802.2 LLC (DSAP) ) è possibile risalire al primo byte del keystream eseguendo un semplice xor tra il primo byte del frame criptato e il suo valore in chiaro 0xAA.
Un IV è costituito da 24 bit (3 byte) e, in particolare, un IV debole si trova nella forma (A+3, N-1, X), dove:

  • A è il byte della chiave che si vuole trovare
  • N è il parametro di mod usato in RC4, quindi 256
  • X è un valore arbitrario compreso tra 0 e 255

L'algoritmo richiede che i byte del keystream vengano attaccati sequenzialmente. L'array k[] è organizzato nel seguente modo:

  • k[0], k[1] e k[2] contengono l'IV
  • k[3] ... k[lunghezza_WepKey] contengono la WepKey
  • k[lunghezza_Wepkey+1], k[lunghezza_WepKey+2] e k[lunghezza_WepKey+3] contengono nuovamente l'IV
  • k[lunghezza_WepKey+3+1] ... k[2*lunghezza_WepKey+3+1] contengono ancora la WepKey
  • ...

Per prima cosa si calcola il primo byte di output del keystream e successivamente vengono eseguiti A+3 passaggi del KSA, con A inizialmente uguale a 0 e quindi servendosi unicamente dei tre byte dell'IV. Se j è minore di 2 il tentativo fallisce, altrimenti si esegue la sottrazione mod 256 tra il primo byte del keystream, j e S[A+3].
Eseguendo questi passaggi su circa 60 IV e X sempre variabile, si ottiene una probabilità di successo superiore al 50%. Il procedimento va ripetuto analogamente per determinare l'intera WepKey (calcolando via via i byte successivi del keystream).

Chopchop (Korek)

Un hacker il cui pseudonimo è Korek ha teorizzato un attacco attivo al Wep (Chopchop) che si basa su una vulnerabilità dell'ICV.
Si parte dal presupposto che troncando il byte finale a un C generico si ottenga un messaggio non valido C1; esiste un valore, dipendente unicamente dal byte omesso, che, xorato a C1, permette di ottenere un C2 valido.
L'attacco Chopcop considera il valore troncato pari a 0, corregge C1 e lo inoltra all'AP. Possono ora verificarsi due situazioni:

  • il pacchetto viene accettato e "broadcastato" (injection attack)
  • il frame viene rifiutato e l'attacco continua (per al più 256 tentativi) fino a che non viene ritenuto valido

La procedura si ripete per risalire agli altri byte del messaggio e decrittarlo integralmente. Si noti che in questo caso si ottiene il plaintext senza essere entrati in possesso della Wep Key.
Per la dimostrazione matematica del fatto che, dato un messaggio troncato di un byte, la modifica da applicargli dipende unicamente dal valore di quel byte rimandiamo alla sezione dedicata alla parte matematica nella doc di Korek.

Posso alterare un pacchetto bypassando il CRC?

Si tratta di un'eventualità possibile non solo in teoria, ma semplice da realizzare anche in pratica. Sappiamo che il WEP utilizza un semplice CRC per identificare errori sui pacchetti, ma il CRC (non essendo un HMAC) soffre di alcuni problemi. Innanzitutto si tratta di un'operazione lineare rispetto allo Xor, ovvero:

  • CRC(x ^ y) = CRC(x) ^ CRC(y)

grazie anche al fatto che RC4 utilizza proprio lo Xor per cifrare i dati, saremo in grado di alterare un messaggio cifrato, alterando contemporaneamente anche il suo CRC. A questo punto, grazie alla linearità del CRC, possiamo dimostrare che dato un messaggio cifrato C, saremo in grado di creare un nuovo messaggio cifrato C' con CRC comunque corretto. Il nuovo messaggio sarà costruito in questo modo:

  • C' = C ^ d

dove d rappresenta un pacchetto delta che saremo noi a scegliere. La dimostrazione è decisamente semplice e interessante, ma facciamo prima alcune definizioni:

  • || è l'operatore di concatenazione, quindi: AB || CD = ABCD
  • IV è il vettore di inizializzazione (Initialization Vector)
  • K è la nostra chiave (password)
  • M il nostro messaggio in chiaro (plaintext)
  • M' è il messaggio che si ottiene decifrando C'
  • RC4(K) è il keystream pseudocasuale generato da RC4 inizializzato con K

Ed ecco la dimostrazione:

  • C = RC4(IV || K) ^ (M || CRC(M))
  • C' = C ^ (d || CRC(d))
    1. = RC4(IV || K) ^ (M || CRC(M)) ^ (d || CRC(d))
    2. = RC4(IV || K) ^ ((M ^ d) || (CRC(M) ^ CRC(d))
    3. = RC4(IV || K) ^ ((M ^ d) || CRC(M ^ d))
    4. = RC4(IV || k) ^ (M' || CRC(M'))

Quindi basterà fare lo Xor tra il pacchetto catturato ed il nostro pacchetto d per ottenere un pacchetto con il CRC comunque corretto.

Ho sentito parlare di un Fragmentation Attack, cos'è ?

Tutti gli attacchi sviluppati fino ad oggi necessitano di un gran numero di pacchetti per poter recuperare la chiave, è stato quindi studiato e realizzato questo nuovo tipo di attacco. Tramite il Fragmentation Attack saremo in grado di inviare sul network una quantità arbitraria di dati, dopo aver ascoltato soltanto un singolo pacchetto dati. Non male come miglioramento. E' possibile scaricare il paper completo ed i tools per portare a termine questo attacco. Se abbiamo la giusta scheda, riusciremo a recuperare la chiave WEP in pochissimo tempo, senza dover loggare ulteriore traffico.

Come si fa a scoprire il gateway se non c'è il DHCP?

Beh, per esempio con un port scan. Possiamo usare Nmap, indispensabile e senz'altro presente in una distribuzione live dedicata alla sicurezza che si rispetti. Per prima cosa sappi che ci sono tre (anzi quattro) range di ip riservati alle LANLocal Area Network, i seguenti:

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
169.254.0.0 - 169.254.255.255

L'ultimo range non e' comunemente usato nelle LAN perche' e' dedicato all'Automatic Private IP Addressing (che e' presente solo nei sistemi Windows). In realta' tutte LAN con cui ho avuto a che fare (incluse varie wireless LAN) usavano indirizzi del primo o terzo range, ovvero 10.x.x.x oppure, piu' spesso, 192.168.x.x. Supponiamo che la WLANWireless Local Area Network usi indirizzi dal range 192.168.x.x, cosa facciamo ora? Intanto diamo alla nostra scheda un indirizzo (a caso) nel range, cosi': ifconfig eth1 192.168.1.100 Poi con Nmap controlliamo se c'e' qualcuno con un indirizzo in questo range che abbia la porta 80 aperta. Questo perche' molti Access Point possono essere configurati con un interfaccia web, per cui devono far girare un web server al loro interno, e i web server di norma ascoltano (indovinate?) sulla porta 80. nmap -sT -p80 192.168.1-254.1-254 Cosi' controlliamo tutto il range 192.168.x.x, ma l'esperienza ci insegna che la configurazione tipica e' avere il router/ap/gateway su 192.168.1.1 e i client sugli indirizzi successivi, quindi spesso ce la possiamo cavare con un ping 192.168.1.1 Se abbiamo risposta, probabilmente si tratta del gateway. Altri indirizzi tipici sono 192.168.x.1 (per valori bassi di x) oppure 10.0.0.x (sempre per valori bassi di x). In ogni caso bastera' connettersi al router con il browser per avere la certezza di averlo scoperto: digitiamo "http://<probabile_ip_del_gateway>/" sulla barra degli indirizzi e se ci compare una schermata di login o un pannello di controllo siamo sicuri. Una volta trovato il gateway, per impostarlo e' sufficiente scrivere route add default gw <ip_del_gateway>

Per scoprire l'indirizzo del gateway possiamo inoltre sniffare il traffico ARPAddress Resolution Protocol. Il protocollo ARP e' usato per conoscere l'indirizzo hardware (MAC Address) di un host di cui si conosce solamente l'indirizzo di network layer (per esempio, il suo indirizzo IP). Lanciamo Wireshark (o Ethereal se avete una distribuzione piu' vecchia), andiamo su Capture→Interfaces.. e selezioniamo l'opzione Start sulla linea corrispondente alla nostra scheda wireless. Quando viene catturato del traffico ARP vedrete qualcosa del genere:

Traffico ARP catturato

In questo caso l'Access Point (192.168.8.1) vuole conoscere l'indirizzo MAC del client che ha IP 192.168.8.120; per fare questo deve trasmettere a tutti (Broadcast) il suo indirizzo IP che quindi possiamo scoprire. Chiaramente ogni host puo' utilizzare una ARP request, quindi dovete usare un po' di ingegno o esperienza per scoprire chi di loro e' il gateway. Ad ogni modo, con questa tecnica capirete sicuramente qual e' il range di IP utilizzato all'interno della LAN/WLAN in questione.

Vogliamo parlare di ARP request reinjection?

Questo attacco è attuabile perchè il WEP:

  • non offre alcun tipo di protezione contro gli attacchi a replay
  • lavora a livello 802.2 LLC (datalink layer) lasciando fuori dal processo di crittazione il livello 802.3 MAC come e' giusto che sia per un corretto delivery dei frame

Stante questo, il traffico viene sniffato e si concentra l'attenzione sul traffico broadcast (quindi 802.3 destination address FF:FF:FF:FF:FF:FF).
Ricordiamo che le ARP request vengono inviate al broadcast mentre le ARP reply sono traffico unicast. Inoltre, un frame che contenga una ARP request ha sempre la stessa lunghezza, ossia 68 bytes.
A questo punto consideriamo tutti i frame aventi:

  • 802.3 destination address FF:FF:FF:FF:FF:FF
  • lunghezza 68 bytes

Iniziamo a replicarli nella speranza che siano delle ARP request e ipotizziamo questo scenario:

Host A
IP address 192.168.0.100
MAC address AA:BB:CC:DD:EE:FF

Gateway
IP address 192.168.0.1
MAC address 00:11:22:33:44:55

Quando l'host deve uscire dalla sua subnet, avendo 192.168.0.1 come default gw, eseguira' una ARP request indirizzata al broadcast chiedendo il MAC address corrispondente a tale indirizzo. Il gateway rispondera' con una ARP reply diretta soltanto all'host A (unicast) e, nel fare questo, generera' un frame WEP con un altro IV.
Se catturiamo la ARP request e la reiniettiamo e' valida (niente protezione contro attacchi a replay), il gateway generera' una molteplicità di ARP reply e quindi altrettanti IV. Possiamo, ora, far entrare in gioco Aircrack e concludere l'attacco con successo.

Cos'è e come si fa un deauthentication attack?

Questo attacco consente di disassociare volutamente uno o più client della WLAN, si può usare per molti motivi, ad esempio:

  1. Per scoprire l'SSID di una rete che non ne effettua il broadcast
  2. Per catturare i pacchetti di handshake di WPA e WPA2
  3. Per generare ARP-request

Il terzo caso è forse quello che vi farà più gola quando vorrete crackare il WEP in 60 secondi, e si può portare a termine con l'utilizzo di Aireplay-NG: aireplay-ng -0 1 -a 00:11:22:33:44:55 -c 55:44:33:22:11:00 eth1 Spieghiamo le opzioni utilizzate:

  • -0 indica al programma che vogliamo de-autenticare un client
  • 1 indica che vogliamo inviare un solo pacchetto di de-auth (se utilizziamo 0 ne inviamo di continuo)
  • -a 00:11:22:33:44:55 è il MAC dell'AP
  • -c 55:44:33:22:11:00 è il MAC del client da de-autenticare
  • eth1 è l'interfaccia che vogliamo utilizzare per l'invio del pacchetto

Catturando invece i pacchetti di handshake su una rete WPA/WPA2 saremo in grado di utilizzarli per un attacco basato su dizionario o di bruteforce.

Rompere il WEP in meno di 60 secondi, si può!

Nell'aprile 2007 Eric Tews, Ralf-Philipp Weinmann e Andrei Pyshkin hanno presentato un paper intitolato Breaking WEP in less than 60 seconds, dove veniva illustrato un nuovo attacco (attivo) in grado di effettuare il recovery di una chiave WEP in meno di 60 secondi. Tuttavia il paper non presenta realmente un nuovo attacco, ma viene utilizzata una versione migliorata di un attacco estremamente efficiente pubblicato da Andreas Klein nel 2006. L'attacco di Klein è stato descritto in maniera esaustiva da Quequero nel paper sull'analisi e crittanalisi di RC4, quindi prima di procedere dategli uno sguardo per capire con esattezza di cosa stiamo parlando.
L'attacco si basa sull'assunzione che sulla WLAN in esame viene utilizzato IPv4, in tal caso quando un host vuole contattare un altro host, deve inviare un ARP-request per scoprire l'indirizzo del destinatario, il quale risponde con un ARP-reply. Ma i pacchetti ARP non sono soggetti a regole di limitazione nel tempo (a differenza, ad esempio, del traffico UDP), hanno una lunghezza fissa, quindi sono facili da distinguere, ed i primi 16-byte sono sempre costanti. L'ulteriore vantaggio è che ARP-request e ARP-reply differiscono soltanto per un byte nell'header, tuttavia il primo viene inviato in broadcast ed il secondo no, ma visto che WEP non maschera gli indirizzi è anche facile distinguere i primi dai secondi. Ci troviamo dunque in una condizione familiare: xorando il pacchetto cifrato con i byte noti siamo in grado di ottenere i primi 16 byte del keystream. L'attacco può essere velocizzato sia re-iniettando un pacchetto pescato durante l'ascolto, sia utilizzando un attacco di de-autenticazione, in tal modo i client saranno costretti a ri-associarsi continuamente all'AP inviando sulla rete una serie di ARP-request.
Questo tipo di attacco è più efficiente, a livello computazionale, di quello di Klein perché ogni byte della chiave viene calcolato indipendentemente, ed è tollerante agli errori di identificazione, ovvero anche inserendo nell'attacco i dati ottenuti da un pacchetto che sembrava un ARP, ma che non lo era, non si compromette il risultato ottenuto. Fatte queste considerazioni risulta possibile crackare una chiave in 58 secondi nel 50% dei casi, l'attacco ha una complessità abbastanza bassa da poter esser effettuato anche su un computer palmare.

Un gruppo di ricercatori dell'università Darmstadt ha scritto un tool chiamato aircrack-ptw del tutto simile all'aircrack-ng che usa questo nuovo attacco. In questa pagina ci sono i dettagli.
Purtroppo il tool non supporta ancora le chiavi a 256 bit.
Il 13/maggio/2007 è stata rilasciata la versione 0.9 di aircrack-ng che integra questo nuovo attacco (chiamato PTW), utilizzabile tramite l'opzione -z
Se intendete usare questo attacco dovete dare in input file .cap e non ivs, quindi evitate assolutamente l'opzione --ivs di airodump-ng quando catturate i pacchetti, anche se il file finale avrà una dimensione molto maggiore.
Praticamente vi basterà fare quanto segue: aircrack-ng -z xxxxx.cap Se prima per trovare una chiave 128 bit con una probabilità di successo del 100% erano necessari circa 1.000.000 pacchetti, ora per avere una percentuale prossima al 100% ne bastano circa 80.000.
Correte a prendere i sorgenti, compilate e testate le vostre reti.
Per quelli che ancora perseverano ad usare il WEP ecco l'ennesima dimostrazione della sua vulnerabilità...

Come faccio a creare una chiave WEP/WPA random?

Windows:

Windows non possiede un entropy-pool di semplice accesso, per cui sfrutta la UIC: apri il nostro Random Pool ed otterrai una lista di numeri. Seleziona una stringa lunga a piacere, da 0 a 63 caratteri, quella sarà la tua chiave WEP/WPA, la puoi usare per entrambi i protocolli visto che il pool genera numeri in base 16. Ricordati di modificarla spessissimo se si tratta di una chiave WEP, modificala invece ogni 3/6 mesi se usi WPA/WPA2, in particolar modo se la fornisci frequentemente ai tuoi amici per farli connettere, non si sa mai.

Linux:

Su Linux l'idea migliore è quella di utilizzare /dev/random che è un'ottima sorgente di entropia, quindi apri una shell e digita il comando che corrisponde alla lunghezza di cui hai bisogno: 40-bit WEP Key dd if=/dev/random bs=1 count=5 2>/dev/null | hexdump -e '5/1 "%02x" "\n"'

64-bit WEP Key dd if=/dev/random bs=1 count=8 2>/dev/null | hexdump -e '8/1 "%02x" "\n"'

104-bit WEP Key dd if=/dev/random bs=1 count=13 2>/dev/null | hexdump -e '13/1 "%02x" "\n"'

128-bit WEP Key dd if=/dev/random bs=1 count=16 2>/dev/null | hexdump -e '16/1 "%02x" "\n"'

152-bit WEP Key dd if=/dev/random bs=1 count=19 2>/dev/null | hexdump -e '19/1 "%02x" "\n"'

232-bit WEP Key dd if=/dev/random bs=1 count=29 2>/dev/null | hexdump -e '29/1 "%02x" "\n"'

256-bit WEP Key dd if=/dev/random bs=1 count=32 2>/dev/null | hexdump -e '32/1 "%02x" "\n"' Attendete qualche secondo che l'entropy-pool si riempia (potete muovere il mouse per velocizzare il processo). Se non volete aspettare, potete sostituire /dev/random con /dev/urandom, a scapito di una minore casualita': 40-bit WEP Key dd if=/dev/urandom bs=1 count=5 2>/dev/null | hexdump -e '5/1 "%02x" "\n"'

etc... Ed ecco che il nostro WEP/WPA random key generator è pronto. In alternativa puoi leggere il metodo di generazione per Windows che funzionerà alla perfezione anche su Linux.