Nezařazené | 11. 3. 2015

Bezpečnost identifikačních systémů na bázi RFID

Doba klasických docházkových štípacích hodin je ta tam, a pokud firemní kultura vyžaduje sledování přítomnosti pracovníků na pracovišti, popř. je nutné ve firmě či organizaci selektivním způsobem řešit přístupová práva do různých částí budov nebo využití výrobních prostředků, nabízí se jako rychlé, spolehlivé a levné řešení RFID. V následujícím článku rozebereme bezpečnostní rizika a skryté hrozby tohoto na první pohled výhodného řešení problému.

Jako student si pamatuji z menzy stravenky, ale současná generace strávníků již několik let úspěšně používá k prokazování identity „čipové karty“. Najdete je ve firmách, kde se pomocí nich sleduje pracovní doba, pustí vás pouze do místností, kam máte přístup a ne jinam, v závodní jídelně si pomocí čipu koupíte oběd, na plaveckém bazénu nebo posilovně použijete přidělený čip pro odemknutí a zamknutí skříňky na oblečení, knihovny používají čipy jako čtenářské průkazy atd.

Na první pohled krásná idyla má však silnou slabinu – a tou je krádež identity majitele čipu. Ne všechny čipové karty jsou v tomto ohledu nebezpečné, bohužel však jeden z nejrozšířenějších a také nejlevnějších systémů je ve své hlavní podstatě zranitelný primitivním zařízením za pár korun – tzv. emulátorem karty.

RFID obecně

Jak takový docházkový systém postavený na RFID technologii vlastně pracuje? Každý RFID systém se skládá ze dvou částí:

  1. RFID tag – transponder, česky též identifikační karta, někdy nazývaná čipová karta
  2. RFID reader – zařízení pro detekci a čtení obsahu RFID tagu, česky čtečka karet

Podstatné je, že komunikace mezi čtečkou a tagem se uskutečňuje bezdrátově – pomocí elektromagnetického pole – celý systém je na obr.1. Už zde je přemýšlivému člověku jasné, že elektromagnetické pole není pouze v prostoru mezi čtečkou a tagem, ale i v blízkém okolí – řádu desítek cm. A ani čtečka, ani RFID tag nemůže vědět, zda okolní pole není snímáno libovolným dalším zařízením. Hlavní princip tedy je, že pokud se RFID tag dostane do prostoru elektromagnetického pole vytvářeného čtečkou, nabije z energie tohoto pole kondenzátor, ze kterého se využije energie pro ovlivnění tohoto pole, a tím i předání informace z RFID tagu do čtečky.

Obr. 1

Sofistikovanější RFID systémy umožňují i oboustrannou komunikaci mezi čtečkou a tagem. Od výrobce má každý vyrobený RFID tag na světě unikátní číslo – nemohou existovat dva stejné. A tato vlastnost se používá právě v případě docházkových (identifikačních) systémů. V systémové databázi organizace je nějakým způsobem spojeno vaše jméno, nebo jiné identifikační znaky právě s jediným sériovým číslem RFID tagu. Na základě přečtení tohoto sériového (unikátního) identifikátoru dojde k propojení s konkrétní osobou nebo účtem a systém od této chvíle ví, s kým komunikuje. Potom vyšle pokyn např. pro turniket, aby vás pustil, nebo vám zobrazí zbývající kredit na výběr jídla v jídelně.

V našem článku se budeme zabývat systémem, který slouží pouze k identifikaci sériovým číslem. Neumožňuje tedy ukládat do tagu žádná data, kredit ani jméno. Jsou systémy, např. MIFARE, které toto umí – použité např. v projektech OpenCard, nebo InKarta, také jsou využívány dopravními podniky Plzně a Pardubic, kde jsou v paměti tagu uloženy kromě jména i velikosti zůstatkového kreditu jízdného . Dalším příkladem jsou mýtné brány na dálnici. My zůstaneme u toho nejjednoduššího systému.

Struktura tagu EM4100 Společnost EM Microelectronics je velkým výrobcem součástek, z nichž významnou položku tvoří obvody pro RFID oblast. Jejím nejjednodušším obvodem pro RFID je čip EM4100. Pracuje na frekvenci 125 kHz. Popíšeme si blokovou strukturu tagu znázorněného na obr. 2.

Obr. 2

Obecně: Tag EM4100 je napájen energií okolního elektromagnetického pole vytvářeného anténou čtečky v jejím blízkém okolí – řádově jednotek až desítek cm. Energie tohoto pole se indukuje v cívce jako střídavé napětí, které se usměrní a slouží k napájení obvodů čtečky. Tag vysílá svoje data tak, že při odeslání posledního bitu začne vysílat bit první tak dlouho, dokud má na to energii.

Full Wave Rectifier: Celovlnný (dvojcestný) usměrňovač – střídavé napětí indukované na připojené externí cívce je usměrněno v dvojcestném Graetzově diodovém můstku.

Usměrňovač má v sobě přepěťovou ochranu, aby omezil výstupní stejnosměrné napětí, a ochránil tak interní obvody před zničením vysokým napětím.

Clock extractor: Oddělovač hodinového signálu – jeden z terminálu pro připojení cívky je použit pro generování hlavního hodinového signálu pro logické obvody. Výstup tohoto zdroje hodinového taktu řídí tzv. sequencer.

Sequencer: Řídicí logika – poskytuje všechny potřebné signály pro adresování pamětí (paměťového pole) a zajišťuje výstupní sériová data. Existují tři předprogramované typy Sequencerů pro kódování výstupních dat – Manchester kód, bi-phase kódování a PSK modulace. Bitová rychlost pro první dvě varianty může být 64 nebo 32 period odvozených z kmitočtu okolního budícího pole, v případě PSK je to pouze 16. Sequencer je řízen hodinovým signálem upraveným v oddělovači hodinového signálu a generuje každý interní hodinový signál pro obsluhu paměti a logického datového kodéru.

Data Modulator: Modulátor dat je řízen signálem „Modulation Control“ tak, aby vybudil vysoký proud v cívce tagu. V případě PSK verze – pouze u COIL2 terminálu může řídicí tranzistor spínat proud. U ostatních verzí – Manchester a bi-phase kódování – mohou řídicí tranzistory na terminálech COIL1/2 připínat Vdd napětí na cívku. Tento proces ovlivňuje pomocí cívky tagu okolní elektromagnetické pole podle dat obsažených v paměti tagu – dochází k modulaci.

Resonance Capacitor: Rezonanční kondenzátor – tvoří spolu s externí cívkou rezonanční LC obvod na 125kHz. Na přání zákazníka může být z výroby nastaven s přesností 0.5pF na hodnotu 74pF.

Organizace paměti tagu EM4100

Tag EM4100 je vybaven 64bitovou pamětí, která v sobě nese světově unikátní výrobní číslo. Těchto 64 bitů je rozděleno do pěti informačních skupin. Schematicky je organizace paměti na obr. 3. Devět bitů tvoří hlavičku, 10 bitů (P0– P9) zajišťuje řádkovou kontrolu parity, 4 bity sloupcovou kontrolu parity (PC0–PC3), 40 bitů je datových (D00–D93) a 1 bit (S0) tvoří stop bit a má hodnotu „0“.

Obr. 3

Zmíněných 9 hlavičkových bitů je z výroby vždy naprogramováno na „1“. Jedná se o synchronizační bity – informace pro čtečku, aby správně odlišila data posílaná z tagu. Hlavička je následována 10 skupinami po 4 bitech dovolující ve výsledku 100 miliard kombinací. Za každou skupinou těchto 4 datových bitů následuje řádkový paritní bit. Na závěr se vyšlou sloupcové paritní bity a přenos je zakončen stop bitem S0 „0“.

Bity D00–D03 a D10–D13 jsou oblastí pro zákaznickou identifikaci. Těchto 64 bitů se postupně vyčítá (po řádcích – jak je na obrázku) a posílá do modulátoru. V okamžiku, kdy je všech 64 bitů odesláno, začíná se opět od začátku, dokud je k dispozici dostatek energie pro napájení obvodu.

Manchester kód

Ze své zkušenosti mohu říct, že jsem se setkal pouze s Manchester kódováním. Proto i pro emulátor EM4100 tagu jsem zvolil tento druh, nicméně pro bi-phase druh modulace je to pouze otázka změny softwaru pro mikrokontrolér. Otázkou zůstává, zda by takto šlo emulovat i PSK modulaci – nezkoušel jsem, neboť jsem na takový systém nenarazil. Manchester kód je pro tento systém výhodný z několika pohledů. Jednak nevytváří v přenosových cestách stejnosměrnou složku signálu a jednak se z něj velmi jednoduše dá oddělit hodinový signál pro ovládání elektroniky/logiky.

Princip Manchester kódování je na obr. 4 a obr. 5 – zde už je konkrétně začátek přenosu dat tagu EM4100 – 9 jedničkových bitů na začátku přenosu pro synchronizaci.

Obr. 4, 5

Při tomto druhu modulace dojde totiž ke změně signálu v polovině trvání každého bitu, bez ohledu na to, zda je bit 0 nebo 1. V principu hodnota bitu „0“ je charakterizována změnou úrovně z 0 na 1 a hodnota „1“ naopak změnou úrovně z 1 na 0.

Emulátor tagu EM4100 – HW

Pro konstrukci emulátoru jsem vycházel z [4] a zvolil si mikrokontrolér Atmel AVR ATtiny 2313 v ceně asi 60 Kč, který obsahuje paměť pro 2kB kódu (1 024 instrukcí) a 128 bytů RAM. Využívá se také časovač 1 pro Manchester modulaci dat. Schéma emulátoru je na obr. 6.

Obr. 6

Celý emulátor obsahuje dále stabilizátor 5V, 7 kondenzátorů, diodu, tranzistor, dva rezistory a krystal 16 MHz, který je zdrojem hodinového signálu pro řízení mikrokontroléru. V podstatě by šlo celé zapojení zjednodušit odebráním stabilizátoru, krystalu – mikrokontrolér může být taktován interním RC oscilátorem na 8 MHz a dále by šel zjednodušit obvod resetu na jeden rezistor. Nicméně pro výukové účely nechme tuto luxusnější verzi. Hotový emulátor vidíte na obr. 7.

Obr. 7

Cívka pochází z rozebrané staré nefunkční RFID čtečky. Po změření její indukčnosti na LCR metru (měla 715 μH) byl dopočítán rezonanční kondenzátor podle vztahu (1).

V mém konkrétním případě vyšla hodnota kondenzátoru zhruba 2 270 pF. Vzhledem k nízkým kmitočtům není výsledná přesnost kapacity kritická – čím přesněji nastavíme rezonanční kmitočet blíže 125 kHz, tím bude mít náš emulátor větší dosah. Ten také závisí na jakosti Q cívky.

Emulátor tagu EM4100 – SW

Software emulátoru je napsán v jazyce C v prostředí AVR Codevision od firmy HP Infotech. Pro přesné časování využívá program 8 bitového časovače. Protože bitová rychlost je 64 cpb (cycles per bit), při kmitočtu nosné 125 kHz dostáváme dobu trvání jednoho bitu.

Protože se potřebujeme odvolávat na ½ bitů, budeme potřebovat volání časovače dvakrát častější – s periodou 256 μs, frekvence je f=3 906,25 Hz. Časovač je nastaven na 3.906 kHz. Vyslání všech 64 bitů trvá 32,768 ms. Po této době se začíná datová sekvence opakovat. Emulátor není závislý na napájení z energie elektromagnetického pole, takže modulace je prováděna nepřetržitě od zapnutí napájení.

Vlastní algoritmus se skládá ze dvou částí. První (funkce convert()) převádí identifikačních 40 bitů z pěti bajtového slova do struktury vhodné k sekvenčnímu vysílání – viz výše. Druhá část je obsluha přerušení, budící podle bitů a Manchester modulace tranzistor přes oddělovací odpor 6k8 z pinu PD3. Podíváme se podrobněji na obsluhu přerušení a generování Manchester kódu. Výpis kódu je v tabulce 1.

Tabulka 1

Pro časově přesné generování je zvolen v mikrokontroléru ATtiny2313 16 bitový časovač Timer1. Z něj je využito volání obsluhy přerušení „output compare A“. V tomto režimu je pomocí hodinových pulsů (kmitočet hodin je externím krystalem zvolen 16 MHz, předdělička pro Timer1 má nastaven registr TCCR1B na dělení kmitočtu 1024) inkrementován 16bitový registr TCNT1 s frekvencí 16MHz/1 024=15,625 kHz. Přerušení je voláno pokud dojde ke shodě obsahu registru TCNT1 a OCR1A, a právě registr OCR1A je nastaven na hodnotu 3. Tím dochází k dalšímu dělení kmitočtu signálu 4×, tedy výsledný kmitočet volání obslužné rutiny přerušení je 3 906,25 kHz, což je naše požadovaná perioda 256 μs.

Při zavolání obslužná rutina vždy vynuluje interní čítač TCNT1. Dále obsahuje počítadlo bajtů – ukazatel do 8bitového pole – proměnná „byte_counter“, počítadlo bitů – proměnná „bit_counter“ a indikátor první a druhé poloviny vysílané hodnoty – proměnná „half“. Počítadlo první nebo druhé poloviny vysílaného bitu počítá do 2, „bit_counter“ počítá do 8, „byte_counter“ taktéž do 8 – vysílá se 8 bajtů dat – včetně synchronizačních a paritních bitů. Příkaz „cbi“ nastavuje na výstupním portu D, bitu 3, hodnotu 0, „sbi“ zase hodnotu 1.

A kde je to nebezpečí

Předpokládejme, že se nám podařilo nějakým způsobem zjistit 5 bajtů (40 bitů), které má v naší hypotetické firmě přiřazen kolega ke svému jménu ve firemní databázi. To jsme mohli udělat tak, že známe databázi, kde jsou tyto relace vedené, popř. přímo obsluhujeme vydávání přístupových karet novým zaměstnancům. Také mohl kolega nechat položenou kartu na stole a pomocí jednoduché čtečky, např. modulu ID12, jsme si mohli data přečíst. Také jsme mohli v nestřeženém okamžiku data z kolegovy karty přečíst, i když ji měl na krku nebo na opasku. Tato data jsou vstupním parametrem funkce convert() a od této chvíle se emulátor navenek tváří jako kolegova karta. Můžeme procházet dveřmi, jako by to byl on, můžeme chodit do kantýny a odebírat jídlo a zboží na jeho účet. Pokud si vyrobíme kopii vlastní karty, můžeme po domluvě s někým jiným odcházet z práce později než ve skutečnosti jdeme apod. Bezpečnostních hrozeb je zde nespočet.

Závěr

Článek ukázal praktickou ukázku nebezpečí – krádeže identity – které může nastat používáním RFID karet první generace – tedy těch, které neobsahují žádné vnitřní algoritmy a mechanismy pro autentizaci nositele. Protože je na tomto čipu – EM4100 – postaveno spousta docházkových a identifikačních systémů, vnímám toto zastaralé řešení jako velmi děravé a snadno zneužitelné. Pro tyto systémy doporučuji používat karty, které obsahují hesla, klíče nebo jiné zabezpečení a nedají se takto jednoduše „naklonovat“ – např. MIFARE 3DES a pod. Stejným nedostatkem trpí i verze systému HID Prox, kde je pouze jiná vnitřní struktura paměti, ale jedná se také o posílání jedinečného identifikačního/ sériového čísla.

Ondřej Pavelka

Literatura a odkazy:

[1] EM4100 125 KHz Desktop Card Reader Datasheet

[2] P. Sorrells, Passive RFID Basics (AN680), Microchip Technology Inc.

[3] J. Westhues, Proximity Cards, http://cq.cx/prox.pl [4] M. Krumnikl, Unique (EM4001) RFID Emulator, August 2007