Watch Dogs в реальной жизни, или серьезные уязвимости в СКУД

в 19:51, , рубрики: информационная безопасность, реверс-инжиниринг, СКУД, уязвимость

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

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

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

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

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

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

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

image
БД

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

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

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

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

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

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

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

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

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

Автор: whoch

Источник

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js