Esup NFC Tag

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

Objectif : utilisation d'un Proxmark3 Easy à faible coût (clone aliexpress) pour manipuler (voire sniffer) des échanges avec une carte Mifare Desfire.

Sommaire

Configuration et installation de l'image et du client Proxmark3

...

Bloc de code
languageshell
git clone https://github.com/RfidResearchGroup/proxmark3.git
cd proxmark3/
cp Makefile.platform.sample Makefile.platform


On configure pour "optimiser" au mieux son usage dans le cadre de Mifare Desfire emacs Makefile.platform pour indiquer l'usage d'un proxmark3 easy ainsi :

Bloc de code
languageshell
# 1. Plateforme correcte dans le cadre d'un Proxmark3 Easy 
PLATFORM=PM3GENERIC
LED_ORDER=PM3EASY

# 2. Désactiver le debug pour gagner de la mémoire RAM
DEBUG=0 

# 3. Désactiver les fonctionnalités lourdes inutiles pour le sniffing 
# Pour gagner de la RAM pour le buffer de trace 
WITH_FLASH=0 # L'Easy n'a pas de flash externe comme le RDV4 
WITH_SMARTCARD=0 # Pas de slot smartcard sur l'Easy 
WITH_FPC_USART=0 # Pas besoin du port série FPC pour du sniffing 

# 4. Optimisation niveau 3 (déjà souvent par défaut, mais vérifiez) 
OPTIMIZATION_LEVEL=3

...

PLATFORM=PM3GENERIC



On compile

Bloc de code
languageshell
make clean 
make all -j$(grep -c '^processor' /proc/cpuinfo)
make install 


Suivant votre configuration/installation de départ, la compilation vous demandera l'installation complémentaire d'un certain nombre de paquets... liste non exhaustive :

Bloc de code
languageshell
apt install make gcc g++ liblz4-dev libbz2-dev libssl-dev libreadline-dev gcc-arm-none-eabi

On branche le proxmark3 en usb et on flash le proxmark avec cette version compilée :

Bloc de code
languageshell
./pm3-flash-bootrom
./pm3-flash-fullimage

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 

Bloc de code
languageshell
./pm3

On pose une carte (mifare desfire donc ici) sur le proxmark et on lance la commande

Bloc de code
languageshell
make clean 
make all -j$(grep -c '^processor' /proc/cpuinfo)
make install 

Suivant votre configuration/installation de départ, la compilation vous demandera l'installation complémentaire d'un certain nombre de paquets... liste non exhaustive :

Bloc de code
languageshell
apthf install liblz4-dev libreadline-dev gcc-arm-none-eabimfdes 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 On branche le proxmark3 en usb et on flash le proxmark avec cette version compilée :

Bloc de code
languageshell
./pm3-flash-bootrom
./pm3-flash-fullimage

Prise en main

On lance le client 

Bloc de code
languageshell
./pm3

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 :

Bloc de code
languageshell
[=] [=] ---------------------------------- Tag Information -------------------------------------------- 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
languageshell
 hf mfdes lsapp --no-auth

Ce qui renvoie : 

Bloc de code
languageshell
[=] 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

...

Et donc, pour avoir encore plus d'informations sur les fichiers au passage, avec en plus au passage les échanges apdus également pour analyser et étudier au passage les communications desfire, la commande suivante peut par exemple être passée :

Bloc de code
languageshell
hf mfdes lsapp --no-auth -a --files

Sniffing

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.

  • on positionne la carte au dessus du proxmark
  • on lance la commande de sniff 

Emulation UID

Le proxmark3 est capable d'émuler une carte également, à commencer par l'émulation d'un UID :


Bloc de code
languageshell
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
languageshell
[usb] pm3 --> hf 14amf sniff -r -c -i
[=] Press pm3 button to abort sniffing
[=] You can cancel this operation by pressing the pm3 buttoncsetuid -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
languageshell
hf mf csetuid -u 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.

  • on positionne la carte au dessus du proxmark
  • on lance la commande de sniff 
  • on lance l'application de lecteur nfc (une recherche de carte via esup-nfc-tag-droid par exemple depuis un smartphone)
  • on place le lecteur nfc (smartphone android donc par exemple) sous le proxmark3
  • la carte est lue par le smartphone avec le proxmark en intermédiaire
  • on appuie sur le bouton du proxmark pour arrêter le sniffing
Bloc de code
languageshell
[#] trace len = 2141usb] pm3 --> hf 14a sniff -r -c -i
[=] Done!
[?] Hint: Try `hf 14a list`Press pm3 button to viewabort captured tracelogsniffing
[?=] Hint:You Trycan `tracecancel savethis -h`operation toby savepressing tracelogthe forpm3 later analysing
  • on peut maintenant analyser la trace des apdus et notamment ceux de desfire
Bloc de code
languageshell
[usb] pm3 --> hf mfdes list

...

button
  • on lance l'application de lecteur nfc (une recherche de carte via esup-nfc-tag-droid par exemple depuis un smartphone)
  • on place le lecteur nfc (smartphone android donc par exemple) sous le proxmark3
  • la carte est lue par le smartphone avec le proxmark en intermédiaire
  • on appuie sur le bouton du proxmark pour arrêter le sniffing
Bloc de code
languageshell
[#] trace len = 2141
[=] Done!
[?] Hint: Try `hf 14a list` to view captured tracelog
[?] Hint: Try `trace save -h` to save tracelog for later analysing
  • on peut maintenant analyser la trace des apdus et notamment ceux de desfire
Bloc de code
languageshell
[usb] pm3 --> hf mfdes list


On va ainsi pouvoir identifier des trames desfire visant à sélectionner une application, s'authentifier sur une clef et lire un fichier par exemple : 

Bloc de code
languageshell
    7177344 |    7191264 | Rdr |02  90  5A  00  00  03  C2  85  F5  00  2F  1D                 7177344 |    7191264 | Rdr |02  90  5A  00  00  03  C2  85  F5  00  2F  1D                           |  ok | SELECT APPLICATION (appId f585c2)
    7206836 |    7212724 | Tag |02  91  00  29  10          |  ok | SELECT APPLICATION (appId f585c2)
    7206836 |    7212724 | Tag |02  91  00  29  10                                                       |     | 
    7604912 |    7616528 | Rdr |03  90  AA  00  00  01  01  00  F6  06                                   |  ok | AUTH AES (keyNo 1)
    7650404 |    7674724 | Tag |03  9C  18  14  D9  57  1C  F7  06  8C  67  2A  B4  56  44  76  4F  91   |     | 
            |            |     |AF  25  EA                                                               |  ok | 
    8055376 |    8102768 | Rdr |02  90  AF  00  00  20  E8  AB  FF  8E  BA  0A  D0  CD  54  B3  53  83   |     | 
            |            |     |DF  C3  46  C8  C2  C3  01  08  DD  0F  00  B8  79  70  5B  D9  D1  2B   |     | 
            |            |     |BE  35  00  C5  D3                                                       |  ok | AUTH FRAME / NEXT FRAME
    8131332 |    8155652 | Tag |02  39  11  45  57  BC  A1  37  FB  0C  6B  0D  A5  35  31  DF  CA  91   |     | 
            |            |     |00  6E  1C                                                               |  ok | 
    8520336 |    8538864 | Rdr |03  90  BD  00  00  07  00  00  00  00  1C  00  00  00  B4  05           |  ok | READ DATA (fileId 00, offset 0, len 28)
    8597316 |    8640004 | Tag |03  84  96  B1  F2  7E  9A  54  DE  C6  F3  49  51  10  10  5D  9B  45   |     | 
            |            |     |96  8A  00  14  C4  95  E8  9B  91  7D  B4  6F  4E  D0  A9  91  00  37   |     | 
            |            |     |35                                                                       |  ok 


Limitations

De nos tests, le sniffing en utilisant pour lecteur un smartphone a bien fonctionné, de même sur un lecteur de contrôle d'accès !!

Finalement seul le lecteur NFC Identive 4700F nous a posé problème.

Quand on sniffe un lecteur NFC Identive 4700F lisant une carte en desfire (avec les mêmes apdus transmis que via le téléphone, depuis esup-sgc-client et non esup-nfc-tag-droid donc par exemple), plutôt que de voir les trames Desfire, on obtient un simple 

Bloc de code
languageshell
   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.

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é.