Pesquisa de Ameaças

Acesse tudo! Como a sua casa inteligente pode ser invadida

Martin Hron, 11 Setembro 2018

O especialista da Avast, Martin Hron, conta o que você precisa saber sobre os pontos fracos e fortes da segurança da IoT e do seu protocolo de conexão e controle (MQTT).

Introdução 

Atualmente, ouvimos falar muito sobre IoT, que significa Internet das Coisas. As lâmpadas, persianas, termostatos, assistentes de voz e máquinas inteligentes estão entrando lentamente em nossos ambientes domésticos, profissionais e industriais. Desenvolver algumas maneiras para controlar esses dispositivos é um passo lógico e inevitável à medida que incluímos mais e mais deles nossos lares.  

É possível interconectar e controlar os dispositivos de uma casa inteligente com o protocolo MQTT (Message Queuing Telemetry Transport) 

Ao implantar o protocolo MQTT, os usuários configuram um servidor. Para os consumidores, o servidor geralmente reside em um PC ou um minicomputador como o Raspberry Pi, ao qual os dispositivos podem se conectar e se comunicar. Embora o protocolo MQTT em si seja seguro, quando implantado e configurado incorretamente, podem ocorrer vários problemas de segurança. 

Na Avast, examinamos detalhadamente e encontramos com o mecanismo de pesquisa de IoT Shodan, 49.000 servidores MQTT visíveis publicamente na internet devido a problemas de configuração no MQTT. Isso inclui mais de 32.000 servidores que não tinham proteção de senha, o que coloca essas casas inteligentes e as empresas que usam tais servidores MQTT em risco de vazamento de dados. 

Se o protocolo MQTT não for configurado corretamente, os cibercriminosos podem obter acesso total a uma residência e, por exemplo, saber quando seus moradores estão em casa, manipular os sistemas de ambiente, assistentes de voz, dispositivos domésticos e abrir as portas inteligentes. 

Em relação às casas inteligentes, você pode se perguntar: por que um protocolo como o MQTT é necessário, se ele coloca a segurança e privacidade da sua casa em risco? Controlar manualmente alguns dispositivos inteligentes é fácil, mas, à medida que o número deles aumenta, o tempo de gerenciamento aumenta e se torna um problema. 

É como gerenciar manualmente uma grande rede de computadores. Em algum ponto, sem automação, o trabalho de gerenciar dispositivos conectados deixa de compensar a conveniência que eles trazem. Então aparecem dispositivos mais inteligentes que se conectam e cooperam entre si, realizando tarefas sem nenhuma intervenção humana. Por exemplo, a porta da sua garagem se abre automaticamente quando você chega a casa vindo do trabalho, as luzes da sua casa se acendem, o termostato está configurado em uma temperatura agradável e o seu aparelho de som começa a tocar jazz na sala de estar. 

Até aqui, parece legal, mas e a segurança? Autenticação? Autorização?  

Estão sendo construídos sistemas complexos que permitem controlar toda a casa a partir de um dispositivo móvel, de qualquer lugar do mundo. A pergunta é: qual é a segurança desses sistemas? Eles podem não ser tão seguros como você imagina.  

O problema está na segurança da IoT 

O motivo da falta de segurança na IoT é que os dispositivos construídos estão usando uma tecnologia dos anos 1980. Em geral, isso ocorre porque os primeiros casos de uso de dispositivos de IoT foram amplamente industriais. Houve uma grande demanda por sistemas que poderiam coletar e processar dados de várias máquinas em fábricas ou linhas de produção. Essas “redes” não usavam protocolos de internet para trocar dados. De fato, normalmente, elas não possuíam nenhuma conectividade externa, de forma que a segurança não era a principal preocupação. 

O outro problema é que as pessoas não dão importância à segurança ao configurar os dispositivos de IoT. Se você não encorajar o usuário a alterar as configurações (pelo menos trocar a senha padrão), ele provavelmente vai terminar usando essa configuração padrão mesmo. 

Conheça o MQTT 

Um dos protocolos mais comuns que os dispositivos móveis utilizam para se comunicar é o MQTT. MQTT significa Message Queuing Telemetry Transport (Transmissão de Telemetria de Espera de Mensagens) e foi desenvolvido no final dos anos 90 como um dos protocolos de SCADA. Ele era usado principalmente para automação industrial e, como o nome sugere, para transmitir mensagens curtas de dados de telemetria. Não há padrão para o formato de dados que ele transmite: ele carrega praticamente qualquer carga. O protocolo tem a intenção de agir como um modelo de assinante/publicador. Ele funciona como um feed de RSS: você assina um tópico e quando alguém publica algo sobre ele, o conteúdo é entregue a todos os assinantes. 

Como mencionado anteriormente, não há nenhum problema de segurança com o protocolo MQTT nem com o software de segurança mais comum que implanta esse protocolo (ou intermediário, como é chamado no caso do MQTT), que é conhecido como Mosquitto. De fato, tanto o MQTT quanto o Mosquitto têm recursos amplos de segurança, por exemplo, fornecer controle de acesso detalhado por usuário e tópico. Como é frequente, os problemas são criados na implantação e configuração. Vamos explorar alguns casos reais de uso do MQTT antes de entrar no que pode dar errado. 

O MQTT é usado frequentemente para superar a lacuna entre os diferentes protocolos, para que diferentes dispositivos possam se comunicar entre si, mesmo se eles não utilizarem o mesmo protocolo. Isso é muito conveniente, pois permite que os tópicos sejam organizados em estrutura hierárquica, criando um espaço de nome unificado para toda a casa inteligente. Por exemplo, uma estrutura de tópico pode ser assim:

/minhacasa/garagem/luzes/luzdaentrada
/minhacasa/garagem/luzes/luzdoteto
/minhacasa/garagem/portadagaragem
/minhacasa/livingroom/microfone
/minhacasa/cozinha/forno
/minhacasa/cozinha/luzes 

Você pode ver que a estrutura é hierárquica, neste caso, ela descreve a estrutura dos dispositivos conectados em uma residência. Uma das coisas que torna o MQTT tão útil é que você pode usar curingas ao assinar os tópicos, da mesma maneira como funcionam os curingas dos nomes de arquivo em uma pesquisa. 

O MQTT tem dois curingas: # e  

# significa todos os níveis de sua localização/ocorrência, até a hierarquia. Por exemplo, ao assinar: 

 /minhacasa/garagem/# 

Um dispositivo IoT pode receber qualquer mensagem publicada para /minhacasa/garagem/luzes ou /minhacasa/garagem/garagemporta. 

O ? significa todas as categorias em qualquer nível e pode ser usado em qualquer lugar na hierarquia, mais de uma vez. Portanto, ao assinar: 

 /minhacasa/?/luzes/#

o dispositivo receberá todas as mensagens com relação às luzes em qualquer sala, pois ?, neste caso, pode ser uma cozinha ou garagem. 

Ao combinar assinaturas, você pode criar um cenário muito complexo para controlar um grupo de dispositivos ao publicar em apenas um tópico. Os publicadores podem ser, por exemplo, interruptores de luz com capacidade para MQTT. Ao pressioná-los, uma mensagem de MQTT é publicada e a ação é efetuada. Qualquer dispositivo pode ser um publicador, assinante ou ambos.  

Mas para criar uma casa realmente inteligente, falta ainda um componente crucial. Automação. 

A automação doméstica geralmente vem na forma de software, ou talvez uma smart box, que contém “lógica comercial” e age como um “hub de casa inteligente” para unificar o controle dos dispositivos, que é onde o MQTT entra em cena. O MQTT está incluído na maioria das soluções de software de hub de casa inteligente, como o Home Assistant, para que os usuários possam instalar um pacote que inclui MQTT ou instalar o MQTT separadamente ao configurar seu hub de casa inteligente. Hubs de casa inteligente geralmente assinam e publicam mensagens MQTT e fornecem lógica. Eles também fornecem algum tipo de painel, local ou remoto, onde é possível controlar toda a casa “inteligente”. 

Por exemplo, se um hub recebe a mensagem de um sensor de solo em seu jardim informando que ele está muito seco e sabe que seu tanque de água tem água suficiente, ele pode ativar o sistema de irrigação para regar suas flores. Assim, vários dispositivos inteligentes podem ser conectados a um hub inteligente, controlados e até automatizados, usando o protocolo MQTT, mesmo se não forem projetados originalmente para funcionarem juntos.  

O problema com o MQTT 

Vamos expor o problema mais claramente.  

Nós temos um servidor MQTT (intermediário) com recursos de segurança integrados, que serve como “mensageiro” entre todos os componentes. Temos um hub de casa inteligente que orquestra todos os nossos dispositivos e adiciona inteligência real a todo o sistema, e temos vários dispositivos com capacidade para MQTT ou ligados por MQTT, que estão conectados ao servidor/intermediário MQTT. 

Tudo isso parece legal e faz sentido, mas e se o servidor MQTT não tiver uma configuração segura? Como muitas vulnerabilidades, os principais problemas são as configurações desprotegidas e padrão. O que piora o problema da configuração do MQTT é que, ao acessar o servidor MQTT, você obtém acesso a todas as mensagens que passam por ele. Como? Lembra-se de # como curinga? Você pode assinar apenas # e nada mais. Em tais casos, sempre que alguém publicar algo em qualquer tópico, você receberá esses dados. 

Mais preocupante é que muitos servidores MQTT com configuração ruim também estão disponíveis publicamente na internet, sem nenhuma senha, o que permite que um cibercriminoso espione a casa que o utiliza. A “vantagem” para o cibercriminoso é que, se o servidor estiver disponível publicamente, ele pode se conectar a ele de onde quiser. Além disso, como a maioria dos usuários não configura controles de acesso (na forma de ACLs, listas de controle de acesso) ao configurar um Mosquitto durante a configuração de um hub de casa inteligente, os cibercriminosos podem não só assinar o servidor, como também publicar nele, assumindo o controle de todos os dispositivos na residência. 

Então, qual é a escala desse problema? De acordo com o mecanismo de pesquisa de IoT Shodan IoT, há quase 49.000 servidores MQTT expostos na internet. Desses, aproximadamente 32.000 servidores estão sem proteção de senha.

unsecure-number-of-mqtt-servers-2

As vulnerabilidades refletidas pelo total de resultados acima se devem, provavelmente, a servidores MQTT mal configurados. Como os usuários configuram esses sistemas para controlar remotamente sua casa inteligente, eles frequentemente expõem não só o painel de leitura e de controle do sistema, como também o próprio servidor MQTT, pois esses dois componentes geralmente são executados no mesmo computador ou servidor. Quando isso acontece, os usuários podem ficar expostos. Descobrimos que, geralmente, não era muito claro aos usuários como configurar com segurança sua conexão MQTT durante o processo de instalação.  

Aqui estão alguns exemplos do que pode acontecer caso o sistema seja mal configurado. 

Cinco maneiras simples de invadir uma casa inteligente  

Decidimos ver como é fácil obter acesso a uma casa inteligente exposta. 

1) Conectar e assinar a tópicos com curingas em um servidor MQTT desprotegido 

Nosso teste final foi encontrar um servidor MQTT aberto e desprotegido e assinar ao tópico #. Isso foi muito fácil e, depois de nos conectar, conseguimos receber cada mensagem publicada. No caso de alguns sistemas de automação doméstica, podíamos ver o status dos sensores de janela e abertura/fechamento de portas. Conseguimos ver cada acionamento de um interruptor de luz da casa e mesmo a previsão do tempo local, como você pode ver na imagem a seguir.

unsecure-mqtt-server-1Uma previsão do tempo além de outros tópicos, publicados por um servidor MQTT desprotegido

Geralmente, não há nenhuma ACL (lista de controle de acesso) que controle detalhadamente o acesso aos tópicos implantados, por isso, depois de se conectar, você também pode publicar nos tópicos. Nesse caso, você pode controlar dispositivos ou pelo menos envenenar os dados que são coletados, ao publicar em nome dos dispositivos. Por exemplo, você pode enviar mensagens para o hub como se você fosse o sensor de segurança na fechadura inteligente da porta da frente, pois as mensagens MQTT não têm campo de remetente e, assim, o receptor da mensagem não consegue determinar de onde vem a solicitação. Com isso, os cibercriminosos podem executar com facilidade “ataques de repetição” e enviar mensagens em nome dos dispositivos conectados ao hub. 

2) Conectar em painéis de hub inteligente desprotegidos em um servidor MQTT protegido  

E se o servidor for protegido? Posso, mesmo assim, obter acesso ao painel da casa? Descobrimos que uma casa inteligente pode ser invadida mesmo em um servidor MQTT protegido, pois, às vezes, um painel (o de controle da casa inteligente) usa o mesmo endereço IP do servidor MQTT. 

Muitos proprietários usam soluções de código aberto para sua a casa inteligente. Os softwares mais populares para hubs inteligentes são soluções prontamente disponíveis, como Domoticz, Home Assistant e OpenHAB. Quando procuramos por eles, podemos ver muitas configurações padrão, que, surpreendentemente, não exigem nenhuma senha. Por isso, mesmo se o servidor MQTT for protegido, o painel pode ser acessado de uma maneira tão simples quanto digitar um endereço IP em um navegador. Com isso, a pessoa pode obter acesso completo à casa, através de uma interface fácil de usar, como essa: 

home-automation-system-dashboard-3Exemplo de painel disponível publicamente de um sistema de automação doméstica, que permite controle total de todos os aparelhos conectados

Explorar esse acesso pode permitir que um cibercriminoso controle alguns dos dispositivos conectados pelo painel, incluindo luzes, fechaduras, sistema de aquecimento e refrigeração, câmeras e muito mais. Com esse controle, um cibercriminoso pode executar várias ações, como espionar secretamente ou gravar pessoas dentro de suas casas, ajustar drasticamente a temperatura interna ou ganhar acesso à residência quando os proprietários estiverem de férias ou no trabalho, sem disparar nenhum alarme. 

3) Ler arquivos em um servidor MQTT protegido com um painel protegido  

Mas, e se tanto o painel como o servidor estiverem protegidos? Não deveria haver nenhuma maneira de obter acesso a uma casa inteligente, não é? Bom, talvez haja. Como? É tão simples quanto verificar outros serviços. 

No caso do software “hub inteligente” do software Home Assistant, encontramos várias instâncias de servidores MQTT configurados corretamente que não foram expostos e um painel que estava configurado corretamente e protegido por senha. O que foi incrível é que encontramos compartilhamentos abertos e desprotegidos de SMB. SMB é um protocolo usado para compartilhar arquivos em redes internas, principalmente na plataforma Windows. Encontramos diretórios compartilhados publicamente com todos os arquivos do Home Assistant, incluindo arquivos de configuração. E isso não é tudo. Vamos ver o que mais encontramos: 

home-assistant-login-screen-4

Tela de entrada do Home Assistant 

Assim como você pode ver na imagem, quando tentamos adivinhar a senha, deixando-a em branco ou usando a senha padrão (“welcome”), ela não funciona. Até aqui, tudo certo. O painel está protegido. 

shodan-search-engine-5Lista do mecanismo de pesquisa Shodan no mesmo endereço 

Então, decidimos fazer uma consulta no Shodan no mesmo endereço IP. Descobrimos que havia um serviço de SMB (compartilhamento de arquivos) em execução e sem configuração de segurança. Observe que o Home Assistant compartilha todos os arquivos do software instalado, incluindo os arquivos de configuração. 

unsecured-shared-directory-6Conteúdo do diretório compartilhado desprotegido mostrado com arquivos de configuração 

Quando estamos navegando pelos arquivos expostos, uma particularidade chamou nossa atenção. Você notou o arquivo secrets.yaml na imagem acima? Quando abrimos o arquivo, ficamos espantados com seu conteúdo. 

secrets-yaml-file-7Conteúdo do arquivo secrets.yaml 

O arquivo secrets.yaml continha nomes de usuários e senhas armazenadas em texto simples. Havia também muitas outras contas de diferentes serviços de nuvem ou chaves de API que poderiam ser utilizadas indevidamente para obter controle sobre elas. O que nos interessava estava no campo http_password. Ao usar esse campo em uma tela de login, conseguimos isso:

full-control-home-automation-takeover-8Controle total sobre a automação doméstica 

Como você pode ver, isso é controle total sobre a casa. Você pode até tocar músicas pelo Spotify. Estamos tentando encontrar um motivo para haver tantas instâncias mal protegidas do Home Assistant. Estamos tentando encontrar as razões pelas quais há tantas instâncias mal protegidas do Home Assistant.

Pensamos que o problema está em que os usuários não estão cientes do fato de que uma vez que instalem o Home Assistant no servidor (neste caso, provavelmente é o HASSBIAN do HomeAssistant, destinado a ser um pacote pronto para instalação em vários tipos de hardware) também o estão expondo para a internet e permitindo o acesso ao painel via compartilhamento do Samba, que por sua vez é usado para acessar os arquivos de configuração e instalação do HomeAssistant. Ao fazer isso, eles deixam o sistema inteiro exposto a qualquer pessoa e vazam todas as senhas e chaves de API armazenadas para o público. Deve-se notar que até mesmo os usuários mais experientes em tecnologia, às vezes, não têm conhecimento básico de como proteger adequadamente seus sistemas de código aberto.

4) Criar uma interface em um servidor MQTT desprotegido  

Há algumas ferramentas/aplicativos interessantes que permitem criar um painel simples para uma casa inteligente baseada em MQTT. Eu encontrei um aplicativo chamado MQTT Dash para Android e iOS, que permite colocar vários títulos na tela e vinculá-los aos tópicos de MQTT para criar seus próprios painéis de controle para sua residência. O que é mais interessante é a forma como o aplicativo armazena o layout do painel e a configuração. Em vez de criar um arquivo especial em seu dispositivo, você pode publicar toda a configuração para o tópico do servidor MQTT e, ao fazer isso, replicar facilmente as configurações em quantos dispositivos quiser.  

Isso é muito conveniente, mas se o servidor MQTT não for protegido, um cibercriminoso poderá ter acesso à mesma interface que o usuário. Isso é uma maneira fácil de invadir uma residência e até obter sua interface apenas com uma conexão ao servidor MQTT. Novamente, a configuração padrão facilita isso e, se houver um painel em uso, como um configurado com o app MQTT Dash, você provavelmente vai encontrar um tópico com o nome “metrics/exchange”, um tópico chamado de “retido”. Se você assinar um tópico retido, receberá o último payload/dado armazenado, o que significa que você poderá carregar facilmente todo o painel, como você pode ver na imagem a seguir:

mqtt-dash-appliciation-android-emulator-on-pc-11Aplicativo MQTT Dash no emulador Android no PC 

3) Rastreamento da localização do dispositivo 

O que poderia ser pior? Servidores MQTT normalmente se concentram em muitos dados interessantes e em tempo real. Descobrimos que muitos servidores MQTT, alguns dos quais nem mesmo conectados a um sistema de casa inteligente, contêm um tópico muito interessante que começa por owntracks/... Se você fizer uma rápida pesquisa no Google, poderá ver que OwnTracks é um aplicativo para Android e iOS que funciona como um rastreador GPS. O que é ainda mais interessante é que ele comporta o protocolo MQTT para compartilhar sua localização com a dos seus amigos ou familiares. Até agora, isso parece uma função inocente, certo? Errado! Esse recurso é normalmente configurado ao conectar-se a um servidor MQTT sem nenhuma criptografia ou autorização. Além disso, para conseguir conectar seu telefone a um servidor MQTT, você precisa expô-lo à internet e, infelizmente, muitos usuários fazem a configuração sem considerar nenhuma medida de segurança. O OwnTracks envia então uma mensagem JSON ao tópico owntracks/… do MQTT sempre que o telefone muda de local. De dar arrepios, não? Vamos ver como é a mensagem: 

message-delivered-to-mqtt-server-12Mensagem enviada ao servidor MQTT pelo aplicativo OwnTracks 

recorded-positions-over-a-week-13Posições gravadas durante o curso de uma semana 

Os campos lon (longitude), lat (latitude) e alt (altitude) são autoexplicativos. Você pode ver que até mesmo o nível de bateria do telefone é enviado para o servidor. O campo “tst” é na realidade um timestamp da posição e está escrito no formato Era UNIX e após a decodificação, descobrimos que o timestamp é de: Tue 7 August 2018 11:26:48 UTC. Com todas essas informações, você pode reconstruir facilmente a posição de uma pessoa durante o dia, mês ou ano. Lembre-se, todas essas informações estão disponíveis como dados em tempo real.  

Agora, você está provavelmente se perguntando, por que compartilhar sua localização com o servidor MQTT? Bom, a resposta é... Automação e conveniência. Alguns hubs ou sistemas de “casa inteligente” permitem compartilhar sua posição com eles para fornecer uma melhor experiência. Lembra-se do cenário em que sua casa ativa automaticamente as luzes quando você se aproxima dela? Ou, você pode fazer o sistema desligar todas as luzes se não houver ninguém em casa. O compartilhamento das informações de localização de GPS é exatamente o que o sistema precisa para fornecer essa funcionalidade. O problema aqui, novamente, é a segurança, mais especificamente protocolos desprotegidos e mensagens descriptografadas do OwnTracks. Tudo porque os usuários confiam nas configurações padrão. 

Conclusão 

Como existem ainda muitos protocolos com segurança ruim que usam tecnologias passadas, quando a segurança não era uma grande preocupação, é assustadoramente fácil obter acesso e controle a casa inteligente de alguém. A conveniência dos dispositivos IoT e hubs de casa inteligente conectados à internet é uma faca de dois gumes e há uma compensação entre a facilidade de uso e a segurança. 

Os usuários precisam conhecer as preocupações com segurança ao conectar dispositivos que controlam partes de sua residência a serviços que eles não compreendem completamente e a importância de configurar corretamente seus dispositivos. Aos profissionais do setor, pedimos mais e melhor segurança dos dispositivos de IoT. Para garantir que todo o ecossistema de casa inteligente esteja protegido, os fabricantes precisam desenvolver dispositivos de IoT nos quais seja simples para que os clientes configurem um alto nível de segurança. Por último, precisamos de soluções de controle mais seguras, que permitam aos consumidores usarem essa tecnologia de maneira confidencial em seus lares, sabendo que ela é segura e a sua privacidade está protegida.  

Os dispositivos de IoT estão invadindo aos poucos nossas casas. É crucial implantá-los corretamente agora, porque eles vão aumentar à medida que o tempo passar.