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


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


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


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


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


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


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


image
БД


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


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


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


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


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


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


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


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


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

Комментарии (8)


  1. usbstor
    19.05.2019 00:24

    я как проектировщик всегда разделяю физически общую сеть и предназначенную для СКУД (ЛВС СБ).
    СКС общая, но вся активка выделенная.


  1. Naves
    19.05.2019 02:30

    У кучи контроллеров не то, что шифрования нет, даже авторизации по паролю нет. Прописать нужные карты можно вообще без какого-либо сервера.
    Серверная часть отдельная песня, или стандартные пароли, или какой-нибудь 1234567. Один СКУД меня поразил оригинальностью, MySQL база доступная из сети на нестандатном порту 3307 с пустым паролем root. Хочется надеяться, что просто забыли указать слушать только интерфейс localhost, и это не by design.


    1. whoch Автор
      19.05.2019 15:43

      Мне непонятно, откуда настолько детские ошибки в проектировании? Это из-за нехватки времени/денег на разработку? Или настолько низки уровень квалификации? Но в это не хочется верить. Интересно было бы послушать людей, которые работали в подобных компаниях.


      1. Nosgoth
        19.05.2019 18:08

        Вопрос экономии денег скорее всего.


      1. pyrk2142
        19.05.2019 20:14

        От одной компании я достаточно давно получил примерно такой ответ: «Мы отказались от безопасности в пользу скорости разработки». Вероятно, это довольно частое явление, но не все готовы признаться в этом.

        А второй вопрос — что получают разработчики (именно разработчики, а не безопасники) за изучение условного OWASP и десятков других более специализированных сайтов? Грамоту от начальства, непонимание от коллег («Зачем тебе это? Тратишь кучу времени, голову людям морочишь, пойдём лучше поедим, тут десерт вынесли»), критику от семьи за кучу потраченного свободного времени, либо что-то достаточно ценное в материальном плане? Сомневаюсь, что последнее.


    1. Shamanay
      20.05.2019 06:04

      Прописать нужные карты можно вообще без какого-либо сервера

      Можно подробнее?


      1. Naves
        20.05.2019 10:25

        Просто нужно знать протокол от конкретной модели контроллера, либо отреверсить подключение с сервера, все идёт открытым текстом, понимать значение всех полей необязательно, достаточно найти в каких байтах пишется номер карты и пересчитать crc. В какой-то статье в комментариях про это расписывал, да видимо статьи уже нет.
        Что-то похожее здесь обсуждается habr.com/en/company/intems/blog/316728


  1. Endimione
    20.05.2019 15:27

    К сожалению в большинстве СКУД на рынке СНГ ключевым является именно УЧЕТ доступа, а не его контроль, за более чем 15 лет установки и настройки разных систем случаи когда заказчик ограничивает доступ на объект по временному интервалу можно пересчитать по пальцам, обычно это 24/7. Т.е. задача не пустить туда куда не надо и тогда когда не надо стоит очень редко. А вот учет рабочего времени — это самый востребованный функционал СКУД. Зачастую бывает приходишь через пару лет на объект, а там твой брелок еще прошит (ну забыл после пусконаладки удалить), про пароли которые после инсталлятора никто не меняет уже и говорить нечего. Единственное что большинство заказчиков все-таки понимает, что к серверу СКД нужно ограничить доступ (как физический так и удаленный), а вот разделение ЛВС тоже встречается редко, в том же видеонаблюдении намного чаще. И вообще у нас проще проксимити карту у сотрудника скопировать чем заниматься снифингом траффика (что подразумевает доступ к сети). Потому что стандарт Mifare тоже еще внедряется маленькими шажками. Все вышеописанное чисто из личных наблюдений и справедливо для Украины.