Carte RFID Mifare 1K

Attention, cet article n’a pas de vocation illégal. Il s’agit de comprendre le fonctionnement des cartes Mifare 1K.
Cette expérience nous servira dans le cadre de la création d’une ouverture de porte sécurisée par carte NFC.

Les cartes RFID Mifare 1K (13.56MHz) possèdent deux protections principales :

  • Le block 0 (zéro) est en lecture seule, seul le constructeur de la carte peut initialiser ce block.
  • Les données écrites sur les cartes sont encryptées.

Il existe cependant des solutions pour outrepasser ces protections et permettre de créer des copies exactes.
Vous pouvez cloner des cartes si vous disposez d’un lecteur/graveur de cartes tel que le Proxmark III.
Vous pouvez cloner des cartes avec un lecteur/graveur standard si vous utilisez des carte pour lesquelles l’UID peut être modifié (disposant d’une backdoor pour écrire sur le block 0), appelées plus communément « Cartes chinoises » car aucune loi ne restreint l’utilisation de ces cartes en Chine.

Dans cet article je détaillerais la procédure pour cloner une carte RFID Mifare 1k sous Linux en utilisant des « cartes chinoises ».

1. Achat d’une carte Mifare 1K Chinoise

La première étape consiste à se procurer une carte chinoise.

Rien de plus simple : posez la question a votre vendeur chinois habituel, il vous trouvera cela pour 15$ les 2.
Ces cartes disposent d’une backdoor physique permettant de modifier le contenu du block 0 (habituellement en lecture seule sur des cartes classiques).

2. Achat d’un lecteur de carte

Personnellement, j’ai opté pour un contrôleur NFC/RFID chez Adafruit. Pratique, joli, et il se marie très bien avec ma Raspberry Pi, il s’agit du PN532, comme ici (pour andré).

3. Environnement Linux

C’est que les choses se compliquent un peu..mais juste un peu.
Dans un premier temps, il faut libérer l’UART :

# vi /etc/inittab

Verifier que la ligne est bien commentée :

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

 Puis modifier le fichier /boot/cmdlines.txt afin de remplacer :

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 $

par

dwc_otg.lpm_enable=0 console=tty1 $

 Vous aurez besoin de la LIBNFC et de MFOC.

LIBNCF :
Récupérer le numéro de la dernière version ici.

Installer les pré-requis :

# sudo apt-get install libpcsclite-dev libusb-dev

 Récupérer les sources de la LIBNFC :

# wget http://libnfc.googlecode.com/files/libnfc-1.7.0-rc7.tar.gz
# tar -xvzf libnfc-1.7.0-rc7.tar.gz

 Copier le fichier de conf correspondant à votre contrôleur dans /etc :

# mkdir -p /etc/nfc/devices.d
# cp libnfc-1.7.0-rc7/contrib/libnfc/pn532_uart_on_rpi.conf.sample /etc/nfc/devices.d/pn532_uart_on_rpi.conf

 Configurer et compiler la lib :

#cd libnfc-1.7.0-rc7
# vi libnfc/buses/uart.c

C’est parti :

# ./configure --with-drivers=pn532_uart --sysconfdir=/etc
# make && make install
# sh -c "echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf"
# ldconfig

 Faites un test :

# nfc-list
nfc-list uses libnfc 1.7.0-rc7
NFC device: pn532_uart:/dev/ttyAMA0 opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00  04
UID (NFCID1): 9d  96  a4  23
SAK (SEL_RES): 08

 MFOC :
Récupérer le numéro de la dernière version ici.

Récupérer les sources de MFOC :

# wget http://mfoc.googlecode.com/files/mfoc-0.10.6.tar.gz
# tar -xvzf mfoc-0.10.6.tar.gz
# cd mfoc-0.10.5
# vi src/nfc-utils.c

Pour la version 0.10.5, remplacer à la ligne 121 :
str_nfc_target(&s, nt, verbose);
par
str_nfc_target(&s, &nt, verbose);

Configurer et compiler MFOC :

# ./configure
# make && make install

 Faire un test. Poser une carte sur le contrôleur :

# mfoc -O ma_carte.dmp

4. Dump/Cracking des cartes

Cette étape consiste à créer des « dump » des deux cartes. On dump la carte que l’ont veut copier (pour avoir la source) et on dump aussi la carte chinoise pour avoir ses clés.
Placez la carte chinoise sur votre lecteur :

# mfoc -P 500 -O carte-chinoise_vierge.dmp

 Placez la carte à copier sur votre lecteur :

 # mfoc -P 500 -O carte_Appart.dmp

5. Recopier le contenu

Nous allons maintenant copier le contenu de la carte sources sur la carte chinoise. Placez la carte chinoise votre lecteur :

# nfc-mfclassic w a carte_Appart.dmp carte-chinoise_vierge.dmp

 ou

# nfc-mfclassic w b carte_Appart.dmp carte-chinoise_vierge.dmp

6. Modification du numéro de série

La dernière étape est la plus importante. Elle consiste à modifier le numéro de série de la carte chinoise avec le numéro de série de la carte source.

Placez la carte à copier votre lecteur :

# nfc-list
nfc-list uses libnfc 1.7.0-rc7
NFC device: pn532_uart:/dev/ttyAMA0 opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00  04
UID (NFCID1): 36  d0  35  ce  
SAK (SEL_RES): 08

 

Mettre ce numéro de coté.

Placez la carte chinoise votre lecteur :
# nfc-mfsetuid
36d035ce

Vérifiez que le numéro de série de votre carte chinoise est identique à votre carte.

# nfc-list
Vous devriez avoir le meme numéro que la carte source.

A propos de Mehdi HAMIDA

Avec plus de 20 ans d’expérience dans la tech, je me suis spécialisé dans la gestion des données, le cloud (AWS, Snowflake) et l'architecture IT. Avant ça, j’étais expert technique et chef de projet sur des missions stratégiques. Je m'appelle Mehdi HAMIDA, et aujourd’hui, je partage simplement mes découvertes et connaissances à travers ce blog.

Lire aussi

Harry Potter : Wizards Unite

Le studio Niantic, qui a conçu Ingress et Pokémon Go (mais surtout Ingress), a annoncé …

5 commentaires

  1. Salut,

    Une fois que j’ai ecrit sur ma carte, je n’arrive plus à refaire un dump pour réecrire dessus.
    Tu pourrais me dire comment faire s’il te plait. Car j’ai l’impression qu’il ne trouve pas les cléf, à chaque tentative il reste sur distance 64…. il ne change jamais.

    Merci de ton aide

Laisser un commentaire

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