FMD : Find My Device

Voilà une solution très pratique quand on veut localiser son téléphone, soit en le faisant simplement sonner soit en retrouvant sa position GPS (perte, vol). Ainsi que d’autres options plus radicales, comme de l’effacer à distance.

Je parle ici d’une application Android bien sûr, mais aussi de la partie serveur, l’ensemble fournissant une solution autonome totalement open source et sécurisée, respectant votre vie privée comme il se doit :

FMD vous permet de localiser, de faire sonner, d’effacer et d’envoyer d’autres commandes à votre appareil lorsqu’il est perdu. Il se veut une alternative open source sécurisée à Find My Device de Google.

Le serveur étant disponible en mode Docker, je l’ai installé très facilementsur mon NAS. Le client Android, disponible sur F-Droid, demandera lui un peu plus d’attention, car il a besoin d’un système de Push Notification, et de permissions particulières. Cela me prendra donc un peu plus de temps, mais finalement tout fonctionne comme attendu.

Voilà les différentes étapes à suivre…

Serveur

Le serveur s’installe en quelques minutes grâce à Dockge, rien de particulier à signaler, voilà le fichier compose.yaml :

services:
  fmd:
    # Use the prebuilt image
    image: registry.gitlab.com/fmd-foss/fmd-server:v0.12.0
    container_name: fmd
    ports:
      - 8182:8080
    volumes:
      - /srv/dev-disk-by-uuid-12354-67890/AppData/fmddata/db/:/var/lib/fmd-server/db/
    # hardening container
    read_only: true
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges
    # end hardening
    restart: unless-stopped
networks: {}

J’ai juste changé le port par défaut, et ajouté les paramètres de sécurité.

Comme d’habitude, il va falloir déclarer un sous-domaine et créer un fichier fmd.subdomain.conf sur le proxy :

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name fmd.mon-domaine.fr;

    client_max_body_size 20m;

location / {
    proxy_pass http://192.168.1.32:8182;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Je ne réexplique pas cette partie, voir les autres articles (celui-ci par exemple), c’est toujours la même chose.

Et on démarre le serveur. De ce côté tout est prêt.

Si vous ne souhaitez pas installer votre propre serveur, il est possible d’utiliser celui du développeur :
https://fmd.nulide.de et d’y créer un compte pour son smartphone.
Dans ce cas, seule la partie ci-dessous concernant le smartphone vous concerne.

Client Android

Côté smartphone, ça va se révéler un peu plus complexe à mettre en œuvre, d’abord pour les permissions à accorder à l’application, puis au système de notification qui oblige à installer une application supplémentaire (Sunup).

La doc officielle pour le client Android est bien détaillée. À noter aussi cet article sur le forum de GrapheneOS très intéressant. On commence par installer le client FMD à partir de F-Droid.

On lance l’application, puis il faut dans un premier choisir de s’inscrire pour créer un compte sur le serveur. Choisir un nom pour le FMD ID (« Pixel6a » par exemple, puisque le serveur peut-être utilisé pour plusieurs téléphones) et un mot de passe. Laisser le champ « Token » vide.

Mais la connexion échoue avec un beau message d’erreur :

SSLHandshakeException – Trust anchor for certification path not found.

Après quelques recherches, je tombe vite sur un bug déjà créé, et finalement lié à un autre concernant les certificats auto-signés, comme ceux que mon proxy swag utilise (Letsencrypt). Il est désormais corrigé, mais il faudra attendre la prochaine version du client Android.

En attendant, je désinstalle la version 0.12.1 que j’utilisais (la plus récente), et installe la 0.11.0 qui accepte les certificats LetsEncrypt. Cette fois la création du compte fonctionne ! Il faut ensuite accorder toutes les autorisations nécessaires à l’application selon les fonctionnalités que vous souhaitez activer/utiliser :

Comme vous le voyez, je n’ai pas activé l’option « Delete » ni l’option « Lock ». La première me paraît ultime, la deuxième me paraît peu importante, partant du principe que l’appareil est déjà verrouillé si je le perds ou que l’on me le vole. À voir, la réflexion est tout de même en cours… Pour l’option « Delete », j’ai lu que votre code PIN vous sera demandé, ce qui sécurise quand même l’action.

Les deux options qui m’intéressent le plus, c’est de pouvoir le faire sonner, ou d’obtenir sa position GPS. Accessoirement, prendre une photo peut aussi se révéler utilse.

Mais pour pouvoir autoriser la fonction GPS, FMD doit pouvoir activer automatiquement les services de localisation lorsque vous déclenchez une commande fmd locate (depuis le serveur), puis les désactiver à nouveau. Cela nécessite une autorisation spéciale : WRITE_SECURE_SETTINGS, et c’est là que ça se complique un peu.

Pour ce faire, il va falloir utiliser une commande adb.Tout est expliqué ici dans la doc officielle, je ne répète donc pas chaque étape. Il faut que côté smartphone le mode Débogage USB soit activé dans les options pour les développeurs :

Avoir adb installé sur le PC, puis taper la commande suivante :

pm grant de.nulide.findmydevice android.permission.WRITE_SECURE_SETTINGS

Sunup

Terminé ? pas tout à fait ! FMD utilise UnifiedPush pour recevoir des notifications push. Aucune donnée sensible n’est envoyée dans les notifications push, elles servent uniquement à réveiller FMD. Celui recommandé est Sunup. L’installation est très simple, et il faut ensuite relancer FMD et le faire s’enregistrer sur Sunup:

Une fois ceci fait, on voit FMD dans les applications enregistrées par l’appli Sunup :

Cette fois, tout est prêt côté Android, on peut désormais aller sur l’interface web du serveur et tester les différentes commandes.

SMS

Vous pouvez aussi déclarer des contacts de confiance autorisés à vous envoyer des commandes via SMS (fmd locate, fmd ring, fmd camera, etc…), et recevoir des réponses par SMS. Pratique si l’appareil a perdu sa connexion internet mais a au moins accès au réseau 2G.

Je n’ai pas testé cette fonctionnalité (contacts de confiance & SMS), mais on peut tester les commandes en local très facilement :

Utilisation du service

L’interface web du serveur se présente comme suit :

Il faut donc s’identifier avec l’identifiant utilisé sur l’application Android précédemment(« Pixel6a ») et le mot de passe choisi. Une fois connecté, les différentes commandes possibles apparaissent sous la carte :

On peut donc géolocaliser son smartphone, faire sonner, verrouiller, effacer, prendre une photo et la visualiser. Enfin, avec le dernier bouton « paramètres », on peut exporter les données ou supprimer le compte. L’interface est assez basique, mais fonctionnelle. Voilà ce que cela donne :

Mon portable se trouve à la pointe de Beg-Meil !
Faire sonner le tel, ou prendre une photo du hacker en train de tenter d’accéder à vos données… 😉

À l’heure actuelle « seuls les n derniers emplacements et images sont stockés. Cela dépend de ce que l’opérateur du serveur a configuré. » . On peut donc configurer le nombre d’emplacements et de photos conservés dans le fichier compose.yaml :

# How many location points or pictures FMD Server should save per account
MaxSavedLoc: 1000
MaxSavedPic: 10

Apparemment, le développement est actif, et de nouvelles fonctionnalités vont être ajoutées, y compris la gestion des emplacements et des photos.

Missing API token

Pour info, en faisant des essais, j’ai vu ce message d’erreur dans les logs :

Cette erreur se produit quand on fait une demande de localisation en mode « ALL » : cela inclut OpenCellId qui nécessite de créer un compte sur leur serveur et donc un API token. C’est donc normal, et une simple requête de localisation en mode « GPS » suffit pour obtenir la position :

Conclusion

Cette solution est vraiment satisfaisante, et totalement autonome. Comme le dit la personne sur le forum GrapheneOS :

I am absolutely aware that tracking application are problematic, however having an option to track down your mobile phone (if lost or stolen), ring it, factory reset it, etc., is a very useful one, especially if you have a complete control of your data.

Le développement a l’air très sérieux, avec la sécurité en tête. C’est vrai plus d’avoir cette fonctionnalité sur le tel !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *