RFID – Le clone parfait

Quand j’ai écrit, il y a 2 ans, l’article qui expliquait comment dupliquer le contenu d’une puce RFID, je n’imaginais pas qu’il susciterait un tel engouement. Pourtant, encore aujourd’hui c’est un des articles les plus consultés du site et c’est également un de ceux pour lequel je reçois de plus en plus de questions. Aussi, je me suis dit qu’il était temps d’écrire cette seconde partie que tant attendent : comment réaliser un clone parfait et complet d’une puce rfid.

On travaille toujours sur la famille de tag Mifare

Même s’il en existe différentes familles, les puces (ou tags) les plus répandues sont de type « Mifare Classic ». Cela tombe bien, c’est justement le type de tag sur lesquels nous allons travailler aujourd’hui. Personnellement je les ai rencontrés sur tout un tas d’applications différentes : badge de porte d’immeuble, carte d’accès à un parking, carte d’accès à une chambre d’hôtel, porte monnaie électronique pour la machine à café, ou encore carte de consommation de boissons dans certains bars et boîtes de nuit.

[Photos des différents types de tags]

Pourquoi écrire un nouvel article sur la copie de tag RFID ?

Si vous êtes familier du 1er article que j’ai écrit sur le sujet, vous pouvez vous demander ce que vous allez apprendre de plus ici, voici les 2 raisons principales qui vous motiveront :

  • Si dans le 1er article on se contentait de copier les données d’un tag RFID à l’autre, aujourd’hui on va voir comment modifier l’identifiant du TAG (le fameux UID ou Unique ID) qui est gravé en usine, non modifiable et inviolable… enfin presque
  • Dans le premier article, il fallait installer linux sur une machine, avant d’installer ensuite les outils de manipulation des tags RFID. Une manoeuvre un peu compliquée pour les plus novices. Aujourd’hui je vous montre comment créer en 3 clics une clé USB sur laquelle vous pourrez démarrer votre ordinateur. Vous arriverez ainsi sur un bureau temporaire contenant tous les outils qui vous seront nécessaires, sans que cela n’altère votre machine.

C’est quoi cette histoire d’UID ?

Les tags RFID sont généralement composés de 2 zones : une zone de stockage de données, généralement ré-inscriptible, et une zone de stockage de l’identifiant du tag. Le fameux UID. L’UID est un identifiant unique au monde (il n’existe donc pas 2 tags avec le même UID). Il est gravé en usine au moment de la fabrication du tag et se trouve sur une partie du tag qui n’est pas ré-inscriptible. On ne peut donc pas le modifier.

A titre d’information, les tags Mifare Classic 1K (les plus répandus) contiennent 64 blocs de données. L’UID est stockée sur le premier bloc (souvent appelé dans la litterature « block 0 ») et les 63 suivants sont dédiés au stockage de données.

Dans ce cas comment dupliquer un UID ?

Si on ne peut pas modifier l’UID stocké sur ce fameux bloc 0, comment avoir 2 cartes avec le même identifiant ? C’est là que nos amis les chinois arrivent à la rescousse :)

Depuis quelques années, on a vu arriver sur le marché des tags mifare avec une petite particularité : légèrement modifiés, ils possèdent un bloc 0 réinscriptible. On peut donc modifier l’UID sur ces tags (et uniquement ceux-là !). La première fois que j’ai réussi à mettre la main sur un tag de ce type, c’était en 2014, et j’estimais avoir fait une bonne affaire en dépensant environ 20 dollars pour ce tag. En 2017, les prix ont été divisés par 10 et mettent donc ce type de tag à la portée de tous les curieux !

Où trouver ces tags chinois avec UID modifiable ?

Évidemment, ces tags sont moins évidents à dénicher mais une petite recherche sur ebay devrait vous permettre de trouver votre bonheur. Voici quelques exemples : par lot de 5 (depuis la Chine), par lot de 10 (depuis la Chine), par lot de 10 (depuis la France).

Un mot sur sur la norme VIGIK

VIGIK : ce nom peut sembler barbare, mais c’est la norme créée par La Poste pour standardiser l’accès aux immeubles. On lit donc très souvent le nom de cette norme sur les interphones. C’est donc VIGIK qui permet à votre facteur, mais aussi aux pompiers, policiers et autres services d’urgence d’ouvrir n’importe quelle porte d’immeuble avec un badge unique. Si je vous en parle aujourd’hui c’est que je reçois beaucoup de questions à ce sujet, car nombreuses sont les personnes qui se rêvent la possession d’un tel badge (et oui, ces badges ne sont ni plus ni moins que des tags RFID Mifare).

Malheureusement, ce n’est pas si simple. S’il est tout à fait possible de dupliquer le badge de votre ami le facteur, la norme est faite de telle sorte que pour que le badge reste valide il faut qu’il soit « rechargé » toutes les 48h. En d’autre terme, si par je ne sais quel hasard, vous arriviez à copier un de ces passes VIGIK, il ne fonctionnerait que pendant quelques heures avant de devenir complètement inutile.

Est-ce que ça veut dire que je ne peux pas dupliquer mon badge d’accès d’immeuble si je lis « VIGIK » sur l’interphone ?

Puisque ça ne fonctionne pas pour le badge du facteur, on pourrait se dire que ça ne fonctionnera pas davantage pour les résidents… Mais en fait si ça fonctionne. Les badges résidents n’ont pas besoin d’être rechargés comme ceux des facteurs, par conséquent si vous en dupliquez un cela fonctionnera et vous donnera les mêmes accès que le badge original.

Motivés à tenter l’expérience ? Il est temps de passer aux choses sérieuses :)

Cloner un tag mifare

Matériel nécessaire

Etape 1 : Création de la clé USB de démarrage

Pour ne pas avoir à installer de Linux sur le disque dur, il faut créer une clé USB de démarrage. Le principe est simple : lors de son lancement, le PC démarrera le système d’exploitation présent sur la clé USB comme s’il s’agissait de son propre disque dur. Cela nous permettra d’obtenir un système linux complet pour notre session de travail sur les tags RFID. A l’extinction de l’ordinateur, il suffira de retirer cette clé USB pour que la machine retrouve son fonctionnement normal.

J’ai choisi de travailler avec la distribution linux « Kali ». Cette distribution, orientée sécurité, contient de nombreux outils dont les fameux « NFC Tools » qui nous seront utiles aujourd’hui. Il faut commencer par télécharger kali (version 64 bits full) ici https://www.kali.org/downloads/. Ce tuto a été réalisé avec la version 2017.1 qui est sortie voilà quelques jours au moment où j’écris ces lignes.

Une fois le fichier ISO récupéré, il va falloir le transférer sur la clé. Pour cela j’utilise comme à mon habitude le logiciel RUFUS qui est très simple. Une fois RUFUS téléchargé et installé, il suffit de sélectionner la clé USB sur laquelle installer Kali, et de lui indiquer l’endroit où votre fichier ISO de kali est situé. Chez moi cela donne quelque chose comme ça :

L’écran de RUFUS, prêt à créer la clé USB de démarrage avec Kali.

Cliquez ensuite sur le bouton Démarrer pour lancer l’opération.

Etape 2 : Lancement du système et préparation de l’environnement

Une fois votre clé préparée, éteignez l’ordinateur que vous souhaitez utiliser, branchez la clé et démarrez sur la clé USB. Attention pour sélectionner un périphérique de démarrage, sur certains ordinateur il faut appuyer sur une touche particulière. Sur le mien par exemple, il s’agit de la touche Echap, mais j’ai déjà croisé des ordinateurs où il fallait utiliser la touche F2F8, F10, F11 ou Suppr par exemple…

Après quelques instants nécessaires au chargement du système, vous devriez atterrir sur un bureau vierge. On y est presque.

Le bureau de Kali au démarrage

Par défaut, le clavier est configuré en QWERTY, ce qui n’est pas très pratique si votre ordinateur est équipé comme le mien d’un clavier AZERTY. Pour rétablir cela, il suffit de lancer le terminal via l’icône suivante :

L’icône du terminal se trouve sur la barre de gauche.

Une fenêtre d’invite de commande va s’ouvrir, et il faudra saisir à l’intérieur la commande suivante : setxkbmap fr (ce qui nécessitera sur votre clavier d’appuyer sur les touches setxb,qp fr). Cette fenêtre de terminal va nous servir dans toutes les manipulations suivantes, vous pouvez donc la garder ouverte.

La commande doit être tapée dans le terminal, ce sera la même chose pour toutes les autres commandes de ce tuto.

Maintenant que le clavier est en français, il va falloir configurer le système pour que les NFC Tools puissent interagir correctement avec votre lecteur RFID. Pour ce faire, commencez par branchez votre lecteur RFID (si ça n’est pas déjà fait). Kali va alors charger automatiquement en arrière plan des modules qui vont perturber les NFC Tools. Pour décharger ces modules, toujours dans votre fenêtre du terminal, entrez les commandes suivantes.

root@kali:~# modprobe -r pn533_usb
root@kali:~# modprobe -r pn533

On dsactive avec ces 2 commandes les modules standard de linux qui perturberaient les NFC Tools

L’environnement est désormais fin prêt pour notre petite expérience, on va pouvoir entrer dans le vif du sujet.

Etape 3 : Vérifier le bon fonctionnement du lecteur

Pour être sûr que le lecteur fonctionne correctement avec les NFC Tools, il suffit de lancer la commande suivante et de passer un tag RFID devant le lecteur.
sudo nfc-list
Si tout est bien configuré, le lecteur devrait vous afficher quelques informations sur le tag, dont le fameux UID, comme dans la capture ci-dessous. Ici mon UID, ce fameux numéro unique est le ea b5 8f 4b. Si vous essayez maintenant avec votre puce RFID chinoise, vous devriez obtenir un numéro d’UID différent, ce qui est tout à fait normal.

L’UID est visible avec la commande nfc-list, sur la ligne « UID ». Ici la puce à copier à un UID avec la valeur suivante : eab58f4b.

Si jamais vous obtenez un message d’erreur ou si rien ne s’affiche plusieurs possibilités :
Votre tag n’est pas un tag RFID compatible avec votre lecteur
Il y a eu une erreur lors de l’étape 2, recommencez donc à cette étape en vérifiant méticuleusement vos commandes.

Etape 4 : Extraire les clés de chiffrement de la puce RFID chinoise dans un fichier

Cette étape au nom un peu barbare ne devrait vous prendre que quelques secondes. Son principe ? Pour pouvoir écrire sur une puce RFID, il faut en posséder les clés de chiffrement. Une sorte de mot de passe qui permet d’encoder et de décoder les informations de la puce. Ces clés de chiffrements vont être stockées avec le contenu de la clé, dans un fichier. Ce fichier nous servira lors de l’étape finale pour copier les données de la puce originale sur la puce chinoise.

Pour lancer l’extraction des clés de chiffrement, placez votre puce sur le lecteur et saisissez dans un terminal la commande suivante.

root@kali:~# mfoc -P 500 -O carte-vierge.dmp

Les clés de chiffrement seront stockées dans le fichier « carte-vierge.dmp ».

La commande mfoc permet de copier le contenu d’une puce dans un fichier. Cette commande va notamment se charger de trouver les différentes clés de chiffrement qui empêchent normalement de lire le contenu de la puce RFID.

Etape 5 : Copiez le contenu de la puce RFID d’origine dans un fichier

Maintenant que les clés de chiffrement de la puce chinoise sont extraites, il va falloir faire de même avec la puce originale. Cette opération va copier les clés de chiffrement et le contenu de la puce d’origine dans un fichier. Ce fichier contiendra toutes les données de la puce, ainsi que son UID. C’est en quelques sorte une « sauvegarde » de votre puce RFID. N’hésitez pas à la conserver en lieu sûr, ainsi si vous perdez votre puce RFID vous pourrez en créer de nouvelles à l’identique à partir de ce fichier de sauvegarde.

Pour ce faire, placez la puce originale sur votre lecteur, et entrez la commande suivante : mfoc -P 500 -O carte-originale.dmp

Vous l’aurez surement compris, cette commande va créer un fichier « carte-originale.dmp » c’est le fameux fichier de sauvegarde de votre puce originale.

A nouveau on a recourt à la commande mfoc, toujours pour les mêmes raisons que dans l’étape précédente. Avec la puce originale c’est généralement plus long car les clés de chiffrements sont rarement celles d’origine, et la commande mfoc doit donc exploiter une faille des puces mifare pour réussir à obtenir les clés de chiffrement manquantes.

Etape 6 : Ecrire le contenu de la puce originale sur la puce chinoise

On arrive au bout ! Vous n’êtes plus qu’à une dernière commande de la victoire ! Maintenant que l’on possède une copie du contenu de la puce originale, ainsi que les clés de chiffrement de la puce chinoise, nous allons pouvoir transférer le contenu et l’UID de la puce originale sur la puce chinoise.

Pour se faire, et toujours dans le terminal, saisissez la commande suivante.
root@kali:~# nfc-mfclassic W a carte-originale.dmp carte-vierge.dmp

On touche au but avec la dernière commande du tuto. On va ici demander à la commande mfc-classic d’écrire le cntenu de la puce originale sur la puce chinoise vierge, UIS compris.

L’opération devrait prendre 1 grosse seconde avant d’aboutir sur un message de succès. Si vous êtes attentifs, vous remarquerez que la seule différence par rapport au précédent article est le fait que le « W » est écrit en capital. ça n’est pas une erreur, cela demande au lecteur de transférer le contenu de la puce ainsi que le bloc 0 qui contient l’UID. En cas de succès, un message devrait vous confirmer l’écriture de 64 secteurs sur 64 (dans le précédent article, on n’en copiait que 63 car il manquait le fameux bloc 0).

Vous pouvez vérifier le succès de l’opération en répétant l’étape 3 avec votre puce chinoise. Si tout a correctement fonctionné, la commande nfc-list appliquée à votre puce chinoise vous affichera un UID identique à celui de votre puce originale.

Et voilà, vous venez de contourner l’incontournable :)

En conclusion

Avec quelques dizaine d’euros de matériel et une poignée de minutes, vous aurez pu dupliquer à la perfection une puce RFID officielle. Aucun lecteur ne pourra faire la différence entre la copie et l’originale. Vous comprenez désormais que la sécurité des systèmes basés sur ce type de puce est toute relative. Comme d’habitude, vous êtes seuls responsables de l’usage que vous faites de ces connaissances. Si vous avez des questions, ou souhaitez tout simplement partager vos expériences sur le sujet, n’hésitez pas à vous exprimer dans les commentaires !

11 commentaires

  1. Très intéressant article, merci! Je vais tenter de me programmer un badge VIGIK supplémentaire pour entrer chez moi car curieusement j’ai un badge de moins que de clés.
    Y aurait il le moyen de faire la même chose directement sous Windows?

    Bravo pour ce blog que j’ai découvert récemment et que j’ai relu en quasi intégralité. J’ai appris beaucoup de chose sur la domotique. Merci!!

  2. Attention, gros problème après avoir suivi le tuto!
    Hier soir j’a dupliqué mon badge vigik sur un truc comme celui-là http://www.ebay.fr/itm/Uid-Changeable-Card-For-1K-Support-Libnfc-Cracker-Rfid-13-56Mhz-3-Pieces-/263088316758? avec le lecteur NFC ACR112U KKMOON.
    En apparence cela a marché à la perfection car le nouveau badge a ouvert hier soir les deux portes de l’immeuble.

    Or, aujourd’hui, ce badge ne fonctionne plus, et mon badge Vigik d’origine non plus.
    Ce n’est pas un problème avec la porte car un autre bagde Vigik que je n’avais pas copié fonctionne toujours.

    Je suis bien emm**** maintenant pour retrouver le fonctionnement de mon premier bagde.

    Il est découle que ce n’est pas vrai que l’on peut cloner parfaitement le badge. Il doit y avoir une sécurité dans le portier qui fait qu’il se rend compte que quelque chose s’est passé et il a probablement bloqué ce badge et son clone.

  3. Bonsoir Xanxi,
    Étrange mésaventure ! J’ai réalisé cette manipulation à plusieurs reprises pour différentes personnes et jamais je n’ai eu de témoignage de la sorte. Je reconnais que la coïncidence est grande. Es-tu sûr de ne pas avoir modifié ton badge d’origine ? Si tu as gardé une copie du fichier d’origine tu dois pouvoir comparer. Enfin est-ce que tu as des informations sur le modèle du lecteur de badge de ton immeuble ?

    Alexandre

  4. Bonjour Alex.

    Non a priori je n’ai pas commis d’erreur dans la procédure, et d’ailleurs les deux badges ont initialement fonctionné. Je n’ai en tous cas pas écrit sur le badge original. Les deux ont la même UID actuellement, qui est bien celle du badge d’origine.
    Je n’ai malheureusement pas gardé de copie des fichiers car j’ai utilisé la distribution en live usb.

    Le lecteur du portier et les badges d’origine sont des Comelit Immotec. Il s’agit d’un immeuble construit il y a 6 mois, avec peut être la dernière version de cet appareil, capable d’intégrer un niveau du sécurité supplémentaire.

    Je n’ose pas trop tenter avec un badge supplémentaire, mais je vais plutôt aller pleurer chez le syndic pour remplacer celui qui ne fonctionne plus.

  5. Bonjour,

    Au vu de la fragilité des cartes NFC, il se pourrait que celles qui ne fonctionnent plus aient été un peu trop pliés et ont donc leur bobine brisée. A vérifier donc.
    l’EEVBLOG à une vidéo sur le sujet, chercher l’entrée #539, RFID Tag Card Repair

  6. Salut! Alex,
    Très excellent ton tuto, j’apprecie la clarté des explication et ta façon d’être concis.
    Je ne l’ai pas encore testé sous kali (chose que je ferai très rapidement), mais je suis sûr que ça marche, la logique y est.

    Xanxi
    il y a bien un moyen de le faire sous windows, il te suffit d’avoir le logiciel Arduino.
    Arduino est une plate-forme électronique open-source basée sur un matériel et un logiciel faciles à utiliser.

    Plus d’info sur http://www.arduino.cc

    Merci

  7. Bonjour.
    Effectivement très bon article. J’ai déjà dupliqué mon badge d’immeuble mais je ne parviens pas à faire la même chose avec la carte de mon boulot. Lorsque je lance la commande « mfoc -P 500 -O carte-originale.dmp », j’ai un message d’erreur au terme des 500 tentatives. J’ai augmenté jusqu’à 10 000 mais ça ne fonctionne toujours pas. Quelqu’un aurait une idée de ce qu’il faudrait faire?
    Merci !

  8. Bonjour Alex,
    Grand merci pour votre travail! Je confirme que ma clé PN533 est bien reconnue (Digital Logic en Serbie, livrée en 10j en France pour 35 EUR avec 5 clés / badges vierges ISO 14443B).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *