OpenDrop : Une implémentation open source d'Apple AirDrop en Python

OpenDrop est un outil en ligne de commande qui implémente le protocole Apple AirDrop en Python, permettant le partage de fichiers entre appareils via Wi-Fi, y compris avec les appareils Apple.

Qu'est-ce qu'OpenDrop ?

OpenDrop est un outil open source en ligne de commande qui implémente le protocole Apple AirDrop en Python. Sa caractéristique principale est la compatibilité au niveau protocole avec Apple AirDrop, ce qui signifie que vous pouvez l'utiliser pour partager des fichiers directement avec des appareils Apple fonctionnant sous iOS et macOS via Wi-Fi. Cela est réalisé en rétro-ingénierie du protocole propriétaire AirDrop, ce qui en fait un outil précieux pour les développeurs, les chercheurs en sécurité et toute personne souhaitant comprendre ou interagir avec l'écosystème de partage de fichiers d'Apple sans être enfermé dans le matériel Apple.

Pourquoi OpenDrop est important

AirDrop est une fonctionnalité pratique de partage de fichiers sans configuration intégrée à l'écosystème Apple. Cependant, il est closed-source et étroitement lié au matériel et aux logiciels d'Apple. OpenDrop brise cette barrière en fournissant une implémentation portable et multiplateforme qui peut fonctionner sur Linux et macOS. Cela est particulièrement utile pour :

  • Recherche en sécurité : Comprendre le protocole AirDrop, ses propriétés de sécurité et les vulnérabilités potentielles.
  • Partage de fichiers multiplateforme : Partager des fichiers depuis une machine Linux vers un iPhone ou un Mac sans avoir besoin d'un service tiers ou d'un téléchargement dans le cloud.
  • Automatisation : Intégrer des fonctionnalités similaires à AirDrop dans des scripts et des flux de travail automatisés.

Comment ça fonctionne

OpenDrop repose sur deux technologies clés :

  1. Apple Wireless Direct Link (AWDL) : AirDrop fonctionne exclusivement sur AWDL, une couche de liaison Wi-Fi propriétaire utilisée par les appareils Apple pour la communication peer-to-peer. OpenDrop est pris en charge nativement sur macOS et sur Linux via une réimplémentation open source d'AWDL, comme OWL.

  2. Python et libarchive : L'outil est écrit en Python (>=3.6) et dépend de libarchive pour la gestion des archives de fichiers. Sur macOS, vous devrez peut-être installer une version plus récente de libarchive via Homebrew :

brew install libarchive

OpenDrop définit automatiquement DYLD_LIBRARY_PATH pour utiliser la version Homebrew. Sur Linux, la version système de libarchive est généralement suffisante.

Installation

Installer OpenDrop est simple via pip :

pip3 install opendrop

Pour la dernière version de développement, clonez le dépôt et installez-le :

git clone https://github.com/seemoo-lab/opendrop.git
pip3 install ./opendrop

Utilisation

Envoyer un fichier

L'envoi d'un fichier est un processus en deux étapes : d'abord découvrir les appareils à proximité, puis envoyer.

  1. Découvrir les destinataires :
$ opendrop find
Recherche de destinataires. Appuyez sur Ctrl+C pour arrêter...
Trouvé index 0 ID eccb2f2dcfe7 nom iPhone de John
Trouvé index 1 ID e63138ac6ba8 nom MacBook Pro de Jane
  1. Envoyer un fichier :
$ opendrop send -r 0 -f /chemin/vers/un/fichier
Demande d'acceptation au destinataire...
Destinataire accepté
Téléchargement du fichier...
Téléchargement réussi

Vous pouvez également utiliser l'ID de l'appareil ou le nom au lieu de l'index. OpenDrop essaie de faire correspondre l'entrée dans l'ordre : index, ID, nom.

Envoyer un lien web

Depuis la version 0.13, OpenDrop prend en charge l'envoi d'URL. Lorsqu'il est reçu sur un appareil Apple, le lien s'ouvre directement dans le navigateur :

$ opendrop send -r 0 -f https://owlink.org --url

Recevoir des fichiers

La réception est plus simple. Utilisez la commande receive pour accepter automatiquement tous les fichiers entrants. Les fichiers sont enregistrés dans le répertoire courant :

$ opendrop receive

Limitations actuelles

OpenDrop est un projet de recherche et présente plusieurs limitations connues :

  • Déclenchement Bluetooth LE : Les appareils Apple démarrent leur interface AWDL et leur serveur AirDrop uniquement après avoir reçu une publicité Bluetooth Low Energy personnalisée. Cela signifie que les appareils Apple peuvent ne pas être découverts même s'ils sont réglés en mode "tout le monde".
  • Absence d'authentification pair : OpenDrop ne vérifie pas que le certificat TLS est signé par la racine d'Apple, ni ne valide l'enregistrement Apple ID. Il accepte également automatiquement tous les fichiers entrants en raison d'un état de connexion manquant.
  • Envoi de fichier unique : Contrairement à Apple AirDrop, OpenDrop ne prend pas en charge l'envoi de plusieurs fichiers à la fois.

Dans les coulisses : La recherche

OpenDrop a été développé par le Seemoo Lab à l'Université technique de Darmstadt dans le cadre du projet Open Wireless Link. L'équipe a publié plusieurs articles académiques détaillant leurs efforts de rétro-ingénierie :

  • PrivateDrop : Un schéma d'authentification préservant la vie privée pour AirDrop (USENIX Security '21).
  • A Billion Open Interfaces : Une étude des attaques sur iOS et macOS via AWDL (USENIX Security '19).

Ces articles fournissent des informations approfondies sur les propriétés de sécurité et de confidentialité du protocole AirDrop, faisant d'OpenDrop non seulement un outil mais aussi une base pour des recherches futures.

Conclusion

OpenDrop est un projet open source remarquable qui démocratise l'accès au protocole AirDrop d'Apple. Bien qu'il ait des limitations, il constitue un excellent outil pour les développeurs, les chercheurs en sécurité et toute personne ayant besoin de partage de fichiers multiplateforme sans dépendre de services cloud. Son interface en ligne de commande facilite son intégration dans des scripts et des flux de travail automatisés, et sa nature open source invite aux contributions pour remédier à ses lacunes actuelles.

Source

seemoo-lab/opendrop : Une implémentation open source d'Apple AirDrop écrite en Python