Qualche considerazione su WiFi e WPA2

Da alcuni giorni, la comunità degli “esperti” di sicurezza informatica è entrata in agitazione per un nuovo attacco sul protocollo WPA2 che protegge le comunicazioni WiFi di tutti quegli oggetti che usiamo quotidianamente come smartphone, laptop, Smart TV ecc.

L’attacco è stato particolarmente scioccante perché il protocollo WPA2 era ritenuto sicuro, resistendo negli anni a svariati tentativi di compromissione.

Ma in cosa consiste questo attacco? Vediamo di capirne il funzionamento facendo riferimento all’articolo che è stato pubblicato.


Quando un client (ad es. uno smartphone) tenta di connettersi ad una rete WiFi protetta da WPA2 in modalità pre-shared key (PSK), tra questi due oggetti inizia un colloquio, chiamato handshake, il cui scopo è quello di stabilire una chiave di crittografia comune per cifrare le comunicazioni, proteggendole da attacchi tipici come la decifratura del contenuto, il packet replay o la creazione di pacchetti dati.

Questa chiave di cifratura si chiama “chiave di sessione” perché, dopo che la comunicazione è terminata, non viene più utilizzata (e anzi, deve essere distrutta dalla memoria).

L’handshake avviene “in chiaro”, ovvero senza alcuna protezione, e l’attaccante può osservere i pacchetti scambiati in questa fase, senza che questo rappresenti un problema.

Tralasciamo i dettagli su come questa chiave di sessione venga creata e chiamiamola temporal key, TK . Come viene utilizzata la TK? Ci sono varie possibilità, ma tutte funzionano generalmente nello stesso modo e il concetto da tenere presente è che non si dovrebbe utilizzare direttamente la TK per cifrare tutti i pacchetti, perché questo esporrebbe il traffico ad attacchi basati su analisi statistica (ad es. se uno stesso pacchetto cifrato compare due volte nel traffico un attaccante saprà che il mittente sta inoltrando lo stesso messaggio in chiaro).

Per superare questo tipo di problematica, si utilizza una modalità di cifratura che prevede la creazione di una chiave diversa per ciascun pacchetto trasmesso. Abbiamo quindi la seguente catena di chiavi:

Da sinistra verso destra, la vita della chiave diventa sempre più corta. La PSK viene cambiata raramente, la TK viene utilizzata per una sessione di comunicazione (tipicamente non più di un’ora) mentre la EK vive solo il tempo di un pacchetto (pochi microsecondi).

Come si genera la EK a partire dalla TK? L’operazione è molto semplice:

dove n è il numero sequenziale del pacchetto nel flusso dati. In crittografia questo tipo di quantità viene denominata nonce. Teniamo a mente questo termine.

H è una funzione di hashing di cui, in questo caso, viene utilizzata la proprietà di casualità del risultato: non è possibile correlare l’input e l’output senza applicare H all’input stesso. In altre parole, i bit di EK sembreranno scelti a caso e non vi sarà alcuna correlazione tra i vari EK.

Tuttavia, applicando H allo stesso input, e quindi allo stesso nonce, EK risulterà sempre lo stesso.

Quindi, lo schema di cifratura sarà il seguente:

Le stream in chiaro sarà trasformato nello stream cifrato attraverso un’operazione di XOR (⊕) con il cosidetto keystream, ovvero la sequenza delle chiavi EK. Quando modo di utilizzare un algoritmo di cifratura viene chiamato stream cipher.

Possiamo anche scrivere lo schema qui sopra con la formula seguente:

In uno schema siffatto è assolutamente importante non ripetere mai il keystream per due sequenze diverse pacchetti. In questo caso sarebbe possibile ricostruire il plaintext applicando le seguenti proprietà fondamentali dello XOR:

  • Il bit 0 è l’elemento neutro, ovvero x ⊕ 0 = x.
  • Ogni bit è l’inverso di se stesso, ovvero x ⊕ x = 0.
  • XOR è commutativo, i.e. x ⊕ y = y ⊕ x, e distributivo, i.e. (x ⊕ y) ⊕ z = x ⊕ (y ⊕ z) = x ⊕ y ⊕ z.

In pratica, in una formula costruita solo con operatori XOR si può rimuovere un numero pari dello stesso operando x.

Ora, se due pacchetti diversi sono stati cifrati con la stessa chiave, un attaccante può farne lo XOR ottenendo il seguente risultato:

Ecco che quindi abbiamo ottenuto lo XOR dei due pacchetti in chiaro. Da qui, ricostruire i singoli pacchetti è relativamente semplice. Va notato che questa “debolezza” degli stream cipher non è una parte innovativa dell’attacco KRACK al WPA2 essendo nota da tempo.


A questo punto, capire come funziona un attacco KRACK al WPA2 è relativamente semplice: basta infatti forzare la generazione dello stesso keystream per un traffico diverso, applicando poi l’ultima formula.

Come fare?

E’ sufficiente intercettare e manipolare il flusso dei pacchetti che transitano tra Access Point e client, effettuando un attacco Man-In-The-Middle — e nell’articolo c’è un modo furbo per farlo su una rete WiFi — bloccando il pacchetto che termina la fase di handshake, impedendogli così di raggiungere l’Access Point.

A quel punto, l’Access Point, secondo protocollo WPA2, ritrasmetterà il penultimo pacchetto dell’handshake che, giungendo al client, ne causerà il reset del nonce (i.e. si ricomincia a contare da capo) generando di conseguenza lo stesso keystream per un nuovo traffico.


Qualche considerazione finale:

  • La vulnerabilità può essere facilmente corretta, impedendo ai client di resettare il nonce.
  • Nella maggior parte dei casi, decifrare il traffico cifrato non è immediato da parte dell’attaccante perché vanno comunque applicati algoritmi statistici.
  • Le comunicazioni verso server HTTPS (per capirci, verso la vostra banca) sono protette da un protocollo diverso, il TLS, che è aggiuntivo rispetto al WPA2 e dal quale è totalmente indipendente.

Cosa fare? Aggiornate i vostri dispositivi con le patch che verranno via via rilasciate dai produttori e cercate, per quanto possibile, di utilizzare canali di comunicazione sicuri aggiuntivi rispetto al WPA2, come HTTPS o SSH ecc.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.