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
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 :
| Bus | Débit | Domaine | Calculateurs clés |
|---|---|---|---|
| CAN HS I/S | 500 kbit/s | Inter-systèmes | Moteur (1320), ESP (7800), Airbag |
| CAN LS CAR | 125 kbit/s | Carrosserie | Volant (CV00), Airbag (6570) |
| CAN LS CONF | 125 kbit/s | Confort | Porte 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 :
- Écoute passive avec MuxTrace
- Stimulation physique (clé, comodo, potentiomètre d'accélération…)
- Identification de l'ID dont la valeur change au moment de l'action
- Isolation de l'octet porteur du signal
- 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 :
| Affichage | Octet 0 | Loi |
|---|---|---|
| 1000 tr/min | 0x1E (30) | N = octet × 33,33 |
| 2000 tr/min | 0x3C (60) | |
| 3000 tr/min | 0x5A (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.
| Fonction | Octet 1 |
|---|---|
| Tout éteint | 0x01 |
| Feux de croisement | 0x03 |
| Feux de route | 0x07 |
| Clignotant droit | 0x06 |
| Clignotant gauche | 0x0A |
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);
}CLa 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.