Qualsiasi app Android può scoprire se sul dispositivo è attiva una VPN e, in certi scenari, raccogliere informazioni legate al vero indirizzo IP dell’utente. Non si tratta di un singolo bug o di una falla isolata, ma di una conseguenza diretta del modo in cui il sistema operativo di Google espone le informazioni di rete alle applicazioni installate. Ed è un dettaglio che pesa più di quanto si possa pensare.
Il meccanismo alla base è piuttosto semplice da capire, anche senza essere sviluppatori. Android gestisce la connettività tramite interfacce di rete virtuali e fisiche. Quando una VPN è attiva, il sistema lo segnala in modo esplicito attraverso le sue API di sistema, in particolare tramite classi come ConnectivityManager e NetworkCapabilities. A qualunque app basta il permesso ACCESSNETWORKSTATE, che non è considerato invasivo, per interrogare il sistema e ottenere dettagli sulle reti attive: tipo di connessione, stato e trasporti come WIFI, CELLULAR o, appunto, VPN. È una scelta progettuale, non un errore. Serve per permettere alle app di adattarsi a reti filtrate o per diagnosticare problemi di connettività.
Quando una VPN funziona correttamente, il traffico delle app passa attraverso un’interfaccia virtuale gestita dalla VPN stessa. Le app vedono quindi l’indirizzo IP interno assegnato dalla VPN, non quello pubblico reale. Però ci sono situazioni in cui questa separazione non regge del tutto: configurazioni di split tunneling, errori nell’implementazione della VPN o gestione incompleta del DNS possono lasciare fuori dal tunnel parte del traffico. In questi casi, un’app potrebbe osservare richieste che aggirano la VPN. Un altro elemento spesso trascurato riguarda WebRTC: i componenti che usano WebView possono sfruttare questo insieme di protocolli per ottenere informazioni sugli indirizzi IP locali e, talvolta, anche su quello pubblico.
Da progetti open source ai casi concreti
A dimostrare quanto sia accessibile questo tipo di rilevamento ci pensano progetti open source come VPN Detector, che con poche righe di codice interroga le API di sistema e verifica se una VPN è in uso. Ma le cose si fanno più interessanti con iniziative come RKNHardering, che va oltre il semplice rilevamento e studia tecniche per identificare, limitare o aggirare l’uso delle VPN in scenari reali, spesso legati a censura o controllo del traffico.
RKNHardering si basa su un componente chiamato VerdictEngine, che aggrega risultati provenienti da diversi moduli: controlli diretti tramite API ufficiali, analisi delle interfacce di rete attive (cercando pattern come tun, tap, wg o ppp), esame della tabella di routing e verifica delle configurazioni DNS. Se la rotta predefinita passa attraverso un’interfaccia non standard, oppure il DNS punta a server locali come 127.x.x.x, il sistema segnala un’anomalia. Il progetto interroga anche il PackageManager per identificare app che dichiarano di usare VpnService: non prova l’uso attivo di una VPN, ma rappresenta un indizio.
Lo sviluppatore di RKNHardering dichiara di aver modellato parte della logica sull’approccio di Roskomnadzor, l’autorità russa che supervisiona telecomunicazioni e Internet. In Russia il blocco dei contenuti avviene spesso a livello di rete, e i meccanismi di rilevamento si sono evoluti fino a correlare più segnali contemporaneamente, combinando ad esempio dati di geolocalizzazione della rete mobile con risultati GeoIP ottenuti da servizi esterni.
Protezioni, limiti e buone pratiche
Con Android 10 e versioni successive, Google ha introdotto limitazioni più rigide sull’accesso ai dati personali. Molte API risultano ristrette e l’accesso a identificatori univoci richiede autorizzazioni esplicite. Nonostante questo, l’informazione sulla presenza di una VPN attiva resta disponibile: ridurla significherebbe compromettere funzionalità utili per numerose applicazioni, comprese quelle bancarie, i servizi di streaming e le piattaforme aziendali che usano il rilevamento VPN per motivi di sicurezza o per applicare restrizioni geografiche.
Chi utilizza una VPN dovrebbe scegliere soluzioni che implementano correttamente il tunneling completo e il controllo del DNS. La presenza di un kill switch è fondamentale: blocca il traffico se la VPN si interrompe, evitando esposizioni accidentali. Meglio evitare lo split tunneling quando non è strettamente necessario, perché spesso introduce canali non protetti che possono esporre i dati. Sul versante degli sviluppatori, anche con l’intervento di Google, sarebbe auspicabile una maggiore trasparenza sull’uso delle informazioni di rete: non tanto per eliminare la possibilità di rilevare una VPN, quanto per rendere chiaro all’utente come e perché questi dati vengono utilizzati.