Articoli approfonditi sulla tecnologia che plasma il futuro.

La tua app di fitness è uno strumento di sorveglianza

Come app fitness come Strava espongono dati di localizzazione sensibili, dalle basi militari alle portaerei. Le lezioni di OPSEC per gli sviluppatori.

Portaerei in mare aperto con un percorso di corsa luminoso rosso tracciato lungo il ponte di volo

Un quotidiano francese ha recentemente tracciato in tempo reale la posizione dell'unica portaerei della Francia, la Charles de Gaulle, uno dei beni militari più sensibili d'Europa dal punto di vista strategico, usando dati pubblici provenienti da app fitness. I membri dell'equipaggio facevano giri di corsa sul ponte di volo mentre Strava registrava ogni passo. La posizione, la rotta e la velocità della nave erano visibili a chiunque sapesse dove guardare.

Non si è trattato di un hack. Nessuno ha sfruttato una vulnerabilità o aggirato un controllo di sicurezza. I dati erano pubblici di default, condivisi volontariamente da utenti che non pensavano a cosa rivelasse il loro percorso di jogging sul dispiegamento di una nave da guerra a propulsione nucleare. È la stessa classe di problema che nel 2018 ha esposto basi militari segrete, quando la heatmap globale di Strava ha illuminato i percorsi di corsa in Afghanistan e Siria. La lezione non è ancora stata imparata.

Il problema dei dati « innocui »

Preso singolarmente, il dato di localizzazione di un'app fitness sembra innocuo. Hai fatto una corsa. Hai pedalato fino al lavoro. Hai nuotato in piscina. Ma aggregato nel tempo, questo dato rivela schemi tutt'altro che innocui.

  • Casa e luogo di lavoro. I tuoi punti di partenza e di arrivo più frequenti sono quasi certamente casa tua e il tuo ufficio. Qualsiasi app che registra i tuoi percorsi di corsa sa dove vivi e lavori, anche se non glielo hai mai detto esplicitamente.
  • Routine quotidiana. Corri alle 6 del mattino ogni giorno feriale? I dati mostrano quando la tua casa è vuota. Viaggi per lavoro il martedì? Il tuo schema di assenze viene registrato.
  • Luoghi sensibili. Militari, agenti dei servizi segreti, dipendenti pubblici, dirigenti d'azienda: chiunque lavori o frequenti luoghi sensibili lascia una traccia. Anche un singolo allenamento in una struttura riservata rivela che quella struttura esiste e che tu ci hai accesso.
  • Relazioni sociali. Corse di gruppo, percorsi condivisi e classifiche dei segmenti rivelano chi si allena con chi. In ambito di intelligence, questo può mappare le reti sociali di individui che lavorano in installazioni sensibili.

Il caso della portaerei è clamoroso, ma gli stessi principi valgono per le persone comuni. Gli stalker hanno usato i dati delle app fitness per localizzare le vittime. I ladri potrebbero individuare le case vuote. I datori di lavoro potrebbero monitorare gli spostamenti dei dipendenti fuori orario. I dati sono ricchi, granulari e, in molti casi, accessibili a chiunque abbia un account gratuito.

Come si perdono i dati

Le app fitness fanno trapelare i dati di localizzazione attraverso più canali, alcuni evidenti e altri più sottili.

Profili di attività pubblici

Molte app impostano il profilo come pubblico di default. Le tue corse, le uscite in bici e le nuotate sono visibili a chiunque, con le tracce GPS disegnate su una mappa. Le impostazioni predefinite di Strava sono migliorate nel tempo, ma molti utenti hanno creato l'account quando i default erano più permissivi e non hanno mai rivisto le impostazioni. Una ricerca rapida su Strava di attività vicino a una base militare, a un data center o a un edificio governativo spesso rivela più di quanto dovrebbe.

Heatmap e dati aggregati

Anche quando le singole attività sono private, i dati aggregati possono rivelare schemi sensibili. La heatmap globale di Strava, che mostra la densità di tutte le attività registrate, ha notoriamente delineato le planimetrie delle basi operative avanzate in zone di conflitto. Le basi comparivano come macchie luminose di attività in un deserto altrimenti vuoto. I singoli utenti erano anonimi, ma lo schema complessivo era inequivocabile.

Classifiche dei segmenti

I segmenti di Strava, tratti di strada o sentiero definiti dagli utenti in cui si gareggia per il tempo migliore, creano marcatori di posizione persistenti. Un segmento sul ponte di volo di una portaerei identifica ogni utente che ha corso quello specifico percorso. Anche se i profili individuali sono privati, la classifica del segmento mostra nomi utente, tempi e date. Incrociando queste informazioni con altri dati pubblici si possono identificare le persone.

Accesso alle API e data broker

Le app fitness spesso condividono dati con terze parti tramite API, partnership e rapporti con data broker. Anche se imposti il profilo come privato, i tuoi dati possono finire presso compagnie assicurative, inserzionisti o aggregatori di dati che li combinano con altri dataset. I dati di localizzazione delle app fitness sono comparsi in database commerciali venduti a forze dell'ordine, agenzie di intelligence e investigatori privati.

Lezioni di OPSEC per gli sviluppatori

Se stai costruendo applicazioni che gestiscono dati di localizzazione, o qualsiasi altro dato che possa rivelare schemi sensibili, i fallimenti delle app fitness offrono lezioni concrete.

Predefinito privato

Sembra ovvio, ma per anni la maggior parte delle app fitness lo ha ignorato, perché i profili pubblici spingevano coinvolgimento e crescita. Se la tua app raccoglie dati di localizzazione, il default dovrebbe essere privato, con gli utenti che scelgono esplicitamente di condividere. Non « pubblico con un'opzione per passare a privato sepolta nelle impostazioni », ma davvero privato di default.

// Bad: default to public, user must opt out
const userSettings = {
profileVisibility: 'public',
activityVisibility: 'public',
showOnHeatmap: true,
shareWithPartners: true
};
// Good: default to private, user must opt in
const userSettings = {
profileVisibility: 'private',
activityVisibility: 'private',
showOnHeatmap: false,
shareWithPartners: false
};
// Better: explain what each setting actually means
const privacySettings = {
profileVisibility: {
value: 'private',
description: 'Only people you approve can see your profile',
riskLevel: 'Your name and activity history are visible'
},
activityVisibility: {
value: 'private',
description: 'Only you can see your activities',
riskLevel: 'GPS routes show where you live, work, and travel'
}
};

Implementa le zone di privacy

Strava alla fine ha aggiunto le « zone di privacy », aree attorno a luoghi sensibili in cui i dati GPS vengono nascosti. È una buona funzione, arrivata con anni di ritardo. Se la tua app registra dati di localizzazione, lascia che gli utenti definiscano aree in cui la registrazione viene soppressa o i dati vengono offuscati. La maggior parte degli utenti la imposterà intorno a casa e al luogo di lavoro, eliminando così gli schemi più sensibili.

Dettaglio implementativo: offuscare inizio e fine di un percorso con un offset casuale non basta se il percorso ha una forma riconoscibile. Chi fa ogni giorno lo stesso giro da 5 km produce una sagoma distintiva anche con gli estremi nascosti. Approcci migliori: eliminare i primi e gli ultimi N metri del percorso, oppure agganciare gli estremi a una griglia per impedire di dedurre la posizione esatta.

Pensa agli attacchi di aggregazione

I singoli dati possono essere innocui. I pattern aggregati potrebbero non esserlo. Quando costruisci funzionalità che combinano o visualizzano dati di più utenti (heatmap, classifiche, luoghi di tendenza), pensa a quali schemi emergono. Una heatmap che evidenzia una struttura segreta è un attacco di aggregazione, anche se non viene esposto il dato di nessun singolo utente.

La difesa: imposta soglie minime per l'aggregazione (non mostrare dati di heatmap per aree con meno di N utenti unici), escludi le aree geografiche sensibili e verifica le visualizzazioni per rivelazioni di pattern inattese prima di rilasciarle. Le tecniche di privacy differenziale, che aggiungono rumore calibrato alle query aggregate, possono aiutare, anche se sono complesse da implementare correttamente.

Controlla la condivisione dei dati

Ogni endpoint API che serve dati di localizzazione, ogni funzione di esportazione, ogni integrazione con terze parti: sono tutti canali attraverso cui i dati sensibili possono trapelare. Mappa i tuoi flussi di dati. Sappi esattamente dove finiscono i dati di localizzazione degli utenti, chi vi può accedere e a quali condizioni. Se condividi dati con partner o inserzionisti, sii esplicito con gli utenti su cosa condividi e con chi.

Il quadro generale: la minimizzazione dei dati

La domanda fondamentale è se la tua applicazione ha davvero bisogno dei dati che raccoglie. Un'app di corsa ha bisogno delle coordinate GPS ogni secondo? Per visualizzare il percorso, sì. Per calcolare distanza e ritmo, una risoluzione più bassa basterebbe. Per stimare le calorie, servono solo la distanza totale e il dislivello.

La minimizzazione dei dati, cioè raccogliere solo i dati necessari alla specifica funzione che l'utente sta usando, è la protezione più forte contro le fughe di dati. I dati che non raccogli non possono essere violati, sottoposti a mandato, venduti o aggregati in schemi di sorveglianza. Questo contrasta con l'istinto orientato alla crescita di raccogliere tutto e capire poi a cosa serve, ma è l'unico approccio davvero solido.

Il modo migliore per proteggere i dati degli utenti non è una crittografia più forte o controlli di accesso più severi. È non avere quei dati in partenza.

L'industria delle app fitness ha imparato questa lezione a proprie spese, e alcune aziende non l'hanno ancora imparata. Militari usano ancora Strava sulle portaerei. Agenti dei servizi segreti registrano ancora corse vicino a strutture classificate. I dati continuano a fluire verso server, API e data broker che possono ricomporre schemi che nessun utente intendeva rivelare. Come sviluppatori, possiamo costruire sistemi che proteggono gli utenti da questi rischi per impostazione predefinita, oppure sistemi che sfruttano la loro distrazione. L'equipaggio della portaerei non ha preso una decisione di sicurezza quando ha aperto l'app per la corsa. L'hanno presa gli sviluppatori dell'app, anni prima, quando hanno scelto le impostazioni predefinite.