Introducción a CAN: características y PoC sobre el bus

Hoy en día nadie busca comprar un coche por las funciones más básicas como como el ABS o el BAS, ya que todos los vehículos lo tienen de serie. Estas funciones están gestionadas por el protocolo CAN desde 1992.

CAN fue diseñado por Bosch en 1980, aunque no es hasta 1987 cuando comienzan a verse los famosos microordenadores (o ECU) que poseen los coches desarrollados para ser utilizados por el protocolo. Finalmente, 1991 aparece la primera normalización de CAN de baja velocidad (hasta 125kbps).

Ilustración 1.Ejemplo de vehículo con diferentes sistemas electrónicos agrupados en el bus CAN
(Florent.david.lille1 – Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=30533927)

El protocolo CAN funciona mediante un bus de datos, en el cual todos los dispositivos emiten sus comunicaciones al tiempo que los equipos interesados recogen esta información para interactuar. De esta manera los coches pasaron a ahorrarse kilómetros de cableado.

De manera general (cada marca y cada coche tienen su configuración interna respecto al protocolo) CAN utiliza cable trenzado, donde puede haber 2 niveles de tensión. En uno de los cables circula la señal llamada CAN_H, que funciona entre los niveles de tensión +2,5 y +3,5 V. Por otro lado, CAN_L utiliza +2,5 y +1,5 V. De esta manera, cuando uno de los sistemas electrónicos manda un “0” lógico, las líneas transmitirán a una tensión de +2,5 V y, cuando se mande un “1”, la línea H transmitirá 3,5V y la baja a 1,5V.

Ilustración 2. Tensiones del cableado H y L

Una trama CAN se compone de diversos campos. Los más destacados son:

  • Identificador (trama verde) que indica de qué sistema electrónico proviene la señal además de la prioridad del mismo (un “1” prioriza sobre un “0”)
  • Código de longitud de datos (segmento amarillo) que indica qué cantidad de bytes tiene el campo de datos.
  • Trama de datos (segmento rojo) puede ir de 0 a 8 bytes según se haya definido en el campo anterior. Cada ECU utiliza el campo de datos según necesite. Además, cada fabricante posee su propia gestión del protocolo, por lo que es difícil asignar de manera general una acción del coche a una trama recibida.
Ilustración 3. Trama general CAN
(CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=31571749)

Ciberseguridad

CAN es un protocolo antiguo, por lo que es fácilmente explotable. En este post se va a realizar un ataque de replay, en el que se recogerán datos generados mediante un simulador para reenviarlas al sistema y ver qué sucede y cómo afectaría a un vehículo.

Para poder montar y desarrollar el siguiente entorno se requiere de este repositorio (Simulador ICSim) y las utilidades can-utils.

Una vez descargados los elementos del repositorio se realiza el comando make para generar los ficheros necesarios y posteriormente se realizan los comandos ~/ICSim/icsim vcan0 y ~/ICSim/controls vcan0 para ejecutar los siguientes dashboards.

Ilustración 4. Dashboards utilizados en la simulación

El mando de la izquierda representa una serie de funcionalidades del vehículo. Con un controlador conectado al equipo podrían realizarse esas acciones, aunque también admite la entrada del teclado. Así, cuando se pulse la tecla flecha arriba, el coche virtual acelerará y el acelerómetro incrementará la velocidad. Ese acelerómetro es el dashboard que hay a la derecha de la pantalla, el cual permite revisar si las puertas del vehículo están abiertas o si hay intermitentes activos.

AcelerarFlecha arriba
IntermitentesFlechas izquierda/derecha
Desbloquear puertas delanterasTecla shift derecha+A, Tecla shift derecha+B
Desbloquear puertas traserasTecla shift derecha X, Tecla shift derecha +Y
Bloquear todas las puertasMantener tecla shift derecho, pulsar tecla shift izquierdo
Desbloquear todas las puertasMantener tecla shift izquierdo, pulsar tecla shift derecho
Tabla 1. Tabla de acciones del vehículo

Para el ataque se va a realizar una captura de tráfico mediante el paquete can-utils, concretamente con la herramienta candump y su posterior reproducción con canplayer.

La idea concreta del ataque es mostrar cómo la inyección de código can puede modificar los parámetros de un coche en marcha (por ejemplo, desbloquear y abrir las puertas a más de 100km/h)

En la primera parte se ha recogido la información del vehículo mediante candump –l vcan0, en el cual se ha realizado un funcionamiento habitual del vehículo (arranca, acelera, realiza un par de indicaciones con las intermitencias a izquierda y derecha y finalmente se para y se abren las puertas).

Ilustración 5. Log recogidos de las acciones realizadas desde el controlador

Y en la segunda parte se van a inyectar las tramas CAN mediante canplayer –I candump-2022-12-05_061504.log mientras el vehículo está en su funcionamiento habitual.

Ilustración 6. Inyección de la captura realizada previamente

De esta manera, mientras el vehículo está en funcionamiento, en el bus CAN circulan los datos inyectados y los datos reales de las ECU y ambas llegan a sus respectivos destinos. En este caso se observa en la ilustración anterior como el coche circula de manera habitual mientras las puertas se desbloquean y permanecen abiertas.

Actualmente los coches poseen muchas entradas vulnerables al sistema, como los cierres inteligentes que funcionan mediante Bluetooth o los servidores en la nube que almacenan información del vehículo. Estos accesos permiten a los atacantes que no requieran de una conexión física (mediante el conector ODB) con el vehículo para poder ser modificado.

Referencias