Hacking de coches: Cómo desbloquear puertas con Doggie

En nuestros dos últimos posts, presentamos nuestro adaptador CAN Bus - USB modular y de código abierto llamado Doggie y compartimos nuestra experiencia en el Aldea del pirateo de coches de la Conferencia H2HC, donde utilizamos a Doggie para mostrar a los asistentes el funcionamiento interno de las redes de bus CAN.

Este post explorará un caso de uso práctico para demostrar la potencia de Doggie en la investigación de la seguridad en automoción. Imagina que necesitas desbloquear un vehículo enviando la secuencia correcta de mensajes CAN. Con Doggie y herramientas como Python-can, can-utils, o scripts personalizados, puedes husmear mensajes de desbloqueo, reproducirlos e incluso experimentar con la manipulación del sistema para realizar análisis de seguridad.

En este caso práctico, veremos cómo utilizar Doggie para olfatear e inyectar mensajes en el bus CAN de un Jeep Liberty 2010. La configuración consiste en Doggie con la configuración RP2040 y MCP2515, que proporciona la interfaz entre el bus CAN del coche y tu ordenador.pico_usb_mcp2515

Paso 0: Introducción al bus CAN y a la estructura de mensajes

Antes de sumergirnos en el caso práctico, es importante comprender la estructura básica de un Bus CAN marco. A Marco CAN suele constar de varios componentes:

  1. Inicio del fotograma - Marca el inicio del mensaje.
  2. Identificador (ID) - Un ID único para el mensaje, que determina su prioridad en el bus.
  3. Campo de control - Incluye la longitud del campo de datos.
  4. Campo de datos - Contiene los datos reales del mensaje, que pueden ir de 0 a 8 bytes.
  5. CRC - Suma de comprobación utilizada para detectar errores en el mensaje.
  6. ACK - El campo de acuse de recibo es donde los nodos receptores confirman la recepción satisfactoria del mensaje.
  7. Fin del marco - Marca el final del mensaje.

En este artículo no vamos a hablar de los entresijos del funcionamiento del bus CAN a nivel eléctrico ni a profundizar en su protocolo. En su lugar, nos centraremos en el uso práctico de Doggie para olfatear, analizar e inyectar mensajes, dejando a un lado las explicaciones detalladas de electrónica y hardware. Nuestro objetivo es demostrar cómo utilizar Doggie para interactuar con redes CAN Bus. Para una exploración más profunda del protocolo CAN Bus, recomendamos consultar recursos adicionales sobre el tema.

Paso 1: Investigación y documentación

Antes de saltar a las conexiones físicas, el primer paso es reunir la documentación pertinente sobre el coche, especialmente el “Manual de Reparación” y el “Diagrama de cableado.” Puede que estos documentos no estén perfectamente detallados, pero proporcionan información crucial sobre el sistema eléctrico, los módulos y los buses de comunicación del coche. En este caso, encontramos un diagrama útil que describe los buses CAN clave en el Jeep Liberty.image (4) (2) Como se muestra en la imagen, el coche contiene tres buses CAN primarios:

  • Bus CAN C
  • Bus CAN C de diagnóstico
  • CAN Bus Interior

Cada bus funciona a su propia velocidad y se comunica con distintos módulos. Un dato clave aquí es que todos los buses se conectan al TIPM (Módulo de alimentación totalmente integrado), también conocido como el Pasarela común de comunicación (CGW). Este módulo actúa como pasarela para gestionar la comunicación entre los distintos buses, garantizando que los mensajes de los sistemas de diagnóstico OBD2 estén aislados de otros buses, como los que gestionan los bloqueos de puertas o los frenos.

Paso 2: Encontrar el bus y el módulo adecuados

Nos centramos aquí en el Módulo de la puerta del conductor (DDM) y Módulo de puerta de pasajero (PDM). Según el diagrama, ambos módulos están conectados al CAN Bus Interior. Para acceder a este bus, necesitábamos localizar un punto de conexión adecuado. Identificamos que el módulo de memoria del asiento también está conectado a este autobús y convenientemente situado bajo el asiento.20241220_113327A continuación, utilizamos el Manual de reparación para identificar los cables CAN High y CAN Low. El diagrama mostraba que el cable blanco y naranja es CAN Bajo, y el cable blanco y gris es CAN Alto.20241220_113437circuitPara validar aún más nuestra conexión, utilizamos un osciloscopio para comprobar las señales en el bus. Conectamos el osciloscopio a las líneas CAN High y CAN Low para asegurarnos de que las señales eran correctas para la comunicación CAN Bus.20241220_125717 (1)

Paso 3: Configurar Doggie

Una vez realizadas las conexiones de hardware, conectamos Doggie al bus CAN y al ordenador. En primer lugar, instalamos el can-utils en Linux:

$ sudo apt-get install can-utils

A continuación, configuramos la interfaz CAN para Doggie. Sabemos por el diagrama que el bus funciona a 125kbps, por lo que utilizamos el siguiente comando para iniciar el demonio slcan e inicializar la interfaz CAN:

# Inicie el demonio slcan y configure la interfaz

$ sudo slcand -s4 /dev/ttyUSB0 can0 && sudo ifconfig can0 up

Después de esta configuración, teníamos una interfaz CAN llamada can0 que estaba listo para interactuar con el autobús del coche.

Paso 4: Olfatear mensajes CAN

Utilizamos el canniffer para empezar a husmear mensajes en el bus. Esta herramienta ayuda a identificar mensajes interesantes resaltando los cambios en los datos. Resulta especialmente útil durante las interacciones en directo, como el bloqueo o desbloqueo de las puertas.

$ cansniffer -c can0

Una vez que empezamos a husmear, activamos eventos, como bloquear y desbloquear las puertas. En el vídeo, aparece un nuevo mensaje con el ID 0x3ED cada vez que pulsamos el botón de bloqueo. Esto nos dice que 0x3ED es el ID responsable de los comandos de bloqueo/desbloqueo de la puerta.

Paso 5: Interpretar los mensajes

En canniffer muestra diferencias de datos, no siempre es la mejor herramienta para analizar los detalles de los mensajes porque sobrescribe la información anterior. En su lugar, utilizamos candump con un Filtro ID para centrarse en los mensajes específicos relacionados con el bloqueo y el desbloqueo.

$ candump can0,0x3EDcandumpObservamos tres mensajes distintos:

  • 0x20: Enviado periódicamente, probablemente un mensaje de liveness.
  • 0x30: Enviado al bloquear las puertas.
  • 0x28: Enviado al desbloquear las puertas.

Una vez comprendida la estructura de los mensajes, podemos proceder a inyectarlos.

Paso 6: Inyectar mensajes

Para bloquear o desbloquear las puertas, utilizamos cansend para inyectar el mensaje correspondiente. Así es como enviamos el comando de desbloqueo:

$ canend can0 3ED#28

En el vídeo de demostración, podemos ver cómo las puertas se bloquean y desbloquean en función de los mensajes que enviamos.Doggie representa el compromiso de Faraday de dotar a la comunidad de herramientas que democraticen la investigación sobre ciberseguridad en automoción. Tanto si eres un profesional experimentado como un recién llegado a la piratería informática de automóviles, Doggie proporciona una solución versátil y de bajo coste para explorar las redes CAN Bus y más allá.

Consulta el proyecto en GitHub.

¿Formación, servicios de red teaming o escaneado continuo? Le tenemos cubierto. 🚀⚡ 

Solicite más información. 

Resultados en tiempo real. Seguridad más inteligente.

¿Listo para ver la plataforma en acción?

Descubra cómo Faraday centraliza, automatiza y eleva su flujo de trabajo de seguridad.