====== Craccare la chiave WEP di una WiFi ====== Appunti di un tentativo (fallito) di craccare una connessione WiFi protetta da chiave WEP. La teoria dice che la chiave WEP è craccabile facilmente, nel senso che non è necessario l'attacco a forza bruta, quindi anche password difficili vengono individuate in poco tempo. Ecco il resoconto di un caso reale. Vacanze estive in Croazia, appartamento sul mare, netbook Asus EeePC 900, due canali WiFi comodamente agganciabili dal salotto, semplice protezione WEP. Poiché nelle vicinanze non esistono Internet point, decido di tentare il crack. Di quel poco che ho studiato mi ricordo che l'attacco si basa sullo **sniffare una quantità sufficiente di traffico criptato** e su quello eseguire uno speciale algoritmo di crittoanalisi. Il software **aircrack** dovrebbe provvedere tutto il necessario. Installato i pacchetti Debian **''aircrack-ng''** e **''kismet''**, quest'ultimo consente di //vedere// in tempo reale il traffico WiFi captato. ===== Moduli kernel ===== Pare - per fortuna - che i moduli kernel per EeePC forniti dal pacchetto **''madwifi-modules-2.6.26-2-686''** (moduli speciali compilati per EeePC, disponibili su [[http://eeepc.debian.net/debian|eeepc.debian.net]]) forniscano il supporto alla **modalità monitor** e al **packet injection** per il **chip WiFI Atheros** contenuto nell'Asus. ===== Interfaccia in modo monitor ===== Il chip Atheros viene visto dal kernel come interfaccia **wifi0**, su questa possono essere attivate una o più **VAP** (access point o stazioni virtuali). Al normale avvio dell'Asus troviamo attiva l'interfaccia **ath0**, configurata in modo **managed** (detto anche modo **station**). Per attivare un'interfaccia in modo **monitor** (che consenta lo sniffing del traffico WiFi) diamo come root i seguenti comandi: killall knetworkmanager wlanconfig ath0 destroy airmon-ng start wifi0 Come si vede la prima azione è di chiudere il networkmanager (in questo caso quello di KDE), che altrimenti si ostina a gestire il WiFi, fare scanning degli AP disponibili, ecc. Poi eliminiamo la normale interfaccia **ath0** che dice possa dare fastidio durante il monitoraggio. Infine con il comando **''airmon-ng''** attiviamo una nuova interfaccia **ath1** in modalità **monitor**. Se invece vogliamo usare Kismet la procedura iniziale è leggermente diversa perché Kismet provvede autonomamente a creare un'interfaccia monitor, chiamandola **kis0**: killall knetworkmanager wlanconfig ath0 destroy kismet Nel file di configurazione **''/etc/kismet/kismet.conf''** abbiamo messo: source=madwifi_ab,wifi0,wifi0 Al termine delle operazioni di scanning, se volgiamo creare nuovamente l'interfaccia WiFi managed, questo è il comando: wlanconfig ath0 create wlandev wifi0 iwconfig ath0 mode managed ===== Cattura del traffico criptato ===== A questo punto si inizia l'analisi del traffico WiFi con il programma **''airodump-ng''**. Utilizzare l'interfaccia **ath1** oppure **kis0**, a seconda del caso: airodump-ng -w wifidump kis0 In un'altra console ogni tanto si verifica **quanto traffico WiFi** è stato catturato, in particolare interessa il numero di pacchetti WEP: airdecap-ng -b 00:41:14:5F:43:12 wifidump-01.cap Total number of packets read 22708 Total number of WEP data packets 1635 Total number of WPA data packets 0 Number of plaintext data packets 0 Number of decrypted WEP packets 0 Number of corrupted WEP packets 0 Number of decrypted WPA packets 0 Con il parametro **-b** abbiamo filtrato solo il traffico proveniente dall'access point che ci interessa. Il risultato di soli 1635 pacchetti in una intera notte è estremamente deludente: servono tra i 50000 e i 100000 pacchetti criptati prima di tentare la forzatura della chiave WEP. Il problema è che **l'access point non aveva client collegati che facessero traffico**. Infatti il tentativo di forzatura fallisce: aircrack-ng -a wep -n 128 -b 00:41:14:5F:43:12 wifidump-01.cap È necessario ricorrere a un trucco: bisogna inviare dei falsi pacchetti ARP request, ai quali l'access point risponderà con altrettanti pacchetti ARP reply. Sfrutteremo questo sistema per generare traffico sufficiente per condurre l'attacco. Fermiamo il programma ''airodump-ng'' e lanciamo invece **''wesside-ng''**: wesside-ng -v 00:41:14:5F:43:12 -i kis0 In questo modo siamo riusciti ad ottenere quasi **50000 pacchetti WEP** in circa **20 ore di attacco**. Purtroppo anche con 50000 pacchetti il tentativo di crack è fallito! ===== Come dovrebbe funzionare ===== Per vedere come avviene il crack, generiamo un falso dump di pacchetti WEP ed eseguiamo ''aircrack-ng'' su di esso: makeivs-ng -b 00:41:14:5F:43:12 -w wififakedump.ivs -k 011ab5634e357cbaca9a4b3b2b5 -c 50000 aircrack-ng -a wep -n 128 -b 00:41:14:5F:43:12 wififakedump.ivs Il comando ''makeivs-ng'' genera pacchetti WiFi contenenti gli IV (initialization vector) utili al crack. dagli esperimenti fatti il crack funziona se si hanno oltre 50000 pacchetti IV. Se si hanno a disposizione diversi file .cap è possibile estrarre tutti i pacchetti contenenti gli IV e concatenare i file in uno solo: ivstools --convert file.cap file.ivs ivstools --merge file*.ivs singlefile.ivs ===== Come è finita ===== Dopo tre giorni di tentativi infruttuosi, il proprietario dell'appartamento mi ha chiesto se per caso avevo bisogno dell'accesso internet, visto che al piano di sotto aveva l'ADSL con il router WiFi acceso... La cosa che mi ha lasciato di sasso è che la password (128 bit) erano 13 semplici cifre, che ''aircrack-ng'' non riesce a trovare neanche con l'opzione **''-c''** (search alpha-numeric characters only). Per verificare la correttezza del mio operato ho controllato che i pacchetti WEP fossero davvero criptati con tale chiave, suggerendo ad aircrack-ng gli ultimi 12 caratteri della stessa (tutti tranne il primo!): aircrack-ng -b 00:41:14:5F:43:12 -d XX:38:32:37:32:36:36:39:37:33:34:35:31 wifidump-01.cap In questo caso ''aircrack-ng'' è stato in grado di verificare la chiave e trovare il byte mancante. In conclusione - contrariamente a quanto si legge - craccare una chiave WEP non è lavoro da compiere in modo estemporaneo, ma richiede un po' di impegno. ===== Mappa wardriving ===== Alla ricerca di un access point libero abbiamo sfruttato anche **le capacità di Kismet unite ad un GPS**. Dopo aver configurato **''gpsd''** con il ricevitore GPS iBlue 747 USB, configuriamo Kismet agggiungendo nel file di configurazione: gps=true gpshost=localhost:2947 Avviamo Kismet e partiamo per un giro di wardriving. Al rientro controlliamo il file di log creato da Kismet, ci dovrebbero essere dei file in **''/var/log/kismet/''**, in particolare i file **.csv** e **.gps** servono al caso nostro. Con un po' di Python o Perl estraiamo dal .csv l'elenco (BSSID) degli access point senza protezione (campo 8 = None) e lo salviamo in un file di nome **''wifi-open''**. Poi lanciamo il comando **''gpsmap''** con questo script: #!/bin/sh log_file="/var/log/kismet/Kismet-Aug-13-2009-11.gps" center="--coords 43.5123,16.2804" scale="--scale 2000" MAC_LIST="" for mac in $(cat wifi-open); do if [ -z "$MAC_LIST" ]; then MAC_LIST="$mac" else MAC_LIST="$MAC_LIST,$mac" fi done gpsmap \ $center $scale \ --draw-track --draw-range --feather-range \ --filter $MAC_LIST --invert-filter \ -l ssid \ $log_file