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:
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.
Python y libarchive: La herramienta está escrita en Python (>=3.6) y depende de
libarchivepara manejar archivos comprimidos. En macOS, es posible que necesites instalar una versión más reciente delibarchivea 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.
- 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
- 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