Aujourd'hui je vous parle des tags NFC Mifare Classic 1K. Cela ne vous dit rien ? alors ce post est pour vous !
C'est la carte la plus répandue : carte de chambre d'hôtel, machine à café, badge personnel d'entreprise, ticket de transport, parking, immeuble... Elle est partout !
A force de parcourir les datasheets, forums et site web j'y vois beaucoup plus clair et je vous propose ici une découverte de ces tags sans-fil : Gen1 (UID), Gen2 (CUID) et Gen3 (FUID).
Plusieurs noms pour la même carte
Mifare est une marque déposée de NXP Semiconductors, un fabricant de semi-conducteurs fondé en 1967 sous le nom de Motorola. Elle est issue d'une scission de la division semi-conducteurs de Philips (wikipedia).
NXP est donc un poids lourd du secteur et la société a fait l'acquisition des activités WiFi et Bluetooth de Marvell en Mai 2019, rien que ça.
La carte que l'on trouve un peu partout est la Mifare Classic 1k, elle fonctionne sur la fréquence 13,56 MHz (HF : High Frequency).
Ajoutons aussi les Mifare Classic Mini (320 octets) et les Mifare Ultralight (64 octets)
On trouve la Mifare Classic 1K sous d'autres noms :
- Mifare Classic 1024 bits
- Mifare Classic 1ko
- Mifare S50
- MF1 IC S50 (datasheet)
En réalité, on parle bien de la même carte/tag.
Comment fonctionne un tag NFC ?
La carte contient une puce connectée à une bobine qui fait office d'antenne et qui fait plusieurs tours pour former une carte à puce passive sans contact :
La transmission des données se fait sans contact et sans alimentation (pas de pile ni de batterie, le champ électromagnétique de proximité suffit pour alimenter la puce).
Bien sûr quand je parle de carte ou de tag je parle de la même chose. L'un se présente sous forme de badge ou étiquette dont la forme peut varier, l'autre au format carte format bancaire dont voici une vue transparente :
Le plus connu des badges en france est le badge d'immeuble vigik (+infos).
Stockage des données (mémoire)
La carte embarque donc 1ko de stockage EEPROM, réparti dans 16 secteurs de 4 blocs de 16 octets : 16*4*16 = 1024 octets (donc 1ko).
Les secteurs sont numérotés de 0 à 15. Le premier bloc du secteur 0 est spécial car il contient l'identifiant du tag (manufacturer block). On l'appelle vulgairement le "block 0" car c'est là qu'est écrit le numéro de série du tag UID (Unique ID), normalement inscrit en usine et pouvant être écrit (normalement) une seule fois. Dans notre cas l'UID est sur 4 octets.
Chaque secteur contient 4 blocs de 16 octets, le dernier bloc s'appelle le sector trailer :
Il contient en hexa :
- octets 0-5 (vert clair) : une clé A
- octets 6-9 (orange) : conditions d'accès du secteur (ACs : access conditions)
- octets 10-15 (vert foncé) : une clé B
Je dis normalement car il existe des cartes qui permettent d'écrire et/ou réécrire ce numéro de série. On parle de carte chinoises et la transition est toute faite pour parler des générations de tag.
Info : les blocs peuvent contenir des données brutes ou êtres considérés comme des value blocks. Dans ce cas les données sont organisées dans un format spécifique avec un contrôle CRC, mais je ne rentre pas dans le détail ici.
NFC ou RFID : quelles différences ?
Le NFC concerne uniquement le High Frequency (HF) à 13,56 MHz.
NFC apporte des fonctionnalités supplémentaires à la norme RFID, comme l'échange de données entre 2 smartphones collés ou encore le paiement sans contact avec Google Pay par exemple.
NFC et RFID diffèrent dans le mode de stockage des données. Cela veut dire qu'un tag vierge qui n'est pas NFC peut le devenir si on utilise le format NDEF (NFC Data Exchange Format). Je ne rentre pas plus dans le détail, je tire ces infos d'un numéro du magazine Open Silicium.
Côté smartphone il faut disposer d'une puce Broadcom pour pouvoir lire et écrire des tags Mifare Classic Tool (MCT). De mon côté j'utilise un OnePlus 6 et un Galaxy S3 (LineageOS) et ça marche au top.
➡️ Liste des smartphones compatibles / incompatibles
Les différentes générations de tag
Il existe 2 façons d'écrire sur un badge :
- avec un smartphone (équipé en NFC Broadcom)
- avec un lecteur USB avec libNFC, comme l'abordable ACR122U ou proxmark sous Kali
Gardez bien ça en tête car c'est déterminant pour utiliser la bonne génération de tag (src).
Voici les différents types de badges Mifare 1k que j'ai trouvé.
[GENERATION 1] UID Modifiable :
- UID modifiable plusieurs fois : oui
- Tous les blocs peuvent être écrits plusieurs fois, y compris le bloc 0
- Compatible avec un lecteur USB et libNFC : oui
- Compatible avec MCT : oui, excepté le bloc 0
- Backdoor pour réécrire sans tenir compte des ACs (magic commands) : oui (Gen 1a)
- Détectable comme copie : oui, à cause des commandes magiques
[GENERATION 2] CUID :
- Tous les blocs peuvent être écrits plusieurs fois, y compris le bloc 0
- Compatible avec un lecteur USB et libNFC : oui
- Backdoor pour réécrire sans tenir compte des ACs (magic commands) : non
- Détectable comme copie : difficilement (ne répond pas aux commandes magiques)
- Particularité : mort subite si écriture d'un bloc 0 invalide (voir procédure XOR > calculateur)
[GENERATION 3] FUID :
Notez que la génération 3 est en réalité un GEN2 FUID. Mais pour éviter la confusion je l'appelle GEN3.
- Le block 0 peut être écrit une seule fois
- Tous les blocs peuvent être écrits plusieurs fois, sauf le bloc 0
- Particularité : protection contre la mort subite si écriture d'un bloc 0 invalide
- Backdoor pour réécrire sans tenir compte des ACs (magic commands) : non
- Détectable comme copie : très difficilement (ne répond pas aux commandes magiques)
Sécurité
Les cartes MIFARE dites Classic sont protégées par l'algorithme de chiffrement propriétaire CRYPTO1. La connaissance des clés de chiffrement (A et B) est nécessaire pour lire ou écrire des données sur la carte MIFARE.
Le problème c'est qu'un chercheur en sécurité a trouvé des faiblesses dans Crypto1... qui font qu'il suffit de trouver une des deux clés par brutforce avec mfoc/mfcuk pour avoir l'autre (voir aussi BlackHat).
-
- MFOC : MiFare Offline Cracker (nested attack)
- MFCUK : MiFare Classic Universal toolKit (DarkSide Key Recovery Tool)
Là encore je ne rentre pas dans le détail de la sécurité, vous trouverez de nombreuses ressources sur le web. La faisabilité dépend également de la qualité du lecteur NFC, si un ACR122U n'est pas cher il n'est pas non plus ultra fiable par rapport à un proxmark3. Mais ce n'est pas le même prix !
Quoi qu'il en soit, un système uniquement basé sur la lecture du bloc 0, l'identifiant du tag, est une hérésie ! Car cette partie se copie bien trop facilement avec des tags chinois. Malheureusement ce système de badge est encore largement utilisé dans les entreprises 👏.
Aussi, les clés A et B des fabricants circulent très largement sur le web. C'est aussi le cas de MCT (Android) qui embarque extended-std.keys. Cela lui permet de tester les clés les une après les autres pour lire le contenu d'une carte/tag.
Particularité à MCT 📱
Pour écrire sur un tag vierge avec Mifare Classic Tool il suffit d'utiliser std.keys qui contient les clés de base, généralement c'est 12 xF (FFFFFFFFFFFF).
Avant tout il faut toujours aller dans Show Options et cocher "use these Access Conditions for all sectors : 08778F". Sans ça vous allez écrire des ACs qui vous empêcheront de réécrire certains blocs lors du restore d'un dump existant.
Ensuite je vous déconseille d'écrire tous les secteurs d'un coup si vous avez besoin d'écraser le manufacturer block :
- écrire d'abord le secteur 0 (en cochant les 2 options dans show options)
- écrire le reste des secteurs (en cochant uniquement use these Access Conditions for all sectors : 08778F)
Relire ensuite le dump pour vérifier qu'il correspond, excepté les ACs qui vont naturellement différer.
➡️ note : vous pouvez aussi utiliser les ACs FF078069 au lieu de 08778F (comprendre les ACs).
Conclusion
J'espère que vous y voyez plus clair dans tout ça. Je vous incite à pratiquer pour bien comprendre les tenants et aboutissants de tout ça.
Comme moi vous allez forcément flinguer des tags au début, alors n'hésitez pas à en acheter plusieurs.
Voici quelques liens de tags que j'ai testé qui supportent l'écriture du bloc 0 :
- Génération 1 : Tags Aliexpress, Tags eBay, Cartes eBay
- Génération 2 : Tags Amazon FR, Tags Aliexpress, Cartes Aliexpress
- Génération 3 : désolé jamais testé
MàJ 25/11/2019 : Je vous propose également un script bash que j'ai écrit qui permet de convertir un dump MCT pour l'écrire avec un lecteur USB (libNFC) et aussi je vous expliquerai comment écrire ces tags GEN1 et GEN2, restaurer un dump, etc :
J'espère que ce post vous a plu, la rédaction m'a pris beaucoup de temps 🙂
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
37 commentaires
Super intéressant et bien résumé quand on ne connait pas le domaine.
Donc en gros toute solution sur ces badges est duplicable vigik, serrure entreprise ... En gros les clefs normales le sont aussi et ça coûte moins cher ...
@Wallace: merci! Il existe des cartes qui sont (à l'heure actuelle) considérées comme sécurisée, c'est le cas des DESFire par exemple. Certains tags sont écrits avec un CRC présent dans la carte et dans la centrale, si désynchro il y a tous les badges se présentant avec cet ID seront refusés. Bref, il y a plein de façons de faire de la sécurité, mais de là à dire que c'est le cas partout, clairement pas. Concernant les Vigik il n'existe pas de "pass magique" car pas de clé maître, laposte (et d'autres que l'on appelle badge prestataire) utilisent des badges qui ont une durée de validité de quelques dizaines d'heures. Les facteurs doivent donc "recharger" leur badge avec de partir en tournée pour qu'il soit reconnu (en face c'est un serveur web qui répond et tout est basé sur l'horodatage donc pas modifiable). Que ce soit facile ou pas, ça reste illégal de cloner une carte si tu n'y es pas explicitement autorisé. Cloner le badge d'entrée de ton immeuble parce que le syndic te demande 50€, oui tu peux, mais cloner la carte de ton entreprise... non 🙂
Petite coquille dans l’article, tu évoques 12.56 MHz, c’est bien 13.56
D’ailleurs, fait intéressant, 433.92 (fréquence largement répandue dans le contrôle RF) / 32 = 13.56
@pyrou : coquille corrigée merci! Effectivement je n'avais pas non plus fait attention à cette histoire de multiple, intéressant !
Très intéressant et bien documenté. Bravo.
Le MiFare classic a encore de beaux jours devant lui. Très bon marché est simple a utiliser. Très efficace pour de l'identification de bas niveau, sans sécurité, ni enjeu. Sinon, il faudra commencer a penser au Desfire.
Super intéressant Merci !!
Sans oublier que ce mode de communication est facilement piratable pour un hacker équipé. Donc attention à la carte bleue. Il existe des étuis de protections pour les cartes et objets aux données sensibles.
@J-Claude: il ne faut non plus dire aux gens que tout est piratable. Il est bien plus probable que quelqu'un relève vos numéros de carte en se frottant à vous (transport en commun), excepté le CVV mais c'est vrai que certains sites étrangers ne le demandent pas, que quelqu'un intercepte la communication ou propose un fake terminal pour encaisser de l'argent. Je ne dis pas que c'est impossible, je parle simplement de probabilité. Personnellement j'ai désactivé le sans contact via ma banque en ligne (boursorama), ce qui fait qu'à chaque demande les transactions sont refusées. Pour le reste je ne sors pas la CB de mon porte-feuille 😉
Salut Xhark !
Et merci beaucoup pour ce billet très intéressant. J'ai perdu le badge de chez moi cette semaine et quand j'ai vu que le cordonnier me demandait 50 balles pour m'en faire une copie je me suis un peu intéressé au sujet 😉
J'ai une question qui me vient à l'esprit après avoir lu ton post : après avoir récupéré le contenu d'un tag avec MCT, est-ce qu'on peut utiliser son téléphone en guise de badge ? en théorie rien ne l'empêche si ?
@Jiben: Ce n'est pas possible, ce n'est pas simplement un identifiant mais des blocs mémoires. Il existe des émulateurs de carte (proxmark 3 chameleon) mais impossible avec un téléphone à ma connaissance. Change de cordonnier, le tarif correct dans le commerce est de moins de 15€ pour dupliquer un badge.
Bravo Xhark, très clair et pédagogique sur le sujet, et je sais de quoi je parle 😉
Personnellement je privilégie désormais les badges de generation2... Que je manipule avec une version modifiée de libnfc et un lecteur ACR122U. C'est ce que je trouve de plus efficace. MCT c'est génial pour une copie d'un badge dont les clés sont connues, mais dès que l'on souhaite se frotter à plus exotique, le lecteur USB devient indispensable.
Enfin, j'essaie de proposer tout le nécessaire à ces expériences sur La Boutique de l'Atelier du Geek mais je ne suis pas contre un avis de ta part sur la gamme 🙂
Bonjour,
Je suis gérante d'une laverie et je souhaiterai mettre en place un systeme de forfait avec cartes magnétiques mais l'entreprise de ma borne de paiement me demande une fortune pour la licence et 50 cartes (presque 800€TTC!!!)
Est-il possible en ne prenant que leur licence d'encoder des cartes moi meme? quel modèle de desfire me conseilleriez vous?
Merci d'avance our vos réponses!
Bonjour. Si je ne dis pas de bêtise le secteur 0 des badges de 2° génération ne peut être écrit via MCT qu'une seule fois. Si l'on doit le modifier à nouveau, on ne peut le faire que sous linux et sa librairie adéquate.
Pour ma part, un badge de 2° génération était indispensable pour une copie de badge Urmet. Je n'ai pas encore cherché à modifier ultérieurement son UID avec Linux, puis à remettre le bon UID, pour voir si ma copie fonctionnait toujours.
Dans le doute, je me contente de l'écrire dès le début avec MCT avec le bon UID, et je ne touche plus à rien...
Peut-être que l'article pourrait être complété pour préciser cet aspect ?
Cordialement
@Luc: aucun souci pour écrire plusieurs fois le secteur zéro sur du génération 2 avec MCT. Peut-être as-tu du génération 3 ?
Bonjour,
Qu'en est il aujourd'hui de :
" Prochainement je vous publierai un script bash que j'ai écrit qui permet de convertir un dump MCT pour l'écrire avec un lecteur USB (libNFC) et aussi je vous expliquerai comment écrire ces tags GEN1 et GEN2, restaurer un dump, etc. "
@mickey: et voici comme promis : http://blogmotion.fr/internet/securite/mct2dmp-convertir-dump-hexa-binaire-18125
Bonjour, j'ai fait un dump avec de mon badge vigik avec mifare classic tool . J'ai commandé des tags pastilles pour les collés sur mon smartphone, problème ces tags sont au format mifare Ultralight. Peut t-on transformer dump mifare classic en mifare Ultralight ?
Ou une application Android pour faire cette manipulation.
J'ai utilise un Samsung Android 7 roote et application mifare classic tool et mifare++Ultralight
Merci pour votre aide
@Éric73: Non, impossible de convertir, ce ne sont pas les mêmes puces
Bonjour,
J'essaye de copier mon propre badge (UID double) dumpé avec succés grace aux "extended-keys") mais j'ai une erreur de BCC:
NFC reader: ACS / ACR122U PICC Interface opened
Found MIFARE Classic card:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): 8b ba 97 19
SAK (SEL_RES): 08
Guessing size: seems to be a 1024-byte card
Sent bits: 50 00 57 cd
Sent bits: 40 (7 bits)
Received bits: a (4 bits)
Sent bits: 43
Received bits: 0a
Writing 64 blocks |!
Error: incorrect BCC in MFD file!
Expecting BCC=FD
Je crains que mon badge vierge ne soit capable d'écrire l'UID double de 7 octets du badge original.
Y a t'il un moyen ?
Faut il acheter un autre type de badge vierge ?
Bonjour,
Je voudrais savoir si il était possible de lire plusieurs tags NFC dans une enveloppe par exemple avec un smartphone. Je ne cherche pas forcément à ce que tous les tags soient lus en même temps mais qu'une séquence de recherche puisse lire tous les tags.
Par avance, merci !
Alex
@redscreen: https://security.stackexchange.com/questions/213639/identifying-and-cloning-nfc-card-double-size-uid-type-mifare-plus-7-byte-2k-or
@AlexLou: Bonjour, non ce n'est pas possible, ce sera celui qui sera le plus proche qui répondra
Bonjour,
Est il possible de dupliquer un badge Vigik Hexact sur un autre badge Vigik Hexact vierge via MCT?
Merci de votre réponse
@James: non puisque l'identifiant n'est pas modifiable
Juste un bravo, un merci,et respect pour les heures de travail et surtout le partage qui en est fait. Bel esprit.
Bonne continuation
G
Bonjour et Bonne année 2022
...
Franchement un grand BRAVO !!
pour tes explications et ton partage
...
Je te souhaite un bel avenir
Boa noite sou do Brasil, comprei um cartão cuid gen2 ,clonei o cartão do ônibus fiz tudo correto tinha um valor pequeno para passagem na roleta,mas quando encostei no leitor ele diz cartão cidadão broqueado,será que esses leitores tem detecção de clones cuids no Brasil ,será que se eu tentar com o fuid dará certo?dizem que esses gen2 cuid fica com o bloco 0 aberto e não sei se existe algum comando para broquear ele pelo Proxmark3
bonsoir, pour le boulot on me demande de telecharger l’application nfc tools et de rapprocher mon téléphone portable de mon badge de mon travail afin que l'application puisse en lire les code.
Cependant mon téléphone me dit technologie nfc non pris en charge. comment doit je faire ? merci d'avance.
Bonjour j'ai copier ma première clé sur mct mais j'ai le secteur 12,13,14,15 presque vierge et quand je veux copier la nouvelle clé erreur secteur 0 ,12,13,14,15 comment régler ce problème si on peut merci.
Merci beaucoup pour cet article et tes réponses aux questions, tout aussi instructives.
Juste une petite coquille :
"...clair et je vous propose ici une découverte de ces tags sans-fil : Gen1 (UID), Gen2 (FUID) et Gen3 (CUID)."
Mais
"[GENERATION 2] CUID"
"[GENERATION 3] FUID"
C'est inversé !
CUID = changeable unique ID
FUID = first unique ID
😉
@Eddddd: coquille corrigée merci 🙂
Bonjour
J’essaye de cloner mon badge depuis hier sur mifare classic tools mais cela ne fonctionne pas. J’ai en fait plusieurs différents ACS (4) sur mon badge d’origine et cela ne se retranscrit pas sur la copie: l’ACS du secteur 0 se repete sur tous les autres secteurs (ce qui n’est pas le cas sur mon badge d’origine).
Est ce lié au fait que ce badge ouvre plusieurs porte de mon immeuble? Comment faire svp?
pour completer les infos :
Gen2 pour les vigik : ouverture uniquement des hall d'entrée, les lecteurs d'entrée de résidence type portail détecte que l'UID est modifiable et rejette l'accès
Gen3 pour les vigik : ouverture des hall et des portails
En tout cas c'est la cas de ma résidence, impossible d'avoir l'accès sur le portail malgré un dump exact, je viens de faire le test avec des GEN3 (aliexpress à 5€ les 5) et ça fonctionne, par contre ... l'uid n'étant modifiable qu'une seule fois il ne faut pas se planter lors de la copie du dump. J'en ai tué 2. Bizarrement sous Linux je n'ai jamais réussi à faire la copie j'ai du passer par MCT sous windows (qui n'est plus dispo sur github !)
@Didou038: Il n'est pas possible de généraliser, le type de lecteur peut être présent sur un portail, un hall, etc. Ce que tu as pu constater toi dépend probablement de l'installateur.
Si tu parles de MWT (Mifare Windows Tool) je te confirme que son auteur a (malheureusement) arrêté le projet
Hello Mr Xhark.
Je viens de tomber sur votre article qui est très bien écrit.
Pour ma part, via bruteforce, j'ai récupéré la clé A.
Le Crypto1 étant cassé, on peux retrouver la clé B.
Sachant que des fois clé A=B
Est il possible sans outils spécifiques ou sans Linux de calculer la clé B?
Merci à vous
@Mimo: Bonjour, le brutforce est inutile dans 99% des cas. Il est plus rapide de tester les clés publiques les plus utilisées pour lire un tag (je ne donnerai pas de lien ici, cela se trouve très facilement)
Un grand merci à toi pour ton post (et pour ton blog). Je suis tombé sur ton article part hasard, alors que je metrisais déjà bien le sujet et j'ai été épaté par la cohérence et la simplicité (complète pour autant) de ton article par rapport à un tas d'autres auteurs qui ont également écrit sur le même sujet.
Bref, je ne te connaissais pas encore, c'est une belle découverte !
Continus comme ça !
@Liberty0x0d: merci pour ton commentaire et tes encouragements, content de voir que cette vulgarisation est digeste!