Развёртывание SOC на базе Wazuh SIEM для среднего бизнеса

Зачем среднему бизнесу SOC

SOC — это не привилегия банков и телекомов. За последние пару лет мы видим, как атаки сместились в сторону среднего бизнеса: шифровальщики, утечки клиентских баз, угон учёток через фишинг. Если у вас есть ИТ-инфраструктура — у вас уже есть повод задуматься.

Wazuh — open-source SIEM-платформа, которая под одним капотом собирает сразу несколько инструментов:

  • HIDS — мониторинг целостности файлов и обнаружение rootkit
  • Log management — централизованный сбор и анализ логов
  • Vulnerability detection — сканирование уязвимостей прямо на хостах, без отдельного сканера
  • Compliance — проверка соответствия PCI DSS, GDPR, CIS Benchmarks
  • Incident response — активное реагирование: заблокировать IP, убить процесс
  • MITRE ATT&CK — маппинг обнаруженных угроз на фреймворк MITRE

Wazuh бесплатен и, если честно, закрывает процентов 80 того, что умеют Splunk или QRadar. Мы разворачивали его в компаниях с парком от 50 до 500 машин — нигде не упёрлись в потолок функциональности. По соотношению цены и возможностей конкурентов просто нет.

Архитектура и системные требования

Из чего состоит Wazuh:

  • Wazuh Server — анализирует события, коррелирует их, хранит правила
  • Wazuh Indexer — OpenSearch под капотом: хранение и поиск по событиям
  • Wazuh Dashboard — веб-интерфейс на базе OpenSearch Dashboards
  • Wazuh Agents — агенты, которые ставятся на каждый контролируемый хост

Системные требования для 200 агентов:

КомпонентCPURAMДиск
Wazuh Server4 vCPU8 ГБ50 ГБ
Indexer4 vCPU16 ГБ500 ГБ SSD
Dashboard2 vCPU4 ГБ20 ГБ

До 200 агентов всё спокойно живёт на одном сервере: 8 vCPU, 32 ГБ RAM, 500 ГБ SSD. Когда инфраструктура вырастет — разнесёте компоненты на отдельные машины, это несложно.

Установка Wazuh all-in-one

Быстрая установка всех компонентов на один сервер (Ubuntu 22.04 / CentOS 9):

curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh
curl -sO https://packages.wazuh.com/4.7/config.yml

# Отредактируйте config.yml — укажите IP сервера
vi config.yml

Минимальный config.yml:

nodes:
  indexer:
    - name: wazuh-indexer
      ip: "10.0.0.50"
  server:
    - name: wazuh-server
      ip: "10.0.0.50"
  dashboard:
    - name: wazuh-dashboard
      ip: "10.0.0.50"

Запустите установку:

sudo bash wazuh-install.sh --generate-config-files
sudo bash wazuh-install.sh --wazuh-indexer wazuh-indexer
sudo bash wazuh-install.sh --start-cluster
sudo bash wazuh-install.sh --wazuh-server wazuh-server
sudo bash wazuh-install.sh --wazuh-dashboard wazuh-dashboard

После установки откройте https://10.0.0.50 в браузере. Логин: admin, пароль появится в выводе установщика — сразу сохраните его куда-нибудь, потом не найдёте.

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

Дальше — агенты на все хосты, которые хотите контролировать.

Windows:

# PowerShell от администратора
Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.7.0-1.msi `
    -OutFile wazuh-agent.msi

.\wazuh-agent.msi /q WAZUH_MANAGER="10.0.0.50" `
    WAZUH_AGENT_GROUP="windows-servers" `
    WAZUH_AGENT_NAME="DC01"

net start WazuhSvc

Linux:

# Debian/Ubuntu
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 update && apt install wazuh-agent -y

# Настройка
sed -i 's/MANAGER_IP/10.0.0.50/' /var/ossec/etc/ossec.conf
systemctl enable --now wazuh-agent

Убедитесь, что агенты подключились: в Dashboard откройте Agents → Manage Agents. Каждый агент должен быть в статусе «Active». Если висит «Disconnected» — смотрите файрвол, порт 1514/tcp.

Группы агентов

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

# Создание групп на сервере
/var/ossec/bin/agent_groups -a -g windows-servers
/var/ossec/bin/agent_groups -a -g linux-servers
/var/ossec/bin/agent_groups -a -g domain-controllers

# Добавление агента в группу
/var/ossec/bin/agent_groups -a -i 001 -g domain-controllers

Конфигурация группы /var/ossec/etc/shared/domain-controllers/agent.conf:

<agent_config>
  <localfile>
    <log_format>eventchannel</log_format>
    <location>Security</location>
    <query>Event[System[(EventID=4624 or EventID=4625 or EventID=4720 or EventID=4726)]]</query>
  </localfile>
  <syscheck>
    <directories realtime="yes">C:\Windows\System32\GroupPolicy</directories>
    <directories realtime="yes">C:\Windows\SYSVOL</directories>
  </syscheck>
</agent_config>

Настройка правил обнаружения

Из коробки Wazuh идёт с тысячами правил. Но на практике выясняется: без кастомных правил под вашу конкретную инфраструктуру половина реально важных событий проходит мимо.

Файл кастомных правил: /var/ossec/etc/rules/local_rules.xml

<group name="custom,">
  <!-- Обнаружение brute-force на RDP -->
  <rule id="100001" level="10" frequency="5" timeframe="120">
    <if_matched_sid>60122</if_matched_sid>
    <description>Brute-force атака на RDP: $(srcip)</description>
    <mitre>
      <id>T1110</id>
    </mitre>
  </rule>

  <!-- Подозрительное создание нового администратора -->
  <rule id="100002" level="12">
    <if_sid>60137</if_sid>
    <field name="win.eventdata.targetUserName">^(?!.*\$$)</field>
    <field name="win.eventdata.groupName">Administrators|Администраторы</field>
    <description>Пользователь добавлен в группу администраторов: $(win.eventdata.targetUserName)</description>
    <mitre>
      <id>T1136</id>
    </mitre>
  </rule>

  <!-- Массовое удаление файлов (возможный шифровальщик) -->
  <rule id="100003" level="14" frequency="50" timeframe="60">
    <if_matched_sid>554</if_matched_sid>
    <description>Массовое изменение файлов — возможная атака шифровальщика</description>
    <mitre>
      <id>T1486</id>
    </mitre>
  </rule>
</group>

Перезагрузите правила: sudo systemctl restart wazuh-manager

Активное реагирование

Wazuh умеет не только сигнализировать, но и действовать: заблокировать IP через iptables, отключить учётную запись, убить подозрительный процесс. Руки сами не дойдут — система сделает за вас.

Настройка в /var/ossec/etc/ossec.conf на сервере:

<ossec_config>
  <!-- Блокировка IP при brute-force -->
  <active-response>
    <command>firewall-drop</command>
    <location>local</location>
    <rules_id>100001</rules_id>
    <timeout>3600</timeout>
  </active-response>

  <!-- Блокировка на Linux через iptables -->
  <active-response>
    <command>firewall-drop</command>
    <location>local</location>
    <rules_id>5712</rules_id>
    <timeout>1800</timeout>
  </active-response>
</ossec_config>

Для кастомных действий создайте скрипт реагирования:

#!/bin/bash
# /var/ossec/active-response/bin/disable-user.sh
SOURCE=$1
USER=$2
ACTION=$3

if [ "$ACTION" = "add" ]; then
    # Отключить учётную запись AD через PowerShell Remoting
    ssh admin@dc01 "powershell -c \"Disable-ADAccount -Identity '$USER'\""
    logger -t wazuh-ar "Disabled AD account: $USER (triggered by $SOURCE)"
fi

Интеграция с внешними системами

Wazuh поддерживает интеграции для уведомлений и обогащения данных:

Telegram-уведомления о критических событиях:

Файл /var/ossec/integrations/custom-telegram.py:

#!/usr/bin/env python3
import sys
import json
import requests

BOT_TOKEN = "123456:ABC-DEF"
CHAT_ID = "-1001234567890"

def main():
    alert_file = sys.argv[1]
    with open(alert_file) as f:
        alert = json.load(f)
    
    level = alert.get('rule', {}).get('level', 0)
    desc = alert.get('rule', {}).get('description', 'N/A')
    agent = alert.get('agent', {}).get('name', 'Unknown')
    src_ip = alert.get('data', {}).get('srcip', 'N/A')
    
    text = f"🚨 Wazuh Alert (Level {level})\n"
    text += f"Host: {agent}\n"
    text += f"Description: {desc}\n"
    text += f"Source IP: {src_ip}"
    
    requests.post(
        f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
        json={"chat_id": CHAT_ID, "text": text}
    )

if __name__ == "__main__":
    main()

Активация в ossec.conf:

<integration>
  <name>custom-telegram.py</name>
  <level>10</level>
  <alert_format>json</alert_format>
</integration>

Построение SOC-процессов

Инструмент без процессов — это просто красивый дашборд. Чтобы SOC реально работал, нужно выстроить регламенты реагирования.

Приоритизация алертов по уровням:

  • Level 12–15 (Critical) — реагируем немедленно: компрометация, шифровальщик
  • Level 10–11 (High) — разбираемся в течение часа: brute-force, подозрительный доступ
  • Level 7–9 (Medium) — анализируем в течение дня: изменения конфигурации, новые сервисы
  • Level 0–6 (Low/Info) — еженедельный обзор, статистика, фоновый шум

Создайте Dashboard с ключевыми метриками — чтобы дежурный инженер с первого взгляда понимал, что происходит:

  1. Количество алертов по уровням за 24 часа
  2. Топ-10 атакующих IP-адресов
  3. Хосты с наибольшим количеством событий
  4. Карта MITRE ATT&CK — какие техники фиксируются прямо сейчас
  5. Агенты с проблемами: offline, устаревшая версия

Раз в неделю садитесь разбирать накопленное: что оказалось ложным срабатыванием, какие правила врут, где вообще нет покрытия. Без этого ревью система постепенно деградирует — проверено.

Часто задаваемые вопросы

На сервере с 8 vCPU и 32 ГБ RAM Wazuh спокойно тянет 500–1000 событий в секунду. Для 200 агентов в типичной компании реальная нагрузка — 50–100 EPS, то есть запас четырёх-пятикратный. Когда вырастете — поднимайте кластер из нескольких Wazuh-серверов и выносите OpenSearch отдельно.

Да, Wazuh отлично работает с сетевым железом. Настройте на роутере или файрволе отправку syslog на IP Wazuh-сервера (порт 514/UDP), добавьте в конфигурацию <remote><connection>syslog</connection></remote> — и всё. Для Cisco, Fortinet, MikroTik и pfSense декодеры уже есть из коробки, ничего писать с нуля не придётся.

Конкретные сроки зависят от двух вещей: регуляторики и объёма диска. На практике минимум — 90 дней в горячем хранилище OpenSearch: этого хватает для большинства расследований. Если работаете в периметре PCI DSS или 152-ФЗ — готовьтесь хранить от 6 месяцев до 3 лет. Для долгосрочного архива настраивайте ротацию индексов с выгрузкой на S3 или в холодное хранилище — иначе диски закончатся быстрее, чем кажется.

Нас часто спрашивают: чем Wazuh лучше ELK? ELK — это платформа для работы с логами общего назначения, хороший инструмент, но голый. Elasticsearch + Logstash + Kibana сами по себе не умеют ни мониторить целостность файлов, ни реагировать на угрозы — всё это придётся допиливать руками. Wazuh надстраивает поверх OpenSearch готовые агенты, встроенные правила детектирования, активное реагирование, vulnerability scanner и compliance-модули. По сути, вы получаете полноценный SIEM, а не конструктор.

Для среднего бизнеса выделенный SOC-аналитик — это избыточно. Мы видели десятки внедрений, где системный администратор вполне справлялся с критическими алертами в режиме дежурства — при условии, что правила и уведомления настроены нормально. Ежедневный просмотр Dashboard занимает 15–30 минут. Другой разговор, если инфраструктура перевалила за 500 хостов — вот тогда выделенная роль уже оправдана.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#Wazuh SIEM#SOC#мониторинг безопасности#SIEM развёртывание#Wazuh настройка#обнаружение угроз#Security Operations Center#корреляция событий
Комментарии 0

Оставить комментарий

загрузка...