Un indirizzo MAC può trasformarsi in un’indicazione geografica: è proprio questa la capacità che rende WaveDigger (repository GitHub) uno strumento tanto semplice da usare quanto interessante dal punto di vista tecnico: inserendo il BSSID (Basic Service Set Identifier) di una rete Wi-Fi, il progetto interroga il servizio di localizzazione utilizzato da Apple e, quando l’identificatore è presente nel database, mostra sulla mappa la posizione associata all’access point. Non serve conoscere l’SSID, collegarsi alla rete o trovarsi fisicamente nelle vicinanze.
Il database Apple sul posizionamento di access point WiFi e celle della telefonia mobile
I sistemi di posizionamento basati sulle reti Wi-Fi esistono da parecchio tempo ed Apple descrive ufficialmente l’uso di un grande database crowd-sourced di hotspot Wi-Fi e stazioni radio cellulari. Crowd-sourced, in questo caso, significa che l’archivio cresce grazie alle osservazioni raccolte dai dispositivi degli utenti: con la Localizzazione attiva, iPhone e iPad dotati di GPS possono inviare periodicamente ad Apple, in forma anonima e crittografata, la posizione geografica degli access point Wi-Fi e delle antenne cellulari rilevati nelle vicinanze.
Incrociando nel tempo moltissime osservazioni dello stesso BSSID (di fatto l’indirizzo MAC dell’access point Wi-Fi) o della stessa cella con coordinate GPS note, Apple può associare quegli identificatori radio a una posizione approssimativa. Il database diventa così uno dei riferimenti utilizzati da iOS e dagli altri dispositivi Apple per determinare più rapidamente la posizione, soprattutto quando il segnale GPS è debole, assente o richiede troppo tempo per fornire un aggiornamento attendibile.
WaveDigger porta quel principio dentro un’interfaccia moderna: il progetto, pubblicato come software open source, non si limita alle reti Wi-Fi ma permette di cercare anche celle LTE e 5G NR partendo dai rispettivi parametri di rete. Le richieste finiscono sull’endpoint gs-loc.apple.com/clls/wloc, uno dei servizi utilizzati dall’infrastruttura di localizzazione Apple.
Cos’è il BSSID e perché può rivelare una posizione
Prima di vedere come funziona WaveDigger, conviene distinguere due identificatori che spesso si confondono. SSID è il nome leggibile della rete, ad esempio “Ufficio-WiFi” oppure “Casa“. BSSID identifica invece uno specifico Basic Service Set IEEE 802.11 e normalmente assume la forma di un indirizzo MAC a 48 bit.
Non esiste necessariamente una corrispondenza uno a uno tra router e BSSID: un singolo access point wireless può pubblicare diversi identificativi. Rete principale e rete guest, frequenze differenti, SSID multipli o interfacce virtuali possono generare identificatori distinti pur partendo dallo stesso apparato fisico. Nei sistemi mesh Wi-Fi la situazione può diventare ancora più articolata.
Un BSSID tende comunque a essere molto più stabile del semplice nome della rete: chiunque può rinominare un SSID in “Vodafone“, “FRITZ!Box” o “Hotel WiFi“; il BSSID identifica invece una specifica interfaccia radio. Se molti dispositivi rilevano ripetutamente quell’identificatore mentre conoscono anche la propria posizione GPS, diventa possibile associare il BSSID a coordinate geografiche abbastanza affidabili.
Da qui nasce il Wi-Fi Positioning System, spesso abbreviato in WPS: attenzione all’omonimia. In questo caso WPS non indica Wi-Fi Protected Setup, il meccanismo con PIN o pulsante usato per facilitare la connessione dei dispositivi alle reti wireless.
Come Apple costruisce il proprio database degli access point
Apple documenta pubblicamente il principio generale: con i servizi di localizzazione attivi, i dispositivi possono inviare periodicamente informazioni relative agli hotspot Wi-Fi e alle stazioni radio cellulari osservate nelle vicinanze. Questi dati contribuiscono ad alimentare un database crowd-sourced che aiuta i dispositivi a determinare la posizione senza dipendere esclusivamente dal GPS.
È un approccio particolarmente utile in ambienti chiusi, tra edifici alti oppure quando il ricevitore satellitare, per vari motivi, non riesce a essere d’aiuto. Uno smartphone può vedere diversi BSSID, conoscere le loro posizioni approssimative e usare intensità del segnale e altri parametri per migliorare la propria stima geografica.
La ricerca indipendente raccolta nel progetto apple-corelocation-experiments, sul quale WaveDigger si basa, ha ricostruito una parte importante del funzionamento interno.
Analizzando il traffico di Core Location con mitmproxy e studiando CoreLocationProtobuf.framework, i ricercatori hanno identificato il formato delle richieste, le strutture Protocol Buffers e l’endpoint WLOC.
Quando macOS o iOS interrogano il servizio, possono trasmettere una lista di BSSID osservati: la risposta contiene informazioni geografiche associate agli access point conosciuti. Secondo il lavoro di reverse engineering, il dispositivo può poi effettuare localmente ulteriori calcoli utilizzando anche l’intensità dei segnali ricevuti.
WaveDigger interroga il servizio WLOC di Apple
WaveDigger non simula il risultato e non si appoggia a un archivio statico scaricato in precedenza. Il codice genera una richiesta compatibile con il servizio WLOC e comunica con i server Apple usando Protocol Buffers, il formato binario introdotto da Google e molto usato per serializzare strutture dati in maniera compatta.
Il repository attribuisce esplicitamente il lavoro fondamentale ad apple-corelocation-experiments: da quel progetto provengono le definizioni protobuf, la comprensione del formato richiesta-risposta, il prefisso di byte necessario per costruire messaggi validi e il metodo utilizzato per decodificare le coordinate.
Apple rappresenta le coordinate ricevute utilizzando numeri interi con otto cifre decimali implicite; WaveDigger effettua quindi la conversione nelle coordinate di latitudine e longitudine utilizzabili su di una mappa.
Posto che WaveDigger può essere caricato in self-hosting e quindi ospitato sui propri server, provate a usare la demo online: inserendo il BSSID di una rete Wi-Fi nell’apposito campo di ricerca, sulla mappa a lato dovrebbe immediatamente comparire la posizione geografica dell’hotspot corrispondente.
MAC casuali sugli smartphone e BSSID del router sono due cose diverse
I moderni sistemi operativi usano da tempo la MAC randomization per ridurre il tracciamento dei client Wi-Fi. Apple, per esempio, genera indirizzi MAC casuali durante alcune operazioni di scansione e usa indirizzi Wi-Fi privati quando un dispositivo si associa alle reti.
Tale protezione riguarda però soprattutto il client: iPhone, notebook o tablet. Il BSSID trasmesso dall’access point deve invece consentire ai dispositivi vicini di riconoscere il servizio. WaveDigger sfrutta proprio gli identificatori degli access point memorizzati nel database di localizzazione.
Apple permette di escludere un access point con _nomap
Nella sua documentazione, Apple spiega che il proprietario di un access point Wi-Fi può modificare il nome della rete facendo terminare l’SSID con _nomap.
Un SSID come “CasaRossi” diventerebbe quindi “CasaRossi_nomap“: Apple afferma che, in questo modo, i dispositivi client non inviano la posizione del punto di accesso affinché entri nel database crowd-sourced. Anche Google utilizza da tempo la stessa convenzione per il proprio servizio di localizzazione.
Va detto però che esiste una limitazione curiosa: Apple precisa che l’opt-out non funziona con le reti nascoste perché i dispositivi non autorizzati non ricevono il nome della rete e non possono quindi rilevare il suffisso _nomap.
Nascondere l’SSID, in questo caso, può addirittura impedire l’applicazione del meccanismo previsto per chiedere l’esclusione.