Привет, Хабр! На связи Бастион. Мы занимаемся информационной безопасностью и, в том числе, разрабатываем систему предупреждения о вторжениях. В этом посте мы расскажем, зачем нужна такая защита, как поднять на одном компьютере сотни фейковых сервисов и превратить их в сетевые ловушки. И почему этого недостаточно, чтобы чувствовать себя в безопасности.


Мы начали разработку еще в конце 2018 года, и это лишь первая из серии статей про этот экспериментальный проект. Для начала несколько слов о том, что такое Deception, как появилась эта технология, и как мы ее реализовали.


В некоторых случаях файерволы, антивирусы и другие средства превентивной защиты не помогают. Это может быть новый червь, которого еще нет в базах, ловкая целенаправленная атака или инсайдер, действующий изнутри периметра безопасности. Так или иначе, если злоумышленник уже проник в корпоративную сеть, он может безнаказанно изучать трафик очень долгое время. Чтобы находить такие угрозы в 90-х годах прошлого века начали использовать honeypot.



В самом примитивном виде в роли honeypot выступает отдельный компьютер, которым никто не пользуется


С виду это обычные сервисы, но пользователи с ними не взаимодействуют. Honeypot нужны только для того, чтобы их нашел злоумышленник, исследующий топологию сети. Уже сам факт обращения к такому сервису служит сигналом об угрозе.


Раньше honeypot расставляли по одиночке, но сейчас они превратились в целые наборы ловушек. Они стали базовыми компонентами Deception System — систем управления ложными сетевыми объектами.



Типичная Deception-система состоит из управляющего сервера и соединенных с ним ловушек


Deception связывают ловушки между собой и собирают данные о вторжениях в режиме реального времени. Такие системы предоставляют инструменты для управления и слежения за ловушками. Они обнаруживают угрозы, отвлекают и замедляют злоумышленника. Некоторые Deception помогают определить вектор атаки и даже автоматически реагируют на инциденты.


Deception на виртуальных машинах VS Docker


Мы не понаслышке знаем об этих продуктах и сталкивались с ними по обе стороны баррикад. На рынке представлено несколько готовых Deception, но большинство из них разработано еще до бума легковесных контейнеров.


В таких системах для создания ловушек обычно используются виртуальные машины. В них устанавливают полноценные операционные системы с необходимыми сервисами. Так, ловушкой может быть, база данных MySQL на Windows Server, передающая логи на один из управляющих серверов Deception-системы.


Это рабочее решение, но мы не стали его повторять. Слишком много недостатков. Виртуальные машины довольно сложно разворачивать и администрировать, они требуют много ресурсов. А если нужны ловушки на Windows, к списку проблем добавляется плата за лицензии.


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


К тому же, чтобы автоматизировать создание виртуальных машин, необходимо интегрировать Deception с целым зоопарком гипервизоров. Реализовать автоматическое создание контейнеров намного проще.


Наше решение


В том, чтобы поднять Docker-контейнер с неким сервисом, нет rocket science. Куда сложнее сделать так, чтобы сотни контейнеров, запущенных на одной машине, выглядели как самостоятельные узлы сети. Чтобы добиться такого эффекта, нам нужен был сервер, где одновременно работает несколько сотен разных сетевых интерфейсов.



Deception server стал ключевым компонентом нашей системы


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


Расставляем сети


В Linux предусмотрена возможность создания виртуальных сетевых адресов. За это отвечают субинтерфейсы IPVLAN и MACVLAN.



Обратите внимание, слева виртуальные машины унаследовали MAC хоста, а справа получили собственные адреса


IPVLAN создает виртуальные IP-адреса с общим MAC-адресом родительского интерфейса, но это не совсем то, что нужно. Сервисы с одним MAC выглядят очень подозрительно, так что для наших целей лучше подходит MACVLAN. Эта технология позволяет поднимать виртуальные интерфейсы с разными MAC-адресами.


На этом тонкости только начинаются. При статической адресации достаточно создать новый MAC и присвоить ему IP-адрес. Но если в сети используется динамическая адресация, приходится обращаться с этого интерфейса на DHCP-сервер, получать адрес, а затем периодически продлевать владение.


Следующий шаг — убедиться, что по выделенному адресу отвечает дочерний, а не родительский интерфейс. Мы сталкивались с тем, что на ARP-реквесты на получение MAC-адреса по виртуальному IP отвечали оба или только родительский интерфейс.


В Debian необходимо пробрасывать роуты, в зависимости от того, какие подсети должны видеть новый интерфейс. В дистрибутивах на подобие RHEL или CentOS все сложнее — приходится лезть в настройки ядра и подстраиваться под другой набор сетевых утилит.


Если все сделать правильно, получается машина с одним физическим интерфейсом, которая пингуется по двум разным адресам. С таким заделом уже можно браться за Docker.


Контейнеры, то что нужно для наших целей. Они позволяют запускать самые разные сервисы: NoSQL и реляционные базы данных, FTP, SSH, RDP и VPN-протоколы, Windows-сервисы, Samba и даже банковские протоколы. Причем Docker-образы большинства популярных сервисов можно найти в сети.


Контейнер с таким сервисом, запущенный на виртуальном интерфейсе, уже подходит на роль пассивной ловушки. Остается только настроить сбор и отправку логов. А правильно подобранный набор сервисов, которые отвечают по одному адресу, позволяет создать видимость полноценного устройства. Так можно эмулировать десктоп, почтовый сервер, POS-терминал или банкомат.



Физически ловушки располагаются на одном сервере, но со стороны выглядят, как независимые устройства


В итоге, Docker с его возможностями быстрого автоматического создания контейнеров полностью себя оправдывает. Ведь, чем больше ловушек в сети, тем раньше на них наткнется злоумышленник.


Мы не мелочимся и, если хватает свободных адресов, создаем по ловушке на каждый настоящий сервис. А чтобы эмуляции было проще разворачивать, мы стали объединять сервисы в наборы и собрали библиотеку готовых пресетов.


Маскируем ловушки


Чтобы поддельная инфраструктура не выделялась на фоне реальных сетевых ресурсов, мы организовали имитацию обмена трафиком. Ловушки стучатся друг к другу, и время от времени к ним автоматически обращаются агенты, установленные на пользовательские устройства.



Для эмуляции трафика мы настраиваем обмен пакетами TCP/UDP или используем один из высокоуровневых протоколов


Конечно, это создает проблемы. Ловушки не отличают запросы от нашей системы и от злоумышленника. Они сигнализируют о каждом входящем соединении. Чтобы избавиться от ложных срабатываний, мы реализовали фильтрацию сигналов. Отдельный механизм сверяет сигналы от ловушек с базой данных и принимает решение о том, настоящее это событие или побочный эффект имитации трафика.


Это еще не все


Таким образом, у нас получилась крепкая основа для собственной Deception-системы.



Один из дашбордов нашей системы наглядно отображает соотношение реальных компьютеров и ловушек в сети


Автоматическая установка ловушек и графический интерфейс, который мы разработали, позволяют разворачивать сложные системы из фейковых сервисов без глубоких знаний сетевого администрирования. Нужно только правильно подобрать пресеты, и злоумышленник не догадается, что добрая половина сети ненастоящая. А если и догадается — будет уже поздно.


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


Об этих элементах Deception-систем мы подробно расскажем в следующем посте. А пока, если у вас остались вопросы, задавайте их в комментариях.

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


  1. Dimerion
    19.10.2021 10:25
    +1

    Приветствую! Интересный продукт. А можно ли получить в Powerpoint презентацию продукта? Заранее спасибо за ответ!


    1. SantrY Автор
      19.10.2021 13:48

      Отправили презентацию в ЛС. Кроме того, дополнительная информация, например системные требования, есть на странице проекта.


  1. krabovich
    19.10.2021 10:49
    +3

    Спасибо за интересную статью.
    Если сравнивать с лидерами рынка Deception систем, то есть ли интеграции с другими продуктами и какой функционал реализован в них?
    Как реализовано мастабирование в больших сетях такого решения? Жду продолжение от автора! Успехов.


    1. SantrY Автор
      19.10.2021 14:03

      По части интеграций у нас реализован базовый функционал - умеем работать с разными SIEM, поддерживаем CEF-формат отправки событий. Настраивать пока что приходится руками, так что в этом плане более старые Deception могут оказаться удобнее.

      Чтобы ответить на второй ваш вопрос, нужно рассказать об архитектуре. Мы оставили подробности для второй статьи, но немного заспойлерим.
      В итоге мы пришли к двум отдельным сущностям, центру управления (с UI, контролем эмуляции трафика и другими подсистемами) и супервизору (он разворачивает и поддерживает ловушки). Центр управления и супервизор можно запустить на одной машине, но этот вариант подходит только для небольших сетей. Когда нужно покрыть несколько подсетей или большой пул адресов, мы разворачиваем несколько супервизоров и делим между ними зоны ответственности. Такая конфигурация устойчивее, и не нужно добавлять центр управления во все подсети. Центр управления масштабируется вертикально. В большинстве случаев достаточно простого увеличения мощности по мере роста нагрузки. Сейчас мы испытываем систему в сети с несколькими десятками тысяч хостов - работает нормально.


      1. Dimerion
        19.10.2021 14:23

        А если супервизоры нужно поставить в изолированые VLAN?


        1. SantrY Автор
          19.10.2021 14:33

          Для работы супервизора нужно, чтобы он знал адрес центра управления и имел к нему сетевой доступ, без этого никак. Его придется подключить одновременно в две подсети: изолированную и ту, в которой доступен центр управления. С одного интерфейса супервизор будет расставлять ловушки, с другого - общаться с центром.


          1. Dimerion
            19.10.2021 16:49

            А эта настройка как происходит?


            1. SantrY Автор
              19.10.2021 17:50

              Супервизор поставляется в виде ISO, и в комплекте идет консольная утилита для управления компонентами. Такие настройки сети происходят через нее


  1. amarao
    19.10.2021 11:49

    В дистрибутивах на подобие RHEL или CentOS все сложнее — приходится лезть в настройки ядра и подстраиваться под другой набор сетевых утилит.

    Что-то я не понял, в rhel нет iproute2? Или вы о чём?


    1. SantrY Автор
      19.10.2021 14:51

      Мы немного о другом. Дело в том, что Red Hat пишет свой тулчейн. В принципе, в нем есть все необходимые инструменты, но иногда их поведение отличается от привычного. Когда мы в очередной раз с этим столкнулись - решили использовать Debian. А еще его проще собрать в ISO.


      1. amarao
        19.10.2021 18:13

        Тулчейн чего?

        /usr/sbin/ip, libvirt, diskimage-builder... Что вам ещё нужно для того, чтобы запустить килограммы всего на хосте?


  1. neowisard
    19.10.2021 13:00
    -5

    Обычно, если описание похоже на рекламный плакат, то хотя бы прикладывают ссылку на гит с репой кастрированного продукта , что б посмотреть-потрогать что это за зверь.

    Тут же промо статьия без смысла и пользы для читателя. Зачем вы вообще ?


    1. neowisard
      19.10.2021 13:04

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

      https://www.google.com/amp/s/appfleet.com/blog/compromised-container-detection-with-honeypot-containers/amp/


  1. alexseiP
    19.10.2021 14:51
    +1

    Здравствуйте! Большенство инфраструктур двигаются в Cloud, какие облачные среды поддерживаются? Можете описать кейсы использования Deception в Cloud? Также интересно что собой представляет агент, какой у него функционал, зачем он нужен и как они распростряняются в инфраструктуре?
    Спасибо за описание решения.


    1. SantrY Автор
      19.10.2021 15:29

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

       

      По сути, агент — небольшая утилита на GO. Устанавливается вручную, но есть скрипт, который упрощает процесс.

      Сразу скажу, что агенты не обязательно устанавливать на все машины в сети. Мы понимаем, что это не всегда уместно. При необходимости можно обойтись вовсе без них, но тогда Deception потеряет в функциональности.

      Прежде всего агент нужен, чтобы поддерживать правдоподобную эмуляцию обмена трафиком.

      Во-вторых, с помощью агентов можно заманивать злоумышленника в ловушки. Они могут периодически подключаться к ловушкам, например, по FTP. При этом креды отправляются в открытом виде и выступают в роли приманки.

      В-третьих, наши агенты умеют проверять версии ПО на пользовательских компьютерах. С их помощью можно вовремя заметить и обновить устаревшие утилиты.

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


      1. Dimerion
        19.10.2021 15:49

        А эти агенты общаются с супервизорами? Проверять версии ПО - это что-то в духе управления уязвимостями?


        1. SantrY Автор
          19.10.2021 16:29

          Да, они собирают информацию о версиях, отправляют на супервизоры, а супервизоры пересылают данные в центр управления. То же путь, только в обратном порядке, проходят команды из центра управления. Центр не взаимодействует с агентами напрямую.

          Можно сказать, что это заготовка для полноценного управления уязвимостями. Пока что версии ПО только отображаются в пользовательском интерфейсе. Планируем автоматически сверять их с актуальной базой cve.


      1. bennito
        19.10.2021 16:43

        А как система определяет злоумышленник приконнектился или нет? как оно фильтрует "фолс-позитивы" при этом? по юзерагенту? не понятно.


        1. SantrY Автор
          19.10.2021 17:48

          Ловушки сообщают в центр управления о любом взаимодействии, как о вторжении. Однако центр управления "знает", когда и в какие в ловушки постучится каждый из агентов. Ведь он раздает команды на эти запросы. Центр управления сверяется с условным "графиком эмуляции" и исключает ложные срабатывания из отчетов, которые видит пользователь.


  1. AlexNesbit
    19.10.2021 16:01

    День добрый! Познавательно. А можно доку по системе почитать где-то? На сайте не нашёл вообще ничего. Хотелось бы понять как оно вообще работает. По интерфейсу - всё красиво. Доки реально не хватает.


    1. bennito
      19.10.2021 16:21

      Присоединяюсь к вопросу. Спс.


      1. AlexNesbit
        19.10.2021 18:52

        видно дока только после NDA)


      1. SantrY Автор
        19.10.2021 19:19
        +1

        Признаться, мы оказались неготовы к такому живому интересу со стороны читателей) Сейчас у нас нет технического документа, который мы могли бы обнародовать. Но мы уже пишем следующую статью о системе. Там расскажем и об архитектуре, и о том, как устроены агенты, и о том, как все установить и настроить. Со скриншотами и во всех подробностях.
        Если хотите узнать что-то конкретное - спрашивайте, постараемся дать ответы в материале.