Evil access point con Linux a pochi euro…

Finalmente è arrivato l’adattatore USB WIFI wireless LAN 802.11 che ho comprato per pochi euro su Amazon: cercavo un adattatore con chipset RealTek RT5370, che mi permettesse di impostare la modalità “ap” (access point) e che fosse pienamente compatibile con GNU/Linux.

Seguendo le guide disponibili in rete, con qualche piccola modifica, ho creato un access point libero “wifi” con il mio laptop, dove è installata Linux Mint Debian Edition. Nel titolo ho usato la definizione di “evil” perché, in realtà, lo scopo di questo mio post è spiegarvi come realizzare, con pochi euro, un access point “fasullo” per intercettare il traffico di rete di tutti i dispositivi wifi che, nelle vicinanze, “furbescamente” penseranno di agganciarsi ad una rete wifi libera ed aperta… magari proprio di un qualche inetto che si è dimenticato di configurare adeguatamente il proprio access point !

L’obiettivo è dimostrare come sia importante non sottovalutare mai aspetti spesso trascurati, come la sicurezza delle connessioni e dei dati che facciamo transitare in rete attraverso punti di accesso non conosciuti (e sicuri).

Come si può ben vedere nel grafico riepilogativo, i dispositivi “utente”, come smartphone e laptop nelle vicinanze, si connettono alla nostra “wlan1” (il nome del dispositivo può ovviamente cambiare a seconda della vostra configurazione), un access point “aperto e libero” da dove i pacchetti vengono routati sulla nostra connessione ad internet (che può essere una reale connessione WifFi oppure una chiavetta 3G….). Nel mezzo ci siamo noi, con il nostro “laptop rosso” ed uno sniffer/packet capture installato e funzionante, in ascolto proprio sulla “wlan1”.

ATTENZIONE !
Lo scopo di questo articolo è puramente didattico e l’autore declina qualsiasi responsabilità in merito ad eventuali usi ILLEGALI di quanto descritto. E’ bene ricordare, infatti, che una simile attività può essere punita dalla legge.

Vediamo adesso come procedere.

[sociallocker]

Dongle WiFI USB
Dongle WiFI USB

Configurazione dell’hardware

Iniziamo inserendo l’adattatore WiFI in una delle porte USB disponibili e verifichiamo che ‘lsusb’ ed il log di sistema riportino correttamente il dispositivo:

Bus 001 Device 034: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

in /var/log/messages:

kernel: [62956.043417] usb 1-2: New USB device found, idVendor=148f, idProduct=5370
kernel: [62956.043422] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: [62956.043426] usb 1-2: Product: 802.11 n WLAN
kernel: [62956.043429] usb 1-2: Manufacturer: Ralink
kernel: [62956.043432] usb 1-2: SerialNumber: 1.0
kernel: [62956.496491] ieee80211 phy1: rt2x00_set_rt: Info - RT chipset 5390, rev 0502 detected
kernel: [62956.506862] ieee80211 phy1: rt2x00_set_rf: Info - RF chipset 5370 detected
kernel: [62956.507468] usbcore: registered new interface driver rt2800usb
kernel: [62956.714214] ieee80211 phy1: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
kernel: [62956.722704] rt2800usb 1-2:1.0: firmware: agent loaded rt2870.bin into memory
kernel: [62956.722711] ieee80211 phy1: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29
kernel: [62956.875792] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready
kernel: [64122.238227] 8021q: 802.1Q VLAN Support v1.8

Configurazione della rete

A questo punto assegnamo un indirizzo IP alla nostra nuova interfaccia, wlan1, con il comando “ifconfig wlan0 192.168.0.1“. Dopodiché configuriamo iptables per il masquerading dei pacchetti, che dovranno circolare in maniera trasparente tra la wlan1 e la wlan0:

iptables -A FORWARD --in-interface wlan1 --out-interface wlan0 --source 192.168.1.0/255.255.255.0 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Dopodiché installiamo i due pacchetti per le funzionalità minime di un access point, dnsmasq e hostapd:

apt-get install dnsmasq hostapd

dnsmasq serve a gestire correttamente le richieste dns ed incorpora anche un semplice server DHCP, mentre hostapd gestisce le connessioni e l’eventuale autenticazione, supportando WEP, WPA, WPA2 ed una nutrita serie di opzioni, tra cui l’autenticazione su RADIUS etc…

Configurazione di hostapd

Una volta installato, è necessario copiare il file di configurazione di default “hostapdc.conf” dalla directory /usr/share/doc/hostapd a /etc/hostapd/. La configurazione è piuttosto banale e le righe da impostare sono:

# Net interface to use for AP
interface=wlan1

# SSID to be used in IEEE 802.11 management frames
ssid=default
# Operation mode (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g,
# Default: IEEE 802.11b
hw_mode=b

# Channel number (IEEE 802.11)
# (default: 0, i.e., not set)
channel=1

A questo punto editiamo il file /etc/default/hostapd e modifichiamo la linea DAEMON_CONF come segue:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

A questo punto possiamo avviare il demone hostapd e verificare che tutto funzioni come previsto, lanciando il comando “/etc/init.d/hostapd start” e sperare che non ci siano errori.

Una ulteriore verifica può essere fatta con il vostro smartphone Android, installando il software WiFi Analyzer  e controllando che vi sia un nuovo access point sul canale indicato con il SSID desiderato: nel nostro caso, canale 1 e SSID “default”.

Configurazione dnsmasq

Dopo l’installazione del pacchetto, editiamo il file di configurazione “/etc/dnsmasq.conf” nelle righe:

# If you want dnsmasq to listen for DHCP and DNS requests only on specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here. Repeat the line for more than one interface.
interface=wlan1
# This is an example of a DHCP range where the netmask is given
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h

Salviamo e (ri)avviamo il demone con “/etc/init.d/dnsmasq restart“. A questo punto il nostro nuovo access point dovrebbe già funzionare: verifichiamo dal log di sistema (/var/log/syslog) l’effettivo funzionamento:

hostapd: wlan1: STA b0:c4:e7:d9:xx:xx IEEE 802.11: authenticated
hostapd: wlan1: STA b0:c4:e7:d9:xx:xx IEEE 802.11: associated (aid 1)
hostapd: wlan1: STA b0:c4:e7:d9:xx:xx RADIUS: starting accounting session 54134D14-0000000F
dnsmasq-dhcp[5760]: DHCPDISCOVER(wlan1) b0:c4:e7:d9:xx:xx 
dnsmasq-dhcp[5760]: DHCPOFFER(wlan1) 192.168.0.127 b0:c4:e7:d9:xx:xx
dnsmasq-dhcp[5760]: DHCPREQUEST(wlan1) 192.168.0.127 b0:c4:e7:d9:xx:xx 
dnsmasq-dhcp[5760]: DHCPACK(wlan1) 192.168.0.127 b0:c4:e7:d9:xx:xx
[/sociallocker]

Pronti a mettersi in ascolto ?

Capture dei pacchetti sull'interfaccia wlan1
Capture dei pacchetti sull’interfaccia wlan1

A questo punto la nostra vittima, con il suo smartphone, ignara di essersi collegata ad un accesso point “maligno”, inizierà la sua navigazione in rete. Inoltre è bene considerare che molti smartphone moderni effettuano continuamente operazioni in rete, come la ricerca di aggiornamenti software, news, meteo, chat etc etc etc…

Per mettersi in ascolto e catturare tutto il traffico, lo strumento probabilmente più completo è Wireshark, uno sniffer open source che effettua anche il decoding dei pacchetti dal livello fisico in poi.

Dopo averlo scaricato ed installato (da console: sudo apt-get install wireshark), avviamo Wireshark e avviamo il capture sull’interfaccia “wlan1”.

Wifi Scanner sullo smartphone android
Wifi Scanner sullo smartphone Android

Con il mio smartphone mi connetto alla rete aperta e libera “default”, iniziando subito a generare una marea di traffico di rete dovuto ai tanti programmi installati che iniziano a sincronizzarsi (Dropbox, Instagram, Google…).

Traffico su wlan1
Traffico su wlan1

A questo punto l’abilità nello scovare qualcosa di interessante è proporzionale alla “fortuna”: fortunatamente per tutti noi utenti, gran parte delle password e dei dati “sensibili” (come e-mail, moduli etc etc etc…) viene trasmetta in forma cifrata via SSL, rendendo gli attacchi “man-in-the-middle” inutili, a meno che non si abbia il tempo e la volontà di tentare una decodifica (sempre che ne valga, ovviamente, la pena !). E’ anche vero che molti protocolli non si avvalgono della cifratura SSL (end-to-end) ma spesso adottano sistemi di codifica piuttosto semplici, come ad esempio WhatApp qualche anno fa (How to Hack WhatsApp Messenger). A tal proposito vi segnalo il sito PacketStorm Security dove, nella sezione Files, si possono trovare hack e whitepaper sulla sicurezza di software e protocolli.

Capture di google.it
Capture di google.it

Tuttavia gran parte delle pagine web non sono cifrate (anche perché spesso non ne vale la pena…) e può essere interessante vedere le abitudini “web” di coloro che sono, in questo momento, vicino a noi..

Nell’immagine a sinistra, ad esempio, la cattura dell’apertura di google.it da parte del browser installato sul mio smartphone. E’ ovvio che per comprendere adeguatamente i dati catturati è necessaria una conoscenza abbastanza approfondita del protocollo TCP/IP, HTTP ed HTML, altrimenti tutto questo sembrerà solamente un insieme di scritte incomprensibili…

Detto questo credo che il tutorial possa ritenersi completo. Vi invito, eventualmente, a lasciare la vostra domanda tra i commenti :-), oltre ovviamente ad eventuali attestati di apprezzamento (o meno)…

(Visitato in totale 10 volte, oggi 1 visite)

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.