Ingeniería inversa de un controlador de luces LED Bluetooth LE, o cómo arruiné mis luces de Navidad
- Cualquier dispositivo que se comunique por Bluetooth LE y tenga una app merece ser integrado a un sistema de automatización del hogar.
- Se dedicó bastante tiempo a hacer ingeniería inversa y automatizar una tira de luces LED económica.
- Recientemente, se logró conectar a Home Assistant en pocas horas la tira no direccionable de 5 m controlada por Bluetooth LE más barata, de £2.38.
Paso 1. Bytes por cable
- Para controlar el dispositivo con software propio, el primer paso es inspeccionar los bytes Bluetooth que la app envía al dispositivo.
- Android facilita este proceso. Se activa el modo desarrollador, se instala la app de las luces y luego se habilita
Bluetooth HCI snoop en la configuración de desarrollador para registrar el log.
- Al abrir el log con Wireshark se pueden ver los bytes exactos, buscar patrones en los valores e identificar las series de bytes para cada acción.
Paso 2. Ataque de repetición
- Si el objetivo es simplemente encender y apagar las luces, las series repetidas de bytes observadas podrían bastar para el control de energía.
- Se puede usar
gatttool para conectarse al dispositivo BLE y enviar bytes para hacer pruebas.
Paso 3. Descompilar la app de Android
- Se descarga el APK de la app y se abre en jadx para revisar sus secretos internos.
- En el código fuente se encontró una referencia a AES, lo que sugiere la posibilidad de un protocolo cifrado.
- Los datos cifrados no cambian cada vez, se requiere un descifrado rápido en un MCU de bajo consumo, y es posible que exista una clave fija que no sea única para cada dispositivo.
Paso 4. Todas las funciones
- Se fue recorriendo cada función de la app y registrando los bytes enviados.
- Resulta útil documentar cada acción, repetirla, descubrir patrones y correlacionar los bytes capturados con las notas.
Paso 5. Generador automatizado de basura electrónica
- Mientras se exploraban los cambios de color, se observó que la app no enviaba valores mayores a 0x1F para rojo, verde y azul.
- Se probaron valores de 8 bits y se descubrió que los colores más brillantes funcionaban bien.
- Surgió la duda de si había efectos adicionales, así que se probaron con un bucle simple.
- Hasta el décimo efecto todo funcionó bien, pero en el undécimo apareció un modo secreto y en el duodécimo llegó la oscuridad.
- Se intentó reiniciar, pero las luces no volvieron a encender y tampoco anunciaban por Bluetooth, así que ya no fue posible conectarse.
- Se presume que un desbordamiento de búfer dañó el firmware.
- Sin embargo, los propios LED son LED direccionables estándar, así que todavía se pueden usar conectándolos a otro microcontrolador.
Cómo puedes arruinar tus luces
- A pesar del problema, se documentó la mayor parte del protocolo y se creó un proyecto en Github que incluye un componente personalizado para Home Assistant.
- Funciona, pero hay que seguir bajo propio riesgo.
Opinión de GN⁺
- Lo más importante de este artículo es el espíritu DIY y la pasión por la ingeniería inversa para integrar luces inteligentes de uso doméstico en un sistema de automatización.
- El proceso de ingeniería inversa requiere no solo conocimiento técnico, sino también capacidad de resolución de problemas y creatividad, lo que lo vuelve un tema muy interesante incluso para ingenieros de software principiantes.
- Compartir la experiencia del fracaso ayuda a que otras personas no repitan el mismo error, y esta difusión abierta del conocimiento es uno de los valores centrales de la comunidad de código abierto.
1 comentarios
Opiniones de Hacker News
Análisis de paquetes descifrados
Problema de suministro eléctrico
Intento de ingeniería inversa de luces cifradas
Opinión sobre luces BLE
Intento de automatizar luces navideñas conectadas por BLE
Duda sobre el cifrado de mensajes
Comentario sobre el cifrado
Comentario humorístico sobre hackear luces
Pregunta de principiante sobre ingeniería inversa de luces Govee