Проблеми автономних СКУД — Там, звідки не чекали

Всім доброго доби. Почну з передісторії, про те, що мене спонукало провести дане дослідження, але перш за все попереджу: всі практичні дії були виконані за згодою керівників структур. Будь-яка спроба використати цей матеріал з метою проникнення на закриту територію без права там перебувати є кримінальним правопорушенням.

Почалося все з того, що прибираючись на столі, я випадково помістив RFID ключ від під'їзду на NFC-зчитувач ACR122 - яке ж було моє здивування, коли Windows відтворила звук виявлення нового пристрою, а світлодіод спалахнув зеленим. Я до цього моменту вважав, що ці ключі працюють виключно у стандарті Proximity.
Проблеми автономних СКУД — Там, звідки не чекали
Але якщо зчитувач його побачив — значить ключ відповідає одному з протоколів поверх стандарту ISO 14443 (Він же Near Field Communication, 13,56 МГц). Про прибирання було відразу забуто, тому що я побачив можливість зовсім позбутися зв'язування ключів, і зберегти ключ від під'їзду в телефоні (квартира давно обладнана електронним замком). Засівши за вивчення, з'ясував, що під пластиком ховається NFC-мітка Mifare 1k — та ж модель, що у пропусках-бейджах підприємств, транспортних картках тощо. Спроби влізти у вміст секторів спочатку успіху не приносили, а коли ключ таки вдалося зламати — з'ясувалося, що використовується лише третій сектор, і в ньому продубльовано UID самого чіпа. Виглядало надто просто, так і виявилося і не було б статті, якби все пройшло зовсім так, як задумано. Ось я отримав потрухи ключа, і ніяких проблем немає, якщо потрібно скопіювати ключ на інший такий самий. Але завдання було перенести ключ на мобільний пристрій, чим я і зайнявся. Ось тут і почалася веселість — маємо телефон — iPhone SE із встановленою iOS 13.4.5 Beta build 17F5044d і деякими кастомними компонентами для вільної роботи NFC — на цьому докладно зупинятися не через деякі об'єктивні причини. За бажання все сказане далі застосовується і для системи Android, але з деякими спрощеннями.

Список завдань для вирішення:

  • Отримати доступ до вмісту ключа.
  • Реалізувати можливість емуляції ключа пристроєм.

Якщо з першим усе було відносно простим, то з другим виникли проблеми. Перша версія емулятора не спрацювала. Проблема була досить швидко виявлена ​​- у мобільних пристроїв (що iOS, що Android) у режимі емуляції - UID динамічний і незалежно від того, що зашито в образі - плаває. Друга версія (яка запускається з правами суперкористувача) жорстко фіксувала серійний номер на вибраному - двері відчинялися. Однак я хотів зробити все ідеально, і в результаті зібрав закінчену версію емулятора, яка могла відкривати дампи Mifare і емулювати їх. Піддавшись раптовому пориву, я змінив ключі секторів на довільні, і спробував відчинити двері. І вона… ВІДКРИЛАСЯ! Через деякий час я зрозумів що відкриваються будь-які двері із цим замком, навіть ті, до яких вихідний ключ не підходив. У зв'язку з цим я сформував новий список завдань для виконання:

  • З'ясувати, що за контролер відповідає за роботу з ключами
  • Зрозуміти чи є підключення до мережі та загальна база
  • З'ясувати чому фактично нечитаний ключ стає універсальним

Поспілкувавшись з інженером керуючої компанії, я дізнався, що використовуються прості контролери Iron Logic z5r без підключення до зовнішньої мережі.

Зчитувач СP-Z2 MF та контролер IronLogic z5r
Мені видали комплект обладнання для дослідів:

Проблеми автономних СКУД — Там, звідки не чекали

Як звідси зрозуміло, система повністю автономна і вкрай примітивна. Спочатку я подумав, що контролер перебуває в режимі навчання - сенс такий, що він зчитує ключ, заносить його в пам'ять і відчиняє двері - цей режим використовують коли треба записати всі ключі, наприклад при заміні замку в багатоквартирному будинку. Але ця теорія не підтвердилася — програмно цей режим вимкнено, перемичка стоїть у робочому положенні — проте при піднесенні пристрою ми бачимо наступне:

Скріншот процесу емуляції на пристрої
Проблеми автономних СКУД — Там, звідки не чекали
… і контролер сигналізує про те, що доступ наданий.

Значить проблема у ПЗ або контролера, або зчитувача. Давайте перевіримо зчитувач – він працює в режимі iButton, отже підключимо плату безпеки Bolid – у нас буде можливість подивитися вихідні дані зі зчитувача.

Плата пізніше буде підключена через RS232
Проблеми автономних СКУД — Там, звідки не чекали

Методом множинних проб з'ясовуємо, що зчитувач транслює один і той же код у разі невдачі авторизації: 1219191919

Ситуація починає прояснюватися, проте зараз мені незрозуміло чому на цей код позитивно відгукується контролер. Є припущення, що коли наповнювали базу, випадково або спеціально піднесли карту з іншими ключами сектора, зчитувач відправив цей код і контролер його зберіг. На жаль я не маю фірмового програматора від IronLogic щоб заглянути в базу ключів контролера, але сподіваюся мені вдалося звернути увагу на те, що проблема існує. Відеодемонстрація роботи з даною вразливістю доступна за посиланням.

PS Проти теорії з випадковим додаванням виступає той факт, що в одному бізнес-центрі Красноярська мені так само вдалося відчинити двері цим же методом.

Джерело: habr.com

Додати коментар або відгук