Контейнеризация активно используется для работы различных приложений. Микросервисная архитектура предполагает применение большого числа контейнеров, и нам необходимо обеспечить их безопасную работу. Помимо использования рекомендаций от разработчиков сред контейнеризации и наложенных средств защиты, также важным элементом безопасности является мониторинг событий безопасности контейнеров.
Контейнеры представляют собой легкие изолированные среды, содержащие код приложений и все необходимые зависимости. Они широко используются для развертывания и масштабирования приложений как в локальных, так и в облачных средах. По мере того, как контейнерные приложения и инфраструктура становятся все более популярными, возникает необходимость в их защите от потенциальных угроз.
Сегодня мы будем говорить о Docker в качестве среды контейнеризации и о Wazuh в качестве средства мониторинга событий ИБ.
Wazuh интегрируется с такими контейнерными платформами, как Docker и Kubernetes, и позволяет отслеживать события во время выполнения контейнеров, журналы приложений и общее состояние контейнеров. Wazuh выявляет аномалии, оценивая логи контейнеров по заранее заданным правилам. Кроме того, он ведет учет действий среды контейнеризации для обнаружения несанкционированных действий в контейнерной среде.
Сервер и контейнеры
Для поддержания безопасности очень важно осуществлять проактивный мониторинг как сервера Docker, так и работающих на нем контейнеров. Сервер Docker является основой вашей контейнерной инфраструктуры и управляет развертыванием контейнеров и распределением ресурсов. Мониторинг сервера позволяет отслеживать использование ресурсов, попытки несанкционированного доступа, проблемы с производительностью и другие вопросы безопасности.
Однако недостаточно следить только за сервером Docker, необходимо также следить за самими контейнерами. Мониторинг контейнеров позволяет отслеживать такие действия контейнеров, как сетевые подключения, изменения файловой системы и выполнение процессов. Мониторинг этих действий помогает обнаружить подозрительное поведение, выявить вредоносное ПО или вредоносные процессы и реагировать на инциденты безопасности в режиме реального времени.
В рамках данной статьи мы не будем рассматривать установку и базовую настройку Wazuh. На эту тем у уже было написано несколько публикаций.
Для начала установим агент Wazuh на сервер Docker. Данный агент обеспечивает безопасность базовой инфраструктуры, контролируя сервер, на котором запущен демон среды контейнеризации.
Установка агента производится через веб интерфейс системы Wazuh. Достаточно в базовом интерфейсе выбрать Deploy New Agent, далее указать ОС, после чего Wazuh предложит набор необходимых для развертывания агента на целевом сервере команды.

После этого нам необходимо включить прослушиватель Wazuh Docker listener для мониторинга активности контейнеров. Прослушиватель работает на агенте, развернутом на сервере Docker, и пересылает логи на сервер Wazuh.
Для его установки потребуется Python 3, также он совместим с Python 3.8–3.12. Хотя более поздние версии Python тоже должны работать, как указано на сайте Wazuh, разработчик не может гарантировать их совместимость.
Установим с помощью pip:
pip3 install --upgrade pip
pip3 install docker==7.1.0 urllib3==1.26.20 requests==2.32.2 --break-system-packages
В файле /var/ossec/wodles/docker/DockerListener необходимо обновить путь к интерпретатору Python. Например, путь в виртуальном окружении
#!</path/to/your/virtual/environment>/bin/python3
Добавьте следующие настройки в файл конфигурации агента Wazuh /var/ossec/etc/ossec.conf, чтобы включить Docker listener:
<wodle name="docker-listener">
<disabled>no</disabled>
</wodle>
И перезапустите агента:
systemctl restart wazuh-agent
Это простейший вариант конфигурации прослушивателя Docker, однако с дополнительными настройками его использование будет более эффективным.
Так, параметр attemps
определяет количество попыток запуска прослушивателя, в случае его падения. Значение по умолчанию 5.
Параметры планирования позволяют настроить время выполнения прослушивателя. Доступны следующие параметры: run_on_start
, interval
, day
, wday
и time
. По умолчанию при включении без каких‑либо опций планирования слушатель Docker запускается при старте.
В примере ниже interval 10 минут определяет время ожидания для повторного запуска Docker listener в случае его сбоя. Attemps — 5 попыток и прослушиватель должен запускаться при старте run_on_start=yes
.
<wodle name="docker-listener">
<interval>10m</interval>
<attempts>5</attempts>
<run_on_start>yes</run_on_start>
<disabled>no</disabled>
</wodle>
Проверяем
Для того, чтобы проверить работу Docker listener, запустим контейнер и выполним в нем некоторые команды.
sudo docker pull nginx
sudo docker run -d -P --name nginx_container nginx
sudo docker exec -it nginx_container cat /etc/passwd
sudo docker exec -it nginx_container /bin/bash
exit
sudo docker stop nginx_container
sudo docker rm nginx_container
Несколько алертов, связанных с работой нашего контейнера мы можем наблюдать в дашбордах Wazuh:

Таким образом, Wazuh отслеживает и анализирует потребление ресурсов контейнерными приложениями. Он предоставляет информацию о статистике использования процессора, памяти и сети контейнерами, помогая выявить узкие места в производительности.
Wazuh позволяет централизованно регистрировать и визуализировать события, происходящие с контейнерами. Его масштабируемый индексатор объединяет журналы в мощный поисково‑аналитический механизм, предоставляющий информацию в режиме реального времени. Этот индексатор справляется с потоком событий, поддерживая при этом требования по хранению журналов.
Заключение
Мы рассмотрели базовые возможности Wazuh при работе с контейнерами Docker. Стоит отметить, что типичной проблемой, с которой можно столкнуться при работе с Docker listener, являются сложности при работе с интерпретатором Python. Поэтому при сбоях первым делом проверьте, правильно ли у вас указан путь к интерпретатору.
В целом, Wazuh помогает специалистам по безопасности отслеживать и анализировать происходящие события, оперативно выявлять угрозы и несанкционированные действия в среде контейнеризации. Такое раннее обнаружение позволяет оперативно реагировать на инциденты безопасности по мере их возникновения, обеспечивая активный подход к минимизации рисков и эффективнее обеспечивать защиту приложений в Docker.