Bezpieczeństwo Kart Zbliżeniowych

securitybeztabu.pl 2 lat temu

Karty zbliżeniowe – nie tylko bilety i płatnicze

Kiedy słyszymy o kartach zbliżeniowych to u większości z was z pewnością wyłania się obraz kart płatniczych. Natomiast karty zbliżeniowe albo mówiąc bardziej precyzyjnie, technologia zbliżeniowa – oprócz płatności – ma olbrzymie spektrum innych zastosowań. Z tego też względu warto się pochylić w celu zbadania bezpieczeństwa technologii zbliżeniowej w przykładowych, najczęściej spotykanych rozwiązaniach.

W dalszej części tekstu będę naprzemiennie używał zwrotów karta i tag.

Wstęp

Ale za nim przejdziemy do rzeczy ciekawych, żeby mieć pełny obraz, zróbmy sobie szybką rozgrzewkę, przebrnijmy przez warstwę – w moim odczuciu – nieco nudniejszą i wyjaśnijmy sobie na jednym wdechu jak w istocie owa technologia działa. Czyli jaka magia stoi za tym, iż zbliżając kartę do czytnika, ten zwykle odpowiada nam pojedynczym piknięciem i zapaleniem zielonej (lub czerwonej) diody.

Tagi muszą być w jakiś sposób zasilane, więc możliwe opcje są dwie – albo w ich wnętrznościach zaszyta jest bateria albo wykorzystywana jest fizyka w postaci indukcji elektromagnetycznej, co ilustruje grafika poniżej. Podejście z baterią, co prawda istnieje, natomiast jest raczej rzadko spotykana. Karty oparte na cewce przy zbliżeniu (na dystans nie większy niż około 5-6cm) do czytnika wzbudzane są cewką z czytnika, dzięki czemu możliwe jest zasilenie mikroprocesora znajdującego się wewnątrz karty, co w konsekwencji umożliwia komunikacje na linii karta -> czytnik.

Co to jest to całe RFID?

Skoro już padł termin „komunikacja”, jest to idealny moment, by w paru słowach pokrótce opowiedzieć jak to wygląda. Wydaje się, iż skrót RFID (Radio-Frequency identification) odpowiada nam na to pytanie dość precyzyjnie. Zatem jeżeli już wiemy, iż mamy do czynienia z falami radiowymi, pozostaje nam jedynie dokręcić odpowiedź wskazując, na jakich pasmach bezstykowa technologia operuje.

Dorzucimy do wora z akronimami, z którymi będziemy się spotykać dwa kolejne.

LF (Low-frequency) działa na częstotliwości 125kHz i na te karty, a w zasadzie na ich zastosowanie możemy się natknąć raczej rzadko (Wikipedia twierdzi, iż jest to najczęściej wykorzystywana częstotliwość, ale to bzdura i nie słuchajcie ich!). Do LF wrócimy za chwilę.

Do dyspozycji mamy jeszcze HF (High-frequency), która pracuje na częstotliwości 13,56MHz. Wspiera ją najwięcej standardów i wykorzystywana jest w wielu rozwiązaniach, co czyni ją najbardziej interesującym obiektem badań. A jako, iż ta publikacja będzie w większości skupiać się na właśnie tym standardzie, cofnijmy się nieco do zasady działania i zastosowań tagów opartych na niskich częstotliwościach.

Tutaj sytuacja wydaje się być dość prosta i osobom, które chcą rozpocząć swoją przygodę z analizowaniem technologii bezstykowej, polecam zacząć właśnie z LF. Główny argument za tym przemawiający jest taki, iż na tą zabawę musimy przeznaczyć równowartość 3 piw, by w pełni zrozumieć, móc czytać i kopiować tagi. Na zdjęciu poniżej prezentuje sprzęt, który w zupełności wystarczy nam, by wykonać pełną autopsję tego standardu. Koszt: około 25zł.

Nad samymi bebechami kart LF nie ma co się za bardzo rozwodzić. Każdy taki tag zawiera się w 5 bajtach i nie posiada absolutnie żadnych zabezpieczeń. Zaprezentowany powyżej kloner ma dwie funkcje: czytanie i zapisywanie zapamiętanego tagu. Przycisk „Read” intuicyjnie mówi nam, iż służy do czytania, „Write” natomiast powoduje zapisanie wcześniej zapamiętanego (poprzez przycisk „Read”) tagu na nowy. LF możemy głownie spotkać w dwóch postaciach: pastylki i karty (zdj. poniżej).

Tagi, ciągi i dane

Jeśli zastanawiacie się, co oznacza ciąg liczb na karcie to już spieszę z odpowiedzią. Jak już wcześniej wspomniałem, tagi mają wielkość 5 bajtów, ale czasem zachodzi potrzeba odczytania jego zawartości bez posiadania odpowiedniego czytnika. Zapis ten to, zatem nic innego jak reprezentacja bajtów w innym formacie, tj. DEZx (DEZ8, DEZ10 itd.). W Internecie można bez żadnego problemu znaleźć kalkulatory, które za nas obliczą tag na podstawie zadanego ciągu znaków zapisanego w formacie DEZx. Na screenshocie poniżej możecie zobaczyć jak taka kalkulacja wygląda dla tagu o ID 0400346966.

Zastosowania tego standardu możemy szukać głównie w dwóch rozwiązaniach: w systemach kontroli dostępu (potocznie karty wejściowe do biur) lub w restauracjach czy pubach, gdzie jest to bardzo wygodny sposób rozliczania się. Karty takie doładowuje się określoną sumą, która można później wykorzystać przy płaceniu. Na marginesie warto zaznaczyć, iż jest to dość szczwane podejście, ponieważ klient praktycznie nigdy nie zużyje do zera doładowanej kwoty. Natomiast jest też mały szkopuł tego rozwiązania. Karty, które oddajemy z powrotem są reużywalne. Nie będę bardziej nakierowywał, czym to grozi. Dojdziecie do tego sami – jesteście błyskotliwi.

Tutaj możemy zakończyć temat technologii LF, bo naprawdę nie ma tam nic więcej do odkrycia i przejść płynnie do prawdziwego mięcha, czyli komunikacji wysoko częstotliwościowej i tego, gdzie i jak źle jest wykorzystywana.

O Proxmarku słów kilka

Ale zanim do tego przejdziemy, opowiem o Proxmarku, czyli sprzęcie, który jest najczęściej wykorzystywany przez badaczy. Niestety, jest to dość droga zabawka, ponieważ trzeba liczyć się z wydatkiem rzędu około 1000zł. Natomiast w tej cenie mamy naprawdę solidnego potwora, który jest w stanie pracować z niskimi i wysokimi częstotliwościami, przy czym jeżeli mowa o tej drugiej, potrafi analizować blisko 30 różnych standardów. Dodatkową zaletą jest to, iż potrafi pracować w trybie standalone, czyli po podłączeniu zewnętrznej baterii nie potrzebuje komputera do wykonania niektórych operacji. Zdjęcie sprzętu w jednej z wypuszczonych rewizji przedstawione jest poniżej.

High-frequency i Mifare

Rozpoczynając temat HF w zdecydowanej większości mamy do czynienia ze standardem Mifare, którego możemy spotkać w różnych odsłonach i wariantach. Na tapetę weźmiemy ten, którego spotkać można w przeróżnych biurach, kartach miejskich, hotelach czy legitymacjach studenckich.

Mifare Classic 1k, bo o nim mowa charakteryzuje się wewnętrzną pamięcią 1k, którego strukturę pokazuje na screenshocie poniżej.

Widzimy tutaj, iż pamięć podzielona jest na 16 sektorów, każdy po cztery 16-to bajtowe bloki. Z czego blok zerowy, sektora zerowego jest blokiem fabrycznym, jednorazowego zapisu (zapamiętajcie ten szczegół na potem). Dostęp do każdego z sektorów zabezpieczony jest kluczami (Key A i Key B), z czego Access Bits definiują, który z tych kluczy ma jakie uprawnienia. Na przykład klucz A może mieć uprawnienia do czytania sektora, klucz B natomiast do zapisu albo odwrotnie. Na pierwszy rzut oka wydaje się to być bardzo słusznym i bezpiecznym podejściem. Bowiem, żeby mieć możliwość w pełni kontrolować dane karty, potrzebujemy znać masę kluczy. Niestety, zbiegiem czasu okazało się, iż standard ten jest niesamowicie dziurawy.

Wektory ataków

Przede wszystkim okazuje się, iż wielu użytkowników nie zmienia domyślnych kluczy, których lista jest powszechnie znana, co oczywiście nie jest błędem i problemem samego standardu, ale wykorzystując znaną podatność można bardzo gwałtownie przewidzieć klucze do całej karty, jeżeli znany jest nam chociaż jeden. Mając w swoim arsenale Proxmarka możemy uruchomić ataki, które dostajemy ze sprzętem out-of-the-box. Nie wchodząc zbytnio w szczegóły zasady działania poszczególnych podatności, do dyspozycji mamy dwa ataki:

  1. Nested: jeżeli znany jest nam choć jeden klucz. W takim scenariuszu zdobycie reszty kluczy na Proxmarku zajmuje około 15 sekund.
  2. Darkside: jeżeli żaden klucz nie jest nam znany (co się bardzo rzadko zdarza). Wtedy atak trwa zwykle minutę.

Szczęście jest takie, iż w niektórych rozwiązaniach nie musimy się choćby dorywać do żadnych kluczy. Nie musimy choćby danych z kart wyciągać. Każdy SKD (System Kontroli Dostępu), z którym miałem do czynienia (a analizowałem ich od groma) i który oparty był na standardzie Mifare Classic 1k działa zawsze w ten sam sposób. Otóż decyzja o tym czy ktoś ma zostać wpuszczony do budynku zaszyta jest w pierwszym bloku karty. Tym fabrycznym, jednokrotnego zapisu (który mieliście zapamiętać).

Ktoś kiedyś wpadł na dość niezły pomysł, iż ten fragment pamięci może służyć do SKD. Jest to fragment danych dostępny dla wszystkich, bez konieczności używania kluczy a przy okazji bezpieczny, bo nikt na żadną swoją kartę nie będzie mógł jej sklonować, pomimo, iż może odczytać UID karty wszędzie i wszystkim. Niestety, ktoś, kto zaproponował to rozwiązanie nie zauważył pewnej dziury i nie wziął pod uwagę jednego, dość kluczowego aspektu. Mianowicie, iż nasz ziemski padół dzielimy z narodem chińskim, który znany jest z tego, iż wypuszcza na świat dużo swoich rozwiązań. I tak, w słynnym chińskim internetowym sklepie można kupić karty Mifare (w hurcie za 50gr/szt.) z odblokowanym blokiem fabrycznym.

Proxmark rozpoznaje tego typu karty pieszczotliwie oznaczając je jako „chinese backdoor”. W tym momencie nic nie stoi na przeszkodzie, by mając jedną kartę do biura, dorobić sobie jej klona.

Przykład ataku na biuro

Jest też inny, łatwiejszy sposób na zdobycie dostępu do biura posiadawszy w swoim ekwipunku Proxmarka. jeżeli pamiętacie, wcześniej wspomniałem o tym, iż sprzęt ten działać może w trybie standalone, w którym może wykonywać pewne czynności. I tak się szczęśliwie składa, iż jedną z tych opcji jest możliwość symulacji kart. Proxmark jest w ten sposób skopiować jedynie UID karty, co jak już wiemy jest nam jedynie potrzebne do osiągnięcia sukcesu. Poniższy film najlepiej ilustruje jak taki atak może wyglądać.

Więcej przykładów z życia

Hotele są kolejnym przykładem na to, iż tylko część karty jest czytana w celu sprawdzenia, czy klucz do pokoju jest prawidłowy i ważny. Przykładowy zrzut klucza hotelowego zamieszczam poniżej.

Na zrzucie można łatwo odczytać miejsce, w którym zapisany jest numer pokoju (czerwona ramka) jak i check-in i check-out (ramka zółta). Nadmienie, iż nie wystarczy zmienić jedynie numeru pokoju czy okresu pobytu. Taka karta zostanie bowiem odrzucona i nie zostaniemy wpuszczeni do pokoju. Niestety, jako, iż system ten jest powszechnie używany w większości hoteli, a vendor nie planuje łatki, nie mogę zdradzić jaką dodatkową modyfikację należy zrobić, by do wybranego przez siebie i niekoniecznie opłaconego pokoju wejść. Mogę jedynie zdradzić, iż nie jest to super skomplikowane. Pozostawię to dla waszej własnej eksploracji.

Mieszkając w mieście i poruszając się po nim publiczną komunikacja, dość popularnym i wygodnym rozwiązaniem jest posiadanie karty miejskiej. Raz na miesiąc/kwartał/semestr/rok(?) płacimy doładowując kartę i mamy z głowy kupowanie biletów na każdy przejazd. Swego czasu postanowiłem prześwietlić kartę, zobaczyć jakie tajemnice w sobie kryje i być może coś namieszać. Tutaj również cały na biało wchodzi Mifare. I dopiero tutaj okazuje się, iż znajomość wszystkich kluczy do karty jest nam potrzebna, ponieważ to w karcie zapisane są dane odnośnie naszego biletu.

To, co widzicie powyżej to zrzut mojej starej, nieaktywnej już karty. Pierwsze 4 bajty dane zostały przeze mnie usunięte, ponieważ zawierają informacje o moim numerze biletu zapisane w little endianie.

Sposób badania i próba zrozumienia w jaki sposób dane są zapisane był dość prosty. Przy i po każdym doładowaniu biletu wystarczyło zrobić dump pamięci i porównać zawartość. Po paru miesiącach intensywnego researchu byłem w stanie dość do tego, które bajty do czego służą i za co odpowiadają. Jak przystało na prawdziwego programistę taki proces należy zautomatyzować (i najlepiej po Bożemu, w Pythonie).

Rezultat:

Tak jak w przypadku hotelu, tutaj też nie mogę zdradzić szczegółów. Chociaż dostawca usługi został poinformowany o problemie, to nie planuje implementować zmian tłumacząc to tym, iż „takich jak ja” jest bardzo mało i ryzyko biorą na klatę. Totally make sense.

Zastosowań Mifare-ów pozostało mnóstwo, ale zostawie je dla was byście mogli sami zbadać interesujące was obszary. Polecam wyciągi narciarskie.

Podsumowanie

Ale jeszcze na zakończenie odpowiedzmy sobie na pytanie czy Mifare jest czystym złem i powinien spłonąć w piekle? No nie, choćby jeżeli używamy najmniej bezpiecznego wariantu (który jest wciąż powszechnie i praktycznie wszędzie stosowany) wystarczy robić to z głową. Przykładem dobrej praktyki jest np. Karta Mieszkańca Gdańska, która ma w sobie zapisany jedynie UID karty (ten, który możemy łatwo zczytać), ale każda weryfikacja następuje po stronie serwera, więc nie ma sposobu na oszukanie systemu.

Chyba, iż podkradniemy koledze jego kartę, zapiszemy jej numer, zapiszemy numer na czystej karcie, kupimy drukarkę do kart i wydrukujemy na nim jego dane, i wchodząc za friko do ZOO pomodlimy się by nie sprawdzili naszego dowodu osobistego. Trochę dużo zachodu, a ZOO jest w miarę tanie.

O Autorze

Na codzień Kamil spędza 8h pracując dla nordyckiego Banku jako Senior Pentester, gdzie głównym jego zadaniem jest wyszukiwanie i ujarzmianie przeróżnych podatności w web aplikacjach czy infrastrukturze. Oprócz tego Kamil jest wielkim fanem niskopoziomowego security i uważa, iż surowe bajty są całkiem seksowne. Ostatnimi czasy romansuje również z falami radiowymi i wziął sobie za cel zhakowanie swojego 10-letniego Renault Clio. Prywatnie kolekcjoner wszystkiego co jest związane z video gamingiem, lubi warzyć piwo i grać na okarynie.

Dziękujemy autorowi za to, iż zechciał podzielić się swoją wiedzą i doświadczeniem na łamach SecurityBezTabu.pl

Idź do oryginalnego materiału