Ziua bună tuturor. Voi începe cu contextul despre ceea ce m-a determinat să efectuez această cercetare, dar mai întâi vă voi avertiza: toate acțiunile practice au fost realizate cu acordul structurilor de conducere. Orice încercare de a folosi acest material pentru a intra într-o zonă restricționată fără dreptul de a fi acolo constituie infracțiune penală.
Totul a început când, în timp ce curățam masa, am plasat din greșeală cheia de intrare RFID pe cititorul ACR122 NFC - imaginați-vă surpriza mea când Windows a redat sunetul detectării unui nou dispozitiv și LED-ul a devenit verde. Până în acest moment, am crezut că aceste chei funcționează exclusiv în standardul de Proximitate.

Dar, din moment ce cititorul a văzut-o, înseamnă că cheia îndeplinește unul dintre protocoalele de peste standardul ISO 14443 (aka Near Field Communication, 13,56 MHz). Curățenia a fost imediat uitată, deoarece am văzut o oportunitate de a scăpa complet de setul de chei și de a păstra cheia de la intrare în telefon (apartamentul a fost de mult echipat cu încuietoare electronică). După ce am început să studiez, am aflat că ascunsă sub plastic se află o etichetă Mifare 1k NFC - același model ca în insignele de întreprindere, cardurile de transport etc. Încercările de a intra în conținutul sectoarelor nu au avut succes la început, iar când cheia a fost în cele din urmă spartă, s-a dovedit că a fost folosit doar al 3-lea sector, iar UID-ul cipului însuși a fost duplicat în el. Părea prea simplu și s-a dovedit a fi așa și nu ar exista niciun articol dacă totul decurgea exact conform planului. Așa că am primit măruntaiele cheii și nu există probleme dacă trebuie să copiați cheia pe alta de același fel. Dar sarcina a fost să transfer cheia pe un dispozitiv mobil, ceea ce am făcut. Aici a început distracția - avem un telefon - iPhone SE cu instalat iOS 13.4.5 Beta build 17F5044d și câteva componente personalizate pentru funcționarea gratuită a NFC - nu mă voi opri în detaliu asupra acestui lucru din cauza unor motive obiective. Dacă se dorește, tot ce se spune mai jos se aplică și sistemului Android, dar cu unele simplificări.
Lista sarcinilor de rezolvat:
- Accesați conținutul cheii.
- Implementați capacitatea de a emula o cheie de către dispozitiv.
Dacă la primul totul a fost relativ simplu, atunci cu al doilea au apărut probleme. Prima versiune a emulatorului nu a funcționat. Problema a fost descoperită destul de repede - pe dispozitivele mobile (fie iOS sau Android) în modul de emulare, UID-ul este dinamic și, indiferent de ceea ce este conectat în imagine, plutește. A doua versiune (rulată cu drepturi de superutilizator) a fixat rigid numărul de serie pe cel selectat - ușa s-a deschis. Cu toate acestea, am vrut să fac totul perfect și am ajuns să pun împreună o versiune completă a emulatorului care ar putea deschide depozitele Mifare și să le emuleze. Cedând unui impuls brusc, am schimbat cheile de sector cu unele arbitrare și am încercat să deschid ușa. Si ea… DESCHIS! După un timp mi-am dat seama că se deschid orice ușile cu această încuietoare, chiar și cele la care nu se potrivea cheia originală. În acest sens, am creat o nouă listă de sarcini de finalizat:
- Aflați ce fel de controler este responsabil pentru lucrul cu cheile
- Înțelegeți dacă există o conexiune la rețea și o bază comună
- Aflați de ce o cheie practic imposibil de citit devine universală
După ce am vorbit cu un inginer de la compania de management, am aflat că controlerele simple Iron Logic z5r sunt folosite fără a fi conectate la o rețea externă.
Cititor CP-Z2 MF și controler IronLogic z5r
Mi s-a oferit un set de echipamente pentru experimente:

După cum este clar de aici, sistemul este complet autonom și extrem de primitiv. La început am crezut că controlerul era în modul de învățare - semnificația este că citește cheia, o stochează în memorie și deschide ușa - acest mod este folosit atunci când este necesar să înregistrezi toate cheile, de exemplu, la înlocuirea încuietoare într-un bloc de apartamente. Dar această teorie nu a fost confirmată - acest mod este dezactivat în software, jumperul este în poziția de lucru - și totuși, când aducem dispozitivul în sus, vedem următoarele:
Captură de ecran a procesului de emulare pe dispozitiv

... iar controlerul semnalează că accesul a fost acordat.
Aceasta înseamnă că problema constă în software-ul controlerului sau al cititorului. Să verificăm cititorul - funcționează în modul iButton, așa că haideți să conectăm placa de securitate Bolid - vom putea vizualiza datele de ieșire de la cititor.
Placa va fi conectată ulterior prin RS232

Folosind metoda testelor multiple, aflăm că cititorul difuzează același cod cu în cazul eșecului autorizației: 1219191919
Situația începe să devină mai clară, dar momentan nu îmi este clar de ce controlerul răspunde pozitiv la acest cod. Se presupune că atunci când baza de date a fost completată - din întâmplare sau intenționat a fost prezentat un card cu alte chei de sector - cititorul a trimis acest cod și controlorul l-a salvat. Din păcate, nu am un programator proprietar de la IronLogic care să caute în baza de date a cheilor controlerului, dar sper că am reușit să atrag atenția asupra faptului că problema există. Este disponibilă o demonstrație video a lucrului cu această vulnerabilitate .
PS Teoria adunării aleatoare este opusă de faptul că într-un centru de afaceri din Krasnoyarsk am reușit să deschid ușa folosind aceeași metodă.
Sursa: www.habr.com
