Esup NFC Tag

Arborescence des pages

Vous regardez une version antérieure (v. /wiki/spaces/ESUPNFC/pages/1673461761/Proxmark) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 7) afficher la version suivante »

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

En premier lieu, il est souvent conseillé dans les documentations de désactiver complètement le ModemManager sous linux, sous peine de briquer votre proxmark3 :

sudo systemctl stop ModemManager
sudo systemctl disable ModemManager
sudo apt-get remove --purge modemmanager


On récupère le "Iceman Fork" du logiciel proxmark3 (fork actuellement [2026] le plus conseillé).

git clone https://github.com/RfidResearchGroup/proxmark3.git
cd proxmark3/
cp Makefile.platform.sample Makefile.platform


On configure Makefile.platform pour indiquer l'usage d'un proxmark3 easy ainsi :

PLATFORM=PM3GENERIC



On compile

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 :

apt install 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 :

./pm3-flash-bootrom
./pm3-flash-fullimage

Prise en main

On lance le client 

./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 :

[=] ---------------------------------- 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 : 

 hf mfdes lsapp --no-auth

Ce qui renvoie : 

[=] 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


On voit ainsi que l'application évoquée ci-avant est l'application "F58540", notée (dans un fichier de mapping présent dans le client proxmark3) comme "University student identification [Pro Active]" : c'est en fait l'application du crous/izly.

Le proxmark nous donne des informations intéressantes comme le nombre de clefs (3 clefs AES ici), les droits positionnés, on voit qu'on peut encore, sans clef avoir des informations sur les fichiers, ...

Notez qu'on peut au passage demander la liste des apdus utilisés pour récupérer toutes ces informations, une option importante étant --help pour avoir toutes les options possibles. Exemple : 

[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                 -> 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      -> list apps after selecting DF by name


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 :

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 
[usb] pm3 --> hf 14a sniff -r -c -i
[=] Press pm3 button to abort sniffing
[=] You can cancel this operation by pressing the pm3 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
[#] 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
[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 : 

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

Si on opère du sniffing sur un lecteur NFC usb ou un lecteur de contrôle d'accès, le proxmark3 easy ne sera pas forcément en capacité de récupérer et lire l'ensemble des transactions effectuées.
De nos tests, seul le sniffing en utilisant pour lecteur un smartphone a en fait fonctionné.

Quand on sniffe un lecteur NFC USB 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, il semble qu'on obtienne un simple 

   15808340 |   15811412 | Tag |6F  6F! 0F                                                               |  !! 

Nous ne savons pas dire de quoi dépend exactement le résultat mais sans doute de la "vitesse" de transmissions/dialogue entre le lecteur et la carte : à l'usage, on se rend bien compte que le téléphone est beaucoup plus lent à dialoguer avec une carte desfire qu'un lecteur nfc sur pc ou encore qu'un contrôle d'accès...

Nous ne savons pas si le Proxmark3 RDV4, version "officielle" du proxmark, serait plus en capacité de faire ce sniffing sur lecletrus NFC USB ou de contrôle d'accès.




  • Aucune étiquette