- Se hizo ingeniería inversa de un dispositivo de hogar inteligente basado en ESP32 para integrarlo con Home Assistant
- Se analizó la app móvil para confirmar la conexión con el servidor en la nube
- Se interceptó el tráfico de red para intentar el control del dispositivo
- Se volcó y analizó la flash del ESP32 para intentar una modificación del firmware
- Se analizó la estructura de los paquetes para entender el cifrado y el checksum
Introducción
- Recientemente ha estado intentando conectar todos sus dispositivos a Home Assistant
- Como cierto purificador de aire no se conecta más que con su propia app, intenta hackearlo para integrarlo
- Señala los problemas de los productos que dependen de una conexión a Internet y de una cuenta en la nube
Plan
- Confirmó que la app móvil se conecta al servidor en la nube y permite control remoto
- Buscó una forma de interceptar el tráfico de red para poder controlar el dispositivo
Análisis de la app móvil
- Analizó la app de Android y confirmó que fue desarrollada con React Native
- Descubrió que se conecta al servidor en la nube mediante WebSocket
Inspección de red
- Usó Pi-hole para revisar las consultas DNS y analizó el tráfico con Wireshark
- Confirmó la comunicación entre el dispositivo y el servidor mediante paquetes UDP
Análisis de paquetes
- Usó un proxy UDP para retransmitir el tráfico entre el dispositivo y el servidor en la nube
- Analizó la estructura de los paquetes con Wireshark y confirmó la posibilidad de cifrado
Desmontaje físico
- Desarmó un dispositivo basado en ESP32 y volcó el firmware desde el chip flash
- Usó esptool para leer los datos mediante una conexión serial
Análisis de la flash
- Usó esp32knife para analizar los datos de la flash y revisar la tabla de particiones
- Encontró archivos importantes en el sistema de archivos FAT
Análisis estático inicial
- Usó Ghidra para analizar las cadenas del firmware y confirmar el uso de una biblioteca de cifrado
- Implementa los algoritmos ECDH y HKDF mediante la biblioteca mbedtls
Modificación del firmware
- Mediante Ghidra, desactivó la función CapSense y modificó el firmware para arrancar el dispositivo
- Resolviendo el problema del checksum, logró flashear correctamente el firmware modificado
Encabezado de paquetes
- Analizó la estructura del encabezado de paquetes para identificar el número de serie y el identificador de mensaje
- Identificó los patrones de las solicitudes del cliente y las respuestas del servidor
Checksum de paquetes
- Verificó el checksum CRC para validar la integridad de los datos de los paquetes
1 comentarios
Comentarios de Hacker News
La solución a largo plazo es no comprar productos para el hogar que ignoren el control local
Que un purificador de aire aumente su funcionamiento cuando la calidad del aire interior empeora no requiere un dispositivo IoT, app, comunicación inalámbrica ni hub
Para los vendedores de dispositivos IoT basados en ESP32:
Para los propietarios de dispositivos IoT basados en ESP32:
Me pregunto si será posible averiguar qué pines están conectados en la placa del dispositivo, flashearlo por completo con ESPHome y escribir una configuración
yamlpersonalizadaCada vez que estuve en un equipo de diseño de dispositivos IoT, el ingeniero enfocado en seguridad se encargaba de la protección de arranque
Comentarios sobre el artículo:
Me pregunto por qué no usaron una solución estandarizada
Rara vez he visto que se use cifrado de firmware en dispositivos IoT con ESP32
Opinión sobre que los ingenieros de servicio decidieran no implementar protocolos estándar como DTLS
Quienes usan dispositivos inteligentes deberían usar DD-WRT, OpenWrt, Tomato o Asuswrt-Merlin para aislarlos en una VLAN separada de la red privada
No debería ser necesario hackear un producto para poder usar lo que compraste