2 puntos por GN⁺ 2023-12-16 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2023-12-16
Opiniones de Hacker News
  • Análisis de paquetes descifrados

    • Como resultado del intento de descifrar los paquetes, se confirmó que había un encabezado fijo y que el quinto byte cambiaba entre 1 y 0 para indicar encendido y apagado, mientras que el resto estaba rellenado con 0. Se supone que esto representa la longitud del comando, el comando ("TURN") y el argumento (0 o 1), con relleno hasta 16 bytes.
  • Problema de suministro eléctrico

    • La tira LED WS281x brilla con mucha intensidad y consume bastante corriente. Una fuente de alimentación de 12V, 3A apenas alcanza para hacer funcionar las 100 tiras a brillo máximo. El hecho de que el firmware aparentemente solo use 31 de un brillo máximo de 255 sugiere que pudo haberse fundido un fusible.
  • Intento de ingeniería inversa de luces cifradas

    • Se intentó hacer ingeniería inversa de las luces LED a batería Amaran 60d y SmallRig RM75, pero se descubrió que estaban cifradas. Ambas luces usan el mismo proceso de negociación, pero bibliotecas distintas. Se intentó imitar el intercambio de claves Diffie-Hellman, pero se abandonó al no poder identificar el propósito de unos números de apariencia aleatoria en una etapa adicional (¿otra clave?). Leer este artículo hizo pensar en probar con una clave codificada de forma fija.
  • Opinión sobre luces BLE

    • Ya se ha leído bastante sobre conjuntos de luces que usan BLE, y se agradece que el autor lo haya mencionado. Esto recuerda a un video de Analog Technology Connections.
  • Intento de automatizar luces navideñas conectadas por BLE

    • Se intentó automatizar luces navideñas conectadas por BLE, pero eso terminó generando residuos electrónicos. Ahora tú también puedes hacerlo.
  • Duda sobre el cifrado de mensajes

    • Se plantea la duda de por qué los mensajes están cifrados y si eso es algo estándar.
  • Comentario sobre el cifrado

    • "No puedes enviar texto plano por el aire, no es seguro" y "No te preocupes, le agregué cifrado AES".
  • Comentario humorístico sobre hackear luces

    • Ante la frase "dime cómo puedo hackear mis luces", la respuesta fue "¡jaja! me encanta".
  • Pregunta de principiante sobre ingeniería inversa de luces Govee

    • Pregunta de principiante sobre por qué no se puede hacer ingeniería inversa de luces WiFi como las de Govee y si un MITM (ataque de intermediario) es más difícil.