HawkSec

Desafios Car Hacking

Laboratório Prático de Engenharia Reversa e Injeção de Pacotes em Redes CAN

🏎️ Bem-vindo(a) ao desafio prático de engenharia reversa automotiva!

Sua missão é utilizar o Instrument Cluster Simulator (ICSim) rodando no Linux juntamente com o pacote can-utils para interceptar, analisar e injetar pacotes na nossa rede CAN simulada (vcan0).

Através do terminal do Linux, você precisará descobrir quais IDs e payloads controlam as funções vitais do veículo simulado (velocidade, setas e travas das portas) para desvendar as respostas corretas e capturar a flag final!

Dica de ouro: Fique atento à formatação exigida em cada pergunta (IDs com 3 dígitos em hexadecimal, payloads exatos ou comandos completos) e atente-se às letras maiúsculas/minúsculas e espaços!

Formulário de Engenharia Reversa

Preencha todos os 10 desafios abaixo. Ao final, submeta suas flags para validação do sistema.

Desafio 01

Ao abrir o cansniffer ou candump e pressionar a seta para cima (aceleração) nos controles do ICSim, o velocímetro começa a subir e um ID específico começa a alterar seus bytes rapidamente.

Dica: Abra o cansniffer ou candump vcan0. Mantenha a tecla de aceleração pressionada no ICSim e observe qual ID na coluna da esquerda começa a mudar seus bytes em alta velocidade. Esse ID tem 3 dígitos hexadecimais.

Desafio 02 Quais são os dois bytes (da esquerda para a direita) que alteram seus valores de forma diretamente proporcional à velocidade indicada no painel?

Analise o payload do ID descoberto no desafio anterior enquanto mantém o carro acelerado. Selecione exatamente os 2 bytes corretos no grid abaixo (considerando o índice inicial B0).

Selecione exatamente 2 bytes (0 selecionados):

Dica: Monitore o payload do ID 244 enquanto acelera. Os bytes começam em B0 (primeiro byte à esquerda) e vão até B7. Dois bytes consecutivos aumentam de valor proporcionalmente à velocidade do velocímetro (são eles o B3 e B4).

Desafio 03

Ative as setas do veículo utilizando as setas laterais do teclado nos controles do ICSim e monitore o fluxo de IDs.

Dica: Ligue uma das setas ou o pisca-alerta no painel e observe o cansniffer. Um novo ID surgirá na lista apenas quando as setas estão piscando (é o ID 188).

Desafio 04

Monitore os bytes de payload do ID descoberto no desafio anterior ao ligar a seta para a esquerda.

Dica: Com o ID 188 ativo, observe o primeiro byte do payload (B0) ao ligar a seta para a esquerda. Ele assume o valor 01.

Desafio 05 Antes de tudo, abra todas as portas. Se você executar o comando cansend vcan0 19B#00000F00, o que acontecerá visualmente no painel do simulador?

Simule ou analise a estrutura do pacote com ID 19B e seu payload associado de controle de portas.

Dica: O ID 19B controla as travas. Em binário, cada porta é representada por um bit. O valor 0F em hexadecimal corresponde a 00001111 em binário, significando que todas as 4 portas (bits ativos) serão trancadas.

Desafio 06

Formule o comando completo informando a interface de rede, o ID correto e o payload necessário para acionar as duas setas simultaneamente.

Dica: Para o pisca-alerta, precisamos ligar a seta esquerda (01) e a direita (02) simultaneamente no ID 188. Somando esses valores em hexadecimal, temos 03. O comando completo é cansend vcan0 188#030000.

Desafio 07 Se você quiser trancar APENAS A PORTA DO MOTORISTA (deixando as outras três abertas), qual deve ser o valor do terceiro byte do payload (B2) no ID 19B?

Analise a máscara de bits correspondente a cada porta no byte responsável pelo travamento no simulador.

Dica: O terceiro byte do payload (B2) controla o travamento individual. A porta do motorista é representada pelo bit menos significativo deste byte, correspondendo ao valor hexadecimal 01.

Desafio 08

Imagine que você capturou o tráfego do simulador em um arquivo chamado `hack.log` utilizando o `candump` e deseja executar o ataque de Replay.

Dica: Para reproduzir pacotes gravados com a ferramenta canplayer, passamos a opção -i seguido do nome do arquivo. O comando correto é canplayer -i hack.log.

Desafio 09

O barramento CAN gera milhares de pacotes por segundo. Aplique o filtro inteligente do candump utilizando o ID e a máscara correspondente.

Dica: O utilitário candump filtra pacotes usando o formato interface,ID:mascara. Para filtrar apenas o ID 188 com precisão de 11 bits (máscara 7ff), use candump vcan0,188:7ff.

📢 O Conceito de Barramento CAN

O Controller Area Network (CAN) é o sistema de comunicação padrão usado na eletrônica veicular moderna. Em vez de usar quilômetros de fios conectando cada sensor e atuador individualmente, a rede CAN atua como um barramento compartilhado de dados.

A Analogia do Grupo de Chat: Pense na rede CAN como um grande grupo de WhatsApp onde todos os módulos eletrônicos do veículo (injeção, painel, portas, ABS) são membros. Quando um módulo quer falar, ele envia uma mensagem no grupo. Todos escutam tudo ao mesmo tempo. É responsabilidade de cada membro ler a mensagem e decidir se ela é relevante para ele ou não.

Módulo Motor: E aí galera, o motor tá a 3500 RPM agora!
Painel: Bloco recebido, vou mover o ponteiro do conta-giros.
Câmbio Auto: Bloco recebido, vou recalcular a troca de marcha.

📦 Anatomia de uma Mensagem CAN

Como não há endereços específicos para remetente ou destinatário nas mensagens CAN, a estrutura do pacote é extremamente simples, dividindo-se principalmente em duas partes:

  • CAN ID (Identificador): Funciona como o "assunto" ou "título" do pacote. Ele indica o tipo de informação contida e determina a prioridade da mensagem na rede (IDs mais baixos têm maior prioridade).
  • Payload (Carga Útil): Contém os dados em si. Tem um tamanho máximo de 8 bytes (representados de B0 a B7). Cada byte pode armazenar um valor hexadecimal de 00 a FF.
CAN ID
188
Payload (8 Bytes)
01 00 00 00 00 00 00 00

No exemplo acima, o ID 188 representa o controle das setas e o primeiro byte 01 instrui o painel a acender a seta da esquerda.

💉 Injeção de Pacotes e Car Hacking

Devido à ausência de mecanismos nativos de criptografia ou autenticação no protocolo CAN clássico, a rede é altamente vulnerável a ataques de Injeção de Pacotes.

Se um hacker conseguir acesso físico (através da porta de diagnóstico OBD-II, de faróis expostos, etc.) ou lógico à fiação da rede CAN, ele poderá utilizar ferramentas como o cansend para fabricar e injetar pacotes simulando o comportamento de sensores legítimos.

[EXEMPLO DE ATAQUE]
Se o hacker injetar continuamente o pacote abaixo, o painel do simulador receberá a instrução e trancará todas as portas, ignorando a vontade real do motorista:
cansend vcan0 19B#00000F00

Isso ocorre porque o painel de instrumentos simplesmente atua com base nas últimas instruções recebidas no barramento, sem validar se quem enviou foi a central original das chaves ou um dispositivo invasor.

🧮 Conversor Hexadecimal para Binário

Em redes CAN, cada bit individual de um byte do payload pode representar um interruptor ligado/desligado (ex: portas trancadas/destrancadas). Utilize esta ferramenta interativa bidirecional para converter bytes hexadecimais em seus bits individuais e vice-versa em tempo real.

Byte Hexadecimal (00 a FF)
0x
Visualização dos Bits Individuais (b7 a b0)