Objectif : utilisation d'un Proxmark3 Easy à faible coût (clone aliexpress) pour manipuler (voire sniffer) des échanges avec une carte Mifare Desfire.
Configuration et installation de l'image et du client Proxmark3
...
| Bloc de code |
|---|
|
apt install make gcc g++ liblz4-dev libbz2-dev libssl-dev libreadline-dev gcc-arm-none-eabi |
...
| Bloc de code |
|---|
|
./pm3-flash-bootrom
./pm3-flash-fullimage |
Prise en main
On lance le client
On pose une carte (mifare desfire donc ici) sur le proxmark et on lance la commande
hf mfdes info
Cette commande lance un certain nombres d'apdus sur le tag qui permete de récupérer un certain nombre d'informations, alors même que nous n'avons pas donné de clef d'authentificaiton :
Si les commandes ci-dessous échouent alors même que le proxmark3 est bien monté (cf lsusb) arpès un certain temps de latence, il est possible que
- ce soit un problème de droits. : regarder le owner/group-owner du point de montage usb ; généralement il faut ajouter le groupe dialout à l'utilisateur utilisé
- le module cdc_acm ne soit pas chargé : vérifiez avec un 'lsmod | grep cdc_acm' et chargez le au besoin via un 'modprobe cdc_acm'
Prise en main
On lance le client
On pose une carte (mifare desfire donc ici) sur le proxmark et on lance la commande
| Bloc de code |
|---|
|
hf mfdes info |
Cette commande lance un certain nombres d'apdus sur le tag qui permettent de récupérer un certain nombre d'informations, alors même que nous n'avons pas donné de clef d'authentification :
| Bloc de code |
|---|
|
[=] ------- |
| Bloc de code |
|---|
|
[=] ------------------------------------ Tag Information ----------------------------------
[+] UID: 04 33 20 BA 3E 62 80
[+] Batch number: CE D9 98 61 30
[+] Production date: week 45 / 2018
[+] Product type: MIFARE DESFire native IC (physical card)
[=] --- Hardware Information
[=] raw: 04010112001805
[=] Vendor Id: NXP Semiconductors Germany
[=] Type: 0x01 ( DESFire )
[=] Subtype: 0x01
[=] Version: 12.0 ( DESFire EV2 )
[=] Storage size: 0x18 ( 4096 bytes )
[=] Protocol: 0x05 ( ISO 14443-2, 14443-3 )
[=] --- Software Information
[=] raw: 04010102011805
[=] Vendor Id: NXP Semiconductors Germany
[=] Type: 0x01 ( DESFire )
[=] Subtype: 0x01
[=] Version: 2.1
[=] Storage size: 0x18 ( 4096 bytes )
[=] Protocol: 0x05 ( ISO 14443-3, 14443-4 )
[=] --------------------------------- Card capabilities ---------------------------------
[=] --- Tag Signature
[=] IC signature public key name: NTAG424DNA, NTAG424DNATT, DESFire EV2, DESFire Light EV2
[=] IC signature public key value: 04B304DC4C615F5326FE9383DDEC9AA8
[=] : 92DF3A57FA7FFB3276192BC0EAA252ED
[=] : 45A865E3B093A3D0DCE5BE29E92F1392
[=] : CE7DE321E3E5C52B3A
[=] Elliptic curve parameters: secp224r1
[=] TAG IC Signature: C83449E7E0427B621868F0E78611FE5E
[=] : FA83298C34C77B2C0D80FC937284434F
[=] : 59C5B7E0E6F44EE02FB2173C9750825B
[=] : 15201E32F341A6D1
[+] Signature verification: successful
[+] --- AID list ( 1 found )
[+] F58540,
[+] ------------------------------------ PICC level -------------------------------------
[+] # applications....... 1
[+]
[+] PICC level auth commands
[+] Auth.............. NO
[+] Auth ISO.......... NO
[+] Auth AES.......... YES
[+] Auth Ev2.......... YES
[+] Auth ISO Native... YES
[+] Auth LRP.......... NO
[+] PICC level rights
[+] [1...] CMK Configuration changeable : YES
[+] [.0..] CMK required for create/delete : YES
[+] [..1.] CMK required for AID list / GetKeySettings : NO
[+] [...1] CMK is changeable : YES
[+]
[+] Key type... AES
[+] Key cnt.... 1
[+] PICC key 0 version: 0 (0x00)
[=] --- Free memory
[+] Available free memory on card... 4928 bytes
[=] Standalone DESFire |
Toujours sans authentification, suivant la configuration de la carte, on peut lister les applications desfire par exemple :
| Bloc de code |
|---|
|
hf mfdes lsapp --no-auth |
Ce qui renvoie :
| Bloc de code |
|---|
|
[=] It may take up to 15 seconds. Processing...
[+] ------------------------------------ PICC level -------------------------------------
[+] # applications....... 1
[+]
[+] PICC level auth commands
[+] Auth.............. NO
[+] Auth ISO.......... NO
[+] Auth AES.......... YES
[+] Auth Ev2.......... YES
[+] Auth ISO Native... YES
[+] Auth LRP.......... NO
[+] PICC level rights
[+] [1...] CMK Configuration changeable : YES
[+] [.0..] CMK required for create/delete : YES
[+] [..1.] CMK required for AID list / GetKeySettings : NO
[+] [...1] CMK is changeable : YES
[+]
[+] Key type... AES
[+] Key cnt.... 1
[+] PICC key 0 version: 0 (0x00)
[+] --------------------------------- Applications list ---------------------------------
[+] Application ID....... 0xF58540
[+] ISO id............ 0x0000
[+] DF name........... ( 00000000000000000000000000000000 )
[+] AID mapped to MIFARE Classic AID (MAD): 5854
[+] MAD AID Cluster 0x58..... Reserved
[=] MAD AID Function 0x5854... University student identification [Pro Active]
[+] Auth commands
[+] Auth.............. NO
[+] Auth ISO.......... NO
[+] Auth AES.......... YES
[+] Auth Ev2.......... YES
[+] Auth ISO Native... YES
[+] Auth LRP.......... NO
[+]
[+] Application level rights
[+] - AMK authentication is necessary to change any key (default)
[+] [1...] AMK Configuration changeable : YES
[+] [.0..] AMK required for create/delete : YES
[+] [..1.] AMK required for FID list / GetKeySettings : NO
[+] [...1] AMK is changeable : YES
[+]
[+] Key type... AES
[+] Key cnt.... 3
[+] Key versions [0..2] 00, 00, 00
|
...
| Bloc de code |
|---|
|
[usb] pm3 --> hf mfdes lsapp --help
Show application list. Master key needs to be provided or flag --no-auth set (depend on cards settings).
usage:
hf mfdes lsapp [-hav] [-n <dec>] [-t <DES|2TDEA|3TDEA|AES>] [-k <hex>] [--kdf <none|AN10922|gallagher>]
[-i <hex>] [-m <plain|mac|encrypt>] [-c <native|niso|iso>] [--schann <d40|ev1|ev2|lrp>]
[--no-auth] [--no-deep] [--files] [--dfname <hex>]
options:
-h, --help This help
-a, --apdu Show APDU requests and responses
-v, --verbose Verbose output
-n, --keyno <dec> Key number
-t, --algo <DES|2TDEA|3TDEA|AES> Crypt algo
-k, --key <hex> Key for authenticate (HEX 8(DES), 16(2TDEA or AES) or 24(3TDEA) bytes)
--kdf <none|AN10922|gallagher> Key Derivation Function (KDF)
-i, --kdfi <hex> KDF input (1-31 hex bytes)
-m, --cmode <plain|mac|encrypt> Communicaton mode
-c, --ccset <native|niso|iso> Communicaton command set
--schann <d40|ev1|ev2|lrp> Secure channel
--no-auth Execute without authentication
--no-deep not to check authentication commands that avail for any application
--files scan files and print file settings
--dfname <hex> Application ISO DF Name (5-16 hex bytes, big endian)
examples/notes:
hf mfdes lsapp :
hf mfdes lsapp -> show application list with defaults from `default` command
hf mfdes lsapp --files -> show application list and show each file type/settings/etc
hf mfdes lsapp --dfname D2760000850100 -> showlist applicationapps listafter withselecting defaultsDF from `default` command
by name |
Et donc, pour avoir encore plus d'informations sur les fichiers, avec en plus les échanges apdus également pour analyser et étudier les communications desfire, la commande suivante peut par exemple être passée :
| Bloc de code |
|---|
|
hf mfdes lsapp --filesno-auth -> show application list and show each file type/settings/etc
hf mfdes lsapp --dfname D2760000850100 -> list apps after selecting DF by name |
...
Emulation UID
Le proxmark3 est capable d'émuler une carte également, à commencer par l'émulation d'un UID :
| Bloc de code |
|---|
|
hf mfu sim -t 2 --uid 01234567890123 |
Il peut aussi positionner l'UID d'une carte magique (magic card, c'est à dire avec un uid changeable, en écriture)
| Bloc de code |
|---|
|
hf mf csetuid -u 01234567890123 |
Pour que cette commande fonctionne bien, il vous faudra une magic card supportant un uid en 7 octets (type mifare ultralight ou desfire si disponible), la majorité des magic cards sont souvent de type mifare classic qui proposent des uids en 4 octets seulement ; sur ces cartes vous ne pourrez alors que positionner un uid en 4 octets :
| Bloc de code |
|---|
|
hf mfdesmf lsappcsetuid --no-auth -a --filesu 01234567 |
Sniffing desfire
Outre les manipulations de cartes avec le proxmark3 (que l'on peut en fait faire avec un lecteur nfc usb également, le proxmark3 a cependant l'intérêt d'avoir des commandes prêtes à l'emploi embarquées dans le client ce qui le rend très ergonomique et pratique à l'usage !), proxmark3 peut aussi sniffer une communication desfire, en se plaçant en tant qu'intermédiaire dans la relation client / lecteur nfc.
...
| Bloc de code |
|---|
|
15808340 | 15811412 | Tag |6F 6F! 0F | | !! |
Nous ne savons pas dire de quoi dépend exactement le résultat... de la "vitesse" de transmissions/dialogue entre le lecteur et la carte ? Du positionnement de lcarte ?
Nous ne savons pas si le Proxmark3 RDV4, version "officielle" du proxmark, serait plus en capacité de faire ce sniffing sur lecteur NFC USB.
Nous ne savons pas dire de quoi dépend exactement le résultat... de la "vitesse" de transmissions/dialogue entre le lecteur et la carte ? Du positionnement de lcarte ?
Nous ne savons pas si le Proxmark3 RDV4, version "officielle" du proxmark, serait plus en capacité de faire ce sniffing sur lecteur NFC USB.
Reste que l'usage de ce Proxmark3 Easy est donc très concluant.
Sécurité / piratage Desfire
Notez bien que si le proxmark (ou d'autres outils encore plus accessibles et conviviaux comme le "flipper zero") rendent ces manipulations possibles et accessibles à tous, cela ne remet pas en cause la sécurité des cartes Mifare Desfire qui ne connaissent pas, à ce jour, de failles de sécurité.
Ces outils illustrent par contre que l'usage de cartes d'anciennes génération comme le mifare classic (clonable très simplement avec un proxmark) ou qu'un mauvais usage des cartes mifare desfire (usage du seul CSN pour le contrôle d'accès, usage d'un fichier desfire avec accès en lecture non chiffrée, ...) constituent un problème de sécuritéReste que l'usage de ce Proxmark3 Easy est donc très concluant.