Une fuite DNS peut se produire en dehors du tunnel VPN sur Android
Vérification d'une fuite DNS multiple
- Une possibilité de fuites DNS multiples a récemment été découverte sur Android
- Le problème provient d'un bug propre à Android et ne touche que certaines applications
- Le 22 avril, un lundi, cela a été signalé comme fuite DNS par un utilisateur Reddit
- Un utilisateur a constaté une fuite DNS lorsqu'il désactivait puis réactivait le VPN avec l'option « Bloquer les connexions sans VPN » activée
- Une enquête interne a été lancée immédiatement, ce qui a permis de confirmer le problème
- L'investigation a révélé plusieurs scénarios supplémentaires pouvant provoquer des fuites DNS
Constat
Scénarios identifiés pouvant entraîner une fuite du trafic DNS sur Android :
- Lorsque le VPN est activé alors qu'aucun serveur DNS n'est configuré
- Pendant une courte période, lorsque l'application VPN reconstruit le tunnel ou se retrouve arrêtée/plantée de manière forcée
La fuite semble être limitée aux appels directs à la fonction C getaddrinfo :
- Dans les scénarios listés ci-dessus, les applications qui utilisent cette méthode de résolution de noms de domaine peuvent provoquer des fuites
- Aucune fuite n'a été observée dans les applications qui n'utilisent que des API Android telles que DnsResolver
- Le navigateur Chrome est un exemple d'application susceptible d'utiliser directement
getaddrinfo
Les points ci-dessus s'appliquent quel que soit l'état d'Always-on VPN et de Block connections without VPN:
- Puisqu'il ne s'agit pas d'un comportement attendu du système, il doit être corrigé en amont de l'OS
La fuite a été confirmée sur plusieurs versions d'Android, Android 14 inclus (la plus récente)
Améliorations
L'application actuelle ne configure pas de serveur DNS lorsqu'elle passe en mode bloqué :
- Si l'application ne parvient pas à configurer le tunnel d'une manière réversible, elle bascule en mode bloqué
- Dans cet état, le trafic cesse de sortir du périphérique
- Cependant, comme aucun serveur DNS n'est alors configuré, la fuite DNS décrite ci-dessus peut se produire
- Un serveur DNS factice sera temporairement configuré pour contourner le bug de l'OS
- Une version incluant ce correctif devrait arriver prochainement
Il est plus difficile pour l'application de réduire la fuite lors d'une reconnexion du tunnel :
- Une solution est toujours en cours de recherche
- Nous pouvons limiter le nombre de reconstructions de tunnel, mais nous pensons qu'il n'est pas possible, pour l'instant, d'empêcher complètement cette fuite
Il faut clairement dire qu'aucune application VPN ne devrait avoir besoin de telles mesures de contournement :
- Il n'est pas anormal qu'une application utilise
getaddrinfopour résoudre des noms de domaine - Au lieu de cela, c'est à l'OS de résoudre ce problème pour protéger tous les utilisateurs Android, quelle que soit l'application utilisée
Nous avons signalé le problème à Google avec une proposition d'amélioration, en espérant une correction rapide
Reproduction
Les étapes suivantes reproduisent le deuxième scénario ci-dessus, dans lequel l'utilisateur VPN modifie la configuration du tunnel (par exemple en changeant de serveur ou le serveur DNS) :
- WireGuard est utilisé, car il s'agit de l'implémentation de référence des VPN Android
- Il faut noter que la fuite pourra probablement être reproduite sur d'autres applications VPN Android
- Chrome est utilisé pour déclencher la fuite, car il fait partie des applications confirmées à utiliser
getaddrinfo
-
Télécharger
spam_get_requests.html -
Installer WireGuard et Chrome
-
Importer
wg1.confetwg2.confdans WireGuard -
Activer le tunnel wg1 dans WireGuard et autoriser la permission VPN
-
Activer « Always-on VPN » et « Block connections without VPN » pour WireGuard dans les paramètres VPN d'Android
-
Démarrer la capture de données sur le routeur avec
tcpdump$ tcpdump -i <INTERFACE> host <IP of android device> -
Mettre WireGuard et Chrome en écran partagé côte à côte
-
Ouvrir
spam_get_requests.htmldans Chrome et cliquer sur « Start » -
Dans WireGuard, basculer entre wg1 et wg2 jusqu'à ce qu'une fuite apparaisse à l'étape suivante
-
Observer sur le routeur le trafic DNS suivant :
11:50:27.816359 IP Pixel-Tablet.lan.53353 > OpenWrt.lan.53: 11200+ A? 307lf5rgn6-19282-11-50-27-519z.mullvad.test.lan. (65) 11:50:27.816359 IP Pixel-Tablet.lan.48267 > OpenWrt.lan.53: 44347+ A? 307lf5rgn6-19284-11-50-27-579z.mullvad.test.lan. (65) 11:50:27.816396 IP Pixel-Tablet.lan.16747 > OpenWrt.lan.53: 44584+ A? 307lf5rgn6-19289-11-50-27-729z.mullvad.test. (61) 11:50:27.816458 IP OpenWrt.lan.53 > Pixel-Tablet.lan.53353: 11200 NXDomain 0/0/0 (65) 11:50:27.816476 IP Pixel-Tablet.lan.45727 > OpenWrt.lan.53: 40503+ A? 307lf5rgn6-19290-11-50-27-759z.mullvad.test. (61) 11:50:27.816542 IP OpenWrt.lan.53 > Pixel-Tablet.lan.48267: 44347 NXDomain 0/0/0 (65) 11:50:27.816588 IP Pixel-Tablet.lan.43821 > OpenWrt.lan.53: 36295+ A? 307lf5rgn6-19291-11-50-27-789z.mullvad.test. (61) 11:50:27.816625 IP OpenWrt.lan.53 > Pixel-Tablet.lan.16747: 44584 NXDomain 0/0/0 (61)
Même si « Block connections without VPN » était activé, rien ne devrait sortir de l'appareil sauf le trafic chiffré WireGuard. Or, ici, on voit sortir du DNS en clair depuis l'appareil
Conclusion et recommandations
La fuite DNS peut impacter gravement la vie privée des utilisateurs, et être utilisée pour détecter leur emplacement approximatif ou déterminer les sites web et services qu'ils utilisent
Ces découvertes montrent une fois de plus que « Block connections without VPN » ne correspond ni à son nom (ni à sa documentation) et contient plusieurs défauts :
- Une application peut encore faire fuir du trafic DNS sous les conditions mentionnées précédemment
- Comme déjà rapporté, du trafic de vérification de connexion fuit également toujours
Selon votre modèle de menace, il peut être nécessaire d'éviter complètement l'utilisation d'Android pour les activités sensibles ou de prendre d'autres mesures d'atténuation pour empêcher ces fuites :
- Assurez-vous de garder l'application à jour, car elle vise à atténuer partiellement ce problème
Avis de GN⁺
- Ce problème est fondamentalement un bug de l'OS Android et Google doit le corriger rapidement. Il n'est pas souhaitable que tous les développeurs d'applications proposant des fonctions VPN aient à s'efforcer de résoudre ce problème.
- Que l'option « Block connections without VPN » ne fonctionne pas selon sa documentation et qu'il y ait une fuite DNS représente un problème important pour les utilisateurs. L'un des principaux motifs d'utilisation d'un VPN est la protection de la vie privée, car une fuite DNS peut exposer l'historique de navigation de l'utilisateur.
- On peut considérer qu'il reste utile de déployer des solutions de sécurité et de confidentialité supplémentaires en plus du VPN afin de prévenir les fuites non intentionnelles provoquées par l'OS, même si la sécurité de la technologie de tunneling VPN reste globale-ment élevée.
- Du point de vue des développeurs d'applications, on peut contourner un bug de l'OS au niveau de l'application, mais une amélioration de l'OS semble nécessaire pour une correction durable.
- Avec la montée en sophistication et en popularité des technologies VPN, ce type de problème de sécurité devient de plus en plus visible. Il semble donc nécessaire de poursuivre les audits de sécurité et les améliorations continues des fonctions réseau et VPN des OS mobiles
1 commentaires
Avis de Hacker News