На старте проекта у нас были: пять разработчиков, большая идея, перспективная технология и очень смутное представление о том, как должен выглядеть конечный продукт.
Уже больше двух лет мы разрабатываем Bastion Security Platform. В прошлой статье мы рассказали, как научились создавать дешевые сетевые ловушки в больших количествах. Но ловушки — всего лишь базовый компонент эффективной сетевой защиты.
Сегодня мы расскажем, как сделали из них полноценный продукт. Ведь Deception-система — нечто большее, чем набор ловушек, которые детектируют соединения и сообщают о вторжении.
Как это часто бывает, Deception-системы появились в России с задержкой. К началу нашего проекта, развитых отечественных решений не существовало, но за рубежом такие системы набирали популярность, и нам было что проанализировать. Два месяца мы потратили только на то, чтобы проработать концепцию.
Мы пришли к выводу, что конкурентоспособная Deception должна не только засекать факт любого сетевого взаимодействия с ловушкой, но и немедленно оповещать о вторжении. Она должна маскировать ловушки, раскладывать приманки, записывать действия злоумышленника, замедлять и даже активно противодействовать атаке.
Архитектура
Разработчики Deception неохотно делятся информацией о своих решениях, так что архитектуру пришлось разрабатывать с нуля. Мы выделили 4 сущности: ловушки, супервизоры, агенты и центр управления.
Центр управления включает в себя базу данных и веб-приложение с пользовательским интерфейсом. Он раздает команды супервизорам, а те занимаются установкой ловушек в своих подсетях.
Набор ловушек, замаскированный под машину с Windows Server 2016
Ловушки физически расположены на одном сервере с супервизором, но благодаря MACVLAN для стороннего наблюдателя они выглядят как независимые узлы сети (подробнее об этом мы рассказывали в прошлой статье).
Центр управления и супервизор можно запустить на одном сервере, но этот вариант подходит только для небольших сетей. Когда у вас несколько подсетей или большой пул адресов — лучше развернуть несколько отдельных супервизоров и разделить между ними зоны ответственности. Такая конфигурация устойчивее, и не придется добавлять центр управления во все подсети.
Тем более стоит установить несколько супервизоров, если у вас географически распределенная сеть. Представьте, есть филиал в Москве и филиал во Владивостоке. Если все ловушки будут, например, на сервере в Москве, во Владивостоке будет ощутимая разница в пинге до настоящих машин и до сетевых ловушек. Это будет выглядеть как минимум подозрительно.
Мы настроили ловушки так, чтобы они не только засекали подключения, но и собирали ассоциированную информацию. Например, если это попытка подключения к SSH, ловушка сохранит время, логин, пароль и список введенных команд.
Но чтобы сделать систему эффективнее и реализовать все необходимые фичи, нужны были агенты на пользовательских устройствах и серверах.
Разбрасываем хлебные крошки
Изучая сеть, злодей рано или поздно наткнется на фейковый сервис, и ловушка поднимет тревогу, но в наших интересах сделать так, чтобы это произошло как можно быстрее. Поэтому мы заманиваем его в ловушки. Для этого мы оставляем «хлебные крошки» на компьютерах в корпоративной сети.
Простой пример: злоумышленник скомпрометировал компьютер админа. Наверняка он заглянет в реестр. Там он найдет информацию о сохраненной SSH-сессии с ничем не защищенным, открытым паролем.
Конечно, злодей попробует подключиться, и поднимется тревога, ведь это наш агент записал в реестр данные сессии, ведущие прямиком в ловушку.
Пары логин-пароль берутся из отдельной базы фейковых пользователей. BSP генерирует их в соответствии с правилами, принятыми в компании
Здесь возможны и более сложные сценарии, но, как показывает практика, простые решения самые лучшие. Если злоумышленник не знает, что в сети установлена Deception, у него нет причин осторожничать и избегать подобных подарков судьбы.
Обмениваемся трафиком
Другая функция агентов — эмуляция обмена трафиком. Она придает ловушкам правдоподобности.
Конечно, можно настроить систему так, чтобы ловушки стучались друг к другу. Однако, группа компьютеров, которые общаются только между собой, выглядит подозрительно. Нужно, чтобы к ловушкам обращались и с реальных рабочих машин.
Наши агенты и ловушки обеспечивают простую сетевую эмуляцию. Они время от времени посылают друг другу случайные TCP-пакеты. Кроме того, мы используем агентов для эмуляции на уровне протоколов. Они могут периодически подключаться к ловушкам, например, по FTP и для виду выполнять команды.
При этом креды отправляются в открытом виде. Если злоумышленник следит за трафиком, он получит логин и пароль, которые приведут в ловушку.
Извлекаем дополнительную пользу
С помощью агентов мы реализуем и другие функции. Например, в BSP работает проверка версий ПО на корпоративных компьютерах.
Агентские модули имеют доступ к списку установленных программ и передают информацию о них в центр управления. Эти отчеты можно сравнить с базой CVE. В будущем мы планируем запускать такие проверки в автоматическом режиме и выводить готовые рекомендации по обновлению программ.
Анатомия агента
Наши агенты состоят из двух компонентов. Первый — утилита на GO. Мы делаем кросс-компиляцию и собираем бинарный файл, подходящий для каждой платформы.
Этот компонент общается с супервизорами, обеспечивает эмуляцию сетевых ключей, собирает данные о ПО и посылает их на сервер. Но все это будет бесполезно, если мы не замаскируем агента. Это задача второго компонента.
Для Windows-агентов мы написали драйвер на C++, а для Linux — модуль ядра. Они выполняются в привилегированном режиме и отвечают за маскировку. С их помощью агент перехватывает системные вызовы, скрывает себя из списка директорий и запущенных процессов.
Установка BSP
Вся система упакована в ISO. Супервизор и центр управления устанавливаются из одного образа. Агенты ставятся вручную на каждую машину, но мы подготовили установочный скрипт, который упрощает процесс.
Конечно, использование агентов не всегда уместно, так что их необязательно устанавливать на все машины в сети. Если вы готовы пожертвовать функционалом системы, можно обойтись и вовсе без них.
Установка ловушек происходит уже через веб-интерфейс центра управления. BSP запускает сканирование сетей, причем супервизоры делают это во всех подсетях сразу.
В этом режиме карта сети отображает только реальные устройства
Каждый супервизор составляет список сетевых устройств и сервисов, которые на них запущены. Ориентируясь на эти данные, BSP генерирует готовый набор ловушек.
Предусмотрена и возможность тонкой настройки. Это делается через отдельное меню.
Сначала создается «машина» — фейковый сетевой узел с собственным IP-адресом. Затем нужно выбрать из меню сервисы, которые будет эмулировать ловушка.
Чтобы ловушками было проще пользоваться, мы подготовили пресеты, имитирующие популярные типы устройств: рабочие станции, базы данных, файловые хранилища и так далее.
Когда пользователь подтверждает создание ловушки, запускается целая цепочка событий.
Прежде всего система использует MACVLAN (иногда и IPVLAN) для создания виртуального интерфейса. Затем статически или при помощи DHCP на него выделяется IP-адрес.
Запускаются докер-контейнеры с нужным набором сервисов. Они заранее сконфигурированы так, чтобы регистрировать и записывать входящие соединения в Unix socket.
Теперь остается только ждать. Как только что-то произойдет, супервизор заберет событие из сокета, добавит информацию о том, когда и какая ловушка сообщила об инциденте, и отправит отчет в управляющий центр.
Агенты против антивирусов
Эта схема хорошо работает, но в процессе разработки не обошлось без сложностей. Больше всего проблем нам доставили антивирусы. Некоторые из них болезненно реагируют на любое ПО, которое пытается скрыть себя от пользователя. Причем, оказалось, что антивирус может откусить половину архива прямо во время установки, а может затаиться и заблокировать агента через некоторое время.
Ненадолго помогала пересборка бинарников внутри архива, но окончательно справиться с антивирусами техническими методами нам так и не удалось.
Существует два эффективных решения этой проблемы: простое и правильное. Мы можем либо просить пользователей добавлять агента в список исключений, либо связаться с производителем антивируса и объяснить, что агент — не зловред, а часть Deception-системы.
Производителей много, с каждым нужно связаться, так что правильный путь долгий и тернистый, но мы движемся в этом направлении. Только так можно избавить пользователей от лишних манипуляций.
Тестирование и пилотные запуски
В основном тестирование BSP проходило вручную, силами разработчиков. У нас не было выстроенного процесса тестирования, вместо этого мы сделали ставку на пилотные проекты с компаниями-партнерами.
Никому не советуем так делать. Пилоты принесли море практической информации, подсветили слабые места и помогли найти баги, но так можно и поседеть, особенно вначале, когда возникают неожиданные проблемы.
Помните про эмуляцию обмена трафиком?
Агенты периодически посылают пакеты на ловушки. Ловушка про агентов ничего не знает, она только детектирует подключение. Такие ложные срабатывания отсеивает специальный алгоритм в центре управления. Так вот, во время одного из пилотов алгоритм засбоил.
Коллеги установили систему, включили эмуляцию и ушли пить чай. И тут посыпались отчеты о вторжениях.
Список все рос и рос. Пока мы не посмотрели логи и не поняли, в чем причина, перепугаться успели все.
Что еще предстоит сделать
Сейчас система стабильно мониторит крупнейшие сети. К сожалению, мы не вправе раскрывать подробности, но можем сказать, что BSP защищает инфраструктуру одного из 5 крупнейших российских ретейлеров, нескольких банков из Топ-20 и одного из топовых мобильных операторов.
Самым большим вызовом стало сотрудничество с оператором. Десятки тысяч устройств и сотни подсетей — начиная разработку, мы не рассчитывали, что нашим решением заинтересуются в компании с такой большой и сложной инфраструктурой.
Мы протестировали различные способы распределить нагрузку. Устанавливали несколько центров управления с единой базой данных, разворачивали независимые центры, которые сливают данные в один интерфейс, но, в конце концов, остановились на простом вертикальном масштабировании. Увеличения мощности по мере роста нагрузки оказалось вполне достаточно, и мы решили не усложнять архитектуру BSP.
Теперь у нас появилось время, и мы планируем обновить интерфейс и добавить больше пресетов и разновидностей ловушек: для банковских сервисов, интернета вещей, сетей с промышленным и медицинским оборудованием. Кроме того, мы рассчитываем серьезно расширить функциональность агентов.
С их помощью можно реагировать на угрозы, например, автоматически отключать от сети скомпрометированные устройства, чтобы атака не развивалась. Если научить их записывать действия злоумышленника, агенты станут инструментами для форензики, помогут расследовать инциденты и определять вектор атаки.
Поэтому мы назвали систему не Bastion Deception, а именно Bastion Security Platform. У нее большие перспективы развития и адаптации под различные типы угроз.