Repository 32bit  Forum
Repository 64bit  Wiki

Configurazione WPA

Da Slacky.eu.
Versione delle 10:02, 14 set 2006, autore: Gohanz (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)


Aspetti teorici e pratici del protocollo di cifratura WPA per trasmissioni wireless.

Questo documento è dedicato a tutti coloro che intendano configurare il WPA supplicant e renderlo automaticamente attivabile in fase di boot.


GNU Free Documentation License Notice

Il documento è distribuito sotto i termini della licenza GNU FDL così come enunciata nel seguente link: http://www.softwarelibero.it/gnudoc/gpl.it.txt. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the appendix entitled "GNU Free Documentation License".


Teoria

WPA (Wi-Fi protected Access) è un protocollo per la sicurezza delle reti wireless sviluppato dai membri del Wi-Fi Alliance (http://wi-fi.org) al fine di rimediare alle gravi falle di sicurezza del precedente protocollo WEP. Il WPA è nato dalla necessità di creare un protocollo che, oltre a risolvere le vulnerabilità del WEP, fosse compatibile con l'hardware di rete già esistente. Esso supporta la precedente gestione a chiave condivisa (PSK) e può gestire sia l'autenticazione dei server (WPA-EAP) che la distribuzione di differenti chiavi per ogni utente (WPA-PSK). Nello standard WPA sono incluse le seguenti funzionalità di protezione:

1. TKIP sostituisce WEP con un nuovo algoritmo di crittografia più potente 
(algoritmo di cifratura a blocchi RC4 con chiave a 128 bit) ma che utilizza le 
strutture di calcolo presenti nei dispositivi wireless esistenti per eseguire le 
operazioni di crittografia. Si riportano di seguito le peculiarità fondamentali 
del protocollo TKIP: 
·	verifica della configurazione di protezione dopo la determinazione delle 
chiavi di crittografia;
·	modifica sincronizzata della chiave di crittografia unicast per ogni frame;
·	determinazione di un'unica chiave di crittografia unicast iniziale per ogni 
autenticazione con chiave precondivisa.


2. message integrity check (anche detto “Michael”) atto a verificare l'integrità
dei messaggi: in pratica specifica un nuovo algoritmo che calcola un codice di
integrità del messaggio  (MIC) a 8 byte utilizzando le strutture di calcolo
disponibili nei dispositivi wireless esistenti. Il codice MIC viene inserito tra la 
porzione di dati del frame IEEE 802.11 e il valore ICV (valore di controllo 
dell'integrità) a 4 byte. Il campo MIC viene crittografato insieme ai dati del 
frame e al valore ICV. Michael fornisce, inoltre, protezione contro gli attacchi 
di tipo “riproduzione di pacchetti” attraverso l'utilizzo di un contatore di 
frame che impedisce all'attaccante di ritrasmettere un messaggio che è già 
stato trasmesso nella rete;


3. vettore di inizializzazione di dimensione doppia (48 bit) rispetto al WEP (per 
vettore di inizializzazione si intende una serie di bit utilizzata per definire lo 
stato iniziale della cifratura all'interno di un algoritmo criptografico);

4. obbligatorietà   dell'autenticazione   802.1x:   per   gli   ambienti   privi   di 
infrastruttura RADIUS (Remote Authentication Dial-In User Service), WPA 
supporta l'utilizzo di una chiave precondivisa (WPA-PSK), mentre per gli 
ambienti   dotati   di   infrastruttura   RADIUS,   sono   supportati   il   protocollo 
Extensible Authentication Protocol (WPA-EAP) e il servizio RADIUS.


Il protocollo WPA è stato progettato come standard transitorio tra il WEP e lo 
standard 802.11i (WPA2). Le novità principali di quest'ultimo tipo di protocollo è 
l'utilizzo dell'algoritmo CCMP, acronimo di  Counter-Mode/CBC-Mac Protocol, 
basato su AES, al quale è affidata la gestione delle chiavi e l'integrità dei messaggi, 
e il four way handshake. Onde evitare un eccessivo scostamento dalla reale finalità 
della   presente   guida,   si   rimanda,   per   maggiori   informazioni,   al   link 
http://it.wikipedia.org/wiki/WPA2

= Requisiti Software =

Requisiti minimi per l'installazione di wpa_supplicant consistono in un kernel 2.4.x o 
2.6.x e le Wireless Extensions dalla versione 15.
Di seguito sono riportati i drivers supportati dal wpa_supplicant:

<pre> 
Host AP driver for Prism2/2.5/3 (development snapshot/v0.2.x)
(http://hostap.epitest.fi/)
.	Linuxant DriverLoader (http://www.linuxant.com/driverloader/)
with Windows NDIS driver for your wlan card supporting WPA.
·	Agere Systems Inc. Linux Driver 
(http://www.agere.com/support/drivers/) 
·	Madwifi driver for cards based on Atheros chip set (ar521x)
(http://sourceforge.net/projects/madwifi/)

·	ATMEL AT76C5XXx driver for USB and PCMCIA cards
(http://atmelwlandriver.sourceforge.net/).
·	Linux ndiswrapper 
(http://ndiswrapper.sourceforge.net/).
·	Broadcom wl.o driver
·	Intel ipw2100 driver
(http://sourceforge.net/projects/ipw2100/)
·	Intel ipw2200 driver
(http://sourceforge.net/projects/ipw2200/)
·	BSD net80211 layer (e.g., Atheros driver) per FreeBSD 6-CURRENT.

Download ed Installazione

Gli esempi che seguiranno sono relativi alla configurazione del WPA su schede Atheros funzionanti con driver MadWiFi, ma sono applicabili anche agli altri tipi di chipset/drivers. Scaricare lo snapshot CVS da http://hostap.epitest.fi/wpa_supplicant/ (al momento della stesura del presente tutorial la versione stabile è la 0.3.8) e scompattare l'archivio in una directory a vostro piacimento:

root@legionario-portatile:/opt# tar xvzf wpa_supplicant-0.3.8.tar.gz

Entrare nella directory appena creata e creare il file .config attivando il supporto per le wireless extensions, il driver della nostra scheda e il controllo dell'interfaccia:

root@legionario-portatile:/opt/wpa_supplicant-0.3.8# vi .config
CONFIG_WIRELESS_EXTENSION=y
CONFIG_DRIVER_MADWIFI=y
CONFIG_CTRL_IFACE=y

Per drivers diversi da madwifi si dovrà inserire una delle seguenti righe:

CONFIG_DRIVER_HOSTAP=y
CONFIG_DRIVER_PRISM54=y
CONFIG_DRIVER_HERMES=y
CONFIG_DRIVER_ATMEL=y
CONFIG_DRIVER_WEXT=y
CONFIG_DRIVER_NDISWRAPPER=y
CONFIG_DRIVER_BROADCOM=y
CONFIG_DRIVER_IPW=y
CONFIG_DRIVER_BSD=y
CONFIG_DRIVER_NDIS=y

In presenza di drivers madwifi dobbiamo specificare nel Makefile il path di installazione dei drivers stessi. A tal fine, aggiungiamo la seguente stringa sotto la voce “CFLAGS +”:

-I /directory/di/installazione/madwifi

Pertanto, se madwifi è installato in /opt la parte relativa a CFLAGS del Makefile dovrà apparire in questo modo:

CFLAGS += -I../driver/modules -I../utils -I../hostapd -I/opt/madwifi

Sotto la voce CFLAGS possiamo comunque inserire anche i tradizionali FLAGS di compilazione gcc: per esempio su un Sempron 2400+ o su un Athlon xp si può aggiungere -march=athlon-xp A questo punto sarà sufficiente dare make per compilare e installare il wpa supplicant. Per poter gestire la scheda wifi copiamo i binari wpa nella directory di sistema:

root@legionario-portatile:/opt/wpa_supplicant-0.3.8# cp wpa_cli
wpa_supplicant wpa_passphrase /usr/local/sbin

Creiamo il file wpa_supplicant.conf in /etc e inseriamo le impostazioni di configurazione della trasmissione wireless da criptare:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
#
# rete domestica protetta con metodo WPA-Personal (WPA_PSK)
network={
ssid="nostro ESSID"
scan_ssid=0
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk="nostra passphrase"
}

Esaminiamo ciascuno dei parametri:

1. ctrl_interface=/var/run/wpa_supplicant

Questo parametro avrà effetto solamente se nel .config di cui sopra abbiamo inserito 'CONFIG_CTRL_IFACE=y'; esso creerà, nella directory specifcata, un socket per la gestione dell'interfaccia mediante i componenti wpa_cli; è vivamente consigliato inserirlo.

2. ctrl_interface_group=gruppo_wpa

Tale variabile consente agli utenti del gruppo specificato la gestione dell'interfaccia, in quanto, di default, wpa_supplicant è configurato per essere usato solamente da root; pertanto, se vogliamo consentire a utenti non-root di prendere il controllo dell'interfaccia possiamo creare un nuovo gruppo (per es. gruppo_wpa) e aggiungervi gli utenti abilitati, altrimenti non sarà necessario inserire tale riga.

3. Network={

Apre la relativa funzione.

4. ssid="nostro ESSID"

Vi dobbiamo inserire il nostro ESSID per poter comunicare con il router o Access Point.

5. scan_ssid=0

Si possono inserire i seguenti valori:

      0 = scelta consigliata, valida per la maggioranza delle configurazioni, in quanto 
evita di eseguire la scansione del SSID specificato per trovare SSIDs  
multipli.
	1 = scansiona il SSID specificato nel caso in cui il nostro AP non accetti SSID in 
	broadcast oppure faccia uso di SSIDs multipli; usarlo solo in caso di stretta 
	necessità in quanto questa opzione aggiunge considerevoli tempi di latenza.
6. key_mgmt=WPA-PSK

Il parametro key_mgmt serve a individuare il protocollo di gestione della chiave di autenticazione, in questo caso il WPA Pre Shared Key.

7. pairwise=CCMP TKIP

Assicura la compatibilità con WPA2 e WPA.

8.	group=CCMP TKIP WEP104 WEP40

Il parametro group ha la funzione di specificare i metodi di cifratura adottati:

CCMP = algoritmo di cifratura AES (richiesto dallo standard 802.11i/WPA 2);
TKIP = Temporal Key Integrity Protocol;
WEP104 e WEP40 = idoneo a mantenere la compatibilità con il protocollo 

WEP avente chiave di cifratura a 104 e 40 bit.


8. psk="nostra passphrase"

La “frase chiave” specificata dal parametro psk deve essere, ovviamente, identica a quella inserita nelle impostazioni dell'Access Point. Dopo aver inserito i parametri esatti in /etc/wpa_supplicant.conf possiamo verificare il funzionamento del wpa_supplicant:

wpa_supplicant -d -c/etc/wpa_supplicant.conf -ieth0

[in caso di scheda diversa da eth0 dobbiamo immettere il nome esatto della stessa, cosi' come assegnato dal kernel]

Appena premeremo invio vedremo comparire a schermo, per qualche secondo, una lunga serie di dati. Questa stringa serve ad avviare il supplicant in foreground con la modalità di debugging attivata onde individuare eventuali problemi nel processo di cifratura. Qualora il tentativo di criptazione della trasmissione dovesse andare a buon fine, potremo avviare il wpa supplicant in background:

wpa_supplicant -B -c/etc/wpa_supplicant.conf -ieth0 

Avvio Automatico

Per far partire automaticamente, in fase di boot, il wpa supplicant dobbiamo apporre le seguenti modifiche ai sottonotati script di avvio:

1. aggiungere   in  /etc/rc.d/rc.wireless.conf	,   subito   dopo   la   variabile 
'VERBOSE', la seguente riga:
WPA="y"
2. quindi aggiungere le seguenti righe in fondo a /etc/rc.d/rc.wireless:

attiva il wpa se in rc.wireless.conf ne e' richiesta l'attivazione

if [ "$WPA" = "y" -a -x /usr/local/sbin/wpa_supplicant ]; then
/usr/local/sbin/wpa_supplicant -Bw -c/etc/wpa_supplicant.conf -i${INTERFACE}
fi

l'opzione 'B' serve ad avviare il supplicant in background, mentre l'opzione 'w' dice al supplicant di attendere che l'interfaccia di rete sia attiva prima di iniziare la cifratura della trasmissione.

Nel caso in cui avessimo una scheda wifi Atheros configurata sulla base delle istruzioni contenute nel manuale reperibile presso http://www.slacky.it/modules.php?name=Content&pa=showpage&pid=108 (se non raggiungibile, andare alla sezione HOWTO di www.slacky.it ), i sopraccitati scripts rc.wireless e rc.wireless.conf dovranno essere intesi, rispettivamente, come rc.wireless-atheros e rc.wireless-atheros.conf.

Come già accennato precedentemente, il funzionamento dell'interfaccia può essere controllato attraverso l'applicativo wpa_cli (per avere la lista dei comandi supportati eseguire 'wpa_cli 'help'). Buon lavoro!

- Alessio Grillo - grillo.alessio@libero.it
gpg key available at http://keyserver.linux.it
Strumenti personali
Namespace

Varianti