Dober dan vsem. Najprej bom razložil ozadje in pojasnil, kaj me je spodbudilo k tej raziskavi, najprej pa opozorilo: vsi praktični ukrepi so bili izvedeni s soglasjem upravnih organov. Vsak poskus uporabe tega gradiva za vstop na prepovedana območja brez dovoljenja je kaznivo dejanje.
Началось все с того, что убираясь на столе, я случайно поместил RFID ключ от подъезда на NFC-считыватель ACR122 — каково же было мое удивление, когда Windows воспроизвела звук обнаружения нового устройства, а светодиод загорелся зеленым. Я до этого момента полагал что эти ключи работают исключительно в стандарте Proximity.

Ker pa je bralec to videl, je to pomenilo, da ključ ustreza enemu od protokolov poleg standarda ISO 14443 (znanega tudi kot Near Field Communication, 13,56 MHz). Čiščenje je bilo takoj pozabljeno, saj sem videl priložnost, da se obeska za ključe povsem znebim in shranim ključ od vhoda na telefon (stanovanje je že dolgo opremljeno z elektronsko ključavnico). Po preučevanju sem odkril, da se pod plastiko skriva oznaka Mifare 1k NFC – isti model, kot ga najdemo na značkah podjetij, prometnih karticah itd. Poskusi dostopa do sektorjev ključa so bili sprva neuspešni, in ko sem končno razbil ključ, se je izkazalo, da je uporabljen le tretji sektor, ki podvaja UID čipa. Zdelo se je preveč preprosto in izkazalo se je, da je tako, in tega članka ne bi bilo, če bi šlo vse točno po načrtih. Zdaj imam drobovje ključa in ni težav, če moram ključ kopirati na drugega enakega. Naloga pa je bila prenesti ključ na mobilno napravo, kar sem tudi storil. Takrat se je zabava začela – imamo telefon – iPhone SE z nameščenim iOS 13.4.5 Beta različica 17F5044d и некоторыми кастомными компонентами для свободной работы NFC — на этом подробно останавливаться не буду в силу некоторых объективных причин. При желании все сказанное далее применимо и для системы Android, но с некоторыми упрощениями.
Seznam nalog, ki jih je treba rešiti:
- Dostop do ključne vsebine.
- Implementirajte možnost emulacije ključa s strani naprave.
Если с первым все было относительно просто, то со вторым возникли проблемы. Первая версия эмулятора не сработала. Проблема была довольно быстро обнаружена — у мобильных устройств (что iOS, что Android) в режиме эмуляции — UID динамический и независимо от того, что зашито в образе — плавает. Вторая версия (запускаемая с правами суперпользователя) жестко фиксировала серийный номер на выбранном — дверь открывалась. Однако я хотел сделать все идеально, и в итоге собрал законченную версию эмулятора которая могла открывать дампы Mifare и эмулировать их. Поддавшись внезапному порыву, я изменил ключи секторов на произвольные, и попытался открыть дверь. И она… ODPRTO! Čez nekaj časa sem ugotovil, da se odpirajo koli Vrata s to ključavnico, tudi tista, za katera originalni ključ ni ustrezal. Glede na to sem ustvaril nov seznam opravil:
- Ugotovite, kateri krmilnik je odgovoren za delo s tipkami
- Preverite, ali obstaja omrežna povezava in skupna baza podatkov
- Ugotovite, zakaj praktično neberljiv ključ postane univerzalen
Po pogovoru z inženirjem upravljavske družbe sem izvedel, da uporabljajo preproste krmilnike Iron Logic z5r brez povezave z zunanjim omrežjem.
Čitalnik MF CP-Z2 in krmilnik IronLogic z5r
Dobil sem komplet opreme za poskuse:

Kot lahko vidite iz tega, je sistem popolnoma avtonomen in izjemno primitiven. Sprva sem mislil, da je krmilnik v načinu učenja – kar pomeni, da prebere ključ, ga shrani v pomnilnik in odpre vrata. Ta način se uporablja, ko je treba shraniti vse ključe, na primer pri menjavi ključavnice v stanovanjski hiši. Vendar ta teorija ni bila potrjena – ta način je programsko onemogočen, mostiček je v aktivnem položaju – in vendar, ko predstavimo napravo, vidimo tole:
Posnetek zaslona postopka emulacije na napravi

... in krmilnik signalizira, da je dostop odobren.
Težava je torej v programski opremi krmilnika ali čitalnika. Preverimo čitalnik – deluje v načinu iButton, zato bomo priključili varnostno kartico Bolid – videli bomo lahko izhod čitalnika.
Plošča bo kasneje priključena preko RS232.

Z večkratnimi poskusi ugotovimo, da bralnik v primeru neuspešne avtorizacije posreduje isto kodo: 1219191919
Situacija se začenja izboljševati, vendar na tej točki ne razumem, zakaj se krmilnik na to kodo odzove pozitivno. Sumim, da je bralnik pri polnjenju baze podatkov – bodisi po nesreči bodisi namerno – s predložitvijo kartice z različnimi sektorskimi ključi poslal to kodo in krmilnik jo je shranil. Žal nimam lastniškega programerja IronLogic za dostop do baze podatkov ključev krmilnika, vendar upam, da mi je uspelo opozoriti na težavo. Na voljo je video demonstracija, kako zaobiti to ranljivost. .
P.S. Dejstvo, da sem z isto metodo lahko odprl vrata v poslovnem centru v Krasnojarsku, govori proti teoriji naključnega seštevanja.
Vir: www.habr.com
