Dupliquer le contenu d’une puce RFID (Mifare Classic)

Cet article fait partie de la série Expériences NFC / RFID (4 articles au total)

Vous êtes de plus en plus nombreux à me poser des questions sur les puces RFID. Pour ceux qui ne connaissent pas ce sigle, sachez que c’est cette techno qui se cache bien souvent derrière vos carte d’accès à votre parking/immeuble/local vélo etc… Depuis quelques années, de plus en plus de systèmes « à clés » sont remplacés par des cartes/badges RFID, sous prétexte de fournir une plus grande sécurité. Mais du coup, vous êtes vous déjà renseignés s’il était possible de se faire un double ?

Pourquoi vouloir faire une copie ?

Peut-être que comme moi, vous n’avez qu’une carte d’accès à votre parking alors que vous êtes deux à utiliser une même voiture. Et si auparavant pour obtenir un double de clé il suffisait de se déplacer chez le cordonnier du quartier, pour une carte RFID c’est une autre paire de manches ! Dans mon cas la réponse du gestionnaire du parking est simple : impossible de me fournir un double, le seul moyen d’avoir une deuxième carte est de louer une place de parking supplémentaire ! Qu’à cela ne tienne, si on ne peut pas me fournir de double, je peux peut-être m’en faire un moi-même ?

Il y a RFID et RFID

Des familles de puces RFID, il y en a quelques unes. Chacune a ses propres caractéristiques et sa fréquence de fonctionnement. Dans mon cas, la puce cachée dans ma carte de parking est une puce Mifare Classic 1K. Un type de puce très courant. En terme de caractéristiques, celle-ci fonctionne a une fréquence de 13.56Mhz, peut contenir jusqu’à 1kilo-octet de données et est protégée par plusieurs clés de chiffrement pour justement empêcher de lire tout le contenu de celle-ci (et donc d’en faire une copie).

Mifare Classic 1K et sécurité

Là où les choses deviennent intéressantes c’est qu’en 2007/2008/2009, plusieurs chercheurs européens ont mis en évidence des vulnérabilités sur la méthode de sécurisation des puces Mifare Classic et il n’aura pas fallu attendre longtemps pour que des outils exploitant ces faiblesses voient le jour. C’est le cas de toute une suite d’outils que j’aime bien et dont je vais vous parler dans cet article : les NFC-Tools.

Notez que les techniques mises en œuvre dans cet article ne sont pas les plus efficaces : cela prendra une dizaine de minutes sur un PC standard, là où les techniques les plus avancées peuvent récupérer le contenu d’une carte complète instantanément.

Dupliquer le contenu d’une puce Mifare Classic 1K

La liste des courses

Pas d’inquiétudes ici, la liste est courte ! Pour dupliquer le contenu de la puce (nos fameux 1 kilo-octets de données) on va avoir besoin d’un PC sous Linux et de 2 éléments qu’il faudra bien choisir :

    • un lecteur RFID compatible avec les NFC Tools
  • une puce RFID vierge (du type Mifare 1K)

Pour le lecteur RFID, il n’y a pas 50 modèles de lecteurs compatibles avec les nfc-tools, et je vous avoue que j’ai un peu galéré à dénicher le mien ! J’en ai 2 différents, qui marchent aussi bien l’un que l’autre : un Identive SCL3711 et un ACR122U. Si vous souhaitez en acheter un, cliquez sur sa photo ci-dessous.

identive-scm-scl3711
Acheter le lecteur RFID USB Identive SCL3711 sur Amazon
Acheter le lecteur ACR122U sur la boutique de l’Atelier du Geek

Pour la puce RFID vierge, il faut très logiquement en choisir une du même type que celle à dupliquer, en l’occurrence nous avons donc besoin du puce Mifare Classic 1K vierge. La forme importe peu, qu’il s’agisse d’une carte, d’un badge ou d’un autocollant, tant que la puce est du bon type. Choisissez le plus pratique pour vous !

Pour la suite de ce tuto, j’utilise une distribution Linux dérivée de Debian, Linux Mint. Cela devrait donc fonctionner sur toutes les distributions avec la même base (Ubuntu, Linux Mint, Kali, Debian…).

Installation des outils logiciels

Pour jouer avec les puces RFID et notamment les puces Mifare, on va avoir besoin de 2 outils du projet NFC-Tools : libnfc et mfoc. Je n’ai pas trouvé de paquets « prêt à l’emploi » et il faut donc récupérer les sources de ces outils pour les compiler avant de les installer. Pour cela, il va falloir jouer de la ligne de commande :

Installation de libnfc

sudo apt-get install libusb-dev
wget http://libnfc.googlecode.com/files/libnfc-1.7.0.tar.bz2
tar -xjvf libnfc-1.7.0.tar.bz2
cd libnfc-1.7.0/
./configure --with-drivers=all
make
sudo make install

Installation de mfoc

wget https://github.com/nfc-tools/mfoc/archive/mfoc-0.10.7.tar.gz
unzip mfoc-0.10.7.zip
cd mfoc-0.10.7
./configure LDFLAGS=-L/usr/local/lib PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
make
make install

Maintenant que nos outils logiciels sont installés, on branche le lecteur SCL3711, on pose notre carte RFID dessus et on entre la commande suivante :

nfc-list

Et si tout est correctement installé, votre console devrait afficher quelque chose de ce genre là :

NFC device: SCM Micro / SCL3711-NFC&RW opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 03
UID (NFCID1): 21 ad 3b 1a
SAK (SEL_RES): 09

Ok, maintenant on est prêt à passer aux choses sérieuses.

Copie des données de la puce mifare : la cinématique

Pour faire une copie des données de la puce mifare, il va falloir procéder en 3 étapes :

    1. Trouver les clés de chiffrement de la puce vierge
    1. Sauvegarder le contenu de la puce mifare dans un fichier
  1. Transférer le contenu du fichier de sauvegarde sur la puce vierge

L’opération prend environ une quinzaine de minutes et demandera là aussi de saisir des commandes dans le terminal.

Etape 1/3 : Trouver les clés de chiffrement de la puce vierge

Placer la puce vierge sur votre lecteur RFID et entrez la commande suivante :

mfoc -P 500 -O carte-vierge.dmp

Le contenu , et les clés de chiffrement de votre carte vierge est désormais sauvegardé dans le fichier carte-vierge.dmp

Etape 2/3 : Sauvegarder le contenu de la puce mifare à copier dans un fichier

Placer la puce mifare à copier sur votre lecteur RFID et entrez la commande suivante :

mfoc -P 500 -O carte-originale.dmp

Le contenu de la carte originale est sauvegardé dans le fichier carte-originale.dmp. Je vous conseille de garder de côté ce fichier : en cas de perte de la carte originale, il vous permettra d’en créer de nouvelle.

Etape 3/3 : Transférer le contenu du fichier de sauvegarde sur la puce vierge

A nouveau, placez la puce RFID vierge sur votre lecteur RFID et entrez la commande suivante :

nfc-mfclassic w a carte-originale.dmp carte-vierge.dmp

Un message devrait vous informer du succès de l’opération. Et voilà, vous avez désormais 2 puces RFID avec le même contenu !

Ces cartes sont-elles vraiment identiques ?

Hélas pas vraiment ! Si dans mon cas je peux désormais accéder à ma place de parking avec mon badge original ou mon badge copié, il n’en va pas forcément de même avec tous les lecteurs d’accès RFID. La faute à l’identifiant unique de la puce (dans le jargon on appelle ça l’UID pour Unique IDentifier). Cet identifiant est gravé en usine et chaque puce possède un UID unique au monde. Si produire un clone parfait de votre carte vous intéresse n’ayez crainte, il existe des solutions ! J’en parlerai dans un prochain article ;)