Projets
Systèmes EmbarquésCybersécurité

Analyse et injection sur bus CAN automobile

Reverse engineering des trames CAN d'une maquette véhicule, cartographie des bus, décodage des signaux moteur/éclairage/confort, base DBC et DLL d'injection en C simulant un système ADAS.

Par Sehenonirina Elisa Randriamasinoro, M1 Cybersécurité des Systèmes Embarqués, UBS Lorient

Code source20266 stack
[BUS CAN][REVERSE ENGINEERING][AUTOMOTIVE][MUXTRACE][C][OBDII]

Contexte

TP réalisé dans le cadre du Master Cybersécurité des Systèmes Embarqués (UBS Lorient), en binôme, 3 séances.

L'objectif : comprendre comment circulent les commandes d'un véhicule réel sur ses bus CAN, puis démontrer qu'un acteur connecté au réseau peut observer, décoder et forger ses propres trames.

Le travail s'est fait sur une maquette physique (banc MT-CAN-LIN-BSI) regroupant les calculateurs réels d'une automobile, interconnectés via une passerelle BSI et accessibles par prise OBDII. Outil d'analyse : MuxTrace en mode sniffer.


Architecture réseau de la maquette

La maquette s'organise autour du BSI (Boîtier de Servitude Intelligent), passerelle entre trois bus CAN distincts :

BusDébitDomaineCalculateurs clés
CAN HS I/S500 kbit/sInter-systèmesMoteur (1320), ESP (7800), Airbag
CAN LS CAR125 kbit/sCarrosserieVolant (CV00), Airbag (6570)
CAN LS CONF125 kbit/sConfortPorte conducteur (6032), Clim (8080)

Le port OBDII (ISO 15765-4, broches 6 et 14) expose directement le bus haute vitesse, principale surface d'attaque physique d'un véhicule.


Reverse engineering des trames

Aucune documentation fournie : décodage par observation. Méthodologie appliquée sur chaque signal :

  1. Écoute passive avec MuxTrace
  2. Stimulation physique (clé, comodo, potentiomètre d'accélération…)
  3. Identification de l'ID dont la valeur change au moment de l'action
  4. Isolation de l'octet porteur du signal
  5. Calcul de la loi de conversion physique = a × octet + b

Signaux décodés

Régime moteur, ID 0x208, octet 0, bus HS I/S :

AffichageOctet 0Loi
1000 tr/min0x1E (30)N = octet × 33,33
2000 tr/min0x3C (60)
3000 tr/min0x5A (90)

Vitesse, ID 0x44D : +40 km/h → +16 sur l'octet → V = octet × 2,5

Comodo d'éclairage, ID 0x612, octet 1 : un seul octet combine deux fonctions par champs de bits, nibble bas pour l'éclairage, nibble haut pour les clignotants.

FonctionOctet 1
Tout éteint0x01
Feux de croisement0x03
Feux de route0x07
Clignotant droit0x06
Clignotant gauche0x0A

Rétroviseurs, ID 0x115, bus CONFORT : mouvement (bits 7–4) | sélection rétro (bits 3–0)

Autres signaux décodés : lève-vitres (0x14C), essuie-glaces (0x592), dégivrage (0x12D).


Base de données DBC

L'ensemble des signaux décodés a été formalisé dans des fichiers DBC (un par bus) avec DBEdit, format standard de l'industrie automobile. Chaque ID est associé à ses signaux, leur position en bits, leur facteur d'échelle et leur unité.

Une fois chargé dans MuxTrace, 0x5A s'affiche directement en « 3000 tr/min ». Couplé au générateur de trames, le DBC permet de piloter la maquette en grandeurs physiques sans recalculer l'hexadécimal à la main.


DLL d'injection en C

Dernière étape : une DLL en C (compilée sous Code::Blocks) qui émet ses propres trames sur le bus en réaction à l'état du véhicule. L'architecture repose sur les callbacks MuxTrace (OnStart, OnStop, OnCanEvent) et une FIFO de messages.

Scénario, Sécurité Active Pluie & Vitesse

Allumage automatique des feux de croisement lorsque deux conditions sont réunies simultanément :

  • Vitesse > 110 km/h, lecture ID 0x44D
  • Essuie-glaces mode rapide, lecture ID 0x592
  • Action : émission ID 0x612, octet 1 = 0x18
#define ID_VITESSE      0x44D
#define ID_ESSUIE_GLACE 0x592
#define ID_COMODO       0x612
#define FACTEUR_VITESSE 2.5f

if (msg.id == ID_ESSUIE_GLACE)
    ModePluieIntense = ((msg.bData[2] & 0x0F) == 4) ? 1 : 0;

if (msg.id == ID_VITESSE)
    VitesseElevee = (msg.bData[0] * FACTEUR_VITESSE > 110.0f) ? 1 : 0;

if (VitesseElevee && ModePluieIntense) {
    CanCmd_Msg_Tx.bData[1] = 0x18;
    CanSendMsg(0, 0, &CanCmd_Msg_Tx);
}
C

La commande a été observée et exécutée par la maquette, un nœud logiciel tiers peut piloter des actionneurs réels dès lors qu'il connaît les IDs et les facteurs de conversion.


Perspectives sécurité

Ce travail ouvre sur les contre-mesures étudiées en sécurité automobile : IDS CAN par analyse de fréquence et d'entropie des trames, authentification de messages (SecOC), et segmentation des domaines par la passerelle BSI.

Projets similaires

Tous les projets
DevSecOpsCybersécurité

Indian Food, Landing page DevSecOps

Un site vitrine de restaurant déployé en production avec une chaîne DevSecOps complète, analyse statique, scan de dépendances, tests dynamiques et déploiement automatisé sur Oracle Cloud ARM64.

2026
DevSecOpsCybersécurité

Umami, Analytics self-hosted, dashboard VPN-only

Web analytics sans cookie auto-hébergé sur VPS ARM64, avec une architecture réseau qui sépare la collecte publique du dashboard, ce dernier étant accessible uniquement via VPN WireGuard.

2026
CybersécuritéDevSecOps

Wazuh SIEM/XDR, surveillance de sécurité sur VPS personnel

Déploiement de Wazuh sur VPS ARM64 pour comprendre comment fonctionne un SIEM/XDR en conditions réelles. Collecte de logs, détection d'intrusion et premier regard sur l'audit de conformité.

2026