BMW Série 3 – Je hack mon CIC

Mise en garde : ce que j’ai fait est de ma propre responsabilité et au delà de l’aspect légal de la chose, ce hack contourne un moyen de protection mis en place par BMW. Aussi je ne détaillerai pas les étapes du hack ni fournirai les outils utilisés. Il est inutile de me contacter et me demander ces outils ni même où les trouver. Je ne partage juste mon expérience sur le sujet.

Oulahlah, ça commence fort ! Ben ouais, je vais parler d’un hack que j’ai réalisé sur mon CIC mais je préfère annoncer la couleur tout de suite en préambule de cet article. Je précise par la même que je ne suis pas un génie et que je n’ai rien inventé ! J’ai simplement utilisé des outils existants glanés ici et .

Nous sommes donc toujours en Août 2018 et j’ai effectué la mise à jour I-Level E89x-18-07-520 de la voiture. Si tu as bien suivi, je t’ai indiqué être passé d’une version CIC v41 (CIC.C16) suite à la mise en place de la Combox à une version v60 (CIC.C1A), dernière version à jour sur l’I-Level cité ci-dessus.

Je t’ai également fait une confidence : dans cette version du CIC, l’activation de nouvelles fonctions nécessitent un code FSC, nous parlons ici de la fonction BMW Apps (009C). Et puis tu as vu aussi que l’on avait aussi un code FSC aussi pour la commande Vocale (0017).

Donc pour activer ces fonctions, j’ai 2 options : soit je file chez BMW et j’achète ces 2 options en retrofit, ce qui aura pour conséquence de mettre à jour les certificats dans mon FSC Repair Kit que je réutiliserait simplement avec ISTA-P pour activation, soit je n’achète pas ces options et je trouve un moyen détourné pour les hacktiver.

Moi, j’aime bien le challenge et comprendre la technique, alors on se lance dans la méthode Hack. Déjà, j’ai besoin de comprendre ce à quoi j’ai affaire.

Le FSC fonctionne sur le même principe que les certificats à clé publique/privée. C’est quelque chose de très similaire à ce que l’on retrouve quand on se connecte sur un site Internet Sécurisé. D’une manière très très simplifiée et vulgarisée voici comment cela fonctionne ci-dessous :

Côté Server, nous avons un certificat public CA et d’une clé privée CA Key. Grâce au couple CA/CA Key, le Server peut émettre un certificat Client Cert. Ce Client Cert est donc un élément qui peut être vérifié par CA. En effet, si quelqu’un possède CA (qui est public rappelons le) et reçoit Client Cert, il pourra vérifier que Client Cert a bien été émis par CA. Cependant tant que n’importe qui ne dispose pas de CA Key, il est impossible d’émettre un Client Cert au nom de CA. Côté Server donc on garde précieusement au chaud CA Key car c’est l’élément le plus critique du système. Si cette clé venait à être diffusée, n’importe qui en possession de CA et CA Key pourrait émettre un certificat Client Cert.

Hé bien le modèle FSC fonctionne sur ce même principe ! Nous avons d’un côté BMW qui est du côté Server et possède CA + CA Key et va émettre des certificats Client Cert. Le CA est l’information publique qui est codée en dur dans les équipements du véhicule (CIC, EPS et demain peut être d’autres) et il faut absolument envoyer un FSC (Client Cert donc si tu as suivi) qui a été émis par CA pour que le système le reconnaisse. Si on envoie un FSC émis par autre chose que CA, cela ne peut pas fonctionner !!! Et comme je t’ai dit plus haut que l’élément le plus critique est CA Key, tu imagines bien que c’est très bien protégé chez BMW ! A ce jour et à ma connaissance la CA Key n’a pas été récupérée / trouvée, ce qui signifie donc qu’il n’existe aucun moyen d’émettre un code FSC qui serait reconnu par la CA officielle de BMW hormis qu’en passant par eux !

Ça va ? Tu as compris le principe ? Bon il y a quand même une exception à ce schéma, c’est pour la mise à jour de la cartographie GPS. J’ouvre la parenthèse mise à jour de la cartographie maintenant :

En effet pour les mises à jour de cartes, BMW ne fournit pas de certificat FSC mais un code lorsque le client achète une nouvelle version de la carte. Ici nous sommes dans un modèle un peu différent de ce que j’ai expliqué ci-dessus. Nous avons un modèle découpé avec un FSC d’activation de carte (001B) et un code à entrer pour débloquer la mise à jour de la version de la carte (0028). Je ne rentrerai pas dans le détail ici mais en gros le lien entre 001B et 0028 a été cassé et il existe un générateur qui permet sur la base du FSC 001B de créer le code permettant de débloquer la mise à jour de carte 0028.

Petite parenthèse également, c’est aussi pour cette raison qu’il existe des codes à pas cher pour activer les cartes GPS sur Internet. Une fois la personne en présence du FSC Repair Kit et donc du fichier 001B, il est très facile de générer le code avec le générateur.

(image d’archive)

Je rajoute à la petite parenthèse au passage que certains vendent des codes FSC « Lifetime » ou « A vie ». Ce sont en fait des codes qui acceptent tous les index de mise à jour (versions) de cartographie. Rappelles toi mon code lors de la mise à jour précédente :

Ici j’ai un index de 0032 (0x32). Cela veut dire que le code FSC entré permet de valider toutes les versions de cartes existantes avant cet index 0x32. En gros si je repasse sur la cartographie d’origine, pas de nouveau code à entrer. Si par contre je mets un carte plus récente (par exemple 0x33), alors c’est cuit. Tu vois l’idée ?? Hé oui tu as compris, le Lifetime FSC est donc un code généré pour un index 0xFF et vu que nous avons la valeur maximum de cet index, ce code sera valide pour toutes les mises à jour de carte jusqu’à ce que BMW change la méthode d’authentification, mais je doute que ce soit pour demain ! Pour info j’ai généré un code 0xFF en 2018 sur pour installer ma cartographie et dès que je fais la mise à jour de la cartographie annuellement, je n’ai plus besoin d’entrer quelconque code !

La parenthèse carto étant faite, revenons à notre sujet principal. C’est bien beau d’avoir compris le fonctionnement du FSC mais comment on peut donc faire si on ne possède pas la clé privée (CA Key) de BMW ? Hé bien je t’ai donné une piste tout à l’heure, tu vois ? Non ? Toujours pas ? Je t’ai dit que lorsque l’on envoyait le FSC, celui-ci était vérifié par le certificat codé en dur (CA) dans l’équipement. Et si à tout hasard on pouvait remplacer ce CA dans notre CIC ?

Hé bien c’est tout là l’objet du hack du CIC. Quelqu’un a trouvé un moyen de pénétrer le CIC dans sa version CIC.C1A (v60) et faire en sorte que l’on puisse y mettre son propre CA (et ses propres FSC bien sûr mais l’import de FSC était déjà autorisé). Ainsi lorsque l’on code les différentes fonctions, la vérification est faite et devient conforme. Voici l’état FSC fourni par un petit logiciel avant le hack :

Ce qui va m’intéresser c’est la partie 009C et 0017 en plus des 0019 et 001B déjà activés mais pour lesquels je vais aussi devoir refaire les certificats vu que je fais changé le CA.

Le hack que je ne détaillerai pas ici va se produire en 3 étapes :

1# Créer une porte dérobée sur le CIC :

Le hacker à l’origine du hack a trouvé une faille sur le système qui va permettre à l’aide d’une clé USB introduite dans le CIC de créer une porte dérobée et de permettre l’écriture des nouveaux certificats. Tu imagines bien que le certificat (CA) qui permet de vérifier le FSC dont on a parlé tout à l’heure a été bien protégé sur le CIC mais ce hackeur a réussi à faire en sorte que l’on puisse rendre la zone mémoire éditable et donc remplacer ce certificat !

Une fois le hack réalisé, il faut que je prépare les nouveaux certificats.

2# Préparation des FSCs :

Pour préparer ce que l’on va envoyer dans le CIC à la place de l’existant il faut un peu de boulot. En effet tu te doutes bien que ces fameux FSC sont dépendants de plusieurs paramètres notamment : l’App ID (001B, 0017, etc…) mais également du numéro de série de la voiture en plus d’autres paramètres.

Je dois donc utiliser un petit logiciel écrit en Java qui va m’aider pour cela. Ce soft va me permettre de créer des templates. Chaque template va correspondre à l’App ID de fonction que je veux activer et au VIN de ma voiture (Vehicule Identication Number). En tout je créé donc 4 templates pour 001B, 0017, 0019 et 009C.

Une fois ces templates réalisés, j’utilise les CA et CA Key (pour reprendre mon exemple ci-dessus) fournis par l’outil et je génère mes propres FSC.

Voici un screenshot d’exemple de la création du FSC avec le numéro VIN personnalisé (et masqué bien entendu) pour 0017 :

3# Mise en place des FSC dans le CIC

Ici c’est presque le plus facile à faire. Une fois que les certificats ont été générés, il suffit de les exporter depuis l’outil directement dans le CIC tout comme les certificats racine et le tour est joué !

L’exemple ci-dessous montre l’envoi d’un FSC 0019 avec un numéro VIN personnalisé (et masqué bien entendu) :

Une fois que c’est fait, je vérifie de nouveau le statut de mes FSC et là c’est tout VERT pour 001B, 0017, 0019 et 009C.

Voilà qui conclus cet article lié au hacking de mon CIC. Enfin presque car il manque encore une dernière étape : c’est celle du codage ! En effet, appliquer le hack FSC permet simplement de rendre « légitime » le comportement du codage, par contre comme tu as tout bien suivi depuis le début, j’ai supprimé mes codes d’options (FA) et remis le production date à 09/09 lors de la précédente mise à jour avec ISTA-P. Il me faut de nouveau réappliquer les paramètres en rajoutant cette fois ci le code 620 en complément des autres afin d’activer la commande vocale ! Une fois le codage fait c’est un énorme succès et tout fonctionne parfaitement !

Je m’arrête ici pour cet article qui je l’espère t’aura bien plu ! Aller si je finis par une petite news « fraîche » de 03/2022 : moi qui pensait que la plateforme E89x n’allait plus avoir de mises à jour vu son grand âge, il se trouve que BMW a sorti une mise à jour ISTA-P 3.69 avec I-Level E89x-21-07-550 en 2021 ! Tu imagines biens que j’ai déjà jeté un oeil, et,  je sais d’avance que le CIC n’est pas mis à jour car le fichier le plus récent pour d’upgrade est toujours la version CIC.C1A  !! J’ai d’autres trucs en cours sur la titine en ce moment (qui feront probablement d’autres articles) mais j’ai hâte de pouvoir faire la mise à jour et voir ce qui change 😉 Assurément je n’aurais pas 14 ECUs à reprogrammer mais je suis curieux de voir ce qui va changer ! Je te tiens au courant bien sûr !!

Sur ce, je te fais la bise et te dis à la prochaine, bye !

P.S. Je suis sûr que tu as adoré mes liens postés plus haut 😉

Edit d’Avril 2022 : je n’aurai pas attendu bien longtemps pour tester, le nouvel I-Level E89X-21-07-550 n’apporte strictement rien pour mon modèle et les ECUs présents dans ma voiture, j’ai donc laissé tel quel, snif 🙁

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.