Conferência DEFCON 27. Seu carro é meu carro. Parte 2

Conferência DEFCON 27. Seu carro é meu carro. Parte 1

No final do vídeo, você ouviu um clique - funcionou desbloqueando a trava mecânica do volante, que não podemos contornar eletronicamente. É necessário usar algo mecânico, quebrar o cilindro da fechadura manualmente ou fazer algo semelhante, o que eu não faria com o carro dela. Todo o firmware demonstrado nesses vídeos estará disponível no GitHub após a minha apresentação, então basta ir para o endereço indicado no slide e baixar o arquivo OpenRemoteStart.

Vamos falar sobre o que exatamente acontece quando adicionamos a Internet a esse sistema, porque deve ser benéfico, certo? Como eu disse, comprei um módulo de controle remoto de alarme chamado MyCar. Está disponível em várias versões, eu tinha um modelo Linkr LT-1.



MyCar é apenas uma marca, e esses módulos são vendidos sob os nomes Linkr LT-1, MyCar KIA, Visions MyCar, Carlink (CL6) etc. Como se viu, por algum tempo as concessionárias da KIA no Canadá instalaram esse sistema em carros ou, pelo menos, em um aplicativo chamado MyCar KIA. Curiosamente, este aplicativo não está mais disponível para download na AppStore. Também quero observar que escolhi os produtos Fortin e MyCar, mas, de acordo com as avaliações dos usuários nos fóruns sobre alarmes de carros autônomos, outros sistemas não se comportam melhor e têm problemas semelhantes.

Eu tinha uma pergunta importante: por que um produto com problemas de segurança está sendo vendido no mercado secundário de alarmes de carros e isso incomoda alguém? Portanto, se algum de vocês estiver interessado em sistemas de partida remota, preste atenção em algumas circunstâncias importantes. Em primeiro lugar, como mencionei anteriormente, se o sistema DS não estiver instalado corretamente em um carro com transmissão mecânica, é bem possível que, após uma partida remota do motor, o carro simplesmente fique sem motorista se houver alguma engrenagem na caixa de velocidades. Isso é realmente perigoso. O segundo perigo é que, se alguém estacionar o carro em uma garagem anexa à casa e o motor ligar acidentalmente remotamente, você poderá se sufocar com o monóxido de carbono acumulado. Portanto, se você tem um sistema DS e uma garagem anexa,você definitivamente deveria ter detectores de monóxido de carbono.

Se você usa um sistema DS, nunca tente ligar o motor da máquina sem saber exatamente onde está, pois as consequências podem ser desastrosas.

O MyCar, uma pequena caixa preta com duas conexões saindo dela, possui 8 portas, duas das quais são para a interface do depurador. A conexão com essa interface mostrou que o dispositivo está executando o Linux, sobre o qual o fabricante faz silêncio. É fácil entrar no shell do firmware usando a senha oelinux 123, mas você também pode usar o mecanismo AE sem efetuar login, o que permite inserir comandos AT na linha de comando, incluindo o comando para alterar o endereço IP do dispositivo com o qual este módulo se comunica.



Se observarmos as linhas abaixo, podemos ver o endereço IP do servidor no qual o módulo MyCar recebe atualizações de firmware. O dispositivo está equipado com uma porta L, que permite "ouvir" os comandos recebidos pelo módulo. Usando o mecanismo AE e alterando o IP do dispositivo emparelhado, pude determinar que esse dispositivo se comunica com o DS usando o protocolo UDP não criptografado.

Não mergulhei particularmente nisso, mas acho que esse é um fato bastante significativo e interessante. Se você estiver interessado em informações adicionais sobre este dispositivo, dê uma olhada neste slide - ele mostra a tensão de 3,3V, taxa de transferência de dados 115200 baud, endereço do servidor para atualização do firmware, senha raiz e um link para o manual do usuário.



O dispositivo também pode ser "tolerante" a uma tensão de alimentação mais alta.

Como eu disse, pode fazer bastante frio aqui. Cerca de um mês depois de apresentar esse sistema à minha namorada, decidi puxar a unidade para fora do carro e trabalhar com ela adequadamente. O fato é que durante todo esse mês eu dirigi de mim mesmo pensamentos sobre a vulnerabilidade deste dispositivo. Na semana seguinte, prometeram geada a -30 ° C, então tive que me apressar. Liguei-me ao shell e o fiz funcionar, mas como a conexão celular no meu laboratório em casa não é muito boa, decidi trabalhar com a unidade em outro computador. O dispositivo FTDI que eu uso possui um cabo curto, então encontrei outro, mais longo, conectei à unidade DS, conectei ao computador e, assim que liguei a alimentação, meu módulo começou a fumar!

Com isso, podemos aprender uma lição: se você estiver envolvido em hackers de hardware, tenha um bloco de reserva pronto! Minha namorada formulou a moral dessa história: se sua alma gêmea é um hacker, não deixe que ele brinque com seus presentes de Natal! E agora vamos olhar o software, acho que nada vai fumar aqui.



Lancei um servidor proxy intermediário, desliguei a verificação SSL no meu telefone e comecei a observar o tráfego que o aplicativo envia para a parte do servidor. Ao me registrar, notei que o sistema pega meu endereço de e-mail e o envia ao serviço da web para garantir que esse endereço esteja associado a uma conta existente. Curiosamente, o sistema usou autenticação básica nesse caso, porque eu ainda não havia criado uma conta. Eu não sabia o que fazer com essas informações, então apenas as escrevi em um caderno e segui em frente. Criei minha conta e entrei, e a primeira coisa que o aplicativo faz ao fazer login é chamar um serviço da web para verificar o usuário atual. Acabei de ligar para esse servidor da Web usando as credenciais que vi anteriormente e que foram usadas para verificar seMeu endereço de e-mail existe e o Mycar Admin recebeu acesso em resposta.



Eu duvidava que esse fosse o relato do administrador real do sistema, porque, apesar do som alto, ele tinha poucos privilégios. No final, todos conhecemos essas pessoas.

Portanto, crio outra solicitação - a equipe do EngineStart, para iniciar o carro a partir desta conta, clique em "Enviar", recebo o status do comando - "200 OK" e, após cerca de três segundos, meu carro começa a se mover.



Como se viu, a conta de administrador do Mycar era de fato uma conta de administrador, codificada no aplicativo móvel. Mas isso não é tudo. Em um dos slides anteriores, você viu uma chave de API. Novamente, ao monitorar o tráfego do meu servidor proxy falso, descobri que essas chaves de API podem ser usadas em vez de um nome de usuário e senha. Se você usar "API" e uma dessas chaves como nome de usuário, poderá autenticar o usuário.



Então, copiei o conteúdo da linha “APIKey”, colei-o na linha Senha do aplicativo POST e cliquei no botão “Enviar”.



No entanto, isso não funcionou e, por um longo período de 5 minutos, não entendi o porquê. Por fim, ocorreu-me que eu esqueci de recortar as aspas e a vírgula na chave da API copiada, sobre a qual fui informado: "Você cometeu um erro na sintaxe SQL". Ficou claro para mim que você pode simplesmente usar a injeção básica de SQL para ignorar todo o processo de login e se tornar um administrador ou qualquer usuário que desejar. Eu acho que ninguém tentou roubar um carro usando injeção SQL, então vamos tentar fazer isso.





Em geral, entrei com minha conta, cliquei em "Enviar" e recebi o status "200 OK" em resposta. Desta vez eu percebi para gravar um vídeo. Está um pouco escuro, porque eu atirei tarde da noite na janela do meu escritório. Então, eu entro no comando e você vê pela janela que, na parte inferior do pátio dos faróis do carro, pisca. No início, a luz é fraca, mas os faróis começam a brilhar com força total - isso ligou o motor. Então, eu liguei o carro usando injeção SQL (aplausos da platéia).

Mas isso não é tudo. A injeção de SQL pode ser usada não apenas para autorização, mas também para substituir outros parâmetros, como URLs, parâmetros do corpo da string de consulta, etc. De fato, este sistema usa injeção de SQL em todos os lugares. Observando as mensagens de erro, você pode ver que o que inserimos como senha é comparado diretamente à coluna de senha no banco de dados.



Isso significa que eles usam senhas de texto simples em injeções de SQL. Como diz o ditado, "isso não é nada bom, mas até muito ruim!" Mas o suficiente sobre SQL, vamos ver o que mais pode ser feito para iniciar um carro remotamente. Você simplesmente envia o comando “EngineStart” e, em troca, obtém um identificador inteiro, que é o identificador deste comando, neste caso ID = 3. Conhecendo o identificador, você pode “retirar” um serviço que relata o status desse comando.



Assim, aumentando ou diminuindo o valor do ID, eu "retiro" o status de qualquer equipe que já foi enviada para este sistema.



No entanto, isso não é particularmente interessante, e me pergunto se há uma indicação direta de um objeto que eu possa usar para dar partida no meu carro. Portanto, iniciei o comando EngineStart em nome de um usuário legítimo da minha conta e tentei chamá-lo através da conta de outro usuário, que não deveria ter acesso ao sistema. Em resposta, recebi uma mensagem de erro: "Esta conta está fora do contexto da hierarquia". Então, talvez, esse método de hacking não funcione. No entanto, se você olhar para essa API, verá que ela duplica as informações - o endereço de email do usuário é comparável ao ID da conta.



Se você estiver desenvolvendo uma API ou invadindo uma API, essa duplicação de informações que vemos neste URL pode ser uma fonte de erros. Nesse caso, os erros da API podem se manifestar de quatro maneiras diferentes.



Se você observar os casos 2 e 3, circulados em vermelho, poderá ver links diretos para o objeto. Nos dois casos, o sistema não verifica se você está autorizado a executar este comando. Eu tentei o caso 2 e não funcionou, mas e o caso 3? Aqui, basta substituir o identificador da conta USER_EMAIL no URL, pois ele está diretamente vinculado ao identificador da conta ACCOUNT_ID. Anteriormente, usamos o identificador da conta da vítima e agora usamos a conta do invasor. Portanto, usei o identificador da conta do hacker e o identificador do dispositivo da vítima, enviei o comando e, como esperado, recebi o status do comando "200 OK" e ganhei controle sobre o aplicativo MyCar.
Assim, usando três vetores de ataque diferentes, conseguimos fazer tudo o que um usuário de aplicativo legítimo pode fazer. Isso significa que você pode encontrar qualquer carro na cidade, definir sua marca e modelo no aplicativo e desbloquear o carro remotamente e ligá-lo. Podemos desligar ou ativar o alarme, fazer alterações no menu de serviço do carro e verificar o status de qualquer equipe. E tudo isso pode ser feito de três maneiras diferentes.



Obviamente, os desenvolvedores do MyCar tentaram, de alguma forma, corrigir os erros do sistema. Portanto, no caso de senhas codificadas, elas simplesmente colocam um servidor proxy reverso na frente do aplicativo para ocultar as credenciais usadas para autorização. O problema é que os proxies reversos não são mágicos e não conseguem resolver todos os problemas. Eles salvaram a injeção de SQL em um serviço de terceiros, portanto, mesmo sem uma senha, ainda posso usá-la através do procedimento de verificação do usuário.



Decidi dar uma olhada na estrutura da URL. Você deve ter notado que todos os endereços usados ​​pelo sistema contêm m2m. Tendo decidido que esse é algum tipo de interação interna para o mecanismo de autorização no aplicativo MyCar, digitei essas cartas no Google e descobri o site do M2M Suite. A única coisa que você precisa fazer depois de ver este formulário é inserir algumas aspas simples e ver o que acontece. E o que acontece é que você recebe a injeção correta de SQL (aplausos da audiência).





E isso acontece alguns meses depois que os desenvolvedores relataram um problema com a injeção de SQL. Se o aplicativo tiver esses problemas, eles precisam ser corrigidos o mais rápido possível, mas, como você pode ver, os desenvolvedores não fizeram nada. Tal desrespeito pelos usuários, acho ofensivo.

O módulo MyCar possui uma unidade GPS, para rastrear a localização do seu carro e exibi-lo no aplicativo. Mas, como se viu, eles armazenam não apenas a localização atual dos carros. Eles armazenam muitas informações, muito mais do que o necessário para rastrear a localização atual da máquina. No meu caso, durante 13 dias de uso do aplicativo, eles acumularam pouco menos de dois mil pontos de geolocalização dos lugares que meu carro visitou. A política de privacidade do desenvolvedor do MyCar não diz uma palavra sobre esta coleta de informações.

No entanto, mais ainda piora. Você pode argumentar que esse é apenas um efeito colateral da implementação do serviço de geolocalização. Mas o fato é que, em vez de simplesmente criar uma lista de locais em que seu carro está, eles usam outra API que analisa esses dados e determina os locais em que seu carro está mais frequentemente. Novamente, tanto quanto eu sei, na política de privacidade não há indícios de tal função. Talvez isso não seja tão surpreendente, porque, depois de várias pesquisas, encontrei a empresa-mãe MyCar, chamada Procon Analytics, fui ao site e visitei a seção de perguntas frequentes. Aqui me deparei com a pergunta: "Como você garante a segurança dos dados?". A resposta da empresa foi: "Ao contrário dos ambientes de nuvem pública que lutam pela prioridade de armazenamento,O Procon Analytics usa sua própria nuvem virtual, usada exclusivamente para usuários de nosso aplicativo e protegida contra outros usuários. Este é um ambiente em nuvem especial com um alto grau de proteção, que oferece fácil disponibilidade e velocidade na entrega de serviços. Ao trabalhar com o Procon Analytics, você pode ter certeza de que seus dados estão bem protegidos. ” Eu nem sei o que dizer ...



Se você for à página do Facebook deles, poderá descobrir ainda mais interessante. Aqui eles escrevem diretamente: "Proteger informações sobre o seu veículo é vital!". Bem, só posso concordar com esta afirmação.

Então, voltando à pergunta que comecei: “Como isso acontece e como isso pode ser evitado”? E o mais importante, como podemos, como comunidade, impedir isso?

Este é o fim do meu relatório, mas ainda posso responder a algumas perguntas (aplausos da platéia).

Você está perguntando se eles consertaram tudo? No momento, acho que eles corrigiram todos os erros que relatei a eles, exceto as deficiências da política de privacidade, que mencionei no final do discurso. A última vez que verifiquei, tudo estava inalterado. Para a pergunta, posso editar os parâmetros da unidade de controle eletrônico do motor da ECU dessa maneira, responderei que minha tarefa era editar os parâmetros do carro apenas no aplicativo MyCar. Ele armazena a representação digital do carro, que é editada usando acesso direto ao objeto, injeção de SQL ou outro vetor de ataque.

A última pergunta é: eu tenho um sistema de partida do motor sem chave no carro com o botão Iniciar e como está a situação com o travamento do volante nesse caso? Minha resposta é que o MyCar possui esse botão, portanto este sistema não possui uma trava no volante. Eu suspeito que, se você instalar este sistema, definitivamente não poderá confiar em uma trava para travar o volante.


Um pouco de publicidade :)


Obrigado por ficar com a gente. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando aos seus amigos o VPS na nuvem para desenvolvedores a partir de US $ 4,99 , um analógico exclusivo de servidores de nível básico que foi inventado por nós para você: Toda a verdade sobre o VPS (KVM) E5-2697 v3 (6 núcleos) 10 GB DDR4 480 GB SSD 1 Gbps de US $ 19 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).

Dell R730xd 2 vezes mais barato no data center Equinix Tier IV em Amsterdã? Somente nós temos 2 TVs Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV a partir de US $ 199 na Holanda!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - a partir de $ 99! Leia sobre Como criar um prédio de infraestrutura. classe c usando servidores Dell R730xd E5-2650 v4 que custam 9.000 euros por um centavo?

All Articles