OpenDrop: Una implementación de código abierto de Apple AirDrop en Python

OpenDrop es una herramienta de línea de comandos que implementa el protocolo Apple AirDrop en Python, permitiendo compartir archivos entre dispositivos a través de Wi-Fi, incluso con dispositivos Apple.

¿Qué es OpenDrop?

OpenDrop es una herramienta de código abierto y línea de comandos que implementa el protocolo Apple AirDrop en Python. Su característica destacada es la compatibilidad a nivel de protocolo con Apple AirDrop, lo que significa que puedes usarlo para compartir archivos directamente con dispositivos Apple que ejecuten iOS y macOS a través de Wi-Fi. Esto se logra mediante la ingeniería inversa del protocolo propietario AirDrop, convirtiéndolo en una herramienta valiosa para desarrolladores, investigadores de seguridad y cualquier persona que desee comprender o interactuar con el ecosistema de intercambio de archivos de Apple sin estar limitado al hardware de Apple.

Por qué OpenDrop es importante

AirDrop es una función de intercambio de archivos conveniente y sin configuración integrada en el ecosistema de Apple. Sin embargo, es de código cerrado y está estrechamente vinculado al hardware y software de Apple. OpenDrop rompe esta barrera al proporcionar una implementación portátil y multiplataforma que puede ejecutarse en Linux y macOS. Esto es particularmente útil para:

  • Investigación de seguridad: Comprender el protocolo AirDrop, sus propiedades de seguridad y posibles vulnerabilidades.
  • Intercambio de archivos multiplataforma: Compartir archivos desde una máquina Linux a un iPhone o Mac sin necesidad de un servicio de terceros o carga en la nube.
  • Automatización: Integrar funcionalidades similares a AirDrop en scripts y flujos de trabajo automatizados.

Cómo funciona

OpenDrop se basa en dos tecnologías clave:

  1. Apple Wireless Direct Link (AWDL): AirDrop se ejecuta exclusivamente sobre AWDL, una capa de enlace Wi-Fi propietaria utilizada por los dispositivos Apple para la comunicación peer-to-peer. OpenDrop es compatible de forma nativa en macOS y en Linux a través de una reimplementación abierta de AWDL, como OWL.

  2. Python y libarchive: La herramienta está escrita en Python (>=3.6) y depende de libarchive para manejar archivos comprimidos. En macOS, es posible que necesites instalar una versión más reciente de libarchive a través de Homebrew:

brew install libarchive

OpenDrop establece automáticamente DYLD_LIBRARY_PATH para usar la versión de Homebrew. En Linux, el libarchive del sistema suele ser suficiente.

Instalación

Instalar OpenDrop es sencillo a través de pip:

pip3 install opendrop

Para la última versión de desarrollo, clona el repositorio e instálalo:

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

Uso

Enviar un archivo

Enviar un archivo es un proceso de dos pasos: primero descubre dispositivos cercanos, luego envía.

  1. Descubrir receptores:
$ opendrop find
Buscando receptores. Presiona Ctrl+C para detener ...
Encontrado índice 0 ID eccb2f2dcfe7 nombre iPhone de John
Encontrado índice 1 ID e63138ac6ba8 nombre MacBook Pro de Jane
  1. Enviar un archivo:
$ opendrop send -r 0 -f /ruta/a/algun/archivo
Pidiendo al receptor que acepte ...
Receptor aceptó
Subiendo archivo ...
La subida ha sido exitosa

También puedes usar el ID del dispositivo o el nombre en lugar del índice. OpenDrop intenta coincidir la entrada en el orden: índice, ID, nombre.

Enviar un enlace web

Desde la versión 0.13, OpenDrop admite el envío de URL. Cuando se reciben en un dispositivo Apple, el enlace se abre directamente en el navegador:

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

Recibir archivos

Recibir es más simple. Usa el comando receive para aceptar automáticamente todos los archivos entrantes. Los archivos se guardan en el directorio actual:

$ opendrop receive

Limitaciones actuales

OpenDrop es un proyecto de investigación y tiene varias limitaciones conocidas:

  • Disparo por Bluetooth LE: Los dispositivos Apple inician su interfaz AWDL y el servidor AirDrop solo después de recibir un anuncio personalizado de Bluetooth Low Energy. Esto significa que los dispositivos Apple pueden no ser descubiertos incluso si están configurados en modo "todos".
  • Sin autenticación de pares: OpenDrop no verifica que el certificado TLS esté firmado por la raíz de Apple, ni valida el registro de Apple ID. También acepta automáticamente todos los archivos entrantes debido a un estado de conexión faltante.
  • Envío de un solo archivo: A diferencia de Apple AirDrop, OpenDrop no admite el envío de múltiples archivos a la vez.

Detrás de escena: La investigación

OpenDrop fue desarrollado por el Seemoo Lab de la Universidad Técnica de Darmstadt como parte del proyecto Open Wireless Link. El equipo publicó varios artículos académicos detallando sus esfuerzos de ingeniería inversa:

  • PrivateDrop: Un esquema de autenticación que preserva la privacidad para AirDrop (USENIX Security '21).
  • A Billion Open Interfaces: Un estudio de ataques a iOS y macOS a través de AWDL (USENIX Security '19).

Estos artículos proporcionan información profunda sobre las propiedades de seguridad y privacidad del protocolo AirDrop, haciendo de OpenDrop no solo una herramienta, sino una base para futuras investigaciones.

Conclusión

OpenDrop es un notable proyecto de código abierto que democratiza el acceso al protocolo AirDrop de Apple. Si bien tiene limitaciones, sirve como una excelente herramienta para desarrolladores, investigadores de seguridad y cualquier persona que necesite intercambio de archivos multiplataforma sin depender de servicios en la nube. Su interfaz de línea de comandos facilita su integración en scripts y flujos de trabajo automatizados, y su naturaleza de código abierto invita a contribuciones para abordar sus deficiencias actuales.

Fuente

seemoo-lab/opendrop: Una implementación abierta de Apple AirDrop escrita en Python