- Le mystérieux écran tactile d’un appartement britannique achevé en 2015 faisait partie du système de suivi énergétique de NETTHINGS : un appareil affichant la consommation électrique actuelle et les données historiques
- L’architecture était divisée entre un gestionnaire d’énergie côté compteur et un client de type tablette Android dans la pièce ; malgré une courte distance et seulement quelques murs, ils communiquaient en WiFi plutôt que par câble
- La cause directe de l’écran inactif était l’absence d’un fusible 3 A dans le circuit du gestionnaire d’énergie ; une fois le fusible remplacé, le réseau WiFi et l’écran web de consommation sont revenus à la vie
- L’interface de la tablette était une webview, et le serveur utilisait Node.js, Express et Socket.IO ; l’appareil du compteur exposait des services DNS, HTTP, SSH et TCF sur
172.16.0.254 - Le tcf-agent ouvert fournissait, avec les privilèges root, un accès au système de fichiers et aux processus, ce qui permettait de modifier l’appareil sans mot de passe SSH ; à l’intérieur, il s’agissait d’un appareil ARM9 sous Linux 3.10, avec un stockage des données électriques basé sur des CSV
À quoi servait cet écran tactile mystérieux
- Dans la chambre du nouvel appartement était installé un écran tactile sans bouton ni étiquette, avec seulement un petit voyant d’alimentation jaune
- Même le propriétaire ne savait pas ce que cet appareil contrôlait, et il est resté oublié pendant un certain temps après l’emménagement
- Son identité a été révélée lorsqu’une brochure montrant le même appareil a été retrouvée dans un classeur de manuels d’électroménager
- L’appareil faisait partie d’un système de suivi énergétique
- Il affichait la consommation électrique actuelle et les données de consommation passées
- La brochure présentait aussi un second composant, le gestionnaire d’énergie, connecté directement au compteur électrique
- Dans le local commun des compteurs, un appareil de marque NETTHINGS était installé avec ceux des autres logements
Un gestionnaire d’énergie et une tablette Android connectés en WiFi
- Le système était composé d’un gestionnaire d’énergie jouant le rôle de « serveur » pour collecter les données, et d’un écran tactile jouant le rôle de « client » pour les lire et les afficher
- Les deux appareils n’étaient séparés que de quelques mètres et de 2 ou 3 murs, mais la brochure indiquait un SSID et un Pwd
- En pratique, la communication se faisait bien en WiFi, et non par câble
- En appuyant sur un bouton dans un petit trou sur le côté de l’écran tactile, le logo de démarrage Android est apparu
- C’était une vieille tablette Android
- D’anciennes apps comme Google Talk et Flash étaient installées
- Elle semblait être sous Android 5, sans que la version exacte soit certaine
- Le lancement de l’app « NetThings » affichait un écran de sélection du réseau WiFi, mais le réseau de la brochure n’apparaissait pas initialement dans la liste
Le fusible manquant et le moniteur ressuscité
- Dans le local des compteurs, les gestionnaires d’énergie des autres logements étaient allumés, mais celui de ce logement était éteint
- La cause était un fusible manquant dans la boîte à fusibles
- Sans fusible, la connexion électrique était coupée
- Le gestionnaire d’énergie n’était pas alimenté
- Le hotspot WiFi n’apparaissait donc pas non plus
- En vérifiant les fusibles des autres gestionnaires d’énergie dans le même local, le calibre nécessaire a été identifié comme un fusible 3 A
- Un fusible 3 A a été commandé sur Amazon et installé le lendemain ; la LED verte du gestionnaire d’énergie s’est ensuite mise à clignoter et le réseau WiFi est apparu
- L’intervention s’est faite à proximité du secteur et était dangereuse ; la température du fusible a été vérifiée plusieurs fois pendant la journée suivante, et ce type d’expérience n’est pas recommandé à d’autres
Une interface web décevante et des tarifs figés
- Après sélection du WiFi sur la tablette Android, un menu de choix du type de ressource s’est affiché
- Le seul élément réellement fonctionnel était Mains Electricity, auquel le gestionnaire d’énergie était connecté
- L’écran de consommation électrique affichait un indicateur coloré à droite et cinq nombres à gauche, mais la signification de l’interface n’était pas claire
- Impossible de savoir si le vert correspondait à une faible consommation ou à une consommation normale
- Impossible de savoir à quoi la position verticale de l’indicateur coloré était comparée
- Impossible de savoir si la position maximale avait un lien avec la consommation maximale passée
- Parmi les cinq nombres affichés à gauche, une seule valeur était réellement correcte : la consommation en kW
- Le tarif de l’électricité et l’estimation du CO2 par kW ne peuvent pas être configurés
- La brochure indique qu’ils peuvent être réglés lors de l’installation initiale
- Elle n’explique pas comment remettre le système dans un état permettant de le reconfigurer
- La brochure indiquait aussi de se connecter depuis un PC pour corriger l’heure des données, et l’horloge de la tablette Android avait dérivé d’environ 15 minutes depuis l’installation en 2015
Webview, Socket.IO et serveur Node.js
- S’il était possible de lire directement les données du gestionnaire d’énergie, on pourrait multiplier la consommation en kW par le bon tarif et l’afficher dans Grafana, par exemple
- La brochure mentionnait un cas d’usage où l’on consulte la consommation d’énergie depuis un PC, avec une IP et un port indiqués
- En s’y connectant avec un navigateur, le même écran que sur la tablette Android est apparu, confirmant que l’interface de la tablette était une webview
- L’inspection des appels API dans l’inspecteur web a montré que Socket.IO était utilisé
- Le client ne faisait guère plus que recevoir cinq nombres du serveur, mais le code incluait des modules RequireJS, Handlebars, Backbone.js, Underscore.js, etc.
Ports ouverts et tcf-agent
- L’IP de l’appareil était
172.16.0.254, etssh root@172.16.0.254échouait d’abord avec « Connection refused » - Un scan complet des ports a montré les services ouverts suivants
53/tcp: dnsmasq 2.63rc680/tcp: HTTP basé sur Node.js1534/tcp:micromuse-lm?3000/tcp: HTTP basé sur Node.js41142/tcp: OpenSSH 6.2
dnsmasqcorrespondait au rôle de serveur DHCP, puisque l’appareil faisait office de point d’accès WiFi- SSH était ouvert sur le port 41142, mais le compte root était protégé par mot de passe, et des combinaisons simples comme
admin/adminouroot/rootne fonctionnaient pas - En cherchant à identifier le port 1534, un post du forum Xilinx a fait apparaître le mot-clé tcf-agent
Accès root au système de fichiers via TCF
- TCF signifie Target Communications Framework ; c’est un protocole texte permettant notamment de lire le système de fichiers, de lancer de nouveaux processus et d’envoyer des signaux à des processus sur le système cible
tcf-agentest un serveur qui implémente ce protocole, et sur cet appareil il s’exécutait en tant qu’utilisateur root- TCF était étroitement lié à l’écosystème Eclipse, et la documentation Getting Started présente le plugin Eclipse comme principal mode d’utilisation
- Une tentative d’installation du plugin dans une version récente d’Eclipse s’est heurtée à des conflits de dépendances, rendant l’installation difficile
- À la place, le SDK Python du projet TCF a été trouvé et utilisé
- Page d’instructions : TCF/Python_Scripting
- Ancienne indication de dépôt : chemin git.eclipse.org
- Dépôt actuel : Eclipse GitLab TCF
- Documentation du protocole : TCF Specification, TCF Services
- Les services TCF
FileSystemetProcessesont permis de créer des outils remplaçant des commandes commels,catetps, et le résultat a été rassemblé dans tcf-tools
Accès SSH et caractéristiques internes de l’appareil
- Au départ,
/etc/passwdet/etc/shadowont été récupérés via TCF pour tenter de casser le mot de passe root avec John the Ripper - Même après environ 7 heures d’exécution, aucune correspondance n’a été trouvée, et John estimait la fin de la recherche exhaustive à 2035
- Ensuite,
/etc/shadowa été modifié pour vider le mot de passe root puis l’appareil a été redémarré, mais la connexion SSH était toujours refusée - La cause était le réglage
PermitRootLogin nodanssshd_config- En remplaçant cette ligne par
PermitRootLogin yes, la connexion SSH en root est devenue possible
- En remplaçant cette ligne par
- L’appareil exécutait
Linux 3.10.28 armv5tejl - Le CPU était un ARM926EJ-S rev 5, de la famille ARM9
- L’entrée
javadans la liste des fonctionnalités de/proc/cpuinfodésigne Jazelle, une extension ARM pour l’exécution de bytecode Java - La mémoire indiquait
MemTotal: 118172 kB, et une app Node.js tournait sur l’appareil
Structure applicative et stockage des données
- L’application serveur se trouvait sous
/srv/serveret comportait une structure avecGruntfile.js,app.js,bower.json,package.json,node_modules,routes,views,public, etc. - L’app était divisée en deux grandes parties
- Une Pulse app qui lisait les données de consommation du compteur électrique
- Une app Node.js qui lisait les données CSV et les affichait dans l’interface web
- Les fichiers liés à la Pulse app se trouvaient dans le dossier
binpulse-apppulse.koct-read-daemon- des répertoires mensuels, quotidiens, horaires, hebdomadaires et annuels
- L’extension
.kodepulse.kosignifie généralement Kernel Object, ce qui laisse penser qu’il pourrait s’agir d’un module noyau - La Pulse app lisait des données sur des broches GPIO et enregistrait les résultats dans des fichiers CSV
- Les fichiers CSV étaient organisés en répertoires par mois, jour et heure, et l’affichage des données historiques dans l’interface web ne prenait également en charge que les vues mensuelle, quotidienne et horaire
- L’app Node.js utilisait Node.js 0.10.26, Express.js 4.13.3 et Socket.io 1.3.6
- Les dépendances incluaient le paquet
mqtt, et le code source contenait du code inachevé semblant correspondre à l’intégration cloud promise par la brochure, ainsi qu’une IP de broker codée en dur- Ces IP ne fonctionnaient plus
- L’appareil lui-même n’avait pas non plus d’accès à Internet
Découvertes ultérieures
- L’entreprise NETTHINGS qui avait fabriqué l’appareil était déjà dissoute
- L’utilisateur Hacker News M6WIQ a signalé un autre article sur les conséquences des choix d’ingénierie de NetThings
- L’auteur de cet article a demandé sur Mastodon si l’appareil utilisait encore l’IP de son serveur NTP, et la situation réelle s’est révélée encore pire
- Marc Bevand a fourni des ressources GPU pour forcer les mots de passe Linux d’origine du gestionnaire d’énergie
- Le hash utilisait un algorithme vieux d’au moins 30 ans)
- Les mots de passe de
rootetgecko_userétaientNewt@rd$ - Le mot de passe du compte
prod_testétaitNetTh@ng
- Une société d’hébergement a traduit cet article en russe
1 commentaires
Avis de Hacker News
Il y a quelques années, on s’est rendu compte que, pour aider les gens à gérer leur consommation de services publics comme l’électricité, l’eau et le gaz de manière plus écologique et économique, il fallait des données bien meilleures qu’un simple total mensuel.
Il faut au minimum pouvoir voir sa consommation à une granularité d’environ 5 minutes pour se rendre compte, par exemple, que « laisser un radiateur électrique allumé quelques heures a consommé plus d’électricité que tout l’éclairage du mois ».
Dans les foyers de classe moyenne en Afrique du Sud, les onduleurs et les panneaux solaires sont courants à cause de l’instabilité de l’alimentation électrique ; chez moi aussi, je peux consulter tout l’historique de consommation électrique, ce qui permet de repérer plus facilement où gagner en efficacité.
Cela dit, ce sont toujours des données agrégées, donc il faut en déduire les causes. Par exemple, si l’on voit environ 3 kW pendant une heure après la douche, c’est le chauffe-eau qui se remet à chauffer ; et les journaux de l’onduleur montrent qu’à ce moment-là la batterie s’est déchargée pendant la nuit et que, comme on est le matin, la production solaire est faible, donc l’électricité vient du réseau.
En ajoutant donc une minuterie au chauffe-eau pour qu’il ne chauffe qu’après 10 h, lorsque le soleil est suffisamment haut et que le solaire peut couvrir la demande, on peut facilement réduire sa facture d’électricité. Maintenant, j’aimerais pouvoir surveiller aussi simplement ma consommation d’eau.
Aux Pays-Bas, si l’on branche quelque chose comme un « slimme lezer » sur le port P1 du compteur électrique, il apparaît directement dans Home Assistant comme un capteur approprié.
Le tableau de bord énergie est très pratique : il affiche la consommation de gaz et d’électricité, la production solaire, la part d’usage réseau/solaire et, le cas échéant, la batterie domestique.
Les prises avec mesure d’énergie d’Aqara sont en Zigbee, donc elles peuvent facilement être saturées, tandis que Shelly est en WiFi mais s’est montré assez robuste. Utilisés avec ce type d’équipements, ces outils permettent de bien prioriser les actions d’économie d’énergie, et l’on peut aussi renseigner dans les capteurs Home Assistant le coût par kWh et le coût du m³ de gaz.
C’était un appareil ressemblant à un gros patch collé sur le bras, avec une fine aiguille insérée sous la peau, qui communiquait avec une app mobile pour indiquer notamment le taux de glycémie.
Dès qu’il a vu l’effet de ce qu’il mangeait, il a immédiatement changé son régime, et il continue même maintenant qu’il ne porte plus le moniteur. L’UI de l’app était correcte, mais ce qui a vraiment fait la différence, ce sont les données historiques.
Si l’on constate que cuisiner consomme beaucoup d’électricité, va-t-on manger davantage de salades ? Partout en Europe, les compteurs électriques sont remplacés par des compteurs intelligents, et l’avantage de pouvoir consulter en continu sa consommation d’énergie est largement mis en avant, mais il est encore difficile de savoir si cela se traduira par des économies significatives.
Au final, les plus gros effets viennent quand les gros appareils et le chauffage/climatisation réagissent à la production domestique, ou quand on profite des moments où l’électricité est bon marché avec des tarifs dynamiques par plage horaire ou par jour. Cela inclut par exemple une simple minuterie installée soi-même, un relais qui coupe le chauffage pendant la cuisson, ou un appareil comme le Fronius Ohmpilot [1], qui ajuste la puissance de chauffe en fonction du surplus de production solaire.
[1] https://www.fronius.com/en/solar-energy/installers-partners/...
Une autre méthode qui a fonctionné chez moi consistait à fixer directement une sonde de température sur la conduite d’arrivée d’eau et à la comparer à la température ambiante. C’était possible là où j’habite parce que l’eau vient du sous-sol et reste toujours beaucoup plus froide que l’air ambiant.
En intégrant l’écart entre les deux températures dans le temps, on obtient une approximation grossière de la consommation d’eau, mais cela demande beaucoup plus de bricolage avant d’obtenir des données exploitables.
Un capteur de proximité détectant le métal pourrait être la solution la plus simple. Si le compteur d’eau possède une jauge métallique rotative, on peut utiliser quelque chose comme https://www.alldatasheet.com/view.jsp?Searchword=LJ12A3-4-Z/....
Avec le tableau de bord énergie de Home Assistant, on peut voir combien consomme réellement le « rack » (UPS + Mac mini + boîtier disque 5 baies + divers) par rapport au réfrigérateur ou à la machine à laver, constater que l’informatique de bureau consomme peu mais que les écrans allumés tirent pas mal, savoir combien coûte la recharge d’un vélo électrique, ou mesurer la différence entre régler le thermostat à 19 °C plutôt qu’à 20 °C en hiver.
On découvre aussi des choses surprenantes, par exemple qu’un ventilateur souvent utilisé en été consommait en réalité autant d’électricité qu’un chauffe-eau. La mesure de puissance se fait avec des Shelly Plug Plus S, 3EM et 4PM, et la mesure de température avec des Shelly H&T Plus.
Il est intéressant de voir à quel point l’auteur est surpris par cette aberration technique qu’est un appareil électroménager tournant sous Linux. Une architecture où un serveur Node fournit en WiFi un site web, une API et des WebSockets, et où ce site s’affiche dans le vieux moteur WebView d’un terminal très contraint, impossible à réutiliser pour autre chose, est désormais devenue une sorte de standard courant.
Pour afficher quelques chiffres et des graphiques en barres, deux microcontrôleurs communiquant sur un bus filaire auraient sans doute suffi, mais à notre époque, une telle alimentation peut très bien consommer autour de 16 W avec les deux appareils au repos.
Allumé 24 h/24 et 365 jours par an, cela consomme autant d’électricité qu’un petit réfrigérateur, et l’analyse du cycle de vie ne serait probablement pas brillante par rapport à quelques microcontrôleurs à quelques dollars.
Le pire, c’est qu’il y a de fortes chances que cet appareil complexe soit devenu une brique trois ans après son installation, voire plus tôt.
D’un point de vue business, on n’a pas envie d’employer des profils coûteux capables de programmer des microcontrôleurs. Pour une interface simple affichant des graphiques en barres, un développeur front-end revient beaucoup moins cher.
Certaines cartes embarquent déjà un micro MEMS et une caméra, et on distingue aussi un objectif de caméra sur le boîtier de la photo. À sa place, j’aurais démonté l’appareil pour voir l’intérieur, ou au minimum lancé des diagnostics pour savoir quel matériel est installé et détecté.
https://www.wolframalpha.com/input?i=16+watts++24+hours++3...
Le fait que le SSID et le mot de passe aient été imprimés n’a rien de surprenant. Ce genre d’appareil est probablement souvent installé en rétrofit dans des logements existants plutôt qu’intégré à une construction neuve, et comme tirer des câbles dans des murs existants est pénible, ils ne voulaient sans doute pas créer un frein à l’achat.
Aujourd’hui, on trouve des chipsets WiFi suffisants pour quelques dollars.
Le fusible 3 A ne semble pas non plus si inquiétant. Avec un fusible de 3 A, l’alimentation principale de tout l’appartement ne passe pas par lui ; si c’était le cas, il aurait sauté instantanément.
Et Jazelle, vraiment : la prise en charge matérielle du bytecode Java est une technologie qui n’a finalement jamais vraiment pris.
[0]: https://www.youtube.com/watch?v=B90_SNNbcoU
Ce n’est pas forcément indispensable, mais cela peut être une manière économique de séparer les parties électriquement dangereuses de celles que les humains touchent, et d’éviter des boucles en cas de problème. Le sans-fil ne sert pas seulement à supprimer des câbles.
Au moins, ce n’était pas une prise où quelqu’un avait soigneusement enveloppé un fusible mort dans une coque rituelle d’aluminium promettant à la fois la vie éternelle et une mort certaine. Un crime que j’ai peut-être commis enfant, à une époque où j’étais plus vulnérable au feu.
C’est intéressant de voir combien de gens se sentent mal à l’aise hors de leur zone de confort. Bien sûr, je suis moi-même quelqu’un qui met son nez dans des choses qu’il n’aura jamais besoin de toucher de sa vie.
Bien sûr, ce ne serait pas un problème si la sécurité était suffisante et si l’appareil recevait régulièrement des mises à jour de sécurité ; il faut donc supposer que celui découvert par l’auteur était une exception extrêmement rare ne remplissant pas ces conditions.
Le nom de l’entreprise Netthings me disait quelque chose : j’avais déjà lu un article expliquant qu’un serveur NTP codé en dur dans un de ses appareils avait été bloqué par un pare-feu, lui faisant perdre la synchronisation de l’heure.
Article : https://strugglers.net/~andy/blog/2018/12/24/the-internet-of...
Elle semble être entrée en liquidation en 2018, il sera donc difficile d’obtenir du support pour cet appareil.
« DATE & TIME ARE ALWAYS CORRECT AND NEVER NEED TO BE ADJUSTED » se lit comme une phrase sortie d’un roman de Philip K. Dick.
Manifestement, ça ne s’est pas très bien passé.
La blague « le C de l’IoT doit vouloir dire cost-effective » est courte et bien trouvée, mais on peut être surpris de voir à quel point les SoC avec WiFi sont bon marché et rentables
Dans bien des cas, le WiFi est pratiquement inclus gratuitement, et la plupart de ces SoC n’ont pas de contrôleur Ethernet par défaut ; si cela correspond au cas d’usage, le WiFi est donc plus économique
D’autres protocoles physiques ou modes de connexion sont bien sûr possibles, mais pour ce type de client installé en rénovation, le WiFi ou les protocoles sans fil courants sont le meilleur choix
C’est du même ordre qu’un câble de 3 m, des connecteurs et une puce bon marché pour gérer la connexion par câble, et la main-d’œuvre pour poser le câble coûte bien plus cher. Je ne vois donc pas vraiment pourquoi une connexion WiFi serait considérée comme du gaspillage
J’ai demandé à l’auteur du billet de m’envoyer le fichier
/etc/shadowqu’il n’avait pas réussi à brute-forcer avec John The Ripper ; comme il s’agissait d’un ancien hash UNIXcrypt(), j’ai pu casser le mot de passe root en environ 7 heures avec hashcat et 12 RTX 4090Le mot de passe root est
Newt@rd$Ce n’est pas particulièrement utile, puisque cet appareil permet déjà un accès root via TCF sans authentification, mais ce mot de passe a pu être réutilisé ailleurs
Au cas où le domaine finirait enseveli sous les sables du temps, ce serait bien d’héberger l’article sur l’appareil lui-même
3 A, c’est 720 W. Si cette petite boîte dissipait autant de chaleur, tout le placard deviendrait littéralement un four
Pour commencer, si un compteur d’énergie consommait autant, ce serait contraire à son objectif, un peu comme tester des allumettes. Il doit consommer 10 W tout au plus, et le courant d’appel ne doit pas être si élevé
Un fusible de 1 A devrait suffire, et l’installation paraît assez propre ; le fait qu’elle soit proche du secteur n’est donc pas si effrayant
Au Royaume-Uni, tous les appareils ont un fusible au point où ils se connectent au câblage du bâtiment, généralement dans la prise, mais il peut aussi se trouver dans un porte-fusible fixe comme ici
Comme trop de valeurs différentes seraient jugées déroutantes et pénibles pour les utilisateurs, ces fusibles sont limités, à taille identique, à trois valeurs normalisées : 13 A, 5 A ou 3 A. Comme indiqué ailleurs, on peut acheter ces fusibles dans les supermarchés et supérettes britanniques
Si 3 A est trop élevé pour l’appareil, le concepteur doit utiliser un câble souple nominal 3 A afin que le fusible côté prise assure la protection, puis ajouter une protection à courant plus faible côté appareil
Le système britannique était une architecture astucieuse à son introduction, avec des détails subtils comme les valeurs de fusibles standard bien ajustées, mais il est quelque peu surdimensionné et mal optimisé pour les logements modernes remplis d’appareils à faible courant
Si vous voulez voir ce genre de données de consommation en temps réel chez vous, je recommande vivement IoTaWatt : https://iotawatt.com
C’est un moniteur d’énergie entièrement local qui s’installe dans le tableau électrique de la maison ; on peut consulter le tableau de bord du serveur web local exécuté sur l’appareil, ou lire les données via une API
On peut choisir soi-même le nombre de capteurs, et surveiller non seulement toute la maison, mais aussi des circuits individuels
Par exemple, cela permet de suivre le démarrage et l’arrêt d’appareils comme le lave-linge, le lave-vaisselle ou le micro-ondes, et de déclencher des automatisations
En revanche, pour l’installer soi-même, il faut se renseigner, avoir des connaissances de base en électricité et être à l’aise avec des travaux de raccordement au secteur haute tension. Cela reste accessible, et la configuration a été simple
Voici à quoi cela ressemble : https://i.ibb.co/qBVmBD1/IMG-1595.jpg