Všetkým prajem dobrý deň. Začnem s pozadím, ktoré ma podnietilo na vykonanie tohto výskumu, ale najprv varujem: všetky praktické činnosti boli vykonané so súhlasom riadiacich orgánov. Akákoľvek snaha použiť tento materiál na prenikanie na uzavreté územie bez povolenia je trestným činom.
Všetko sa začalo tým, že keď som upratoval na stole, náhodou som umiestnil RFID kľúč od vchodu na NFC čítačku ACR122 - aké bolo moje prekvapenie, keď Windows prehral zvuk detekcie nového zariadenia a LED dióda sa rozsvietila na zeleno. Doteraz som si myslel, že tieto kľúče fungujú výhradne v štandarde Proximity.

Ale ak ho čítačka videla, znamená to, že kľúč spĺňa jeden z protokolov nad rámec štandardu ISO 14443 (t.j. Near Field Communication, 13,56 MHz). Na upratovanie sa okamžite zabudlo, pretože som videl možnosť zbaviť sa kľúčov a uchovať si kľúč od vchodu v telefóne (byt je už dávno vybavený elektronickým zámkom). Po skúmaní som zistil, že pod plastom sa skrýva NFC značka Mifare 1k - rovnaký model, ktorý sa používa na identifikačných kartách, dopravných kartách atď. Pokusy o prenikanie do obsahu sektorov sprvu neprinášali úspech, avšak keď sa mi kľúč podarilo prelomiť - zistil som, že sa používa iba 3. sektor, a v ňom je zdvojené UID samotného čipu. Zdalo sa to príliš jednoduché a nakoniec sa aj ukázalo, že by neexistoval článok, ak by všetko prebehlo presne tak, ako to bolo plánované. Tak som získal vnútro kľúča, a neboli by žiadne problémy, ak by bolo potrebné skopírovať kľúč na iný rovnaký. Ale úlohou bolo preniesť kľúč na mobilné zariadenie, čím som sa aj zaoberal. A tu sa začalo zábava - máme telefón - iPhone SE s nainštalovaným iOS 13.4.5 Beta build 17F5044d a niektorými prispôsobenými komponentmi pre voľnú prácu s NFC - na tom sa podrobne zastavovať nebudem z objektívnych dôvodov. Ak si želáte, všetko, čo bude povedané ďalej, je aplikovateľné aj na systém Android, ale s niektorými zjednodušeniami.
Zoznam úloh na riešenie:
- Získať prístup k obsahu kľúča.
- Implementovať možnosť emulácie kľúča zariadením.
Ak prvé bolo relatívne jednoduché, pri druhom vznikli problémy. Prvá verzia emulátora nefungovala. Problém bol pomerne rýchlo odhalený – na mobilných zariadeniach (či už iOS alebo Android) v režime emulácie je UID dynamické a nezávisle od toho, čo je zakódované v obraze – sa mení. Druhá verzia (spustená s právami správcu) pevne zafixovala sériové číslo na vybratom – dvere sa otvorili. Avšak chcel som to urobiť dokonale, a nakoniec som zostavil dokončenú verziu emulátora, ktorá mohla otvárať dumpy Mifare a emulovať ich. Podľahol som náhlemu popudu, zmenil som kľúče sektorov na náhodné a pokúsil som sa otvoriť dvere. A ona… OTVORILA SA! Po chvíli som pochopil, že sa otvárajú akékoľvek dvere s týmto zámkom, dokonca aj tie, ku ktorým pôvodný kľúč nepasoval. V súvislosti s tým som vytvoril nový zoznam úloh na vykonanie:
- Zistiť, ktorý ovládač zodpovedá za prácu s kľúčmi
- Pochopiť, či je pripojenie k sieti a spoločná databáza
- Zistiť, prečo fakticky nečitateľný kľúč sa stáva univerzálnym
Po rozhovore s inžinierom správy spoločnosti som sa dozvedel, že používajú jednoduché ovládače Iron Logic z5r bez pripojenia k externému sieti.
Čítačka CP-Z2 MF a ovládač IronLogic z5r
Dali mi súpravu zariadení na experimenty:

Ako sa tu dá predpokladať – systém je úplne autonómny a mimoriadne primitívny. Najprv som si myslel, že ovládač je v režime učenia – zmysel je taký, že načíta kľúč, uloží ho do pamäti a otvorí dvere – tento režim sa používajú, keď je potrebné zaznamenať všetky kľúče, napríklad pri výmene zámku v bytovom dome. Ale táto teória sa nepotvrdila – softvérovo je tento režim vypnutý, skratka je v pracovnej polohe – a predsa pri priblížení zariadenia vidíme nasledovné:
Snímka procesu emulácie na zariadení

… a ovládač signalizuje, že prístup je poskytnutý.
Teda problém je v softvéri buď ovládača, alebo čítačky. Poďme skontrolovať čítačku – tá pracuje v režime iButton, teda pripojíme bezpečnostnú dosku Bolid – budeme mať možnosť pozrieť sa na výstupné dáta z čítačky.
Doska bude neskôr pripojená cez RS232

Metódou viacerých pokusov zisťujeme, že čítačka prekladá ten istý kód v prípade neúspešnej autorizácie: 1219191919
Situácia sa začína objasňovať, avšak v súčasnosti mi nie je jasné, prečo na tento kód pozitívne reaguje kontrolér. Mám podozrenie, že keď sme napĺňali databázu, náhodou alebo zámerne sme priložili kartu s inými kľúčmi sektora — čítačka poslala tento kód a kontrolér si ho uložil. Bohužiaľ, nemám k dispozícii originálny programátor od IronLogic, aby som sa pozrel do databázy kľúčov kontroléra, no dúfam, že som sa dokázal sústrediť na to, že problém existuje. Videodemonstrácia práce s touto zraniteľnosťou je k dispozícii. .
P.S. Proti teórii náhodného pridania svedečí fakt, že v jednom obchodnom stredisku v Krasnojarsku sa mi taktiež podarilo otvoriť dvere týmto rovnakým spôsobom.
Zdroj: habr.com
