📅 Article publié le 19 août 2026 sur le blog Zerotistic. Il s’agit d’une analyse technique détaillée d’un projet de reverse engineering des protocoles privés Apple permettant d’accéder aux données de localisation du service Find My People depuis un système Linux.

🔍 Contexte et objectif L’auteur souhaitait automatiser la lecture de la localisation partagée par un ami via Apple Find My, afin de créer des géofences locales et des notifications Discord. N’ayant pas de Mac, il a entrepris de reconstituer entièrement le flux d’authentification et de communication Apple depuis Linux.

🛠️ Techniques et protocoles analysés

  • Utilisation de l’API legacy /fmipservice/friends/fmfd/<dsid>/<device>/initClient (namespace MobileMe) pour récupérer la relation de partage et l’fmId opaque
  • Identification du chemin chiffré via IDS (Identity Services), la couche privée Apple de messagerie chiffrée et d’identité de device, transportée sur APNs
  • Authentification via le protocole GrandSlam (SRP + 2FA) pour obtenir un ADSID et un PET (password-equivalent token)
  • Génération des en-têtes Anisette (valeur OTP éphémère + valeur machine provisionnée) requis par Apple pour valider l’origine des requêtes
  • Obtention d’un certificat d’authentification IDS via authenticateDS : nécessite un CSR PKCS#10, clé RSA 2048 bits, signature SHA-1, plist XML gzippé, CN = SHA-1 uppercase du profile ID
  • Enregistrement IDS via id-register avec le multiplexeur com.apple.private.alloy.multiplex1 et 6 sous-services Find My
  • Utilisation du format de message NGM v13 (P-256 + prekey signé) pour l’enveloppe de transport des clés de localisation

📦 Outils et bibliothèques utilisés

  • FindMy.py : génération Anisette, implémentation GrandSlam
  • pypush (commit pré-réécriture) : code IDS/APNs legacy, génération NAC, routine de signature
  • rustpush : référence pour la définition des services et l’enregistrement
  • Python + bibliothèque cryptography pour la construction manuelle PKCS#10
  • Décompilation de fmfd, findmylocated, searchpartyd

🔐 Points techniques notables

  • Les tokens MobileMe sont compartimentés par service ; aucun token générique ne fonctionne pour Find My People
  • Le flag secureLocationsCapable: true / fallbackToLegacyAllowed: false indique le chemin chiffré obligatoire
  • La signature id-register est une concaténation binaire (nonce + bag key + query string + body compressé + push token), chaque champ préfixé par sa longueur sur 4 octets
  • Les certificats Apple Root CA et Apple Root CA G3 doivent être ajoutés manuellement au bundle certifi Linux
  • Les statuts internes 5051 sur les handles IDS sont ignorables si la réponse externe retourne 0

📌 Périmètre déclaré Le client implémenté se limite à la lecture d’un partage déjà accepté. Il ne permet pas d’envoyer des invitations, de modifier des partages, d’ajouter des membres famille, de créer des géofences Apple ou d’effectuer des actions sur les appareils.

📰 Il s’agit d’un article de recherche technique (reverse engineering de protocoles propriétaires Apple), publié par un chercheur indépendant, documentant méthodiquement les étapes nécessaires pour interopérer avec les services privés Apple depuis Linux.

🧠 TTPs et IOCs détectés

TTP

  • T1539 — Steal Web Session Cookie (Credential Access)
  • T1552.004 — Unsecured Credentials: Private Keys (Credential Access)
  • T1557 — Adversary-in-the-Middle (Collection)
  • T1040 — Network Sniffing (Discovery)

🟡 Indice de vérification factuelle : 40/100 (moyenne)

  • ⬜ zerotistic.blog — source non référencée (0pts)
  • ✅ 15000 chars — texte complet (fulltext extrait) (15pts)
  • ⬜ aucun IOC extrait (0pts)
  • ⬜ pas d’IOC à vérifier (0pts)
  • ✅ 4 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

🔗 Source originale : https://zerotistic.blog/posts/find-my-people-linux/