- Compró una cámara Tapo para observar a su perro en casa, pero inesperadamente terminó haciendo ingeniería inversa de cómo funcionan los dispositivos y la app de TP-Link
- Para analizar el proceso de onboarding y la estructura de la comunicación API cifrada, usó varias técnicas como MITM, descompilación de APK y generación de scripts de descifrado
- Al descubrir la contraseña inicial de administrador y el proceso de derivación de claves de sesión, logró descifrar mensajes cifrados e identificar problemas de sincronización poco confiable entre el dispositivo y la cuenta en la nube
- Tras analizar el flujo completo de onboarding, automatizó con scripts de Bash las llamadas API clave, la creación de cuentas, el cambio de contraseña y la conexión Wi‑Fi
- Señala fallas en el diseño de seguridad del firmware de Tapo, una implementación de cifrado poco sofisticada y sincronización irregular de cuentas, rasgos típicos de dispositivos IoT de bajo costo
Resumen del proyecto
- El autor compró y usó una cámara Tapo económica para observar a su perro dentro de casa
- Durante el uso, la incomodidad de la configuración y la falta de información en línea lo motivaron a investigar a fondo cómo funcionaba el producto
- Surgieron problemas inesperados al integrarla con frigate y al activar 2way audio, lo que despertó su interés por un método de onboarding directo sin integración con la nube
Análisis de la estructura de onboarding y autenticación
- Para analizar el procedimiento de conexión de la cámara Tapo, interceptó el tráfico entre la app y la cámara usando MITM proxy y la herramienta de hooking dinámico frida
- Como las apps recientes incluyen resistencia a este tipo de análisis, como ignorar proxies y usar certificate pinning, este enfoque con herramientas dinámicas resultó efectivo
- Después de configurar esta evasión, pudo confirmar con precisión el proceso de login de la cuenta de administrador predeterminada dentro del flujo de onboarding de la cámara
- Descubrió que la API de login predeterminada funciona con una contraseña base propia del dispositivo, separada de la contraseña de la cuenta en la nube
Estructura de cifrado y búsqueda de la contraseña predeterminada
- Mediante descompilación del APK (usando JADX) y análisis de código, obtuvo la contraseña predeterminada de la cuenta
admin (TPL075526460603)
- Confirmó que, incluso si se cambia la contraseña de la nube, las cámaras ya vinculadas no detectan el cambio, lo que evidencia una sincronización imprecisa de contraseñas entre la app y la cámara
- Como ya conocía la contraseña predeterminada, implementó la lógica de derivación de claves de sesión (
lsk, ivb) y pudo descifrar en tiempo real los mensajes cifrados de la API
Scripting con mitmproxy y análisis de la API
- Tomando como referencia el proyecto open source PyTapo, analizó con precisión el flujo de API del procedimiento real de onboarding de Tapo
- Con el script
tapo_decrypt_pretty.py logró:
- detectar el handshake de login
- extraer las claves de sesión
- descifrar la API cifrada y mostrarla de forma legible, además de guardar el JSON
- De todas las llamadas API del onboarding completo, extrajo solo los procesos principales relevantes para crear un flujo de automatización
- consulta de lista Wi‑Fi (
scanApList)
- activación de cuentas RTSP/ONVIF
- cambio de contraseña de administrador
- conexión Wi‑Fi
Automatización y resultados
- Configuró un script de Bash (
tapo_onboard.sh) para ejecutar automáticamente todo el proceso de onboarding anterior
- login inicial con admin predeterminado
- selección y conexión a Wi‑Fi
- eliminación del logo en el feed de la cámara
- habilitación de RTSP/ONVIF
- restablecimiento de la contraseña de administrador
- En la estructura del firmware de la cámara encontró las siguientes características y debilidades
- algunas APIs usan hash SHA-256, pero otras mantienen esquemas antiguos como MD5
- existen 2 claves públicas, y no está claro en qué situaciones debe usarse cada una
- la sincronización de contraseñas entre la app y el dispositivo es muy inestable
Conclusión e impresiones
- La estructura de seguridad del firmware y de la API de la cámara Tapo da la impresión de ser improvisada y poco refinada
- Fue una experiencia indirecta de las debilidades de seguridad de los dispositivos IoT económicos y de la realidad de sus sistemas de onboarding incompletos
- Sí logró el objetivo final del proyecto, que era revisar a su perro, y confirmó que normalmente duerme en el sofá o en la cama
Aún no hay comentarios.