2 pontos por GN⁺ 2023-12-16 | 1 comentários | Compartilhar no WhatsApp

Engenharia reversa de um controlador de iluminação LED com Bluetooth LE, ou como eu destruí minhas luzes de Natal

  • Um dispositivo que se comunica por Bluetooth LE e tem aplicativo merece ser integrado a um sistema de automação residencial.
  • Foi investido bastante tempo em fazer engenharia reversa e automatizar fitas de LED econômicas.
  • Recentemente, foi possível conectar ao Home Assistant, em poucas horas, a fita não endereçável de 5 m mais barata, controlada por Bluetooth LE, que custou £2.38.

Etapa 1. Bytes pelo fio

  • Para controlar o dispositivo com software próprio, o primeiro passo é inspecionar os bytes Bluetooth enviados do aplicativo para o dispositivo.
  • O Android facilita esse processo. Ative o modo de desenvolvedor, instale o aplicativo das luzes e depois habilite Bluetooth HCI snoop nas configurações de desenvolvedor para registrar o log.
  • Ao abrir o log no Wireshark, é possível ver os bytes exatos e identificar séries de bytes para cada ação buscando padrões nos valores.

Etapa 2. Ataque de replay

  • Se o objetivo for simplesmente ligar e desligar as luzes, a série repetida de bytes observada pode ser suficiente para o controle de energia.
  • É possível usar gatttool para se conectar ao dispositivo BLE e enviar bytes para teste.

Etapa 3. Descompilando o app Android

  • Baixe o APK do aplicativo e abra-o no jadx para descobrir os segredos internos.
  • Foi encontrada uma referência a AES no código-fonte, sugerindo a possibilidade de um protocolo criptografado.
  • Os dados criptografados não mudam a cada vez, a descriptografia precisa ser rápida em um MCU de baixo consumo, e provavelmente existe uma chave fixa que não é única para cada dispositivo.

Etapa 4. Todas as funções

  • Trabalhe em cada função do aplicativo e registre os bytes enviados.
  • Isso ajuda a registrar cada ação, repetir, descobrir padrões e correlacionar os bytes capturados com as anotações.

Etapa 5. Gerador automatizado de lixo eletrônico

  • Ao explorar a mudança de cores, foi observado que o aplicativo não envia valores acima de 0x1F para vermelho, verde e azul.
  • Foram testados valores de 8 bits, e descobriu-se que cores mais brilhantes funcionam bem.
  • Surgiu a curiosidade de saber se havia efeitos adicionais, então isso foi testado com um loop simples.
  • Até o 10º efeito, tudo funcionava bem, mas no 11º foi descoberto um modo secreto, e no 12º a escuridão chegou.
  • Foi tentado reiniciar, mas as luzes não acenderam novamente e também deixaram de anunciar via Bluetooth, então já não era mais possível se conectar.
  • Suspeita-se que o firmware tenha sido corrompido por um buffer overflow.
  • No entanto, os próprios LEDs são LEDs endereçáveis padrão, então ainda podem ser usados ao serem conectados a outro microcontrolador.

Como eu posso estragar minhas luzes

  • Apesar do problema, a maior parte do protocolo foi documentada e foi criado um projeto no Github, incluindo um componente personalizado do Home Assistant.
  • Funciona, mas é preciso seguir em frente por sua conta e risco.

Opinião do GN⁺

  • O mais importante neste texto é o espírito DIY e a paixão por engenharia reversa de alguém que quer integrar as luzes inteligentes usadas em casa a um sistema de automação.
  • O processo de engenharia reversa exige não apenas conhecimento técnico, mas também capacidade de resolver problemas e criatividade, o que o torna um tema muito interessante até para engenheiros de software iniciantes.
  • Compartilhar a experiência do fracasso ajuda outras pessoas a não repetirem o mesmo erro, e esse compartilhamento público de conhecimento é um dos valores centrais da comunidade open source.

1 comentários

 
GN⁺ 2023-12-16
Comentários do Hacker News
  • Análise de pacotes decodificados

    • Como resultado da tentativa de decodificar os pacotes, foi confirmado que havia um cabeçalho fixo e que o 5º byte alternava entre 1 e 0 para indicar ligado e desligado, enquanto o restante era preenchido com 0. Presume-se que isso represente o comprimento do comando, o comando ("TURN"), o argumento (0 ou 1) e que tenha sido preenchido até 16 bytes.
  • Problema de fornecimento de energia

    • A fita de LED WS281x brilha com muita intensidade e consome muita corrente. Uma fonte de alimentação de 12V, 3A é apenas suficiente para acionar todas as 100 fitas no brilho máximo. O fato de o firmware aparentemente usar apenas 31 de um brilho máximo de 255 sugere a possibilidade de o fusível ter queimado.
  • Tentativa de engenharia reversa de iluminação criptografada

    • Houve uma tentativa de fazer engenharia reversa das luzes LED de bateria Amaran 60d e SmallRig RM75, mas foi descoberto que elas eram criptografadas. Ambas usam o mesmo processo de negociação, mas bibliotecas diferentes. Tentou-se imitar o processo de troca de chaves Diffie-Hellman, mas acabou-se desistindo por não conseguir identificar a finalidade de números aparentemente aleatórios em uma etapa adicional (outra chave?). Ler este post fez pensar em tentar uma chave hardcoded.
  • Opinião sobre luzes BLE

    • Já foi lido o suficiente sobre conjuntos de luzes que usam BLE, e há agradecimento ao autor por mencionar isso. Isso lembra o vídeo sobre conexões de tecnologia analógica.
  • Tentativa de automatizar luzes de Natal conectadas por BLE

    • Houve uma tentativa de automatizar luzes de Natal conectadas por BLE, mas isso gerou lixo eletrônico. Agora você também pode fazer isso.
  • Dúvida sobre criptografia de mensagens

    • Levanta-se a dúvida sobre por que as mensagens estão criptografadas e se isso é padrão.
  • Comentário sobre criptografia

    • "Não dá para enviar texto em claro pelo ar, não é seguro" e "Relaxa, adicionei criptografia AES".
  • Comentário bem-humorado sobre hackear luzes

    • Diante da frase "Me diga como posso hackear minhas luzes", a reação foi "Haha! Adorei".
  • Pergunta de iniciante sobre engenharia reversa de luzes Govee

    • Pergunta de iniciante sobre o motivo de não ser possível fazer engenharia reversa de luzes WiFi como as da Govee e se um MITM (ataque man-in-the-middle) seria mais difícil.