Android: a quick and dirty guide to saying the f-word to marketers, for fun and (non)profit

Introduction

Cet article est un guide pour améliorer la sécurité d’un système Android, et de limiter le tracking marketing
Il est destiné aux utilisateurs du système Android ayant des bases correctes en environnement Linux/UNIX ainsi qu’une compréhension correcte des protocoles réseaux en général, et éventuellement une connaissance basique des règles iptables

Notez bien qu’il ne s’agit que d’un ensemble d’astuces, et aucunement un article exhaustif, d’où le titre de l’article “Quick and dirty guide”. Gardez bien à l’esprit qu’on ne peut pas avoir autant de contrôle sur son smartphone que sur un ordinateur tournant sous un OS propre, et que pour cette raison, le niveau de sécurité obtenu pour un smartphone restera inférieur à celui d’un PC GNU/Linux ou BSD bien configuré (qui évidemment reste imparfait également). Mais ce n’est pas parce que la perfection n’existe pas en sécurité informatique qu’il faut accepter le niveau 0 de la sécurité et de la privacy, vous l’aurez compris, ici le but est de limiter la casse sans pour autant se donner un faux sentiment de sécurité totale

L’article se décompose en une partie “bonnes pratiques” applicables par tout le monde, sans connaissances techniques préalables
La deuxième partie, plus technique, concerne les modifications du systèmes nécessitant les droits root

Quelques bonnes pratiques pour tous

– Ne laissez jamais le mode USB debugging activé quand vous ne vous en servez pas
– Toujours vérifiez les permissions des applications avant de les installer et faites preuve de bon sens, la plupart des permissions abusives sont repérables facilement tellement elles sont grossières
– Arrêtez de vouloir absolument installer “une application” pour accéder à des sites web, la plupart des sites qui mettent en avant leurs “applications” ont une version mobile de leurs site web, elle est généralement sous le format m.domainname.tld¹ ou mobile.domainname.tld¹ (mais ça peut être autre, souvent l’utilisateur est redirigé automatiquement vers la page mobile en fonction du user agent de son navigateur)
– Utilisez Silence pour vos SMS et choisissez un bon mot de passe, de façon à ce qu’ils soient stockés de façon chiffrée, ils seront plus difficilement exploitables par monsieur tout le monde (le marketteux/dev d’appli instrusive/voleur moyen) en cas de fuites des dits SMS/vol de votre téléphone
Et ça vous permet de chiffrer vos SMS pendant l’envoi si votre contact utilise aussi TextSecure
– Privilégiez les applications libres, ça semble une évidence, mais faut bien que je le mentionne pour pouvoir citer les sources qui vont bien, ici je pense bien sur au market spécialisé en FLOSS F-Droid
– N’activez l’autorisation d’installer des applications depuis des sources inconnues que quand vous en avez besoin, n’oubliez jamais de la désactivez après vos installations

Passons aux choses sérieuses

Pré-requis

– Avoir “rooté” son téléphone et avoir installé Busybox et votre installation de Busybox ou votre ROM doit contenir iptables
Comme ça dépend du modèle du téléphone et de la ROM, je ne traiterai pas cette partie, si vous ne savez pas comment faire, le Web est plein de tutos
– Avoir une ROM custom de préférence, et sans les Google apps ni pleins de merdes propriétaires et intrusives
Enfin, y aura toujours une partie propriétaire pour la gestion des protocoles de téléphones, le GSM n’a par exemple pas d’implémentation libre existante, et n’est pas prêt d’en avoir une qui le soit en totalité pour des raisons juridiques, c’est couvert d’une tonne de brevets. Mais optez pour une ROM sans applications propriétaires et si possible sans drivers propriétaires, je pense par exemple à Replicant, ou du moins CyanogenMod
– Votre cerveau bien sûr

Configuration

Préparation

Autorisez l’installation depuis les sources inconnues, et installez P-Droid, XPrivacy, AdAway, AFWall+ et Terminal IDE et désactivez l’autorisation des installations depuis les sources inconnus

Gestion des permissions

Je ne ferai pas de mode d’emploi pour XPrivacy, car facile à utiliser
Mais une petite présentation quand même, il s’agit d’un outil libre (sous GPLv3, contrairement à LBE Privacy, elle même intrusive, (accès root) en plus de ne pas être libre) permettant de contrôler les permissions d’accès des applications et de leur fournir des données fausses. L’objet de cet article plutôt de donner des tutos concernant les autres outils cités

La pub, c’est mauvais autant pour la sécurité que pour le forfait data

AdAway est également facile d’utilisation, il s’agit d’une application libre (GPLv2) qui automatise les mises à jours du fichier /etc/hosts de façon à bloquer les trackers publicitaires (en court-circuitant les requêtes DNS. Il suffit de lancer, d’activer le filtrage et de télécharger les noms d’hôtes des trackers depuis plusieurs sources, ces noms d’hôtes seront automatiquement rajoutés dans votre /etc/hosts et suivis de la mention 127.0.0.1, optez pour un accès WiFi durant les téléchargement pour gagner du temps, ça peut être long même si c’est que du texte. En associant hôtes des trackers publicitaires à la boucle locale 127.0.0.1, ça empêche le téléphone de se connecter aux serveurs de pubs quand un site Web ou une application essaye de forcer cette connexion. L’avantage par rapport à une application tel que AdBlock c’est que il  y a pas de connexion qui s’établie entre le client et le serveur de pubs, la conséquence directe : moins de gaspillage de la bande passante et du forfait data, et pas de traces de votre machine sur les logs de connexions sur le serveurs de pubs, puisque la connexion en question n’aura jamais eu lieu. De plus AdBlock, dans sa version appli Android, tourne en tâche de fond et force votre connexion à passer par un proxy qui filtre la pub… et qui donc analyse vos données non chiffrées, c’est une belle arnaque pour un outil anti-tracking

Accès au réseau (firewalling)

Vient ensuite AFWall+, il s’agit d’un front-end GUI pour iptables, permettant de créer très facilement des règles iptables en fonction des applications et du type de réseau (WiFi , réseau mobiles avec et sans roaming), et supporte en plus les “scripts customs” selon la syntaxe iptables (zone texte qui prend directement les règles iptables entrés par l’utilisateur), ainsi que l’importation et l’exportation des dites règles, avec un journal/log (entre autres)
Là encore c’est simple d’utilisation, si vous utiliser seulement la GUI ou si vous connaissez déjà bien IPtables, mais faites bien attention à utiliser le mode “white list”, pour bloquer les accès réseaux aux applications par défaut et n’autoriser que les accès dont vous cochez les cases, afin d’éviter qu’à l’installation d’une nouvelle application, elle se connecte automatiquement au Net sans votre accord, avant que vous n’ayez le temps de bloquer en mode blacklist. Pour les autorisations, à vous de faire preuve de bon sens, mais y a des accès obligatoires si vous voulez que votre accès au net/votre système fonctionne correctement, à vous de voir selon ce que vous installez et ce que vous faites avec vos appareils

Aller plus loin

Terminal IDE va nous aider à comprendre ce qui se passe dans le téléphone, il s’agit d’un émulateur de terminal accompagné d’un clavier spécifique et de plusieurs outils réseaux et de développement, accessibles en SSH ou directement, mais c’est pas ce qui nous intéresse ici. Ce qui nous intéresse, c’est le terminal et son clavier. L’idée est d’utiliser tcpdump pendant un certain temps en tâche de fond pour comprendre ce qui passe par les interfaces réseaux du téléphone et d’agir en conséquence, en créant les règles iptables qui vont bien, une fois que le fichier créer par tcpdump sera lu sur un PC (avec Wireshark pour plus de lisibilité)

Cette partie est délicate car elle dépend de votre ROM, ça peut ne pas fonctionner ou nécessiter une re-compilation de tcpdump

Récupérer TCPdump sur le ici (ATTENTION : vielle version, voire s’il y a binaire plus récent) et décompressez l’archive puis mettez le sur le téléphone Android soit en utilisant adb si vous avez installé le SDK/NDK Android, soit en téléchargeant directement sur le téléphone, eventuellement avec wget. Puis un simple “mv” après avoir mis tcpdump dans la carte/partition sdcard pour le mettre dans un dossier de la partition système (les fichiers dans sdcard ne supporte le droit d’exécution). Sélectionnez le clavier de Terminal IDE et tapez

$ su
# mv path/to/tcpdump /system/xbin/tcpdump
# chmod +x /system/xbin/tcpdump

Si vous échouez à l’exécuter, réessayer en compilant vous même tcpdump pour Android et transférez le binaire sur votre téléphone, toujours à mettre dans /system/xbin/tcpdump sans oublier de rajouter le droit d’exécution

Exécutez ensuite tcpdump

# tcpdump -vv -s 0 -w /sdcard/android.pcap
Laissez Terminal IDE et tcpdump tourner en tâches de fond en continuant d’utiliser le téléphone normalement, et après quelques heures stoppez la capture (Ctrl+C), transférerez android.pcap sur votre PC, analysez le pour déterminer d’éventuelles IP à bloquer grâce à la fonction CustomScript d’AFWall+

Là encore, c’est selon vos résultats, vos besoins et votre bon sens, c’est à vous de décider quoi faire

Note : 1) TLD pour Top-Level Domain, soit ce que certains appellent vulgairement “extensions” – .com, .net, .org, .info…