Мне кажется, что многие парни, особенно в юном возрасте, хотели быть крутыми хакерами. Взламывать сайты, телефоны, системы доступа. Вот и у меня немного остался этот мальчишеский задор. Поэтому периодически ковырялся в различном ПО и ничего стоящего не находил. Но однажды, мне подвернулась удача, да еще какая! СКУД, полная уязвимостей, которые позволяют получить доступ к управлению всей системой (открытие/закрытие дверей, добавление своей карты прохода и т.д.).


Интересно? Тогда добро пожаловать под кат!


Все описанное ниже проводилось на тестовом стенде. Статья написана исключительно в ознакомительных целях и вообще это все выдумка автора.


СКУД — система контроля и управления доступом


Так получилось, что одно время я работал на строительно-дорожном предприятии, где мною был написан комплекс программ по выдаче пропусков, выдаче питания по этим пропускам и составлению отчетности. Мне понадобилось все это интегрировать с одной достаточно популярной СКУД. Разработчики долго отвечали на запросы по документации, а сроки горели. Мне пришлось самому разбираться в их ПО.



Примерная схема работы СКУД


Я начал изучение с базы данных. Сервер СКУД работает с БД firebird 2.5. Логин и пароль к ней оказались стандартными, что уже очень насторожило, но пароль можно задать в настройках программы. Пароли в БД к учетным записям хэшированы, но без соли, что плохо, но опять же некритично. В ней хранятся все зоны прохода, пользователи, номера их карт, доступы и адреса контроллеров.



БД


Дальше берем какую-нибудь программу для сниффинга трафика (я взял “SmatrSniff”, первое попавшееся, что может просматривать трафик localhost) и смотрим, что шлет клиент к серверу. Все данные идут по TCP и часть по UDP в незашифрованном виде. И тут начинается самое интересное. Сервер сначала отсылает в открытом виде пароль от БД, ее месторасположение и только потом проверяет логин и пароль!



Пароль от базы "masterkey"


Получается, что, не зная логина и пароля, мы можем получить полный доступ к базе данных, что дает нам практически безграничные возможности. Мы можем выдать себе карту с доступом на любой объект. Прописать другому пользователю свою карту и заходить под его именем. Но чтобы эти данные загрузились на контроллеры, надо дать команду серверу из клиента. Хоть мы и можем взять пароль к клиенту из БД воспользоваться открытыми базами MD5 и попробовать подобрать пароль к хэшу (напомню, что пароли в базе без соли), но если пароль задан сложный, то скорее всего ничего не выйдет. Придется ждать, когда кто-нибудь нажмет на кнопку полной выгрузки.


Дальше я посмотрел, а влияет ли вообще на что-то авторизация. Для этого я попробовал повторять запросы к серверу с помощью “TCP / IP Builder”. И да, последующие запросы на сервер, без авторизации не работают (присылает в ответ отказ). Тут я немного приуныл, потому что для интеграции придется реализовывать повторение всей цепочки авторизации и только потом отправлять пакет для загрузки данных в контроллер.


Напоследок я решил повторить запрос перевода двери в открытый режим. Сервер ответил «ok», а дверь запищала. Без какой-либо авторизации. Я повторил это же с другого компьютера в локальной сети и это тоже сработало.



Примерный вид пакета


Это значит, что мы можем открыть/закрыть любую дверь с любого компьютера в локальной сети. Прописать себе карту и сразу загрузить эти данные в контроллеры. После чего спокойно пройтись по объектам и удалить все логи нашего посещения.


Я убил еще пару часов на изучение протокола общения контроллера с сервером, чтобы окончательно доломать, но у меня не получилось до конца понять формат данных. Но уверен, что и тут нет никакой защиты. В пакетах точно есть mac-адреса контроллера и сервера/шлюза (привязка к серверу идет по mac-адресу, в базе нет никаких ключей шифрования и подобного, поэтому, скорее всего, можно притворяться сервером для контроллера зная mac сервера). К сожалению, дампов и доступа к оборудованию не осталось, поэтому не могу показать.


В итоге имеем полную уязвимостей СКУД, которые дают нам неограниченный доступ к проходам на объекты. Из-за дешевизны составляющих и бесплатного ПО эта СКУД весьма распространена. Она стоит во многих школах Москвы, и я видел ее на других объектах. Фирма гордится призовыми местами на разных мероприятиях. Я специально не называю имя этой организации, и я также не писал им об этом. Потому что считаю, что такие уязвимости на уровне архитектуры не получится исправить без переписывания всего ПО с нуля и обновления всего оборудование людей, купивших эту систему (есть еще несколько серьезных дыр на уровне архитектуры, но их описание увеличило бы статью втрое). Тем, кто узнал по скрину СКУД и она установлена у вас — советую полностью изолировать сеть (что вроде и так считается «best practices») в которых находятся все составляющие системы, а доступ к базе для добавления сотрудников сделать только через VPN. Также может помочь грамотная настройка маршрутизации.