СКУД моего ЖК — безопасность на двух болтах

в 22:55, , рубрики: diy или сделай сам, mifare, NFC, NXP, RFID, безопасность, Беспроводные технологии, взлом, информационная безопасность, реверс-инжиниринг, СКУД

Спешу предупредить читателей: Данная статья написана только для ознакомления, и ни в коем случае не призывает к любым противоправным действием. Автор не несет ответственности за любые неправомерные действия совершенные людьми с использованием информации из данной статьи.
СКУД моего ЖК — безопасность на двух болтах - 1
Приветствую читатель. Сегодня я хочу поговорить о безопасности систем контроля и управления доступом (СКУД) в целом и на примере моего ЖК. Будут рассмотрены основные уязвимости, а также совершена успешная попытка копирование ключей. Все манипуляции будут носить в основном аппаратный характер.

В моем жилом комплексе установлена домофонная система Sinthesi S2, а также система доступа двор/подъезд/этаж производства Urmet Group. Вот так классно выглядела уличная панель
СКУД моего ЖК — безопасность на двух болтах - 2
пока однажды не стала выглядеть так:
СКУД моего ЖК — безопасность на двух болтах - 3
Провисела она так пару дней, а потом перекочевала в мусорный контейнер неподалеку. В ней был только считыватель и кнопочная панель. Потому как одним из направлений в моей компании является разработки HF считывателей я не удержался и решил изучить этот RFID считыватель подробнее. Из документации я нашел только огромный каталог из которого можно было сделать вывод, что это FD-020-017 — 13,56 МГц считыватель с интерфейсом Wiegand26. Внутри был бутерброд из плат считывателя (MFRC531) и МК с BLE (CC2541) приклеенные термоклеем к корпусу, который разрабатывался явно не под эту плату.
СКУД моего ЖК — безопасность на двух болтах - 4
Плата МК залита мягким компаундом видимо для защиты радиочасти от влаги. Покрутив в руках плату я ее отложил.
До недавнего времени работа системы меня не интересовала, поскольку она была частично запущена (работали только подъездные замки, но на них был код доступа, который я знал и ключом не пользовался). После полного запуска системы и отмены кодов доступа я начал изучать ее подробнее. Началось это одной из ночей, когда я вернувшись домой обнаружил, что тамбурная дверь уже работает и жена уже спит. С собой у меня были только карманные вещи, но как оказалось этого вполне достаточно, чтобы обойти всю элитную безопасность (как заверяет Urmet).
СКУД моего ЖК — безопасность на двух болтах - 5
Все что мне было нужно это открутить ключом от машины 2 болта держащих рамку панели, вынуть 2 блока и тем же ключом замкнуть релейный канал идущий на замок двери тамбура. Все…
После этого случая, когда я смотрю очередной голливудский фильм («Пассажиры»(2016г.) на КДПВ) и вижу как супер секретные двери открывают путем снятия кодовой панели и засовывания в плату булавки (обязательно с искрами и эффектным открытием двери), то вижу вполне реальную ситуацию.
На моей памяти большинство СКУД, которые я видел, имеют выход на замок прямо с кодовой панели и именно это является главной уязвимостью. Вся безопасность обеспечивается несколькими болтами, держащими эту панель, и на вере, что эта система надежна. А ведь при этом существенно увеличить порог входа (назовем ее защитой от человека с отверткой) можно применив замки с мозгами, которые управляются интерфейсом — пусть даже самым простым. Эта мера резко уменьшит вероятность спонтанного проникновения.

Исходные данные.
СКУД ЖК в целом, ее работа, реакция на другие ключи, а также способ добавления ключей:
-Выдается один бесплатный ключ на квартиру, каждый следующий — 300р, регистрируется в личном кабинете СКУД. Купить можно только у УК. В чате ЖК писали, что рыночные копировальщики не смогли сделать дубликат — значит система круче, чем просто чтение UID.
-При поднесении любой другой карты mifare считыватель даже не подает признаков того, что он ее видит.
-При поднесении ключа к другому подъезду/этажу считыватель пикает о прочтении, но ничего не происходит.
-При чтении содержимого брелока 8 и 12 блоки скрыты и имеют ключ доступа отличный от Mifare well-known keys. Значит секрет где-то там.
СКУД моего ЖК — безопасность на двух болтах - 6

Начало работ.
Первым делом я скопировал Block0 (тот, что содержит UID и Manufacturer information) на болванку Mifare Zero и проверил, что этого недостаточно — брелок не заработал. Считыватель даже не реагировал на поднесение такого клона. Стало понятно, что нужно искать ключ от секторов 8 и 12. Прочитав все из имеющихся брелоков я увидел, что только в одном из них залочен 12 блок, в остальных он нулевой, поэтому очевидно, что магия содержится в блоке 8.
Самое время достать дареный считыватель и рассмотреть его пристальнее. Итак имеем FD-020-017 — 13,56 МГц, интерфейс Wiegand26. Платы MFRC531 и CC2541 соединены 10-контактной гребенкой. И он прекрасно заработал на столе — без остальной системы. Реагировал на ключи так же как и остальные считыватели. Для начала посмотрим, что идет наружу:
СКУД моего ЖК — безопасность на двух болтах - 7
Тишина ровно до поднесения валидного брелока. После прочтения в интерфейс уходит сообщение в полном соответствии с Wiegand26. Таким образом я декодировал посылку, которую отправляет мой ключ. С помощью мультиметра я восстановил распиновку, оказалось что микросхемы общаются по SPI. Подключаем анализатор,
СКУД моего ЖК — безопасность на двух болтах - 8
подносим валидный брелок и смотрим обмен по SPI:
СКУД моего ЖК — безопасность на двух болтах - 9
Далее я начал смотреть документацию на микросхему MFRC531 и почти опустил руки увидев, что она имеет специальную EEPROM для хранения ключей. Я нашел команды для подгрузки ключа:
СКУД моего ЖК — безопасность на двух болтах - 10
Команда 0x0B загружает из EEPROM, команда 0x19 из FIFO, в который в свою очередь ключ попадает по SPI. Казалось бы если подгружать ключ из EEPROM, то у меня нет шансов для реверса таким путем, НО к моему удивлению команды 0x0B в обмене нет, зато есть команда 0x19
СКУД моего ЖК — безопасность на двух болтах - 11
Осталось только собрать ключ согласно формату
СКУД моего ЖК — безопасность на двух болтах - 12
И добавить в key лист.
СКУД моего ЖК — безопасность на двух болтах - 13
Бинго!!! Оказалось, что блок 8 начинается с 3х ненулевых байт, которые как раз и уходят в Wiegand при соответствии ключей брелока и считывателя. Эти данные никак не связаны с UID — скорее всего это просто порядковый номер при выдаче в УК. У моих брелоков было 3 номера подряд + один сильно отличающийся. Запись болванки прошла успешно, я объединил ключ от ЖК с ключом от офиса, который работает по UID.

Заключение.
За успешный взлом системы мне нужно благодарить программиста из Urmet Group, который откровенно схалтурил при написании ПО для считывателя, потому как при наличии железа, способного исключить такой метод взлома (в целом достаточно простой), не сделать этого, ничем кроме халтуры не назовешь.
Большинство работающих с технологией RFID знает, что алгоритм шифрования Crypto-1, используемый в картах Mifare (Classic) давно взломан и можно было получить ключ от блока более «чистым» способом, но я пошел «в лоб».
В своих же проектах мы используем программируемые считыватели с one time password словарями для шифрования. Это позволяет защититься от клонирования если оригинальная карта будет приложена к считывателю раньше клона, в противном случае позволит обнаружить факт дублирования (оригинальная карта перестанет работать).

Автор: vladimir_open-dev

Источник

* - обязательные к заполнению поля