piątek, 14 kwietnia 2023

Mifare - Desfire EV1

W tym poście chciałbym opisać strukturę karty Desfire EV1.


[Źródło: https://www.mifare.net/en/]

Numer seryjny:


Przykładowy dane numeru seryjnego dla karty Desfire mogą wyglądać następująco:

  1. ISO14443A/MIFARE DESFire EV1 | EEPROM 2 kB | UID Length 56 Bits | UID HEX 041B6082E46780

Jak widać powyżej numer seryjny karty składa się z 7 bajtów danych UID0 do UID6. UID0 wynosi 0x04. Jest to bajt stały i jest on kodem producenta (NXP). 

Możliwe jest także uruchomienie mechanizmu RID (Random Id Number). Oznacza to, że za każdym razem jak karta zostanie przyłożona do czytnika, zostanie wysłany inny numer seryjny karty. Dla RID numer ten będzie się składał z 4 bajtów danych. 

Należy pamiętać, że Mifare Desfire EV1 z uruchomioną opcją RID w pozycji UID0 będzie zwracać wartość 0x80. Natomiast w przypadku karty EV2 będzie to wartość 0x08 (dla kart Mifare Plus, też powinna to być wartość 0x08). 

Z tego co udało mi się znaleźć to możliwość włączenia losowego numeru seryjnego mają moduły PN532. Sposób konfiguracji jest łatwo dostępny do znalezienia w przykładach umieszczonych w serwisie Github.

Desfire wspiera następujące rodzaje algorytmów szyfrujących

  • DES (56bit) / 2K3DES (112 bit)
  • 3K3DES (168bit)
  • AES128 (128bit)

Struktura pamięci:


Karty występują w trzech rozmiarach 2/4/8 kB pamięci EEPROM. Na karcie można zapisać maksymalnie 28 aplikacji. Każda z nich może zawierać do 32 plików. Aplikacje są numerowane jako 3 bajtowy numer (AID). Do aplikacji można przypisać 14 kluczy (numerowane od 0x00 do 0x0D). Każdy z nich może zawierać inne uprawnienia dostępu.

Nie można używać numeru aplikacji 0xFFFFFF. Jest on zarezerwowany i zawiera dodatkowe informacje w trzech plikach (pliki 0, 1, 2).

Procedura odczytu danych z karty jest następująca:

- Odczytanie numeru seryjnego z karty. Gdy karta znajdzie się w polu.
- Uwierzytelnienie dostępu do karty kluczem PICC wraz z wybraniem odpowiedniej metody szyfrowania.
- Wybranie aplikacji.
- Uwierzytelnienie dostępu do aplikacji.
- Odczyt danych.

Aplikacja może być szyfrowana z użyciem wszystkich dostępnych algorytmów. Najbezpieczniej ograniczyć dostęp tylko do jednego rodzaju klucza AES128. 

Proxmark:


Czytnik Proxmark pozwala na odczyt różnych danych z karty Desfire.

Wersja oprogramowania czytnika Proxmark:

  1. pm3 --> hw version
  2. hw version
  3.  
  4. Proxmark3 RFID instrument
  5.  
  6.  
  7.  [ CLIENT ]
  8.  client: iceman build for RDV40 with flashmem; smartcard;
  9.  
  10.  [ ARM ]
  11.  bootrom: iceman/master/ice_v3.1.0-980-gbacf8aff 2018-08-04 13:36:38
  12.       os: iceman/master/ice_v3.1.0-980-gbacf8aff 2018-08-04 13:36:42
  13.  
  14.  [ FPGA ]
  15.  LF image built for 2s30vq100 on 2017/10/25 at 19:50:50
  16.  HF image built for 2s30vq100 on 2018/ 7/28 at 18:36:55
  17.  
  18.  [ Hardware ]
  19.   --= uC: AT91SAM7S512 Rev B
  20.   --= Embedded Processor: ARM7TDMI
  21.   --= Nonvolatile Program Memory Size: 512K bytes, Used: 237459 bytes (45%) Free: 286829 bytes (55%)
  22.   --= Second Nonvolatile Program Memory Size: None
  23.   --= Internal SRAM Size: 64K bytes
  24.   --= Architecture Identifier: AT91SAM7Sxx Series
  25.   --= Nonvolatile Program Memory Type: Embedded Flash Memory

Test anteny:

  1. [+] LF antenna: 26.77 V - 125.00 kHz
  2. [+] LF antenna: 33.85 V - 134.00 kHz
  3. [+] LF optimal: 35.41 V - 130.43 kHz
  4. [+] LF antenna is OK
  5.  
  6. [+] HF antenna: 33.92 V - 13.56 MHz
  7. [+] HF antenna is OK

W przypadku uzyskania informacji np. "Your LF antenna is unusable" prawdopodobną przyczyną błędu jest niedopasowanie oprogramowania opisaneo

Wracając do odczytanych danych karty desfire:

hf search:

  1. pm3 --> hf search
  2. hf search
  3.  UID : 04 1F 35 5A 6A 68 80
  4. ATQA : 03 44
  5.  SAK : 20 [1]
  6. TYPE : NXP MIFARE DESFire 4k | DESFire EV1 2k/4k/8k | Plus 2k/4k SL3 | JCOP 31/41
  7. MANUFACTURER : NXP Semiconductors Germany
  8.  ATS : 06 75 77 81 02 80 02 F0
  9.        -  TL : length is 6 bytes
  10.        -  T0 : TA1 is present, TB1 is present, TC1 is present, FSCI is 5 (FSC = 64)
  11.        - TA1 : different divisors are supported, DR: [2, 4, 8], DS: [2, 4, 8]
  12.        - TB1 : SFGI = 1 (SFGT = 8192/fc), FWI = 8 (FWT = 1048576/fc)
  13.        - TC1 : NAD is NOT supported, CID is supported
  14. [=] Answers to magic commands: NO
  15.  
  16. [+] Valid ISO14443-A Tag Found

Powyżej typ jest określony jako jeden z kilku rodzajów kart. Dopiero następna komenda pozwoli na odczyt większej ilości ustawień.

hf mfdes info:

  1. hf mfdes info
  2. -- Desfire Information --------------------------------------
  3. -------------------------------------------------------------
  4.   UID                : 04 1F 35 5A 6A 68 80
  5.   Batch number       : B9 0C 22 49 70
  6.   Production date    : week 27, 2022
  7.   -----------------------------------------------------------
  8.   Hardware Information
  9.       Vendor Id      : NXP Semiconductors Germany
  10.       Type           : 0x01
  11.       Subtype        : 0x01
  12.       Version        : 1.0 (Desfire EV1)
  13.       Storage size   : 0x16 (2048 bytes)
  14.       Protocol       : 0x05 (ISO 14443-3, 14443-4)
  15.   -----------------------------------------------------------
  16.   Software Information
  17.       Vendor Id      : NXP Semiconductors Germany
  18.       Type           : 0x01
  19.       Subtype        : 0x01
  20.       Version        : 1.4
  21.       storage size   : 0x16 (2048 bytes)
  22.       Protocol       : 0x05 (ISO 14443-3, 14443-4)
  23. -------------------------------------------------------------
  24.  CMK - PICC, Card Master Key settings
  25.  
  26.    [0x08] Configuration changeable       : YES
  27.    [0x04] CMK required for create/delete : NO
  28.    [0x02] Directory list access with CMK : NO
  29.    [0x01] CMK is changeable              : YES
  30.  
  31.    Max number of keys       : 174
  32.    Master key Version       : 0 (0x00)
  33.    ----------------------------------------------------------
  34.    [0x0A] Authenticate      : YES
  35.    [0x1A] Authenticate ISO  : YES
  36.    [0xAA] Authenticate AES  : NO
  37.  
  38.    ----------------------------------------------------------
  39.    Available free memory on card       : 224 bytes
  40. -------------------------------------------------------------

hf mfdes enum:

  1. hf mfdes enum
  2.  
  3. -- Desfire Enumerate Applications ---------------------------
  4. -------------------------------------------------------------
  5.  Aid 0 : 02 93 82
  6.  AMK - Application Master Key settings
  7. [!]    Can't read Application Master key settings
  8. [!]    Can't read Application Master key version. Trying all keys
  9. [!]    Can't get file ids
  10. [!]    Can't get ISO file ids

Jak widać powyżej na karcie znajduje się jedna aplikacja. Jest ona zabezpieczona specjalnym (unikalnym) kluczem AES i jej odczyt w przypadku podstawowych ustawień nie jest możliwy. 

Oczywiście jest cały zestaw komend jakie można używać z czytnikiem Proxmark. Można je znaleźć np. na githubie

Zabezpieczenia:


Dostęp do danych zapisanych w aplikacjach zabezpieczonych indywidualnym kluczem jest nie możliwy do wykonania. Oczywiście dla kluczy AES128. W przypadku pozostałych metod jest to możliwe do osiągnięcia, natomiast wymaga dużo więcej wysiłku oraz znacznie lepszego sprzętu niż w przypadku kart Mifare Classic, gdzie przy odrobinie cierpliwości wystarczy odpowiednie oprogramowanie dla smartphone. 

W zależności od tego w jaki sposób karty będą stosowane. Dobrą praktyką jest zostawienie w miarę standardowego klucza dostępu do całej karty (a przynajmniej takiego, który może być znany dla klienta). Natomiast aplikacja powinna być zabezpieczona najlepiej jak jest to możliwe. Wyjątek jest oczywiście wtedy, kiedy tylko my będziemy korzystali z tej karty (lub dzielili się kluczem z inną firmą, chodzi mi o klucz do karty nie do aplikacji), wtedy oczywiście zabezpieczamy kartę najlepiej jak to tylko możliwe. 

Zostawienie znanego klucza pozwala innym dostawcą na dogrywanie aplikacji do karty. Jeśli klient korzysta z różnych systemów. Pozwali to na używanie jednej karty pomiędzy firmami, budynkami czy lokalizacjami w różnych miastach bądź krajach. Z wykorzystaniem różnych aplikacji w każdym miejscu.

Należy jedynie pamiętać, że w przypadku posiadania dostępu PICC do karty Desfire, można z niej usunąć wszystkie aplikacje. Dlatego należy mieć to na uwadze gdy karta potrzebuje wykorzystywać wiele aplikacji, programowanych przez różne firmy/programatory. 

Dokumentacja: