Wazuh Container Security - безопасность контейнеров

Wazuh обеспечивает мониторинг безопасности контейнерных сред через модуль Docker listener и интеграцию с аудит-логами Kubernetes. Платформа отслеживает события жизненного цикла контейнеров, действия пользователей с Docker-ресурсами и изменения в оркестрированных развертываниях. Контейнерная безопасность дополняет классический мониторинг хостовых систем и обеспечивает видимость в динамических средах, где контейнеры создаются и уничтожаются в течение минут.

Модуль Docker Listener

Модуль docker-listener мониторит события Docker-демона: запуск и остановка контейнеров, загрузка образов, выполнение команд внутри контейнеров и другие операции.

Конфигурация

Модуль настраивается в ossec.conf на агенте, установленном на Docker-хосте:

<wodle name="docker-listener">
  <interval>10m</interval>
  <attempts>5</attempts>
  <run_on_start>yes</run_on_start>
  <disabled>no</disabled>
</wodle>

Параметры конфигурации

ПараметрПо умолчаниюОписание
disablednoВключение или отключение модуля (yes/no)
interval1mИнтервал между проверками событий (s/m/h/d)
attempts5Количество попыток при сбое подключения
run_on_startyesЗапускать при старте службы агента (yes/no)

Расширенное планирование

<!-- Выполнение в определенное время -->
<wodle name="docker-listener">
  <time>00:00</time>
  <disabled>no</disabled>
  <attempts>3</attempts>
</wodle>

<!-- Выполнение по дням недели -->
<wodle name="docker-listener">
  <wday>monday</wday>
  <time>06:00</time>
  <disabled>no</disabled>
</wodle>

Предварительные требования

Для работы модуля необходимо:

  1. Python 3 установлен на Docker-хосте
  2. Библиотека Docker SDK для Python: pip3 install docker
  3. Агент Wazuh имеет доступ к Docker-сокету (/var/run/docker.sock)

Мониторинг событий Docker

Docker listener отслеживает следующие категории событий:

События контейнеров

СобытиеОписание
startЗапуск контейнера
stopОстановка контейнера
createСоздание контейнера
destroyУдаление контейнера
pause / unpauseПриостановка и возобновление
restartПерезапуск контейнера
exec_create / exec_startВыполнение команды внутри контейнера
dieАварийная остановка контейнера
killПринудительное завершение
attachПодключение к контейнеру

События образов

СобытиеОписание
pullЗагрузка образа из реестра
pushПубликация образа в реестр
deleteУдаление образа
tagПрисвоение тега образу
importИмпорт образа

События томов и сетей

СобытиеОписание
volume create / destroyСоздание и удаление томов
network connect / disconnectПодключение и отключение сетей

Пример алерта

При запуске контейнера Wazuh генерирует алерт со следующей структурой:

{
  "rule": {
    "id": "87903",
    "level": 3,
    "description": "Docker: Container started"
  },
  "data": {
    "docker": {
      "Type": "container",
      "Action": "start",
      "Actor": {
        "Attributes": {
          "image": "nginx:latest",
          "name": "web-server"
        }
      }
    }
  }
}

Мониторинг среды выполнения контейнеров

Помимо событий Docker API, Wazuh мониторит процессы и файловую систему внутри контейнеров при развертывании агента непосредственно в контейнере.

Развертывание агента в контейнере

Агент Wazuh может быть развернут как sidecar-контейнер или встроен в образ приложения:

# docker-compose.yml
services:
  wazuh-agent:
    image: wazuh/wazuh-agent:4.14.3
    environment:
      - WAZUH_MANAGER=wazuh-manager
      - WAZUH_AGENT_NAME=docker-agent-01
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /var/log:/var/log:ro
    restart: unless-stopped
    network_mode: host

Мониторинг через Dockerfile

Для встраивания агента в контейнер приложения:

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get install -y curl apt-transport-https && \
    curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --dearmor -o /usr/share/keyrings/wazuh.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" > /etc/apt/sources.list.d/wazuh.list && \
    apt-get update && \
    apt-get install -y wazuh-agent && \
    apt-get clean

COPY ossec.conf /var/ossec/etc/ossec.conf

CMD ["/var/ossec/bin/wazuh-control", "start"]

Мониторинг логов контейнеров

Для сбора логов из контейнеров настройте localfile на Docker-хосте:

<localfile>
  <log_format>json</log_format>
  <location>/var/lib/docker/containers/*/*.log</location>
</localfile>

Аудит Kubernetes

Wazuh интегрируется с Kubernetes через сбор и анализ аудит-логов кластера. Kubernetes audit log фиксирует все запросы к API-серверу, позволяя отслеживать создание, изменение и удаление ресурсов.

Настройка аудит-политики Kubernetes

Создайте файл политики аудита для Kubernetes API-сервера:

# audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: Metadata
    resources:
      - group: ""
        resources: ["pods", "services", "configmaps", "secrets"]
  - level: RequestResponse
    resources:
      - group: "rbac.authorization.k8s.io"
        resources: ["clusterroles", "clusterrolebindings"]
  - level: Request
    resources:
      - group: ""
        resources: ["pods/exec", "pods/attach"]

Сбор аудит-логов Kubernetes в Wazuh

Настройте пересылку аудит-логов Kubernetes на агент Wazuh:

<localfile>
  <log_format>json</log_format>
  <location>/var/log/kubernetes/audit/audit.log</location>
</localfile>

Критичные события Kubernetes

Wazuh включает правила для обнаружения следующих событий в Kubernetes:

  • Создание привилегированных контейнеров
  • Изменение ролей RBAC и привязок ролей
  • Доступ к секретам кластера
  • Выполнение команд через kubectl exec
  • Создание контейнеров с монтированием hostPath
  • Изменения в сетевых политиках

Правила обнаружения для контейнеров

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

Обнаружение привилегированного контейнера

<rule id="100300" level="12">
  <if_sid>87901</if_sid>
  <field name="docker.Actor.Attributes.Privileged">true</field>
  <description>Docker: Privileged container started - $(docker.Actor.Attributes.name)</description>
  <mitre>
    <id>T1610</id>
  </mitre>
  <group>container_security,privilege_escalation,</group>
</rule>

Обнаружение exec в контейнере

<rule id="100301" level="8">
  <if_sid>87903</if_sid>
  <field name="docker.Action">exec_start</field>
  <description>Docker: Command executed inside container - $(docker.Actor.Attributes.name)</description>
  <mitre>
    <id>T1609</id>
  </mitre>
  <group>container_security,command_execution,</group>
</rule>

Обнаружение загрузки образа из неизвестного реестра

<rule id="100302" level="10">
  <if_sid>87904</if_sid>
  <field name="docker.Action">pull</field>
  <field name="docker.Actor.Attributes.name" negate="yes">^docker\.io|^registry\.internal</field>
  <description>Docker: Image pulled from untrusted registry</description>
  <group>container_security,supply_chain,</group>
</rule>

Дашборд Docker в Wazuh

Wazuh Dashboard предоставляет специализированный вид для контейнерных событий. Дашборд отображает:

  • Хронологию событий контейнеров
  • Статистику по типам событий (start, stop, exec)
  • Список активных контейнеров
  • События безопасности, связанные с контейнерами
  • Информацию об образах и их версиях

Доступ к дашборду: Wazuh Dashboard - Modules - Docker Listener.

Подробнее об установке Wazuh: Быстрый старт

Устранение неполадок

Docker listener не собирает события

  • Проверьте, что Python 3 и Docker SDK установлены: pip3 show docker
  • Убедитесь, что агент имеет доступ к /var/run/docker.sock
  • Проверьте права пользователя wazuh на чтение Docker-сокета
  • Просмотрите /var/ossec/logs/ossec.log на наличие ошибок модуля

События Kubernetes не обрабатываются

  • Проверьте, что аудит-политика Kubernetes применена к API-серверу
  • Убедитесь, что путь к аудит-логу корректен в <location>
  • Проверьте формат аудит-лога: должен быть JSON
  • Убедитесь, что правила для Kubernetes загружены в Wazuh

Агент в контейнере не подключается к менеджеру

  • Проверьте сетевую связность между контейнером и менеджером
  • Убедитесь, что переменная WAZUH_MANAGER указывает на корректный адрес
  • Проверьте, что порт 1514 (TCP/UDP) доступен для агента
  • При использовании network_mode: host проверьте firewall-правила хоста

Высокий объем событий

  • Настройте фильтрацию событий Docker через правила Wazuh
  • Увеличьте <interval> в конфигурации docker-listener
  • Исключите шумные события (healthcheck, stats) через пользовательские правила

Подробнее о сборе логов: Сбор логов Wazuh

Подробнее об Active Response: Active Response

Last updated on