# Sicurezza nelle reti WAN: GSM, UMTS

Le reti wireless, per loro natura, sono particolarmente esposte agli attacchi, perché non esistono limiti fisici che impediscano ad una persona di cominciare a sniffare i dati che transitano nell'aria; anzi, più passa il tempo e più l'hardware che serve per intercettare i dati diventa economico, regalando a tutti la possibilità di fruire di connessioni wireless come il telefono cellulare, il bluetooth, il Wi-Fi o il nascente WiMAX.
Il mezzo di trasmissione dei dati non è un cavo, ma è l'aria, quindi un luogo dove, per definizione, gli attacchi passivi sono estremamente semplici da fare ed estremamente difficili da scoprire; gli attacchi attivi sono poco più difficili da fare, ma comunque estremamente probabili.
La natura del mezzo, condiviso, rende le performance dell'infrastruttura molto più basse rispetto ad una rete cablata, dove i cavi sono, solitamente, dedicati punto-punto tra un client ed un router. Il fatto, inoltre, che il mezzo sia condiviso, rende estremamente difficoltosa ed importante l'autenticazione degli utenti nella rete.
Gli apparecchi che accedono alle reti senza fili sono, tipicamente, apparecchi mobili; di conseguenza la frequenza con cui si hanno le disconnessioni e riconnessioni in un altro luogo è elevata (si pensi ai cellulari in automobile): questo porta alla necessità di implementare protocolli che siano in grado di gestire eventi di scomparsa/ricomparsa dei terminali in tempi rapidi, in tempo reale.
Un'ultima osservazione sui dispositivi: essendo mobili, hanno a disposizione una potenza computazionale bassa, una memoria piccola ed energia limitata: questi fattori devono essere presi in considerazione, al fine di creare dei protocolli sì sicuri, ma anche semplici da implementare.
La sicurezza nell'ambito wireless, fin dall'inizio dell'utilizzo sistematico di apparecchi mobili, è sempre derivata dai meccanismi messi in atto per proteggere anche le reti cablate; questo approccio, tuttavia, non ha portato ai risultati sperati ed è sempre fallito.

## Il sistema GSM

Osserviamo l'architettura del GSM, semplificata:
Abbiamo diversi strumenti:
* ME, il Mobile Equipment, l'apparecchio mobile;
* SIM, Subscriber Identity Module
* BTS, Base Transceiver Station
* BSC, Base Station Controller
* MSC, Mobile Switching Center
* VLR, Visiting Location Register, il registro locale degli utenti presenti (tutto il nord Italia risponde ad un unico VLR);
* HLR, Home Location Register, il registro principale, una grandezza predefinita all'interno della SIM;
* AuC, Authentication Center
* EIR, Equipment Identity Register, il database di tutti gli IMEI
Il GSM nasce nel 1980 come protocollo che doveva permettere
* autenticazione, gli utenti si autenticano alla rete; non era prevista autenticazione al contrario, cioè dalla rete agli utenti, perché la legge avrebbe vietato di installare dei servizi GSM senza essere dei provider registrati;
* calcolo di chiavi effimere;
* tenere il più segreto possibile l'identità, il numero di telefono dell'apparecchio collegato alla rete.
Per l'autenticazione, le credenziali usate erano
* l'International Mobile Subscriver Identity IMSI, un identificatore internazionale univoco;
* una pre-shared key $K_{i}$, nota soltanto al gestore;
* il codice IMEI del telefono cellulare.
L'IMSI e la chiave segreta $K_{i}$ sono salvati all'interno della SIM del telefono, e non furono previste API che permettessero di leggere questi valori; il codice IMEI, al contrario, deve essere a disposizione del possessore del terminale: infatti, questo codice serve per etichettare un telefono come senza problemi, sotto osservazione o rubato.
All'interno della SIM sono conservate anche le implementazioni di tre algoritmi:
* A3, un algoritmo di autenticazione;
* A5, un algoritmo che permette la confidenzialità (la cifratura);
* A8, un algoritmo necessario per generare le chiavi temporanee.

### Autenticazione GSM

File:Sicurezza GSM meccanismo autenticazione semplificato.png
Quando un terminale viene acceso, la prima cosa che succede è uno scambio di messaggi tra il server MSC/VLR ed il server HLR/AuC. Il server VLR manda al server di autenticazione AuC, che contiene il database di tutti gli utenti registrati presso l'operatore, una richiesta di autenticazione per il terminale che si è appena acceso, mandando il numero IMSI della SIM. Il server AuC usa proprio il numero IMSI per indicizzare tutti gli utenti sotto il suo controllo.
Questo scambio di messaggi permette all'MSC/VLR di salvare nella propria memoria un numero $n$ di authentication vector AV, con i quali potranno essere instaurate $n$ connessioni con l'apparecchio che si vuole inizializzare; quando questi vettori saranno finiti, allora sarà necessario contattare nuovamente il server HLR.
Ognuno dei vettori nella memoria del VLR contiene:
* un numero rand da mandare al terminale come challenge;
* un numero SRES, che indica la risposta che il terminale dovrà dare per la challenge;
* delle chiavi temporanee $K_{C}$ necessarie all'algoritmo A5 per permettere la confidenzialità dei dati scambiati nell'etere.
Il server MSC/VLR inoltra una richiesta di autenticazione al mobile system MS, con la challenge; il terminale calcola la chiave $K_{C}$ corretta e la risposta, in base alla challenge ricevuta, da mandare al server. A questo punto, il terminale invia al server la risposta derivata dalla challenge e, se la risposta è corretta, il terminale è autenticato.
Già nel 1999 tutto il protocollo GSM era stato violato in ogni sua forma; questo fatto è da addebitare sicuramente agli errori di progetto e concettuali che sono stati commessi dagli ideatori del protocollo stesso. Quello che è mancato è stata una cooperazione nel campo scientifico, anzi, si è cercato di tenere i protocolli, e le soluzioni adottate, il più segreti possibile: un atteggiamento di questo tipo va contro uno dei principi cardine della crittografia, che dice che tutta la sicurezza di un apparato crittografico deve risiedere soltanto nella chiave di cifratura, e non può dipendere dalla segretezza dell'algoritmo.

### Algoritmo di autenticazione A3

Come detto, ci sono tre algoritmi memorizzati all'interno di ogni SIM. L'algoritmo A3 è quello deputato all'autenticazione; si tratta di un algoritmo distribuito, che viene eseguito tra il mobile system ed il server di autenticazione AuC; come conseguenza di questo fatto, ciascun operatore può scegliere l'algoritmo che preferisce.
Il primo algoritmo con cui fu presentato lo standard è il COMP128, un algoritmo tenuto segreto dagli sviluppatori per aumentare la sicurezza di tutto il sistema. Nel 1998, questo algoritmo fu completamente crittanalizzato e fu creato un attacco chosen-challenge che permetteva di ricavare la chiave $K_{i}$ dalla SIM dell'operatore. Grazie alla $K_{i}$, è sufficiente un attacco passivo per ricavare tutte le chiavi $K_{C}$ utilizzate per cifrare le connessioni dati: non c'è più la segretezza nelle comunicazioni.
Gli attacchi alla SIM per scoprire la chiave $K_{i}$ possono essere di due tipi:
* con accesso fisico alla SIM (per esempio, quando è ancora nel negozio del venditore) si ha la garanzia di riuscire nell'intento;
* installando una stazione base BTS fasulla, si può attaccare la SIM nell'etere. Questa manovra è resa molto semplice dal fatto che l'autenticazione, nel GSM, è solo dal terminale alla rete: il telefono cellulare si fida sempre della rete.
Con 1200 pacchetti introdotti nella rete, si ha il 70% di probabilità di successo, cioè la probabilità di ottenere la $K_{i}$ è molto significativa. L'unico freno ad attacchi di questo tipo, da sempre, sono i costi altissimi per un impianto BTS per GSM e il fatto che è vietato dalla legge installare ed attivare BTS.

### Algoritmo di cifratura A5

L'algoritmo di cifratura A5 serve per proteggere i dati che transitano nell'aria (dall'MS fino alla BSC), ma non nella rete interna (cablata) dell'operatore. Questo fatto è dovuto all'ipotesi che la struttura interna e tutti i backbone delle aziende di telecomunicazioni vengono considerati sicuri, cioè un luogo in cui Trudy non può mettere piede. Questo, di fatto, non è vero.
A5 è un algoritmo di cifratura a flusso che è stato crittanalizzato con successo nel 1999: il risultato di questa analisi è che, con un semplice attacco passivo e nell'ipotesi che un terminale resti per molto tempo all'interno del raggio d'azione di un singolo BTS , si riesce a ricavare la chiave temporanea $K_{C}$. Questo algoritmo, per poter fare roaming tra un operatore e l'altro, deve essere unico.
Un altro difetto, non secondario, dell'algoritmo A5 è che prevede una chiave $K_{C}$ lunga 64 bit, troppo poco per garantire sicurezza. L'unica cosa a favore della sua adozione è che, per lo meno, si tratta di una chiave effimera, che quindi non viene troppo abusata.

## Il sistema UMTS

Osserviamo l'architettura del UMTS, semplificata:
Abbiamo i seguenti apparecchi:
* ME, il Mobile Equipment, cioè il telefono cellulare;
* USIM, lo User Services Identity Module
* RNC, il Radio Network Controller
* PS e CS, il Packet Switched service ed il Circuit Switched service
* VLR, il Visiting Location Register
* HLR; il Home Location Register
* AuC, l'Authentication Center
* SGSN, il Serving GPRS Support Node
* GGSN, il Gateway GPRS Support Node
* H-AAA, l'Home-AAA
* F-AAA, il Foreign-AAA
* HA e FA, gli Home Agent e Foreign Agent

### Authentication and Key Agreement

AKA, che sta per autenticazione e negoziazione delle chiavi, è un protocollo che permette autenticazione mutua, basato sullo standard ISO/IEC 9798-4.
Per fornire la confidenzialità e l'integrità dei dati, AKA prevede il calcolo di chiavi effimere: con queste chiavi, saranno protetti
* il luogo in cui si trova il mobile system;
* i servizi offerti dalla rete, come la connessione dati o le telefonate;
* l'IMSI.
File:Sicurezza UMTS AKA connessione device.png
Quando un apparecchio vuole collegarsi alla rete, manda una richiesta al server MSC/VLR (nel caso di device voce) o al server SGSN/VLR (nel caso di richieste dati). Il server contattato inoltra la richiesta dell'identità del terminale, il quale risponde presentando come credenziale il proprio codice IMSI, che non viene in alcun modo protetto.
Soltanto a questo punto il terminale, con il server VLR ed il server HLR/AuC eseguono il protocollo AKA. Successivamente, se il terminale si sposta di zona, allora ci sarà una location update tra i server VLR e HLR. Il numero IMSI, in questa maniera viene trasmesso all'interno della rete: questo comportamento è necessario perché il numero IMSI non è presente nel database locale del server VLR; al contrario, dopo la prima autenticazione, verrà accordata una credenziale temporale TMSI da usare per le successive segnalazioni.
All'interno della SIM del device vengono salvati:
* le credenziali IMSI (di lungo periodo), TMSI e P-TMSI (temporanee, per voce o dati);
* una pre-shared key $K$, condivisa tra la SIM e il server AuC.
La pre-shared key $K$ è l'unica credenziale usata per autenticare la rete al mobile device.
A differenza del GSM, gli algoritmi di cifratura usati per l'UMTS sono standardizzati e pubblici.
File:Sicurezza UMTS AKA connessione device scambio pacchetti.png
Quando un terminale entra nella zona di pertinenza di un certo VLR, questo manda al server HLR/AuC la richiesta di identificazione del terminale, indicando l'IMSI da autenticare. Il server AuC, se autentica, risponde con un elenco di Authentication vector AV, esattamente come nel GSM, contenente $n$ stringhe di autenticazione con i campi:
* XRES, la risposta che si attende dal terminale;
* AUTN, in numero che servirà al terminale per autenticare la rete;
* le chiavi effimere per la connessione degli apparecchi.
A questo punto, il server VLR invia al terminale una richiesta di autenticazione in cui viene inserita la challenge e AUTN. Il terminale calcola XRES ed autentica la rete, dopodiché risponde con il risultato dell'elaborazione della challenge: se questo risultato coincide con XRES, allora anche il terminale è autenticato.
Il fatto che si usi un elenco di authentication vector porta con sé un problema: deve essere mantenuto uno stato tra il terminale e il server VLR, cosa che non è banale, specie in una rete wireless; tuttavia, nel caso vi siano perdite di dati durante la comunicazione del nuovo stato, è necessario eseguire una nuova autenticazione, procedura che necessita di qualche secondo di tempo, in cui il terminale non può comunicare e tutte le sue connessioni cadono.

#### Authentication Center

All'interno dell'AuC, il server di autenticazione, è salvato un database, ordinato secondo i valori IMSI delle diverse SIM. Ad ogni IMSI corrispondono diversi parametri:
* la pre-shared key $K$, che il terminale tiene nella sua memoria;
* SQN, il numero di sequenza corrente.
Ogni singolo vettore di autenticazione è una stringa che contiene la concatenazione del risultato di cinque funzioni. La funzione $f_{1}$ accetta in ingresso i parametri
* $K$, la pre-shared key, che è lunga 128 bit;
* $AMF$, l'Authentication and Key Management Field, un campo di 16 bit che serve a gestire alcuni casi particolari, in cui le funzioni usate siano diverse da quelle standard;
* $SQN+1$, il nuovo numero di sequenza, lungo 48 bit;
* un numero casuale $RAND$ di 128 bit.
La funzione $f_{1}$, quindi, accetta in ingresso 320 bit, di cui calcola un MAC da 64 bit. Le altre funzioni, invece, accettano in ingresso soltanto la pre-shared key $K$ ed il numero casuale:
* $f_{2}$ calcola l'expected response XRES;
* $f_{3}$ calcola la chiave di cifratura effimera $CK$;
* $f_{4}$ calcola una chiave per la verifica dell'integrità dei dati, l'integrity key IK;
* $f_{5}$ calcola l'Anonimity key AK.
L'authentication vector sarà composto da:
$AV_{i}=[RAND|XRES|CK|IK|AUTN]$
dove
    $AUTN=[AK\oplus SQN|AMF|MAC]$
Il numero di sequenza è un'alternativa all'utilizzo nelle nonce; infatti, il mobile device accetterà l'autenticazione fatta con $AUTN$ della rete soltanto se questa contiene un numero di sequenza non ancora utilizzato. In questa maniera, si garantisce l'impossibilità di replay attack e si diminuisce il numero di messaggi che devono essere scambiati per eseguire l'autenticazione.
Il principale difetto del numero di sequenza è il fatto che deve essere mantenuto sincronizzato dal terminale e dal server; per riallineare due numeri di sequenza sbagliati, la procedura è dispendiosa, in quanto servono un certo numero di messaggi nella rete (quindi, tempo) ed un'autenticazione diversa.
L'Anonimity Key AK serve per proteggere il numero di sequenza: se questo, infatti, fosse trasmesso in chiaro, basterebbe un semplice attacco passivo per scoprirlo ed abbassare in maniera drastica la sicurezza di tutto il protocollo. Inoltre, osservando il numero di sequenza, Trudy potrebbe scoprire alcune informazioni su Alice, come per esempio la sua posizione o anche la sua identità, tracciandone i movimenti.

#### Mobile System

Quando al terminale arriva il vettore, si deve procedere all'autenticazione della rete. Grazie alla funzione $f_{5}$, che prende in ingresso il numero casuale $RAND$ e la pre-shared key $K$, si deriva l'anonimity key $AK$; grazie all'$AK$ si può, con uno XOR, calcolare il numero di sequenza dichiarato dalla rete.
I valori $AMF$, $SQN$, $K$ e $RAND$ concorrono, grazie alla funzione $f_{1}$, al calcolo del numero $XMAC$, da confrontare con il valore $MAC$ contenuto sempre nel vettore di autenticazione AV.
I valori $RAND$ e $K$, inoltre, saranno usati per le funzioni $f_{2}$, $f_{3}$ e $f_{4}$ per calcolare i valori
* $RES$;
* $CK$;
* $IK$.
Quindi, i parametri su cui il terminale basa l'autenticazione della rete sono il risultato della funzione $f_{1}$ e il numero di sequenza corretto, che viene salvato ogni volta all'interno della memoria della SIM. Accade spesso che i numeri di sequenza sono errati, magari di uno o due passaggi; in questi casi, la procedura prevede di tralasciare l'errore, in quanto la probabilità che si tratti di un attacco è comunque bassa, mentre la procedura di sincronizzazione dei terminali è onerosa.
Se il numero $XMAC$ è sbagliato, il protocollo prevede che non venga mandato alcun pacchetto nella rete.
Tutte le funzioni per la cifratura e l'autenticazione vengono eseguite dalla SIM, e non dal terminale, che resta quindi soltanto un componente passivo in questa fase dell'utilizzo.

#### Visiting Location Register

Una volta che la procedura di autenticazione della rete è stata eseguita, il terminale manda al server VLR un messaggio con il numero $RES$, in modo tale da permettere l'autenticazione del terminale con la rete. La verifica è semplice, perché $RES$ deve coincidere con il valore $XRES$ che il server VLR ha ricevuto dal server AuC all'interno dell'array di vettori di autenticazione.
Come nel caso del GSM, anche nel protocollo UMTS è previsto che il VLR possa eseguire $n$ autenticazioni con il terminale, senza che per questo si debba contattare il server di autenticazione AuC. Quando i vettori di autenticazione sono terminati, però, il VLR deve contattare nuovamente il server AuC per poter continuare le autenticazioni tra sé e il mobile system.

### Confidenzialità in UMTS

Nel mondo UMTS, sia i dati di segnalazione, sia le comunicazioni degli utenti, devono essere cifrati. Per quanto riguarda le comunicazioni tra il mobile device ed il server RNC, si usa un algoritmo di cifratura a blocco, che consiste nell'eseguire uno XOR tra i singoli blocchi della sequenza di dati e dei blocchi calcolati attraverso una funzione $f_{8}$; questa funzione accetta in ingresso i parametri
* CK, la chiave di cifratura effimera;
* un contatore COUNT-C, che serve per impedire che la stessa chiave possa essere generata più volte;
* un identificatore BearerID, di 5 bit, che indica il canale aperto tra i due soggetti;
* un bit di direzione, che indica se si tratta di flusso dati in uplink o in downlink;
* la lunghezza dei blocchi di cifratura, indicata con 16 bit.
Dalla funzione $f_{8}$ esce un flusso di chiavi, il keystream, che viene messo in XOR a blocchi con il testo originale.
Al destinatario, la stessa funzione $f_{8}$, con gli stessi parametri, sarà in grado di generare lo stesso flusso di chiave che, messo nuovamente in XOR con il testo cifrato, permette di ricavare il messaggio originale.
È importante notare che, ancora una volta, la cifratura avviene soltanto quando il segnale è nell'aria, tra il telefono e la ricetrasmittente della compagnia di telecomunicazioni: qui tutto viene decifrato e transita in chiaro all'interno della rete dell'operatore (o degli operatori), fino alla terminazione successiva, che può essere un telefono tradizionale (che non usa cifratura), oppure un altro server RNC che si occuperà di cifrare nuovamente il messaggio, con chiavi diverse, per trasmetterlo al destinatario sul proprio telefono cellulare.

### Integrità dei dati

L'integrità dei dati, sia quelli dell'utente che quelli per le segnalazioni, viene garantita da un'altra funzione, la $f_{9}$, che è una funzione di MAC.
La funzione $f_{9}$ accetta in ingresso:
* IK, la chiave d'integrità appositamente generata;
* un contatore COUNT-I;
* il messaggio da proteggere;
* un bit di direzione;
* un FRESH, un numero di nonce che viene mandato dalla rete al terminale mobile, prima che inizi la cifratura dei dati, per prevenire replay attack.

### L'algoritmo Kasumi

Le funzioni $f_{8}$ e $f_{9}$ derivano dal cifrario KASUMI (brevetto software Mitsubishi), hanno blocchi di 64 bit; il cifrario KASUMI, a sua volta, implementa uno schema simile a quello di Feistel. Ad oggi, queste funzioni sono state crittanalizzate in maniera esaustiva, senza che siano stati trovati bachi importanti.

## Conclusioni

Dal confronto tra GSM ed UMTS, quest'ultimo è uscito vincitore; i suoi punti forti sono la sicurezza, che è stata pensata da professionisti e che non trova le sue radici nella segretezza dell'algoritmo, ma si fonda soltanto sulla sicurezza della chiave, come dovrebbe sempre essere.
I protocolli di autenticazione e di cifratura UMTS sono nati e sono stati pensati proprio per il mondo wireless, e dimostrazione è il fatto che non esiste alcun meccanismo di cifratura asimmetrica, che è molto oneroso e quindi difficile da utilizzare in apparati mobili, alimentati da batteria.
Di fondamentale importanza il fatto che, sia nell'UMTS che nel GSM, la cifratura protegge i dati soltanto nella trasmissione tra il terminale e l'antenna più vicina, mentre sono trasmessi in chiaro in tutta l'infrastruttura rimanente: la sicurezza dei dati dipende, quindi, anche dalla sicurezza fisica dei cavi e dalla fiducia negli operatori sui cui apparati transitano le comunicazioni.