- A misteriosa tela sensível ao toque de um apartamento britânico concluído em 2015 fazia parte do sistema de monitoramento de energia da NETTHINGS e era um dispositivo que mostrava o consumo de eletricidade atual e dados históricos
- A estrutura era dividida entre um gerenciador de energia junto ao medidor e um cliente em formato de tablet Android no quarto, e eles se comunicavam por Wi‑Fi em vez de cabo, mesmo a curta distância e com algumas paredes no meio
- A causa direta de a tela não funcionar era a ausência do fusível de 3A no circuito do gerenciador de energia; ao substituir o fusível, a rede Wi‑Fi e a tela web de consumo voltaram a funcionar
- A interface do tablet era uma webview, e o servidor usava Node.js, Express e Socket.IO, enquanto o dispositivo do medidor mantinha serviços DNS, HTTP, SSH e TCF abertos em
172.16.0.254 - O tcf-agent exposto fornecia acesso ao sistema de arquivos e aos processos com privilégios de root, permitindo modificar o dispositivo mesmo sem a senha do SSH; internamente, ele era um dispositivo ARM9 baseado em Linux 3.10 com armazenamento de dados de energia em CSV
Para que servia a tela sensível ao toque misteriosa
- Em um quarto do apartamento novo havia uma tela sensível ao toque instalada, sem botões nem etiqueta, com apenas uma pequena luz amarela de energia
- Nem o proprietário sabia que aparelho era aquele ou o que ele controlava, e ele ficou esquecido por algum tempo após a mudança
- A identidade do dispositivo foi revelada quando apareceu, num fichário de manuais dos eletrodomésticos, um folheto com o mesmo aparelho
- O dispositivo fazia parte de um sistema de monitoramento de energia
- Exibia o consumo atual de eletricidade e dados de consumo anteriores
- O folheto também apresentava um segundo componente, o gerenciador de energia, conectado diretamente ao medidor elétrico
- No armário coletivo dos medidores, havia um aparelho da marca NETTHINGS instalado ao lado dos dispositivos de outras unidades
Gerenciador de energia conectado por Wi‑Fi e tablet Android
- O sistema era composto por um gerenciador de energia no papel de “servidor”, que coletava os dados, e pela tela sensível ao toque no papel de “cliente”, que os lia e os mostrava
- A distância entre os dois aparelhos era de apenas alguns metros, com só 2 ou 3 paredes no meio, mas o folheto trazia um SSID e uma Pwd
- Na prática, a comunicação também era feita por Wi‑Fi, não por cabo
- Ao apertar o botão escondido em um pequeno furo na lateral da tela, apareceu o logo de inicialização do Android
- Era um tablet Android antigo
- Aplicativos antigos como Google Talk e Flash estavam instalados
- Parecia ser Android 5, embora a versão exata não fosse certa
- Ao abrir o app “NetThings”, surgia a tela de seleção de rede Wi‑Fi, mas a rede do folheto não aparecia inicialmente na lista
O fusível ausente e o monitor revivido
- No armário dos medidores, os gerenciadores de energia das outras unidades estavam ligados, mas o aparelho daquela unidade específica estava desligado
- A causa era a falta de um fusível dentro da caixa de fusíveis
- Sem o fusível, a conexão elétrica estava interrompida
- O gerenciador de energia não recebia alimentação
- O hotspot Wi‑Fi também não aparecia
- Ao verificar o fusível de outro gerenciador de energia no mesmo armário, foi confirmado que a especificação necessária era um fusível de 3A
- Um fusível de 3A foi comprado na Amazon e instalado no dia seguinte; depois disso, o LED verde do gerenciador de energia começou a piscar e a rede Wi‑Fi apareceu
- O trabalho foi feito perto da rede elétrica principal e era perigoso; depois, a temperatura do fusível foi verificada várias vezes ao longo de um dia, e esse tipo de experimento não é recomendado a outras pessoas
Interface web decepcionante e valores de tarifa fixos
- Ao selecionar o Wi‑Fi no tablet Android, aparecia um menu para escolher o tipo de recurso
- Na prática, o único item que funcionava era Mains Electricity, ao qual o gerenciador de energia estava conectado
- A tela de consumo de energia mostrava um indicador colorido à direita e cinco números à esquerda, mas o significado da interface não era claro
- Não dava para saber se verde significava baixo consumo ou consumo normal
- Não era possível entender em relação a quê a posição vertical do indicador colorido era comparada
- Também não ficava claro se a posição máxima tinha relação com o maior consumo anterior
- Entre os cinco números mostrados à esquerda, o único valor realmente correto era o consumo em kW
- O custo da eletricidade e a estimativa de CO2 por kW não podiam ser configurados
- O folheto dizia que isso poderia ser ajustado na instalação inicial
- Não havia orientação sobre como voltar o sistema a um estado em que pudesse ser reconfigurado
- O folheto também dizia para acessar via PC a fim de ajustar o horário dos dados, e o relógio do tablet Android estava cerca de 15 minutos errado desde a instalação em 2015
Webview, Socket.IO e servidor Node.js
- Se fosse possível ler diretamente os dados do gerenciador de energia, daria para multiplicar o consumo em kW pela tarifa correta e exibi-lo em algo como o Grafana
- O folheto incluía um caso de uso para consultar o consumo de energia no PC, e nele estavam indicados um IP e uma porta
- Ao acessar pelo navegador, aparecia a mesma tela do tablet Android, confirmando que a interface do tablet era uma webview
- Ao inspecionar as chamadas de API no web inspector, ficou claro que estava sendo usado Socket.IO
- O cliente basicamente recebia cinco números do servidor, mas o código também incluía módulos RequireJS, Handlebars, Backbone.js e Underscore.js
Portas abertas e tcf-agent
- O IP do dispositivo era
172.16.0.254, essh root@172.16.0.254inicialmente falhava com “Connection refused” - Uma varredura completa de portas mostrou os seguintes serviços abertos
53/tcp: dnsmasq 2.63rc680/tcp: HTTP baseado em Node.js1534/tcp:micromuse-lm?3000/tcp: HTTP baseado em Node.js41142/tcp: OpenSSH 6.2
- O
dnsmasqfazia sentido como servidor DHCP, já que o dispositivo funcionava como ponto de acesso Wi‑Fi - O SSH estava aberto na porta 41142, mas a conta root era protegida por senha, e combinações simples como
admin/admineroot/rootnão funcionavam - Ao investigar a identidade da porta 1534, a palavra‑chave tcf-agent foi confirmada por meio de uma postagem no fórum da Xilinx
Acesso root ao sistema de arquivos via TCF
- TCF significa Target Communications Framework, um protocolo de texto que oferece suporte à leitura do sistema de arquivos no sistema-alvo, início de novos processos, envio de sinais a processos e mais
- O
tcf-agenté o servidor que implementa esse protocolo e, nesse dispositivo, ele estava rodando como usuário root - O TCF tinha forte ligação com o ecossistema Eclipse, e a documentação Getting Started apontava o plugin do Eclipse como principal forma de uso
- Foi tentada a instalação do plugin em versões novas do Eclipse, mas conflitos de dependência dificultaram bastante o processo
- Em vez disso, foi encontrado e usado o SDK Python do projeto TCF
- Página de orientação: TCF/Python_Scripting
- Orientação para o repositório antigo: caminho no git.eclipse.org
- Repositório atual: Eclipse GitLab TCF
- Documentação do protocolo: TCF Specification, TCF Services
- Com os serviços
FileSystemeProcessesdo TCF, foi possível criar ferramentas substitutas para comandos comols,cateps, e o resultado foi reunido em tcf-tools
Acesso via SSH e especificações internas do dispositivo
- A princípio,
/etc/passwde/etc/shadowforam extraídos via TCF para tentar quebrar a senha de root com o John the Ripper - Mesmo após cerca de 7 horas de execução, nenhuma correspondência foi encontrada, e o John indicava término estimado da força bruta em 2035
- Depois disso,
/etc/shadowfoi alterado para remover a senha de root e a energia foi religada, mas o login por SSH continuou sendo recusado - A causa era a configuração
PermitRootLogin noemsshd_config- Quando essa linha foi trocada por
PermitRootLogin yes, o login root via SSH passou a funcionar
- Quando essa linha foi trocada por
- O dispositivo rodava
Linux 3.10.28 armv5tejl - A CPU era uma ARM926EJ-S rev 5, pertencente à família ARM9
- O item
javana lista de recursos de/proc/cpuinfose referia ao Jazelle, uma extensão ARM para execução de bytecode Java - A memória aparecia como
MemTotal: 118172 kB, e o dispositivo executava um app Node.js
Estrutura da aplicação e armazenamento dos dados
- A aplicação do servidor ficava em
/srv/servere tinha uma estrutura comGruntfile.js,app.js,bower.json,package.json,node_modules,routes,viewsepublic - O app era dividido em duas grandes partes
- Um Pulse app que lia os dados de consumo do medidor elétrico
- Um app Node.js que lia os dados CSV e os exibia na interface web
- Os arquivos relacionados ao Pulse app ficavam na pasta
binpulse-apppulse.koct-read-daemon- diretórios mensais, diários, horários, semanais e anuais
- A extensão
.kodepulse.konormalmente significa Kernel Object, o que sugere que pode ser um módulo de kernel - O Pulse app lia dados dos pinos GPIO e salvava os resultados em arquivos CSV
- Os arquivos CSV eram divididos em diretórios por mês, dia e hora, e a interface web para dados históricos também só oferecia visualização mensal, diária e horária
- O app Node.js usava Node.js 0.10.26, Express.js 4.13.3 e Socket.io 1.3.6
- Entre as dependências havia o pacote
mqtt, e o código-fonte continha trechos inacabados que pareciam ser a integração em nuvem prometida no folheto, além de IPs de broker hardcoded- Esses IPs já não funcionavam mais
- O próprio dispositivo também não tinha acesso à internet
Descobertas posteriores
- A empresa NETTHINGS que criou o dispositivo já estava dissolvida
- O usuário do Hacker News M6WIQ indicou outro texto sobre os resultados das decisões de engenharia da NetThings
- O autor desse texto perguntou no Mastodon se o dispositivo ainda usava o IP do servidor NTP dele, e foi confirmado que a realidade era ainda pior
- Marc Bevand forneceu recursos de GPU e fez força bruta na senha original dos usuários Linux do gerenciador de energia
- O hash usava um algoritmo de pelo menos 30 anos)
- As senhas de
rootegecko_usereramNewt@rd$ - A senha da conta
prod_testeraNetTh@ng
- Uma empresa de hospedagem traduziu este texto para o russo
1 comentários
Comentários do Hacker News
Alguns anos atrás, as pessoas perceberam que, para ajudar a gerenciar de forma mais ecológica e econômica o consumo de serviços públicos como eletricidade, água e gás, era preciso ter dados muito melhores do que um único total mensal
No mínimo, é necessário conseguir ver o consumo em intervalos de 5 minutos para notar coisas como “deixar o aquecedor elétrico ligado por algumas horas consumiu mais eletricidade do que a iluminação do mês inteiro”
Em lares de classe média na África do Sul, inversores e painéis solares são comuns por causa da instabilidade no fornecimento de energia, e na minha casa também consigo ver o histórico de uso total de energia, então fica fácil identificar onde dá para melhorar a eficiência
Ainda assim, os dados continuam sendo totais agregados, então é preciso inferir as causas. Por exemplo, ver 3 kW por cerca de uma hora depois do banho significa que o aquecedor de água está reaquecendo, e pelo registro do inversor dá para saber que, nesse momento, a bateria se descarregou durante a noite e, como ainda é de manhã, a produção solar é baixa, então a energia veio da rede
Por isso, colocar um temporizador no aquecedor de água para que ele só aqueça depois das 10 da manhã, quando o sol já subiu o suficiente para ser coberto pela energia solar, pode reduzir facilmente a conta de luz. Agora também queria conseguir monitorar o consumo de água com esse mesmo nível de praticidade
Na Holanda, basta conectar algo como um “slimme lezer” na porta p1 do medidor de energia, e ele aparece no Home Assistant imediatamente como os sensores apropriados
O painel de energia é excelente porque mostra consumo de gás e eletricidade, produção solar, proporção de uso da rede/solar e até bateria residencial, se houver
As tomadas Aqara com medição de energia usam Zigbee e podem sobrecarregar com facilidade, enquanto os dispositivos da Shelly usam Wi‑Fi, mas se mostraram bastante robustos. Usando essas coisas em conjunto, dá para priorizar bem as ações de economia, e também é possível inserir nos sensores do Home Assistant o custo por kWh e o custo do m³ de gás
É um dispositivo grande, tipo um curativo, colado no braço, com uma agulha fina sob a pele que se comunica com um aplicativo no celular para informar coisas como o nível de glicose no sangue
Quando ele passou a ver o efeito dos alimentos que comia, mudou a dieta na hora, e mantém isso até hoje, mesmo sem usar mais o monitor. A interface do aplicativo era boa, mas o que realmente fez diferença foi o histórico de dados
Se você souber que cozinhar consome muita eletricidade, vai passar a comer mais salada? Em toda a Europa, os medidores de energia estão sendo substituídos por medidores inteligentes, e a possibilidade de ver continuamente o consumo é muito divulgada como vantagem, mas ainda é difícil dizer se isso vai resultar em uma economia realmente significativa
No fim, o maior impacto vem quando grandes eletrodomésticos e sistemas de aquecimento/refrigeração reagem à própria geração, ou quando se aproveita a eletricidade barata em tarifas dinâmicas por horário ou por dia. Isso inclui temporizadores simples instalados manualmente, relés que desligam o aquecimento durante o preparo de comida, ou dispositivos como o Fronius Ohmpilot [1], que ajusta a potência de aquecimento de acordo com o excedente de produção solar
[1] https://www.fronius.com/en/solar-energy/installers-partners/...
Outra abordagem que já usei com sucesso foi prender diretamente uma sonda de temperatura no cano de entrada de água e compará-la com a temperatura ambiente. Onde eu moro, a água vem do subsolo e está sempre muito mais fria do que o ar ao redor, então isso funcionou
Integrar ao longo do tempo a diferença entre as duas temperaturas vira um substituto aproximado para o volume de água usado, mas dá muito mais trabalho até se obter dados realmente úteis
Um sensor de proximidade para detectar metal talvez seja a opção mais simples. Se o hidrômetro tiver um marcador metálico giratório, dá para usar algo como https://www.alldatasheet.com/view.jsp?Searchword=LJ12A3-4-Z/...
Com o painel de energia do Home Assistant, dá para descobrir quanto o “rack” (UPS + Mac mini + dispositivo de disco de 5 baias + outros) realmente consome em comparação com a geladeira ou a máquina de lavar, como a computação na mesa consome pouco mas as telas gastam bastante quando estão ligadas, quanto custa carregar uma bicicleta elétrica e que diferença faz deixar o termostato em 19 graus em vez de 20 no inverno
Também aparecem surpresas, como descobrir que o ventilador muito usado no verão estava, na prática, consumindo tanta eletricidade quanto o aquecedor de água. A medição de energia é feita com Shelly Plug Plus S, 3EM e 4PM, e a medição de temperatura com Shelly H&T Plus
É curioso como o autor se espanta com esse monstrengo técnico que é um eletrodoméstico rodando Linux. A arquitetura em que um servidor Node oferece um site, API e WebSocket por Wi‑Fi, e esse site é exibido no antigo motor de WebView de um terminal cheio de limitações que não pode ser reaproveitado para outros usos, agora virou quase um padrão comum
Mostrar alguns números e um gráfico de barras provavelmente já poderia ser resolvido com dois microcontroladores se comunicando por um barramento com fio, mas, nesta era, a fonte de alimentação desses dois dispositivos pode muito bem consumir uns 16 W em idle
Se ficar ligado 24 horas por dia, 365 dias por ano, vai gastar tanta eletricidade quanto uma geladeira pequena e, comparado com alguns microcontroladores de poucos dólares, também não deve se sair bem numa avaliação de ciclo de vida
O pior é que há uma grande chance de esse dispositivo complexo ter virado um tijolo 3 anos após a instalação, talvez até antes
Do ponto de vista do negócio, ninguém quer pagar profissionais caros que saibam programar microcontroladores. Para uma interface simples que só mostra um gráfico de barras, um desenvolvedor front-end sai bem mais barato
Algumas placas já vêm com microfone MEMS e câmera, e na caixa da foto também dá para ver a lente de uma câmera. No meu caso, eu desmontaria o aparelho para olhar por dentro ou, pelo menos, rodaria diagnósticos para ver qual hardware está instalado e sendo detectado
https://www.wolframalpha.com/input?i=16+watts++24+hours++3...
O fato de o SSID e a senha estarem impressos não surpreende nem um pouco. Esses dispositivos provavelmente são mais instalados como retrofit em casas já existentes do que incluídos em construções novas, e como passar fiação por paredes já prontas é trabalhoso, eles não queriam criar uma barreira de venda
Hoje em dia dá para conseguir um chipset Wi‑Fi por poucos dólares
Também não parece haver muito motivo para preocupação com um fusível de 3 A. Se é um fusível de 3 A, a energia principal do apartamento inteiro não está passando por ele; se tentassem fazer isso, ele teria queimado quase instantaneamente
E Jazelle, então: o suporte de hardware para bytecode Java acabou sendo uma tecnologia que não deu muito certo
[0]: https://www.youtube.com/watch?v=B90_SNNbcoU
Não é algo estritamente necessário, mas pode ser uma forma econômica de separar as partes eletricamente perigosas das partes tocadas por pessoas e de evitar loops quando há problemas. O sem fio serve para mais do que simplesmente eliminar cabos
Pelo menos não foi encontrada uma tomada com um fusível queimado cuidadosamente envolto em uma capa ritualística de alumínio entre a vida eterna e a morte certa. Pode ser um crime que eu talvez tenha cometido quando era criança, numa época em que eu era mais propenso a incêndios
É interessante como muita gente se sente desconfortável fora da própria zona de segurança. Claro, eu sou justamente o tipo de pessoa que vai fuçar em coisas que poderia passar a vida inteira sem tocar
Claro, isso não seria problema se a segurança fosse boa e houvesse atualizações de segurança regulares para sempre; então só dá para supor que o dispositivo encontrado pelo autor era uma exceção raríssima que não atendia a essas condições
O nome da empresa, Netthings, me soava familiar; lembro de já ter lido sobre um aparelho deles que perdeu a sincronização de hora porque o servidor NTP codificado no firmware foi bloqueado pelo firewall
Texto: https://strugglers.net/~andy/blog/2018/12/24/the-internet-of...
Parece que a empresa entrou em liquidação em 2018, então deve ser difícil conseguir suporte para esse dispositivo
“DATE & TIME ARE ALWAYS CORRECT AND NEVER NEED TO BE ADJUSTED” soa como uma frase saída de um romance de Philip K. Dick
Claramente não deu muito certo
A piada de que “o C em IoT deve significar cost-effective” é curta e espirituosa, mas pode surpreender saber o quão baratos e custo-efetivos são os SoCs com suporte a WiFi
Em muitos casos, o WiFi vem praticamente de graça e, como a maioria desses SoCs não tem controlador Ethernet por padrão, se servir para o caso de uso o WiFi é mais custo-efetivo
Outros protocolos físicos ou formas de conexão também são possíveis, claro, mas nesses clientes adaptados para instalação o WiFi ou um protocolo sem fio comum é a melhor opção
É um nível parecido com 3 m de cabo, conectores e um chip barato para terminação do cabo, e a mão de obra para instalar o cabo é muito mais cara. Então não entendo bem por que conectar via WiFi seria visto como desperdício
Pediram ao autor original que enviasse o arquivo
/etc/shadowno qual ele tinha falhado em um brute force com John The Ripper, e como era um hash UNIXcrypt()antigo, foi possível quebrar a senha de root com hashcat e 12 RTX 4090 em cerca de 7 horasA senha de root é
Newt@rd$Isso não é especialmente útil porque é possível obter acesso root por TCF sem autenticação neste dispositivo, mas essa senha pode ter sido reutilizada em outros lugares
Caso o domínio seja enterrado nas areias do tempo, seria bom hospedar o próprio texto no dispositivo
3 A são 720 W. Se aquela caixinha pequena dissipasse tudo isso em calor, o armário inteiro viraria literalmente um forno
Para começo de conversa, se um medidor de energia consumisse tanta potência, estaria contrariando o próprio propósito, algo parecido com testar fósforos. No máximo deve ser 10 W, e a corrente de partida provavelmente também não é tão alta
Um fusível de 1 A provavelmente bastaria, e a instalação parece bem limpa, então o fato de estar perto da alimentação principal também não assusta tanto assim
Todos os aparelhos no Reino Unido têm um fusível no ponto em que se conectam à fiação do prédio; normalmente fica dentro do plugue, mas pode estar em um porta-fusível fixo como neste dispositivo
Como se considerou que variedade demais de valores confundiria e atrapalharia os usuários, esses fusíveis são limitados a um dos valores padronizados no mesmo tamanho: 13 A, 5 A ou 3 A. Como já foi dito em outro lugar, esses fusíveis podem ser comprados até em supermercados e lojas de conveniência no Reino Unido
Se 3 A for alto demais para o aparelho, o projetista deve usar um cabo flexível com classificação de 3 A para que o fusível do lado do plugue faça a proteção, e adicionar uma proteção de corrente mais baixa no lado do dispositivo
O sistema britânico era uma estrutura engenhosa na época em que foi adotado, com detalhes sutis como os valores padronizados de fusível bem ajustados, mas para casas modernas com muitos dispositivos de baixa corrente ele é um tanto superdimensionado e não muito otimizado
Se você quiser ver esse tipo de dados de consumo em tempo real em casa, recomendo fortemente o IoTaWatt: https://iotawatt.com
É um monitor de energia totalmente local, instalado no quadro de disjuntores da casa, e você pode ver o painel no servidor web local que roda no dispositivo ou ler os dados por API
Você pode escolher quantos sensores quer e monitorar não só a casa inteira, mas também circuitos individuais
Por exemplo, dá para acompanhar quando eletrodomésticos como máquina de lavar, lava-louças e micro-ondas ligam e desligam, e acionar automações
Para instalar por conta própria, porém, é preciso pesquisa, conhecimento básico de elétrica e alguma disposição para lidar com conexões de alta tensão da rede principal. Ainda assim, foi acessível e a configuração foi fácil
A aparência é esta: https://i.ibb.co/qBVmBD1/IMG-1595.jpg