Suite Ă la rĂ©cente sortie de la technologie AirTags d'Apple, je me suis demandĂ© si le systĂšme de recherche hors ligne "Find My" pouvait ĂȘtre utilisĂ© de maniĂšre abusive pour tĂ©lĂ©charger des donnĂ©es arbitraires sur Internet Ă partir d'appareils non connectĂ©s au WiFi ou Ă l'Internet mobile. Ces donnĂ©es pourraient ĂȘtre diffusĂ©es via Bluetooth Low Energy et rĂ©cupĂ©rĂ©es par les appareils Apple Ă proximitĂ©. Ces appareils, dĂšs qu'ils se connectent Ă Internet, transmettraient immĂ©diatement ces donnĂ©es aux serveurs Apple, d'oĂč elles pourront ĂȘtre rĂ©cupĂ©rĂ©es ultĂ©rieurement. Une telle technique pourrait ĂȘtre utilisĂ©e par de petits capteurs dans des environnements non contrĂŽlĂ©s, afin de ne pas gaspiller d'Ă©nergie supplĂ©mentaire en utilisant l'Internet mobile. De plus, cela pourrait ĂȘtre intĂ©ressant pour voler des donnĂ©es depuis des endroits protĂ©gĂ©s par une cage de Faraday, si une personne avec un iPhone vient de regarder lĂ -bas.
ThĂ©oriquement, cela devrait ĂȘtre possible : si vous parvenez Ă Ă©muler deux AirTags, alors vous pouvez encoder les donnĂ©es en n'activant qu'un seul d'entre eux Ă un moment donnĂ©. Dans ce cas, l'appareil rĂ©cepteur doit vĂ©rifier quel AirTag Ă©tait actif Ă quel moment et dĂ©coder les donnĂ©es dans leur forme d'origine. Cependant, un tel schĂ©ma semble ĂȘtre extrĂȘmement peu fiable et, peut-ĂȘtre, inadaptĂ© Ă une utilisation dans des situations pratiques rĂ©elles en raison de la bande passante de transmission de donnĂ©es trĂšs Ă©troite (en particulier compte tenu de la limitation de 16 AirTag sur Apple ID , il semblait que la quantitĂ© de donnĂ©es transfĂ©rĂ© ne pouvait pas dĂ©passer quelques bits par heure).
Par consĂ©quent, la faisabilitĂ© de cette idĂ©e dĂ©pend de la façon dont le systĂšme est conçu et mis en Ćuvre. Il s'avĂšre que les dĂ©cisions prises pour assurer la sĂ©curitĂ© et la confidentialitĂ© lors de la conception du mĂ©canisme hors ligne montrent que le cas que nous avons proposĂ© est trĂšs efficace comme mĂ©thode de pĂ©nĂ©tration et qu'il est presque impossible de s'en dĂ©fendre.
Résultat : extraire les données précédemment transférées/téléchargées à l'aide d'une application Mac dédiée
- Vous pouvez télécharger des données arbitraires à partir d' appareils non connectés à Internet en diffusant des messages Find My via la technologie BLE (Bluetooth Low Energy) vers les appareils Apple à proximité, qui téléchargent ensuite les données pour vous
- ESP32, ( ) macOS, , : https://github.com/positive-security/send-my
- , - Find My, ,
Localiser mon modem (ESP32) // Localiser mon modem (ESP32)
Appareils Apple à proximité //
Tour mobile Apple ou point d'accÚs Wifi à proximité // Tour cellulaire ou point d'accÚs Wifi
Appareil macOS avec application de récupération de données // Appareil macOS avec application pour récupérer des données
Flux de données // flux de données
.
Description du réseau de recherche hors ligne
Heureusement, ce protocole a déjà été largement inversé par un groupe de chercheurs de l'Université de technologie de Darmstadt, qui a publié l'article « Who Can Find My Devices ? «En mars 2021 et pour la preuve de concept, a publié l'implémentation open source d' OpenHaystack . Avec cette implémentation, vous pouvez créer vos propres composants qui sont suivis sur le réseau Apple Find My. Un grand merci à cette équipe ! C'est grùce à leur travail que le nÎtre a pu avoir lieu, et notre firmware (également fait pour la preuve de concept) et l'application Mac sont basés sur OpenHaystack.
Sous une forme légÚrement simplifiée, le principe du systÚme de recherche hors ligne Find My est le suivant :
- AirTag Apple, , , AirTag ( )
- 2 AirTag Bluetooth, , ( 15 )
- , , .., Find My, , ( ECIES)
- Lors de la recherche d'appareils, l'appareil du propriétaire couplé génÚre une liste de clés publiques remplaçables qu'AirTag a dû utiliser ces derniers jours et demande à Apple ses hachages SHA256. Le backend Apple renvoie des rapports de localisation chiffrés pour les clés dont les ID ont été demandés.
- L'appareil du propriétaire décode les rapports d'emplacement et affiche l'emplacement approximatif.
Serveurs Apple // Serveurs Apple
Appareils de recherche // Appareils de recherche Appareil
propriétaire // Appareil propriétaire Appareil
perdu // Appareil perdu
- // Couplage lors de la configuration initiale
- // Diffuser. Présentation de la clé publique Bluetooth
- // Télécharger les rapports de localisation cryptés
- // Télécharger et décrypter les rapports de localisation
Figure. 1. Organigramme simplifié des tùches résolues lors de la recherche d'appareils hors ligne
Ce trÚs beau design présente des propriétés de sécurité caractéristiques, notamment :
- Protection de suivi contre les attaquants à proximité avec des clés publiques amovibles
- Impossibilité de déterminer l'emplacement des utilisateurs Apple
Cependant, pour nous dans ce cas, le plus intéressant est celui-ci : Apple ne sait pas quelles clés publiques appartiennent à votre AirTag, et, par conséquent, quels rapports de localisation vous sont adressés. Ainsi, un point de terminaison demandant des rapports de localisation pour un identifiant de clé spécifique n'effectue aucune autorisation (mais vous devez vous authentifier avec votre identifiant Apple pour accéder au point de terminaison).
Toute la sĂ©curitĂ© est assurĂ©e au niveau du chiffrement des rapports de localisation : la localisation ne peut ĂȘtre dĂ©chiffrĂ©e qu'avec la bonne clĂ© privĂ©e, et elle n'est stockĂ©e que sur l'Appareil du PropriĂ©taire appairĂ©, et il est impossible de la rĂ©cupĂ©rer avec une simple force brute attaque.
Concevoir un protocole de vol de données
Cela suggÚre que le seul moyen que nous pouvons utiliser pour crypter les données est la clé publique EC diffusée (par exemple, nous ne pouvons pas influencer les coordonnées GPS, puisque le dispositif de « recherche » les ajoute).
Dans la section suivante, nous considĂ©rerons le backend Apple comme un magasin partagĂ© de valeurs de clĂ© publique, oĂč le hachage SHA256 est utilisĂ© comme clĂ© et le rapport de localisation cryptĂ© est utilisĂ© comme valeur. De plus, les opĂ©rations principales sont les suivantes :
- Vous pouvez vérifier si des rapports de localisation existent pour un hachage spécifique si SHA256
- Vous pouvez ajouter des rapports de localisation à un hachage SHA256 spécifique en diffusant la clé publique correspondante
Je pense que vous comprenez dĂ©jĂ le cours des Ă©vĂ©nements : vous pouvez dĂ©finir des bits arbitraires dans la clĂ© partagĂ©e et le magasin de valeurs et les interroger Ă nouveau. Si l'expĂ©diteur et le destinataire s'entendent sur un tel schĂ©ma de cryptage, des donnĂ©es arbitraires peuvent ĂȘtre transmises en l'utilisant.
J'ai décidé de construire un modem qui accepte un message via une interface série, puis parcourt ces données jusqu'à ce qu'un nouveau message soit reçu. Pour nous assurer que nous pouvons distinguer un bit "0" d'un bit non défini, nous diffuserons différentes clés publiques en fonction de la valeur du bit et demanderons au récepteur les deux clés publiques possibles.
Il n'y a aucune garantie quant au moment (ou le cas échéant) des messages de diffusion spécifiques seront téléchargés sur le backend Apple en tant que rapports de localisation. Le fait est que certains paquets peuvent n'atteindre aucun appareil Apple et que les appareils de recherche peuvent avoir des délais trÚs variables entre la réception d'un message diffusé et le téléchargement d'un rapport de localisation, ce qui peut dépendre de la connectivité en amont ou du mode d'alimentation. Ainsi, notre encodage de données ne doit pas dépendre des rapports de position qui arrivent et dans quel ordre, et permet également la récupération des flux de données partiellement reçus - ceux dans lesquels certains bits sont complÚtement perdus. Pour y parvenir, j'ai décidé de crypter un bit de données par diffusion, avec une valeur d'index indiquant,quel bit de message est défini. Grùce au message supplémentaire et à l'ID de modem, le systÚme est adapté à une utilisation multiple par plusieurs utilisateurs, gérant plusieurs messages.
Ainsi, en envoyant un bit spécifique, nous créons un tableau de 28 octets comme "[4b bit index] [4b message ID] [4b modem ID] [zeros padding ...] [bit value]", l'exploitons en tant que public clé et envoyer des représentations BLE, par exemple, pour diffuser des informations "le bit 0 du message 0 vaut 1".
Pour envoyer un message complet, le programme itÚre simplement sur tous ses bits et envoie la représentation à un bit avec une clé publique, dans laquelle l'index et la valeur de ce bit sont cryptés.
Message Ă encoder // Message Ă encoder
Clé publique générée à diffuser // Clé publique générée pour la diffusion
Indice de bit // Indice de
bit Valeur de bit // Valeur de bit
Encoder les bits du message dans la charge utile de diffusion
Lors de la rĂ©cupĂ©ration des donnĂ©es, l'application rĂ©ceptrice gĂ©nĂ©rera les mĂȘmes 28 tableaux d'octets (deux par bit, oĂč les valeurs binaires possibles sont 0 et 1) et demandez un service Apple avec les hachages SHA256 de ces "clĂ©s publiques". Une seule de ces clĂ©s doit avoir des rapports de localisation attachĂ©s, qui peuvent ensuite ĂȘtre interprĂ©tĂ©s (par exemple, le bit avec l'index 0 est 1).
Bits potentiels Ă interroger // Bits pouvant potentiellement ĂȘtre interrogĂ©s
ClĂ©s publiques potentielles Ă tester // ClĂ©s publiques pouvant potentiellement ĂȘtre testĂ©es
Interroger le backend Apple // Interroger l'
existence de la clé publique du backend Apple Décoder les données d'origine // Décrypter la clé publique en obtenir des données brutes
RécupÚre les données précédemment envoyées à partir d'un appareil macOS connecté à Internet
Remarque : vous pouvez envoyer non seulement un bit par message, mais, par exemple, envoyer un octet entier, qui contiendra les 8 derniers bits de la clé publique. Bien que cela nécessite une bande passante de transmission de données plus large, le récepteur devra désormais demander 255 identifiants de clé différents pour sélectionner / forcer brutalement un octet (comparer avec 16 identifiants de clé lors de l'encodage au niveau du bit).
Mise en Ćuvre
CÎté expéditeur
Du cĂŽtĂ© de l'expĂ©diteur, j'ai dĂ©cidĂ© d'utiliser ESP32 - un microcontrĂŽleur tout Ă fait ordinaire et bon marchĂ© (et un test rapide a montrĂ© qu'il peut changer l'adresse MAC BT beaucoup plus rapidement que, disons, un Raspberry Pi basĂ© sur Linux). Au dĂ©marrage, le firmware basĂ© sur OpenHaystack diffuse un message par dĂ©faut codĂ© en dur puis Ă©coute l'interface sĂ©rie (en boucle) pour voir si de nouvelles donnĂ©es de diffusion arrivent - et ainsi de suite jusqu'Ă ce qu'un nouveau message soit reçu... Lors de la diffusion d'une clĂ© publique, elle doit ĂȘtre fractionnĂ©e et encodĂ©e dans les 6 premiers octets de l'adresse MAC Bluetooth (tous sauf les deux premiers bits, car la norme Bluetooth exige que les deux premiers bits soient mis Ă 1). Nous vous rĂ©fĂ©rons Ă Voir la section 6.2 de l'article de l'UniversitĂ© de technologie de Darmstadt , oĂč cet encodage fait maison est dĂ©crit plus en dĂ©tail.
J'ai ajoutĂ© un prĂ©fixe statique Ă ma charge utile afin de ne pas rencontrer de problĂšmes avec la spĂ©cification BT, et j'ai Ă©galement inclus un index de bits incrĂ©mentiel dans les 6 premiers octets de la clĂ© publique, ce qui fait que chaque bit transmis a son propre MAC BT adresse, juste au cas oĂč il y a une limitation de dĂ©bit basĂ©e sur l'adresse MAC n'importe oĂč dans la pile.
Sortie modem ESP32 dans la console série a
CÎté extraction de données
L'application Mac est Ă©galement basĂ©e sur OpenHaystack et utilise la mĂȘme astuce avec le plugin AppleMail pour envoyer des demandes de rĂ©cupĂ©ration de localisation correctement authentifiĂ©es au backend Apple. L'utilisateur est invitĂ© Ă saisir un identifiant de modem Ă 4 octets (peut ĂȘtre dĂ©fini pendant le firmware ESP), aprĂšs quoi l'application sĂ©lectionnera, dĂ©codera et affichera automatiquement un message avec l'identifiant 0. Ensuite, l'utilisateur peut sĂ©lectionner d'autres messages ou changer de modem .
Le message est récupéré 16 octets (128 bits) à la fois (256 identifiants de clé sont demandés) jusqu'à ce qu'il n'y ait plus de rapports (pour un octet entier).
Complication mineure : expiration de la clé publique
AprÚs avoir implémenté à la fois l'expéditeur et le destinataire, j'ai effectué le premier test en diffusant et en essayant d'obtenir une valeur de 32 bits. AprÚs quelques minutes, j'ai pu obtenir 23 bits sur 32, chacun est définitivement correct et avec environ 100 rapports de localisation, mais je n'ai obtenu aucun rapport de ce type pour les 9 bits restants.
Suspecté que certaines des clés publiques générées ont été rejetées par les appareils Apple à proximité pendant la phase de cryptage ECIES en tant que clés publiques invalides - et cela a été rapidement confirmé en essayant de charger chacune des charges utiles générées en tant que clés publiques codées SEC-1 sur une courbe P224 en utilisant Package Python fastecdsa : pour chaque bit pour lequel je n'avais pas de rapports de localisation, le microcontrÎleur a diffusé la clé publique, lançant une exception InvalidSEC1PublicKey lors de l'importation de la clé fastecdsa.
Un petit contexte du cryptage utilisé ici :
- Le public EC de 28 octets représente la coordonnée X d'un point particulier, codé avec SEC1.
- La clĂ© publique SEC1 a gĂ©nĂ©ralement aussi un bit "signe" qui dĂ©termine laquelle des deux coordonnĂ©es Y possibles pour une coordonnĂ©e X donnĂ©e doit ĂȘtre codĂ©e. Ce bit n'est pas transmis lors de la diffusion et n'est pas important pour la date d'expiration de la clĂ© publique.
- Lors du décodage de la clé publique compressée, la coordonnée Y correspondante est calculée à l'aide des paramÚtres de courbe fixes et vérifiée si la clé est valide. Certaines des clés publiques générées échouent à ce test. Pour plus de détails voir la section 3.2.2 dans l'article " Validation des clés publiques sur les courbes elliptiques " :
Ce problĂšme de clĂ©s publiques invalides peut ĂȘtre rĂ©solu d'au moins deux maniĂšres :
L'avantage de la deuxiĂšme option est que pour chaque bit reçu, on pourrait Ă©galement dĂ©chiffrer les rapports de localisation pour dĂ©terminer Ă quel moment un bit donnĂ© a Ă©tĂ© reçu, mais cela nĂ©cessite un peu plus de traitement informatique. Lors de l'implĂ©mentation de cette option, j'ai dĂ©couvert qu'en raison de bugs dans l'implĂ©mentation de la multiplication de courbes elliptiques dans la bibliothĂšque uECC utilisĂ©e pour cela, pour certaines clĂ©s privĂ©es, ESP calculait des clĂ©s publiques diffĂ©rentes de BoringSSL sur Mac et fastecdsa sur Python (un flou diffĂ©rentiel s'est glissĂ© accidentellement ? ). Ces clĂ©s publiques ont mĂȘme Ă©tĂ© considĂ©rĂ©es comme invalides par la fonction uECC_valid_public_key () d'uECC. Par consĂ©quent, dans ce projet pilote, j'ai optĂ© pour l'option 1.
Message à encoder // Message encodé
Générer une clé publique à encoder // Générer une clé publique pour encoder
l'adresse MAC BT // Adresse MAC BT
Tester la validité, sinon incrémenter le compteur // Vérifier si la clé est valide, sinon augmenter le compteur de one
Advertisement payload // Payload pour la présentation
Encodage et envoi du message
Tests / Performances
Lorsque nous avons mis en place un contrÎle de validation de clé publique, tout fonctionne parfaitement. Je n'ai pas effectué de tests de performances approfondis ni effectué de mesures, mais voici quelques estimations :
- ~3 . ,
- - Mac. 16 ~5
- 1 60 , , , . . , , , , ( , Apple)
CDF // Fonction de distribution cumulée
Médiane⊠min // Médiane⊠26,3 min.
Délai de publication (min) // Délai avant publication (min.)
Fig. 8. Retards dans la réception de tous les rapports, considérés au § 7.1 comme une fonction de distribution cumulative
Retards dans la réception des rapports, mesurés par une équipe de l'Université de technologie de Darmstadt, sur la base des documents « Qui peut trouver mes appareils ? »
Utilisations potentielles
Bien que je m'intĂ©ressais principalement Ă vĂ©rifier la faisabilitĂ© de ce que j'ai dĂ©crit, je pense que l'application pratique potentiellement la plus courante consiste Ă tĂ©lĂ©charger des lectures de capteurs ou des donnĂ©es Ă partir d'appareils IoT sans modem haut dĂ©bit, carte SIM, plan de donnĂ©es ou connectivitĂ© Wifi. Ătant donnĂ© qu'Amazon utilise un rĂ©seau similaire appelĂ© Sidewalk utilisant des appareils Echo, il pourrait bien y avoir une demande pour de telles technologies. Ătant donnĂ© que le cache des chercheurs accumule les diffusions reçues et y reste jusqu'Ă ce qu'une connexion Internet soit Ă©tablie, les capteurs peuvent envoyer des donnĂ©es mĂȘme Ă partir de zones sans couverture de rĂ©seau mobile, si des personnes munies d'appareils marchent dans de tels endroits.
Dans un monde de rĂ©seaux de haute sĂ©curitĂ© , oĂč la technologie combinant lasers et scanners semble ĂȘtre une astuce prometteuse pour combler les vides, les appareils Apple fournis par les visiteurs peuvent Ă©galement servir d'intermĂ©diaire viable pour voler les donnĂ©es des systĂšmes Ă vide.ou des chambres protĂ©gĂ©es par une cage de Faraday.
Il apparaĂźt Ă©galement que le protocole de dĂ©couverte hors ligne pourrait ĂȘtre utilisĂ© pour drainer le trafic sur les iPhones Ă proximitĂ© connectĂ©s Ă des tarifs illimitĂ©s . En limitant le nombre de rapports de localisation pouvant ĂȘtre envoyĂ©s Ă partir d'un seul demandeur (255 rapports/soumissions car le nombre d'octets est Ă©gal Ă 1), et avec chaque rapport dĂ©passant 100 octets, la diffusion de nombreuses clĂ©s publiques uniques peut entraĂźner une augmentation significative du trafic sortant. depuis le smartphone. Bien que je n'aie remarquĂ© aucune limitation de frĂ©quence pour les rapports de localisation sortants, je n'ai pas non plus testĂ© la quantitĂ© de donnĂ©es pouvant ĂȘtre consommĂ©e.
Comment régler le problÚme
Comme je l'ai mentionné au tout début, il sera difficile pour Apple de se défendre contre ce genre d'abus s'il choisit de le faire.
Apple a conçu le systĂšme en pensant Ă l'Ă©conomie des donnĂ©es. Ils ne peuvent pas lire les emplacements non cryptĂ©s et ne savent pas quelles clĂ©s publiques appartiennent Ă votre AirTag, ni mĂȘme Ă quelle clĂ© publique un rapport d'emplacement cryptĂ© particulier est associĂ© (car ils ne reçoivent que le hachage SHA256 de la clĂ© publique).
Dans cette optique, la limite indiquée de 16 AirTags pour Apple ID est intéressante, car il me semble qu'Apple n'est actuellement pas en mesure de l'obliger à l'utiliser.
Cependant, un durcissement supplémentaire de ce systÚme est possible, par exemple, dans les deux domaines suivants :
- BLE. , , AirTag OpenHaystack, AirTag . , , , BLE , , AirTag , , .
- Apple , id id AirTag, id , 15 16 id Apple ID ( id ). , , : Apple ID .
Dans cet article, nous avons répondu à la question de savoir s'il est possible de télécharger des données arbitraires à l'aide d'appareils Apple appartenant à d'autres utilisateurs : définitivement oui.
Le firmware du modem ESP32 et une application d'extraction de données pour macOS ont été implémentés, ils sont postés sur Github , vous pouvez les expérimenter.
Notez que cette implĂ©mentation n'est qu'une "preuve de faisabilitĂ©", et le "protocole" lui-mĂȘme n'est ni cryptĂ© ni authentifiĂ©. Par exemple, vous pouvez examiner les dĂ©tails d'un modem avec l'ID 0x42424242 en entrant simplement son ID (peut-ĂȘtre qu'en attendant quelqu'un peut Ă©galement dĂ©montrer qu'il n'y a pas d'authentification dans ce protocole).
Une derniÚre remarque : lors de la préparation de cet article, j'ai remarqué que l'"octet d'état" inclus dans la vue BLE est évidemment utilisé, par exemple, comme indicateur de niveau de batterie. Combiné avec les clés privées générées de maniÚre déterministe qui sont tournées, cela ouvre probablement un autre trou de fuite de données (octet par vue), mais je n'ai pas testé cette approche.
Les serveurs cloud de Macleod sont rapides et sécurisés.
Enregistrez-vous en utilisant le lien ci-dessus ou en cliquant sur la banniĂšre et obtenez un rabais de 10 % pour le premier mois de location d'un serveur de n'importe quelle configuration !