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
Comentários do Hacker News
Análise de pacotes decodificados
Problema de fornecimento de energia
Tentativa de engenharia reversa de iluminação criptografada
Opinião sobre luzes BLE
Tentativa de automatizar luzes de Natal conectadas por BLE
Dúvida sobre criptografia de mensagens
Comentário sobre criptografia
Comentário bem-humorado sobre hackear luzes
Pergunta de iniciante sobre engenharia reversa de luzes Govee