piątek, 20 sierpnia 2021

Mifare Classic - Zabezpieczenie karty

W tym poście chciałbym opisać sposoby złamania zabezpieczeń i uzyskania dostępu do karty Mifare oraz różne sposoby zapisu danych na kartach. W poście skupię się na kartach Mifare Classic 1k. Ponieważ są one chyba najpopularniejszym typem kart. 


[Źródło: https://github.com/XaviTorello/mifare-classic-toolkit]

Nie będę tutaj opisywał struktury karty Mifare Classic. Została ona opisana przeze mnie w tym poście

Odczyt numeru seryjnego:


Dosyć często można się spotkać z takim rozwiązaniem np. w biurach czy nowych blokach.

W takim przypadku dane zapisane na karcie nie są w żaden sposób chronione. Są one dostępne i w łatwy sposób możliwe do odczytania np. telefonem komórkowym z aplikacją Mifare Classic Tool.

Po odczytaniu danych z karty pojawia się problem. Na standardowych kartach Mifare Classic dostęp do sektora 0 jest zablokowany i nie ma możliwości nadpisania tych danych. Wymaga to zastosowani specjalnego typu kart, które mają możliwość zaprogramowania tego bloku. Można je kupić np. tutaj. Gdy już zaopatrzymy się w taką kartę, to dane wystarczy przepisać do sektora zerowego. Do tej operacji także wystarczy sam telefon komórkowy wyposażony w NFC. 

Innym sposobem jest zastosowanie emulatora kart np. w postaci aplikacji na telefon komórkowy. Tutaj trzeba zaopatrzyć się w odpowiednią aplikację (np. ) oraz telefon musi być wyposażony w uprawnienia administratora (root). Wynika to z konieczności zapisu numeru seryjnego emulowanej karty zostaje zapisany w pliku konfiguracyjnym modułu NFC. Bez uprawnień administratora dostęp do tych ustawień jest wyłączony.

Jedynym zabezpieczeniem przed takim rozwiązaniem jest sprawdzanie jakiego typu karta została odczytana. W przypadku emulacji czy kart kopiowanych typ kart nie zawsze będzie odpowiadał standardowi kart Mifare Classic. Co oznacza, że może zostać on inaczej rozpoznany przez system. Niestety raczej nie będzie to działało w przypadku lepszych programów/urządzeń do emulacji takiej karty. 

W przypadku standardowego telefonu komórkowego bez zmian numer UID przesyłany przez moduł NFC będzie się różnił za każdym odczytem. Dodatkowo należy pamiętać, że niektóre telefony nie odczytują kart Mifare Classic. Wykaz możliwości odczytu sparowany w różnych modelach telefonów można znaleźć pod tym linkiem.  
 

Odczyt danych z sektora:

W przypadku odczytu danych z sektora należy pamiętać o zabezpieczeniu odczytu przez wykorzystanie odpowiedniego klucza. Sektor nie powinien zostać zapisany przez klucz domyślny, ani żaden z ogólnie dostępnych kluczy jak np.

  1. ffffffffffff
  2. a0b0c0d0e0f0
  3. a1b1c1d1e1f1
  4. a0a1a2a3a4a5
  5. b0b1b2b3b4b5
  6. 4d3a99c351dd
  7. 1a982c7e459a
  8. 000000000000
  9. aabbccddeeff
  10. d3f7d3f7d3f7
  11. aabbccddeeff
  12. 714c5c886e97
  13. 587ee5f9350f
  14. a0478cc39091
  15. 533cb6c723f6
  16. 8fd0a4f256e9

Ale też dobrze brać pod uwagę listę kluczy jakie są udostępnione w programie Mifare Classic Tool. Ponieważ jego wykorzystanie jest jednym z najprostszych sposobów na uzyskanie danych z karty. Głównie dlatego, że jest to darmowa aplikacja na telefon z NFC, niewymagająca żadnych dodatkowych sprzętów, ani dodatkowej wiedzy. 

Gdy sektor zostanie odpowiednio zabezpieczony to uzyskanie do niego dostępu będzie wymagało przeprowadzenia ataków Brute Force czy Nested Attack. Co wymaga poświęcenia czasu, zakupu  lub zbudowania odpowiedniego sprzętu oraz posiadania odpowiedniej wiedzy. Dodatkowo czas na uzyskanie surowych danych może wynieść od kilku minut do nawet kilku godzin.

Każdy z sektorów na karcie mifare oprócz zabezpieczenia kluczem posiada także 4 bajty konfiguracyjne które definiują w jaki sposób uzyskać dostęp do sektorów. Większość firm wykorzystuje możliwość odczytu i zapisu przez wykorzystywanie klucza A. W celu dodatkowego utrudnia dostępu można zmodyfikować tą funkcję na możliwość uzyskania dostępu tylko kluczem B. W takim przypadku bajty muszą zostać skonfigurowane w następujący sposób EF069169 dla odczytu i zapisu kluczem B lub FE169069 gdy dozwolony jest tylko odczyt. 

Sposoby zabezpieczeń:


Karty Mifare z powodu złamania dostępu do sektorów są już mało bezpieczne. Natomiast aby zmaksymalizować możliwość zabezpieczenie karty można stosować kilka technik, które spowodują znaczne utrudnienia w innych operacjach niż skopiowanie kart:

1 - Dane muszą być zapisane zawsze w sektorze do którego dostęp można uzyskać tylko przez podanie odpowiedniego klucza. 

2 - Informacje zapisane na karcie można zaszyfrować np. za pomocą szyfru AES czy 3DES (tutaj wszystko zależy od możliwości mikrokontrolera jaki będzie stosowany czyli szybkości wykonywania deszyfrowania). Gdzie poprawny numer karty będzie możliwy do odczytania tylko przez system. Nie pomoże to co prawda przed skopiowaniem danych z karty, natomiast uniemożliwi dokładne odczytanie danych na karcie w celu uzyskania informacji o sposobie działania systemu. 

3 - Zapisanie danych w różnych miejscach na karcie. Można np. zapisać wszystkie lub większość bloków rożnymi danymi (zaszyfrowanymi lub nie). Każdy z bloków należy zabezpieczyć przed odczytem, losowymi kluczami. Jedyna różnica jest w bloku posiadającym właściwy numer karty tutaj dostęp musi być zapewniony dla wszystkich kart z jednego klucza lub z wąskiej grupy kluczy. Tak aby odczyt karty przez system był możliwie najszybszy. Spowoduje to znaczące utrudnienie przed poznaniem struktury działania systemu dla osoby posiadającej tylko kartę. 

Dodatkowe zabezpieczenia sprzętu:

4 - Gdy komunikacja odbywa się nie z gotowym ogólnodostępnym modułem a układem przygotowanym w formie własnej głowicy czytającej wtedy warto stosować szyfrowany interfejs komunikacyjny np. RS485 z szyfrowaniem AES. Przez co poznanie dokładnych ramek komunikacyjnych jest właściwie niemożliwe. Takiego zabezpieczenia nie da się uzyskać przy komunikacji Wiegand. Chyba, że stosujemy własną ramkę danych, z którą możemy wykonać właściwie wszystko.

5 - Stosowanie złącza informującego o odłączeniu urządzenia od powierzchni na której został zamontowany (tak zwany tamper, np. kontrakton, czujnik światła, czujnik HAL'a). W przypadku odłączenia głowicy czytającej czy samego kontrolera od ściany, można wykonać kasowanie pamięci w urządzenia tak aby klucze dostępu do kart czy dane do szyfrowania AES zostały usunięte z pamięci. Aby w większym stopniu zabezpieczyć się przed taką sytuacją warto stosować dodatkowe zasilanie (np. bateryjne) które po odłączeniu głównego zasilania będzie sprawdzało czy sprzęt nie został odłączony od powierzchni. 

Oczywiście najbezpieczniejszym sposobem jest nie dopuszczenie osobom niepowołanym na zdobycie dostępu do karty. Czyli noszenie jej w miejscach widocznych, np. na szyi czy kieszeni na piersi lub w etui blokującym sygnały radiowe tak aby karta nie została bez opieki. Taki zabieg utrudni osobie niepowołanej na odczytanie danych z karty (ponieważ w celu odczytu karty dane muszą znajdować się w zasięgu czytnika co oznacza dystans kilku centymetrów). Gdzie w przypadku trzymania karty w kieszeni dane mogą zostać odczytane np. w autobusie. Także trzymanie kilku kart razem (działających na tej samem częstotliwości, kart musi być więcej niż dwie) utrudni możliwość odczytu przez urządzenia odczytujące.

Podsumowując, karta Mifare Classic od dawna nie jest już bezpiecznym standardem do wykorzystywania w systemach kontroli dostępu (przy systemach rejestracji czasu pracy wysoki poziom zabezpieczeń nie koniecznie jest wymagany). Na rynku pojawiło się wiele bezpieczniejszych rozwiązań jak np. Mifare Desfire EV2 czy EV3. Natomiast jeśli chcemy wykonać w miarę bezpieczny system (gdy uzyskanie dostępu dla osób nieuprawnionych nie jest aż tak kluczowe oraz gdy stosujemy kilka z zabiegów wspomnianych powyżej, lub jakichkolwiek innych jakie według nas mogą utrudnić dostęp) to można go wykonać w niższych pieniądzach niż w przypadku bardziej bezpiecznych standardów (cena sprzętu, oprogramowania, kart oraz samego wdrożenia będzie niższa). Chodź ta różnica z czasem będzie pewnie mniej odczuwalna.

Dodatkowe linki: