Привет, Хабр! На связи Бастион. Мы занимаемся информационной безопасностью и, в том числе, разрабатываем систему предупреждения о вторжениях. В этом посте мы расскажем, зачем нужна такая защита, как поднять на одном компьютере сотни фейковых сервисов и превратить их в сетевые ловушки. И почему этого недостаточно, чтобы чувствовать себя в безопасности.
Мы начали разработку еще в конце 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)
krabovich
19.10.2021 10:49+3Спасибо за интересную статью.
Если сравнивать с лидерами рынка Deception систем, то есть ли интеграции с другими продуктами и какой функционал реализован в них?
Как реализовано мастабирование в больших сетях такого решения? Жду продолжение от автора! Успехов.SantrY Автор
19.10.2021 14:03По части интеграций у нас реализован базовый функционал - умеем работать с разными SIEM, поддерживаем CEF-формат отправки событий. Настраивать пока что приходится руками, так что в этом плане более старые Deception могут оказаться удобнее.
Чтобы ответить на второй ваш вопрос, нужно рассказать об архитектуре. Мы оставили подробности для второй статьи, но немного заспойлерим.
В итоге мы пришли к двум отдельным сущностям, центру управления (с UI, контролем эмуляции трафика и другими подсистемами) и супервизору (он разворачивает и поддерживает ловушки). Центр управления и супервизор можно запустить на одной машине, но этот вариант подходит только для небольших сетей. Когда нужно покрыть несколько подсетей или большой пул адресов, мы разворачиваем несколько супервизоров и делим между ними зоны ответственности. Такая конфигурация устойчивее, и не нужно добавлять центр управления во все подсети. Центр управления масштабируется вертикально. В большинстве случаев достаточно простого увеличения мощности по мере роста нагрузки. Сейчас мы испытываем систему в сети с несколькими десятками тысяч хостов - работает нормально.Dimerion
19.10.2021 14:23А если супервизоры нужно поставить в изолированые VLAN?
SantrY Автор
19.10.2021 14:33Для работы супервизора нужно, чтобы он знал адрес центра управления и имел к нему сетевой доступ, без этого никак. Его придется подключить одновременно в две подсети: изолированную и ту, в которой доступен центр управления. С одного интерфейса супервизор будет расставлять ловушки, с другого - общаться с центром.
amarao
19.10.2021 11:49В дистрибутивах на подобие RHEL или CentOS все сложнее — приходится лезть в настройки ядра и подстраиваться под другой набор сетевых утилит.
Что-то я не понял, в rhel нет iproute2? Или вы о чём?
SantrY Автор
19.10.2021 14:51Мы немного о другом. Дело в том, что Red Hat пишет свой тулчейн. В принципе, в нем есть все необходимые инструменты, но иногда их поведение отличается от привычного. Когда мы в очередной раз с этим столкнулись - решили использовать Debian. А еще его проще собрать в ISO.
amarao
19.10.2021 18:13Тулчейн чего?
/usr/sbin/ip, libvirt, diskimage-builder... Что вам ещё нужно для того, чтобы запустить килограммы всего на хосте?
neowisard
19.10.2021 13:00-5Обычно, если описание похоже на рекламный плакат, то хотя бы прикладывают ссылку на гит с репой кастрированного продукта , что б посмотреть-потрогать что это за зверь.
Тут же промо статьия без смысла и пользы для читателя. Зачем вы вообще ?
neowisard
19.10.2021 13:04Пришлось полезьть в нет, для тех кто интересуется, есть аналог на английском, но хотя бы с техническими нюансах и примерами.
alexseiP
19.10.2021 14:51+1Здравствуйте! Большенство инфраструктур двигаются в Cloud, какие облачные среды поддерживаются? Можете описать кейсы использования Deception в Cloud? Также интересно что собой представляет агент, какой у него функционал, зачем он нужен и как они распростряняются в инфраструктуре?
Спасибо за описание решения.SantrY Автор
19.10.2021 15:29В теории нет никаких ограничений по использованию нашей Deception в облаках. Специальных действий для поддержки не потребуется, но мы еще не проводили таких тестов, так что не будем утверждать наверняка.
По сути, агент — небольшая утилита на GO. Устанавливается вручную, но есть скрипт, который упрощает процесс.
Сразу скажу, что агенты не обязательно устанавливать на все машины в сети. Мы понимаем, что это не всегда уместно. При необходимости можно обойтись вовсе без них, но тогда Deception потеряет в функциональности.Прежде всего агент нужен, чтобы поддерживать правдоподобную эмуляцию обмена трафиком.
Во-вторых, с помощью агентов можно заманивать злоумышленника в ловушки. Они могут периодически подключаться к ловушкам, например, по FTP. При этом креды отправляются в открытом виде и выступают в роли приманки.
В-третьих, наши агенты умеют проверять версии ПО на пользовательских компьютерах. С их помощью можно вовремя заметить и обновить устаревшие утилиты.
В перспективе с их помощью можно собирать информацию о действиях злоумышленника или пресекать вредоносную активность, например, автоматически отключать скомпрометированные машины от сети. Этот функционал в планах.
Dimerion
19.10.2021 15:49А эти агенты общаются с супервизорами? Проверять версии ПО - это что-то в духе управления уязвимостями?
SantrY Автор
19.10.2021 16:29Да, они собирают информацию о версиях, отправляют на супервизоры, а супервизоры пересылают данные в центр управления. То же путь, только в обратном порядке, проходят команды из центра управления. Центр не взаимодействует с агентами напрямую.
Можно сказать, что это заготовка для полноценного управления уязвимостями. Пока что версии ПО только отображаются в пользовательском интерфейсе. Планируем автоматически сверять их с актуальной базой cve.
bennito
19.10.2021 16:43А как система определяет злоумышленник приконнектился или нет? как оно фильтрует "фолс-позитивы" при этом? по юзерагенту? не понятно.
SantrY Автор
19.10.2021 17:48Ловушки сообщают в центр управления о любом взаимодействии, как о вторжении. Однако центр управления "знает", когда и в какие в ловушки постучится каждый из агентов. Ведь он раздает команды на эти запросы. Центр управления сверяется с условным "графиком эмуляции" и исключает ложные срабатывания из отчетов, которые видит пользователь.
AlexNesbit
19.10.2021 16:01День добрый! Познавательно. А можно доку по системе почитать где-то? На сайте не нашёл вообще ничего. Хотелось бы понять как оно вообще работает. По интерфейсу - всё красиво. Доки реально не хватает.
bennito
19.10.2021 16:21Присоединяюсь к вопросу. Спс.
SantrY Автор
19.10.2021 19:19+1Признаться, мы оказались неготовы к такому живому интересу со стороны читателей) Сейчас у нас нет технического документа, который мы могли бы обнародовать. Но мы уже пишем следующую статью о системе. Там расскажем и об архитектуре, и о том, как устроены агенты, и о том, как все установить и настроить. Со скриншотами и во всех подробностях.
Если хотите узнать что-то конкретное - спрашивайте, постараемся дать ответы в материале.
Dimerion
Приветствую! Интересный продукт. А можно ли получить в Powerpoint презентацию продукта? Заранее спасибо за ответ!
SantrY Автор
Отправили презентацию в ЛС. Кроме того, дополнительная информация, например системные требования, есть на странице проекта.