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

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

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

Начало работ.
Первым делом я скопировал Block0 (тот, что содержит UID и Manufacturer information) на болванку Mifare Zero и проверил, что этого недостаточно — брелок не заработал. Считыватель даже не реагировал на поднесение такого клона. Стало понятно, что нужно искать ключ от секторов 8 и 12. Прочитав все из имеющихся брелоков я увидел, что только в одном из них залочен 12 блок, в остальных он нулевой, поэтому очевидно, что магия содержится в блоке 8.
Самое время достать дареный считыватель и рассмотреть его пристальнее. Итак имеем FD-020–017 — 13,56 МГц, интерфейс Wiegand26. Платы MFRC531 и CC2541 соединены 10-контактной гребенкой. И он прекрасно заработал на столе — без остальной системы. Реагировал на ключи так же как и остальные считыватели. Для начала посмотрим, что идет наружу:
kfsywm6pgxzqcggydxffit8-nnw.png
Тишина ровно до поднесения валидного брелока. После прочтения в интерфейс уходит сообщение в полном соответствии с Wiegand26. Таким образом я декодировал посылку, которую отправляет мой ключ. С помощью мультиметра я восстановил распиновку, оказалось что микросхемы общаются по SPI. Подключаем анализатор,
2sz6pu-h8fykc157m8vbc3xgfyy.png
подносим валидный брелок и смотрим обмен по SPI:
j3gduiwafbqwrjznhpjmvlq3p2u.png
Далее я начал смотреть документацию на микросхему MFRC531 и почти опустил руки увидев, что она имеет специальную EEPROM для хранения ключей. Я нашел команды для подгрузки ключа:
gmzbx6c4cu4de6ut89jbkfxkwbe.png
Команда 0×0B загружает из EEPROM, команда 0×19 из FIFO, в который в свою очередь ключ попадает по SPI. Казалось бы если подгружать ключ из EEPROM, то у меня нет шансов для реверса таким путем, НО к моему удивлению команды 0×0B в обмене нет, зато есть команда 0×19
qjwizk-mxiizgq5kgafox6puguu.png
Осталось только собрать ключ согласно формату
rhefak-ucxfeotu8c5_aps6xm0k.png
И добавить в key лист.
ttganzuuekb2ntx4xwjeucldgbm.png
Бинго!!! Оказалось, что блок 8 начинается с 3х ненулевых байт, которые как раз и уходят в Wiegand при соответствии ключей брелока и считывателя. Эти данные никак не связаны с UID — скорее всего это просто порядковый номер при выдаче в УК. У моих брелоков было 3 номера подряд + один сильно отличающийся. Запись болванки прошла успешно, я объединил ключ от ЖК с ключом от офиса, который работает по UID.

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

© Habrahabr.ru