Как стать автором
Обновить
90.84
Бастион
Проводим пентесты, проектируем защищенные системы

Бесплатный сыр в Docker — как поднять сотни сетевых ловушек на одной машине

Время на прочтение5 мин
Количество просмотров17K


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


Мы начали разработку еще в конце 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-систем мы подробно расскажем в следующем посте. А пока, если у вас остались вопросы, задавайте их в комментариях.

Теги:
Хабы:
Всего голосов 28: ↑28 и ↓0+28
Комментарии23

Публикации

Информация

Сайт
bastion-tech.ru
Дата регистрации
Дата основания
2014
Численность
101–200 человек
Местоположение
Россия
Представитель
Игорь Santry