Assumindo o aspirador de pó da LG
Recentemente, mais e mais produtos IOT(Internet Of Things / Internet das coisas) são encontrados no mercado, mas o que é um produto IOT?
Basicamente um produto IOT é qualquer produto eletrônico comum que:
- Conectaram-no a uma placa de rede e, portanto, ele se conecta à Internet
- Criaram um aplicativo para gerenciar-lo e controlá-lo
- Criaram uma nuvem para gerenciamento centralizado de todos os produtos inteligentes da empresa através deste aplicativo
Este aplicativo permite que os usuários LG gerenciem os produtos remotamente através do aplicativo de uma forma fácil e conveniente, no aplicativo que você encontra:
Este aplicativo permite que os usuários da LG gerencie os produtos remotamente por meio de um aplicativo fácil e conveniente os seguintes produtos:
- Secador de roupa inteligente
- Geladeira inteligente
- Microondas inteligente
- Máquina de lavar louça inteligente
- Aspirador de pó inteligente
- E muitop mais
Após analisar a impressionante lista de produtos inteligentes da LG decidimos escolher o produto mais vendido para nossa pesquisa.
Além disso, este aspirador contém uma câmera que pode ser operada remotamente. O objetivo da câmera é permitir que o robô atua como uma câmera de segurança em casa e avise se algo suspeito aparecer na câmera.
Esse recurso é chamado de guarda doméstica, então basicamente escolhemos o aspirador de pó LG como nosso objetivo de pesquisa.
Depois de examinar atentamente a infraestrutura da LG e contornar todas as defesas de infraestrutura e de aplicativos, encontramos uma falha crítica de segurança no sistema no qual permite assumir controle em qualquer conta de usuário remotamente sem nenhuma necessidade de interação por parte do usuário. Não há necessidade de enviar nenhum link e convencer o usuário de clicar nele.
A única coisa que precisávamos era do email cadastrado da vítima e já podiamos invadir todos os produtos da LG, inclusive o famoso aspirador de pó, controlá-lo e ver a câmera.
Vídeo de demonstração:
Parte 1 - Engenharia reversa
No início do estudo, procuramos uma maneira de nos conectar ao aspirador LG e instalar um terminal para testar o sistema e procurar uma falha de segurança.
Examinamos todas as conexões da placa LG e encontramos uma conexão Jtag na parte superior do produto, ao lado da câmera na qual nos conectamos fisicamente:
Após nos conectar ao produto, examinamos o sistema operacional e como o produto funciona. Também nos conectamos com gdb ao processo central do aspirador para fazer engenharia reversa e entender como o sistema funciona.
Para continuar o processo de engenharia reversa, tivemos que enviar uma instrução ao aspirador através do aplicativo e examinar os parâmetros que acompanham o processo ao qual estamos conectados com o gdb e, portanto, tentamos fazer com que o aplicativo envie os pacotes de informações por meio de nosso proxy, o que acabou sendo um processo relativamente complexo.
Deve-se observar que encontramos a falha de segurança no próprio aplicativo logo não precisamos continuar com a engenharia reversa no aspirador em si.
Parte 2 - hackeando o aplicativo
Instalamos o aplicativo em nosso dispositivo de teste (telefone com uma variedade de ferramentas de análise), executamos o aplicativo e recebemos um alerta de que o aplicativo detectou que o telefone estava rooted e o aplicativo fechou.
Portanto, antes mesmo de começarmos a pesquisar o aplicativo, tivemos que tentar fazer com que o aplicativo funcionasse em nosso dispositivo rooted, abrimos o aplicativo usando jadx e tentamos descobrir o que faz com que o aplicativo feche imediatamente após a detectar que o telefone está rooted, encontramos o seguinte código:
As funções a e b executam uma verificação básica se o telefone está rooted, como por exemplo verificando se o telefone contém a pasta "su".
Se essas funções detectarem que o telefone contém esta pasta, elas executam o comando:
finish()
Este comando executa onDestory(), o que acaba causando o fechamento do aplicativo. Para substituir essa proteção, precisamos abrir o aplicativo e remover os comandos finish() do código-fonte utilizando o software
apktool
no curso Teste de Cyber e resiliência para aplicativos móveis eu detalho como fazer isso.
Então, conseguimos ignorar a proteção de detecção de root do aplicativo e conseguimos abri-lo.
Parte 3 - Hackeando novamente
Depois que conseguimos ignorar o mecanismo de detecção de root, abrimos o aplicativo e percebemos que os pacotes de informações não saem para o servidor e também recebemos um erro de certificado digital.
Isso ocorre porque a LG implementou um mecanismo de proteção adicional chamado SSL Pinning, que não emite pacotes de informações se o certificado digital for alterado.
Analisamos o código-fonte do aplicativo para localizar a realização do mecanismo pela LG e, logo, encontramos o seguinte código:
Pode-se ver que essa função retorna false se o certificado digital é incompatível; portanto, para substituir essa proteção, precisamos alterar a função e fazê-la retornar true.
Alteramos o código novamente e deixamos apenas a parte do retorno true, para que agora o aplicativo não dependa de qualquer certificado digital.
Depois de concluir esta etapa, também contornamos o mecanismo de SSL pinning do aplicativo.
Parte 4 - Invadido a conta
Depois que conseguimos ignorar o mecanismo de detecção de raiz e de SSL pinning do aplicativo, tudo o que resta a fazer é encontrar uma falha de segurança crítica que nos permita tomar controle das contas de usuário.
Para controlar as contas de usuário, precisamos localizar uma falha de segurança em um dos processos de login do aplicativo, recuperação de senha e etc.
Nós nos inscrevemos no aplicativo e começamos a testar o processo de login, descobrimos que o processo é feito através do OAuth2. Esse processo é comum em sistemas com diversos dispositivos e tecnologias no qual é usados para verificar de forma centralizada em um servidor central e receber as permissões apropriadas.
Assim funciona um processo aplicado corretamente do tipo OAuth2 Grant Type Password:
-
1. primeiro o cliente (O telefone) envia uma solicitação de nome de usuário e senha do Resource owner (usuário que se inscreveu no sistema).
-
2. Em seguida, o cliente(o telefone) pega os dados recebidos do usuário e os transmite ao Servidor de Autorização, que verifica se os detalhes estão corretos e nos retorna um token, os detalhes que o cliente envia são geralmente:
-
Username
-
Password
-
Client_id
-
Grant_Type=password
-
Scope
-
3. Se os detalhes estiverem corretos, O (Authorization Server) Servidor de Autorização retorna ao Cliente o Token de Acesso com o qual podemos solicitar os recursos que recebemos do Servidor de Recursos de acordo com o escopo (permissões do usuário). Como solicitamos Grant_type = password, o Servidor de Recursos nos dará acesso de token à conta para efetuar um login seguro.
-
4. O cliente usa o token de acesso e solicita ao servidor de recursos algum recurso, como um token de conta.
-
5. Se o token de acesso estiver correto, o servidor de recursos nos devolve as informações solicitadas e, portanto, efetivamente efetuamos login na conta.
Depois de descobrir como o processo deve ocorrer, vamos dar uma olhada em como a LG implementou esse processo relativamente complexo:
- 1. O aplicativo envia uma solicitação de nome de usuário e senha do Proprietário do Recurso e vemos o grant_type = password e client_id:
- 2.Digitamos um nome de usuário e senha, Observe que a senha é enviada de volta em formato sha256:
- 3. Uma solicitação é recebida do token de acesso do servidor de autorização, contendo nome de usuário, client_id e outros parâmetros que a LG adicionou à solicitação:
- 4. O servidor de autorização nos devolve o token de acesso que enviamos para Servidor de recursos.
O ponto interessante aqui é que, no terceiro pacote, a LG enviou o nome de usuário com o qual queremos conectar e todos os outros detalhes, mas, ao mesmo tempo, é habitual anexar uma senha a outra solicitação, pois o servidor parece confiar apenas no nome de usuário.
Aparentemente, a LG assumiu que o nome de usuário não poderia ser alterado no momento porque já havia se identificado com o Proprietário do recurso, mas, na verdade, podemos alterar o nome de usuário que é na verdade o email do usuário que deseja conectar-se ao nosso aplicativo e, assim, fazer login em sua conta sem qualquer intervenção ou Necessidade de uma senha.
Portanto, se nos inscrevermos no aplicativo e seguirmos todas as etapas até a terceira etapa com nossa conta, na terceira etapa, alternamos nosso email para o email da vitima, e, assim, conectar-se à sua conta.
Deseja também aprender a executar testes de resiliência nesse nível? Inscreva-se no nosso Curso de Teste de Cyber e Resiliência!