- La pantalla táctil de origen desconocido en un departamento del Reino Unido terminado en 2015 resultó ser parte de un sistema de monitoreo de energía de NETTHINGS: un dispositivo que mostraba el consumo eléctrico actual y datos históricos
- La arquitectura se dividía entre un energy manager junto al medidor y un cliente tipo tablet Android dentro de la habitación; aunque estaban a poca distancia y separados por unas pocas paredes, se comunicaban por WiFi en lugar de cable
- La causa directa de que la pantalla no funcionara era que faltaba un fusible de 3 A en el circuito del energy manager; al reemplazarlo, volvieron a aparecer la red WiFi y la pantalla web de consumo
- La interfaz de la tablet era un webview y el servidor usaba Node.js, Express y Socket.IO; el dispositivo del medidor tenía abiertos servicios DNS, HTTP, SSH y TCF en
172.16.0.254 - El tcf-agent abierto ofrecía acceso al sistema de archivos y a los procesos con privilegios de root, lo que permitía modificar el dispositivo sin la contraseña de SSH; internamente era un dispositivo ARM9 basado en Linux 3.10, con una estructura de almacenamiento de datos eléctricos basada en CSV
Para qué servía la pantalla táctil misteriosa
- En una habitación del departamento nuevo había instalada una pantalla táctil sin botones ni etiquetas, solo con una pequeña luz amarilla de encendido
- El propietario tampoco sabía qué controlaba el dispositivo, y después de la mudanza quedó olvidado durante un tiempo
- Su identidad se reveló cuando apareció un folleto con el mismo dispositivo en una carpeta de manuales de electrodomésticos
- El dispositivo era parte de un sistema de monitoreo de energía
- Mostraba el consumo eléctrico actual y datos de consumo histórico
- El folleto también presentaba un segundo componente, el energy manager, que se conectaba directamente al medidor eléctrico
- En el gabinete de medidores compartido había un dispositivo de la marca NETTHINGS instalado junto con los dispositivos de otras unidades
Energy manager y tablet Android conectados por WiFi
- El sistema estaba compuesto por el energy manager, que actuaba como “servidor” y recopilaba datos, y la pantalla táctil, que actuaba como “cliente” y los leía para mostrarlos en pantalla
- La distancia entre ambos dispositivos era de apenas unos metros y solo había unas 2 o 3 paredes de por medio, pero el folleto incluía un SSID y una Pwd
- La comunicación real también se hacía por WiFi, no por cable
- Al presionar un botón dentro de un pequeño orificio en el lateral de la pantalla táctil, apareció el logo de arranque de Android
- Era una tablet Android antigua
- Tenía instaladas apps antiguas como Google Talk y Flash
- Parecía Android 5, aunque la versión exacta no era segura
- Al ejecutar la app “NetThings”, aparecía una pantalla para elegir la red WiFi, pero al principio la red del folleto no aparecía en la lista
El fusible faltante y el monitor que volvió a la vida
- En el gabinete de medidores, los energy managers de otras unidades estaban encendidos, pero el de esa unidad estaba apagado
- La causa era la falta de un fusible en la caja de fusibles
- Sin el fusible, la conexión eléctrica estaba interrumpida
- El energy manager no recibía energía
- El hotspot WiFi tampoco aparecía
- Al revisar los fusibles de otros energy managers del mismo gabinete de medidores, se confirmó que la especificación necesaria era un fusible de 3 A
- Se pidió un fusible de 3 A por Amazon y se instaló al día siguiente; después, el LED verde del energy manager comenzó a parpadear y apareció la red WiFi
- El trabajo se realizó cerca de la alimentación principal, por lo que era peligroso; luego se revisó varias veces la temperatura del fusible durante un día, y no se recomienda a otras personas hacer este tipo de experimentos
Una UI web decepcionante y valores de tarifa fijos
- Al seleccionar la red WiFi en la tablet Android, se mostraba un menú para elegir el tipo de recurso
- El único elemento que realmente funcionaba era Mains Electricity, al que estaba conectado el energy manager
- La pantalla de consumo eléctrico mostraba un indicador de colores a la derecha y cinco números a la izquierda, pero el significado de la UI no era claro
- No se podía saber si el verde significaba bajo consumo o consumo normal
- No se podía saber contra qué se comparaba la posición vertical del indicador de colores
- Tampoco se podía saber si la posición máxima estaba relacionada con el mayor consumo histórico
- De los cinco números mostrados a la izquierda, el único valor realmente correcto era el consumo en kW
- La tarifa eléctrica y la estimación de CO2 por kW no se pueden configurar
- El folleto decía que podían configurarse durante la instalación inicial
- No indicaba cómo devolver el sistema a un estado en el que pudiera configurarse de nuevo
- El folleto también decía que había que conectarse desde una PC para corregir la hora de los datos, y el reloj de la tablet Android estaba atrasado unos 15 minutos desde la instalación en 2015
Webview, Socket.IO y servidor Node.js
- Si se pudieran leer directamente los datos del energy manager, sería posible multiplicar el consumo en kW por la tarifa correcta y mostrarlo en Grafana u otras herramientas
- El folleto incluía un caso de uso para consultar el consumo de energía desde una PC, y allí figuraban la IP y el puerto
- Al conectarse con un navegador, se mostró la misma pantalla que en la tablet Android, confirmando que la UI de la tablet era un webview
- Al revisar las llamadas de la API en el inspector web, se vio que se usaba Socket.IO
- El cliente apenas recibía cinco números del servidor, pero el código incluía módulos RequireJS, Handlebars, Backbone.js, Underscore.js y otros
Puertos abiertos y tcf-agent
- La IP del dispositivo era
172.16.0.254, yssh root@172.16.0.254falló inicialmente con “Connection refused” - Un escaneo completo de puertos mostró los siguientes servicios abiertos
53/tcp: dnsmasq 2.63rc680/tcp: HTTP basado en Node.js1534/tcp:micromuse-lm?3000/tcp: HTTP basado en Node.js41142/tcp: OpenSSH 6.2
dnsmasqencajaba con el rol de servidor DHCP, ya que el dispositivo era un punto de acceso WiFi- SSH estaba abierto en el puerto 41142, pero la cuenta root estaba protegida con contraseña, y combinaciones simples como
admin/adminoroot/rootno funcionaban - Mientras se investigaba qué era el puerto 1534, se identificó la palabra clave tcf-agent a través de un post en el foro de Xilinx
Acceso al sistema de archivos root mediante TCF
- TCF significa Target Communications Framework, un protocolo de texto que permite leer el sistema de archivos en el sistema objetivo, iniciar procesos nuevos, enviar señales a procesos y más
tcf-agentes un servidor que implementa este protocolo, y en este dispositivo se estaba ejecutando como usuario root- TCF estaba estrechamente vinculado al ecosistema Eclipse, y el documento Getting Started indicaba que el método principal de uso era un plugin de Eclipse
- Se intentó instalar el plugin en una versión nueva de Eclipse, pero los conflictos de dependencias dificultaron que funcionara correctamente
- En su lugar, se encontró y usó el SDK de Python del proyecto TCF
- Página de instrucciones: TCF/Python_Scripting
- Guía del repositorio anterior: ruta en git.eclipse.org
- Repositorio actual: Eclipse GitLab TCF
- Documentación del protocolo: TCF Specification, TCF Services
- Con los servicios
FileSystemyProcessesde TCF fue posible crear herramientas sustitutas para comandos comols,catyps; el resultado quedó organizado en tcf-tools
Acceso por SSH y especificaciones internas del dispositivo
- Al principio se intentó traer
/etc/passwdy/etc/shadowmediante TCF para crackear la contraseña de root con John the Ripper - Incluso tras unas 7 horas de ejecución no se encontró ninguna coincidencia, y John mostraba como fecha estimada para completar la fuerza bruta el año 2035
- Luego se modificó
/etc/shadowpara dejar vacía la contraseña de root y se reinició la energía, pero el inicio de sesión por SSH seguía siendo rechazado - La causa era la configuración
PermitRootLogin noensshd_config- Al cambiar esa línea por
PermitRootLogin yes, fue posible iniciar sesión por SSH como root
- Al cambiar esa línea por
- El dispositivo ejecutaba
Linux 3.10.28 armv5tejl - La CPU era ARM926EJ-S rev 5, perteneciente a la familia ARM9
- La entrada
javaen la lista de funciones de/proc/cpuinfose refiere a Jazelle, una extensión de ARM para ejecutar bytecode Java - La memoria aparecía como
MemTotal: 118172 kB, y en el dispositivo se ejecutaba una app Node.js
Estructura de la aplicación y almacenamiento de datos
- La aplicación del servidor estaba bajo
/srv/servery tenía una estructura conGruntfile.js,app.js,bower.json,package.json,node_modules,routes,views,publicy otros elementos - La app se dividía en dos partes principales
- La Pulse app, que leía datos de consumo del medidor eléctrico
- Una app Node.js, que leía datos CSV y los mostraba en la UI web
- Los archivos relacionados con la Pulse app estaban en la carpeta
binpulse-apppulse.koct-read-daemon- Directorios mensuales, diarios, horarios, semanales y anuales
- La extensión
.kodepulse.konormalmente significa Kernel Object, por lo que posiblemente era un módulo del kernel - La Pulse app leía datos desde pines GPIO y guardaba los resultados en archivos CSV
- Los archivos CSV estaban divididos en directorios por mes, día y hora, y la visualización de datos históricos de la UI web también solo soportaba vistas mensuales, diarias y horarias
- La app Node.js usaba Node.js 0.10.26, Express.js 4.13.3 y Socket.io 1.3.6
- Entre las dependencias estaba el paquete
mqtt, y el código fuente contenía código incompleto que parecía corresponder a la integración en la nube prometida en el folleto, además de IPs de broker hardcodeadas- Esas IPs ya no funcionaban
- El dispositivo en sí tampoco tenía acceso a internet
Hallazgos posteriores
- La empresa NETTHINGS, fabricante del dispositivo, ya estaba disuelta
- El usuario de Hacker News M6WIQ señaló otro artículo sobre las consecuencias de las decisiones de ingeniería de NetThings
- El autor de ese artículo preguntó en Mastodon si el dispositivo aún usaba la IP de su servidor NTP, y la situación real resultó ser aún peor
- Marc Bevand aportó recursos de GPU para hacer fuerza bruta contra las contraseñas originales de usuarios Linux del energy manager
- Los hashes usaban un algoritmo de al menos 30 años de antigüedad
- Las contraseñas de
rootygecko_usereranNewt@rd$ - La contraseña de la cuenta
prod_testeraNetTh@ng
- Una empresa de hosting tradujo este artículo al ruso
1 comentarios
Comentarios de Hacker News
Hace algunos años, la gente se dio cuenta de que, para ayudar a las personas a gestionar de forma más ecológica y económica el consumo de servicios públicos como electricidad, agua y gas, hacía falta información mucho mejor que un solo total mensual
Como mínimo, hay que poder ver el consumo en intervalos de 5 minutos para notar cosas como que “haber dejado prendido el calentador eléctrico unas horas consumió más electricidad que toda la iluminación del mes”
En los hogares sudafricanos de clase media son comunes los inversores y paneles solares debido a la inestabilidad del suministro eléctrico, y en mi casa también puedo ver el historial completo del consumo de energía, así que es fácil identificar dónde se puede mejorar la eficiencia
Aun así, sigue siendo información agregada, así que hay que inferir las causas. Por ejemplo, si aparece un consumo de 3 kW durante aproximadamente una hora después de bañarse, es el calentador de agua volviendo a calentar; y en ese momento, según los registros del inversor, la batería se descargó durante la noche y como todavía es temprano la producción solar es baja, así que esa energía viene de la red
Por eso, si se le pone un temporizador al calentador de agua para que solo caliente después de las 10 de la mañana, cuando el sol ya está lo bastante alto como para cubrirlo con energía solar, es fácil reducir la factura eléctrica. Ahora también me gustaría poder monitorear así de cómodamente el consumo de agua
En Países Bajos, si conectas algo como un “slimme lezer” al puerto p1 del medidor eléctrico, aparece de inmediato en Home Assistant como sensores adecuados
El panel de energía muestra consumo de gas y electricidad, producción solar, proporción de uso de red/solar e incluso batería doméstica si la hay, así que está muy bien
Los enchufes Aqara con medición de energía usan Zigbee y pueden saturarse con facilidad, mientras que Shelly usa WiFi pero ha resultado bastante robusto. Si se usan junto con estas herramientas, queda claro qué medidas de ahorro conviene priorizar, y además a los sensores de Home Assistant se les puede agregar el costo por kWh y el costo por m³ de gas
Es un dispositivo grande, como una banda que se pega al brazo, que inserta una aguja fina bajo la piel y se comunica con una app del teléfono para mostrar cosas como el nivel de glucosa en sangre
En cuanto vio qué efecto tenían los alimentos que comía, cambió su dieta de inmediato, y sigue así incluso ahora que ya no usa el monitor. La UI de la app estaba bien, pero lo que realmente hizo la diferencia fue el historial de datos
Si supieras que al cocinar tu consumo eléctrico sube mucho, ¿comerías más ensaladas? En toda Europa se están reemplazando los medidores eléctricos por medidores inteligentes, y se promociona mucho la ventaja de poder ver continuamente el consumo energético, pero todavía es difícil saber si eso realmente se traduce en ahorros significativos
Al final, el mayor efecto viene cuando los grandes electrodomésticos y la climatización responden a la producción propia, o cuando se aprovecha que la electricidad es más barata en tarifas dinámicas por hora o por día. Ahí entran cosas como un temporizador sencillo instalado por uno mismo, un relé que apaga la calefacción mientras se cocina, o un dispositivo como el Fronius Ohmpilot [1], que ajusta la potencia de calentamiento según el excedente de producción solar
[1] https://www.fronius.com/en/solar-energy/installers-partners/...
Otra forma que me funcionó fue fijar directamente una sonda de temperatura a la tubería de entrada del agua y compararla con la temperatura ambiente. Donde vivo, el agua viene del subsuelo y siempre está mucho más fría que el aire alrededor, así que eso lo hacía posible
Si integras en el tiempo la diferencia entre ambas temperaturas, obtienes un sustituto aproximado del consumo de agua, pero requiere bastante más trabajo hasta conseguir datos útiles
Un sensor de proximidad para detectar metal podría ser lo más simple. Si tu medidor de agua tiene un indicador metálico giratorio, podrías usar algo como https://www.alldatasheet.com/view.jsp?Searchword=LJ12A3-4-Z/...
Con el panel de energía de Home Assistant se puede saber cuánto consume realmente el “rack” (UPS+Mac mini+unidad de discos de 5 bahías+otros) en comparación con el refrigerador o la lavadora, que la computación del escritorio consume poco pero las pantallas gastan bastante cuando están encendidas, cuánto cuesta cargar la bicicleta eléctrica o qué diferencia hay en invierno entre dejar el termostato en 19 grados en vez de 20
También aparecen sorpresas, como descubrir que el ventilador que usas seguido en verano en realidad consumía tanta electricidad como el calentador de agua. La medición de energía la hago con Shelly Plug Plus S, 3EM y 4PM, y la medición de temperatura con Shelly H&T Plus
Resulta interesante lo sorprendido que está el autor por este engendro tecnológico que es un electrodoméstico funcionando con Linux. Una estructura donde un servidor Node ofrece por WiFi un sitio web, una API y WebSockets, y ese sitio se muestra en un motor WebView viejo de un terminal muy limitado que no puede reutilizarse para otros usos, ya se volvió casi un estándar común
Mostrar unos cuantos números y una gráfica de barras probablemente habría sido suficiente con dos microcontroladores comunicándose por un bus cableado, pero en esta época una fuente de alimentación así podría hacer que ambos dispositivos consuman unos 16 W en reposo
Si está encendido 24/7 todo el año, consume tanta electricidad como un refrigerador pequeño y, comparado con unos cuantos microcontroladores de unos pocos dólares, probablemente tampoco salga bien en una evaluación de ciclo de vida
Lo peor es que es muy probable que este dispositivo complejo haya quedado inutilizado 3 años después de la instalación, o quizá incluso antes
Desde la perspectiva del negocio, no quieren pagar personal caro que sepa programar microcontroladores. Para una interfaz simple que solo muestra una gráfica de barras, un desarrollador frontend sale mucho más barato
Algunas placas ya traen micrófonos MEMS y cámara, y en la caja de la foto también se ve un lente de cámara. Yo habría desmontado el dispositivo para ver qué tenía dentro o, al menos, habría corrido diagnósticos para ver qué hardware estaba instalado y detectado
https://www.wolframalpha.com/input?i=16+watts++24+hours++3...
Que el SSID y la contraseña estuvieran impresos no sorprende en absoluto. Es probable que estos dispositivos se instalen como adaptación en casas ya existentes más que venir incluidos en construcciones nuevas, y como meter cableado dentro de paredes existentes es una molestia, seguramente no querían crear una barrera de venta
Hoy en día se consiguen chipsets WiFi por unos pocos dólares
Tampoco parece que haya que preocuparse tanto por el fusible de 3 A. Si fuera un fusible de 3 A, no significa que toda la alimentación principal del departamento pase por ahí; si hubieran intentado hacerlo así, se habría fundido casi al instante
Y lo de Jazelle, el soporte por hardware para bytecode de Java, al final fue una tecnología que no terminó de cuajar
[0]: https://www.youtube.com/watch?v=B90_SNNbcoU
No es estrictamente necesario, pero puede ser una forma rentable de separar las partes eléctricamente peligrosas de las que toca la gente y de evitar bucles cuando surge algún problema. Lo inalámbrico sirve para algo más que simplemente eliminar cables
Al menos no fue que encontrara un tomacorriente donde habían envuelto con cuidado un fusible quemado en una carcasa ceremonial de aluminio para darle inmortalidad y muerte segura al mismo tiempo. Puede que sea un crimen que yo haya cometido cuando era niño, en una época en que era más propenso a jugar con fuego
Es interesante cuánta gente se siente incómoda fuera de su zona de seguridad. Claro, yo soy de los que se meten a husmear en cosas que uno podría no necesitar tocar en toda la vida
Claro, si la seguridad fuera suficiente y siguiera recibiendo actualizaciones periódicas, no habría problema, y solo nos queda suponer que el dispositivo que encontró el autor era una excepción rarísima que no cumplía esas condiciones
El nombre de la empresa Netthings me sonaba; hace tiempo leí una nota sobre cómo un servidor NTP hardcodeado en un dispositivo de esta empresa quedaba bloqueado por un firewall y perdía la sincronización de hora
Artículo: https://strugglers.net/~andy/blog/2018/12/24/the-internet-of...
Parece que entró en liquidación en 2018, así que será difícil conseguir soporte para este dispositivo
“DATE & TIME ARE ALWAYS CORRECT AND NEVER NEED TO BE ADJUSTED” suena como una frase sacada de una novela de Philip K. Dick
Evidentemente no salió bien
El chiste de que “la C de IoT debe significar cost-effective” es corto e ingenioso, pero uno puede sorprenderse al ver qué tan baratos y rentables son en realidad los SoC con soporte WiFi
En muchos casos, el WiFi viene prácticamente gratis, y la mayoría de estos SoC ni siquiera traen controlador Ethernet por defecto, así que, si encaja con el caso de uso, WiFi resulta más rentable
Claro que también son posibles otros protocolos físicos o formas de conexión, pero en este tipo de clientes instalados como modificación, WiFi o un protocolo inalámbrico común es lo mejor
Es parecido a 3 m de cable, conectores y un chip barato para gestionar la conexión del cable, y la mano de obra para instalar el cable cuesta mucho más que eso. Por eso no entiendo muy bien por qué se vería como un desperdicio conectarlo por WiFi
Le pedí al autor original que me enviara el archivo
/etc/shadowcon el que John The Ripper no había podido hacer fuerza bruta, y como era un hash UNIXcrypt()antiguo, pude romper la contraseña de root con hashcat y 12 RTX 4090 en unas 7 horasLa contraseña de root es
Newt@rd$Este dispositivo permite acceso root por TCF incluso sin autenticación, así que no es especialmente útil, pero esa contraseña podría haberse reutilizado en otro lado
Para evitar que el dominio quede sepultado por las arenas del tiempo, estaría bien hospedar el artículo en el propio dispositivo
3A son 720W. Si esa cajita realmente generara tanto calor, todo el armario se convertiría literalmente en un horno
Además, si un medidor de energía consumiera tanta potencia, iría contra su propio propósito; sería como probar fósforos. Como mucho serán 10W, y la corriente de irrupción probablemente tampoco será tan alta
Un fusible de 1A debería bastar, y la instalación también se ve bastante limpia, así que el hecho de que estuviera cerca de la red eléctrica principal tampoco da tanto miedo
Todos los aparatos en el Reino Unido tienen un fusible en el punto donde se conectan al cableado del edificio; normalmente va dentro del enchufe, pero también puede estar en un portafusibles fijo como en este dispositivo
Se consideró que demasiados valores distintos serían confusos e incómodos para el usuario, así que estos fusibles se limitan a uno de tres valores estándar del mismo tamaño: 13A, 5A o 3A. Como se dijo en otra parte, estos fusibles pueden comprarse incluso en supermercados y tiendas de conveniencia del Reino Unido
Si 3A es demasiado alto para el equipo, el diseñador debería usar un cable flexible con clasificación de 3A para que lo proteja el fusible del enchufe, y añadir una protección de menor corriente en el lado del dispositivo
El sistema británico era una estructura ingeniosa cuando se introdujo, con detalles sutiles como los valores estándar de fusibles bastante bien resueltos, pero en las viviendas modernas con muchos dispositivos de bajo consumo está algo sobrediseñado y no está optimizado
Si quieres ver este tipo de datos de consumo en tiempo real en casa, recomiendo mucho IoTaWatt: https://iotawatt.com
Es un monitor de energía totalmente local que se instala en el panel de interruptores de la casa, y puedes ver el tablero en el servidor web local que corre en el dispositivo o leer los datos por API
Puedes elegir tú mismo cuántos sensores usar, y permite monitorear no solo toda la casa sino también circuitos individuales
Por ejemplo, puedes seguir cuándo arrancan y se detienen electrodomésticos como la lavadora, el lavavajillas o el microondas, y disparar automatizaciones
Eso sí, para instalarlo tú mismo hace falta investigar, tener conocimientos básicos de electricidad y cierta disposición a trabajar con conexiones de red eléctrica de alto voltaje. Aun así, fue accesible y la configuración resultó fácil
Se ve así: https://i.ibb.co/qBVmBD1/IMG-1595.jpg