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 ! Heureusement il est un petit peu plus facile à trouver désormais voici son petit nom : Identive SCL3711. Si vous souhaitez l’acheter, cliquez sur sa photo ci-dessous.
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 http://mfoc.googlecode.com/files/mfoc-0.10.7.tar.bz2 tar -xjvf mfoc-0.10.7.tar.bz2 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 :
- Trouver les clés de chiffrement de la puce vierge
- Sauvegarder le contenu de la puce mifare dans un fichier
- 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 ;)