# Wazuh SIEM-интеграции - коннекторы и пересылка

> Встроенные интеграции Wazuh 4.14 - Slack, PagerDuty, VirusTotal, Shuffle, TheHive, syslog forwarding, вебхуки и подключение к Splunk/ELK

Source: https://opennix.org/docs/wazuh/integrations/wazuh-siem-integrations/


Wazuh 4.14 включает демон `wazuh-integratord`, который обеспечивает передачу алертов во внешние системы безопасности и мониторинга. Встроенные интеграции настраиваются через блок `<integration>` в конфигурационном файле `ossec.conf` на сервере Wazuh Manager. Помимо встроенных коннекторов, платформа поддерживает syslog forwarding и пользовательские webhook-интеграции.

## Демон wazuh-integratord

Демон `wazuh-integratord` запускается автоматически при старте Wazuh Manager и обрабатывает алерты в реальном времени. Для каждой настроенной интеграции демон проверяет условия фильтрации и, при совпадении, формирует JSON-payload для отправки во внешнюю систему.

### Общая структура блока integration

Все встроенные интеграции настраиваются в файле `/var/ossec/etc/ossec.conf` внутри блока `<ossec_config>`:

```xml
<integration>
  <name>integration-name</name>
  <hook_url>https://endpoint.example.com/webhook</hook_url>
  <api_key>YOUR_API_KEY</api_key>
  <level>7</level>
  <rule_id>100001,100002</rule_id>
  <group>authentication_failed,</group>
  <alert_format>json</alert_format>
</integration>
```

Параметры фильтрации:

| Параметр | Описание | Пример |
|---|---|---|
| `<level>` | Минимальный уровень алерта для отправки | `7` - отправлять алерты уровня 7 и выше |
| `<rule_id>` | Список ID правил через запятую | `100001,100002` |
| `<group>` | Группа правил (с завершающей запятой) | `authentication_failed,` |
| `<event_location>` | Фильтр по источнику события | `/var/log/auth.log` |

Если указано несколько параметров фильтрации, они объединяются логическим AND - алерт должен соответствовать всем условиям одновременно.

## Интеграция со Slack

Slack-интеграция отправляет уведомления об алертах в указанный канал через Incoming Webhook.

### Настройка Slack Webhook

1. Перейдите в настройки приложения Slack: **Apps** - **Manage** - **Custom Integrations** - **Incoming WebHooks**
2. Создайте новый webhook и скопируйте URL вида `https://hooks.slack.com/services/T00/B00/XXXX`
3. Добавьте конфигурацию в `ossec.conf`:

```xml
<integration>
  <name>slack</name>
  <hook_url>https://hooks.slack.com/services/T00/B00/XXXX</hook_url>
  <level>10</level>
  <alert_format>json</alert_format>
</integration>
```

### Фильтрация алертов для Slack

Для высоконагруженных сред рекомендуется ограничить отправку только критическими алертами:

```xml
<integration>
  <name>slack</name>
  <hook_url>https://hooks.slack.com/services/T00/B00/XXXX</hook_url>
  <level>12</level>
  <group>attack,exploit,</group>
  <alert_format>json</alert_format>
</integration>
```

Эта конфигурация отправляет в Slack только алерты уровня 12 и выше, принадлежащие группам `attack` или `exploit`.

### Формат уведомлений

Wazuh формирует Slack-сообщение с полями: уровень алерта, описание правила, ID агента, временная метка и источник события. Сообщение визуально размечено цветом в зависимости от уровня критичности.

## Интеграция с PagerDuty

PagerDuty используется для эскалации критических инцидентов с автоматическим оповещением дежурной смены.

### Настройка PagerDuty

1. Создайте сервис в PagerDuty с типом интеграции **Events API v2**
2. Скопируйте Integration Key (Routing Key)
3. Добавьте конфигурацию:

```xml
<integration>
  <name>pagerduty</name>
  <api_key>YOUR_PAGERDUTY_INTEGRATION_KEY</api_key>
  <level>12</level>
  <alert_format>json</alert_format>
</integration>
```

### Управление приоритетами

PagerDuty-интеграция автоматически маппит уровень алерта Wazuh на severity PagerDuty:

| Wazuh Level | PagerDuty Severity |
|---|---|
| 1-4 | info |
| 5-7 | warning |
| 8-11 | error |
| 12-15 | critical |

Алерты уровня 12+ создают инцидент с приоритетом Critical и немедленным оповещением дежурного инженера. Для тонкой настройки маппинга можно модифицировать скрипт интеграции в `/var/ossec/integrations/pagerduty`.

## Интеграция с VirusTotal

VirusTotal-интеграция позволяет автоматически проверять хеши файлов, обнаруженных модулем FIM (File Integrity Monitoring), через API VirusTotal.

### Настройка VirusTotal

1. Зарегистрируйтесь на [virustotal.com](https://www.virustotal.com) и получите API-ключ
2. Добавьте конфигурацию:

```xml
<integration>
  <name>virustotal</name>
  <api_key>YOUR_VIRUSTOTAL_API_KEY</api_key>
  <group>syscheck,</group>
  <alert_format>json</alert_format>
</integration>
```

### Как работает проверка

1. Модуль FIM обнаруживает изменение файла и вычисляет его хеш (MD5, SHA1, SHA256)
2. `wazuh-integratord` отправляет хеш в API VirusTotal
3. VirusTotal возвращает результат проверки: количество антивирусных движков, обнаруживших угрозу
4. Wazuh генерирует дополнительный алерт с результатами проверки

### Ограничения бесплатного API

Бесплатный API VirusTotal ограничен 4 запросами в минуту и 500 запросами в день. Для продуктивных сред с большим объемом FIM-событий рекомендуется использовать Premium API или фильтровать запросы по критическим директориям.

```xml
<integration>
  <name>virustotal</name>
  <api_key>YOUR_VIRUSTOTAL_API_KEY</api_key>
  <rule_id>554</rule_id>
  <alert_format>json</alert_format>
</integration>
```

Правило 554 срабатывает только при добавлении нового файла, что значительно снижает количество API-запросов.

## Интеграция с Shuffle

[Shuffle](https://shuffler.io/) - SOAR-платформа с открытым исходным кодом, которая позволяет создавать автоматизированные workflows для обработки алертов Wazuh.

### Настройка Shuffle

1. Разверните Shuffle и создайте новый Workflow
2. Добавьте триггер типа **Webhook** и скопируйте URL
3. Настройте интеграцию в `ossec.conf`:

```xml
<integration>
  <name>shuffle</name>
  <hook_url>https://shuffle.example.com/api/v1/hooks/HOOK_ID</hook_url>
  <level>5</level>
  <alert_format>json</alert_format>
</integration>
```

### Пример workflow

Типичный Shuffle workflow для обработки алертов Wazuh:

1. Получение алерта через webhook
2. Обогащение данных (IP reputation, WHOIS, geolocation)
3. Классификация по критичности
4. Создание тикета в Jira/ServiceNow
5. Отправка уведомления в Slack
6. При критичности 12+ - запуск Active Response через API Wazuh

Подробнее о SOAR-интеграциях читайте в разделе [Сторонние интеграции](/docs/wazuh/integrations/wazuh-third-party-integrations/).

## Интеграция с TheHive

[TheHive](https://thehive-project.org/) - платформа управления инцидентами, интегрируемая с Wazuh для автоматического создания кейсов из алертов.

### Настройка TheHive

Интеграция с TheHive реализуется через пользовательский скрипт интеграции:

1. Создайте API-ключ в TheHive: **Organization** - **Users** - **API Key**
2. Установите скрипт интеграции:

```bash
cp custom-thehive /var/ossec/integrations/
chmod 750 /var/ossec/integrations/custom-thehive
chown root:wazuh /var/ossec/integrations/custom-thehive
```

3. Добавьте конфигурацию:

```xml
<integration>
  <name>custom-thehive</name>
  <hook_url>http://thehive.example.com:9000/api/alert</hook_url>
  <api_key>YOUR_THEHIVE_API_KEY</api_key>
  <level>10</level>
  <alert_format>json</alert_format>
</integration>
```

### Маппинг полей

Скрипт интеграции преобразует алерт Wazuh в формат TheHive Alert:

| Wazuh Field | TheHive Field |
|---|---|
| `rule.description` | `title` |
| `rule.level` | `severity` (1-4) |
| `rule.mitre.id` | `tags` |
| `agent.name` | `sourceRef` |
| `full_log` | `description` |

## Пользовательские webhook-интеграции

Для систем без встроенной поддержки Wazuh позволяет создавать произвольные webhook-интеграции.

### Создание custom-интеграции

1. Создайте скрипт интеграции на Python:

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

def main():
    # wazuh-integratord передает 4 аргумента:
    # 1: путь к файлу с алертом (JSON)
    # 2: API-ключ (из <api_key>)
    # 3: hook URL (из <hook_url>)
    # 4: путь к файлу с полным алертом

    alert_file = sys.argv[1]
    api_key = sys.argv[2]
    hook_url = sys.argv[3]

    with open(alert_file) as f:
        alert = json.load(f)

    payload = {
        "source": "wazuh",
        "rule_id": alert.get("rule", {}).get("id"),
        "level": alert.get("rule", {}).get("level"),
        "description": alert.get("rule", {}).get("description"),
        "agent": alert.get("agent", {}).get("name"),
        "timestamp": alert.get("timestamp"),
    }

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}",
    }

    response = requests.post(hook_url, json=payload, headers=headers)
    response.raise_for_status()

if __name__ == "__main__":
    main()
```

2. Установите скрипт:

```bash
cp custom-webhook /var/ossec/integrations/
chmod 750 /var/ossec/integrations/custom-webhook
chown root:wazuh /var/ossec/integrations/custom-webhook
```

3. Настройте в `ossec.conf`:

```xml
<integration>
  <name>custom-webhook</name>
  <hook_url>https://api.example.com/wazuh-alerts</hook_url>
  <api_key>YOUR_API_KEY</api_key>
  <level>7</level>
  <alert_format>json</alert_format>
</integration>
```

## Syslog Forwarding

Syslog forwarding позволяет пересылать алерты Wazuh в другие SIEM-системы (Splunk, QRadar, ArcSight, ELK) по протоколу syslog.

### Настройка syslog output

Конфигурация задается в блоке `<syslog_output>` файла `ossec.conf`:

```xml
<syslog_output>
  <server>192.168.1.100</server>
  <port>514</port>
  <format>json</format>
  <level>5</level>
</syslog_output>
```

### Поддерживаемые форматы

| Формат | Описание | Рекомендуемое использование |
|---|---|---|
| `default` | Стандартный syslog (RFC 3164) | Совместимость с legacy SIEM |
| `json` | JSON-формат алерта | Splunk, ELK, современные SIEM |
| `cef` | Common Event Format | ArcSight, QRadar |

### Фильтрация по группам и уровням

```xml
<syslog_output>
  <server>splunk.example.com</server>
  <port>1514</port>
  <format>json</format>
  <level>7</level>
  <group>authentication_failed,attack,</group>
</syslog_output>
```

### Syslog через TLS

Для безопасной пересылки используйте rsyslog или syslog-ng в качестве промежуточного слоя с TLS-шифрованием:

```bash
# /etc/rsyslog.d/wazuh-forward.conf
module(load="imudp")
input(type="imudp" port="514")

action(
  type="omfwd"
  target="siem.example.com"
  port="6514"
  protocol="tcp"
  StreamDriver="gtls"
  StreamDriverMode="1"
  StreamDriverAuthMode="x509/name"
)
```

## Wazuh как источник данных для Splunk

Wazuh предоставляет официальное приложение для Splunk, которое обеспечивает двустороннюю интеграцию.

### Архитектура интеграции

```
Wazuh Manager --> syslog/json --> Splunk Universal Forwarder --> Splunk Indexer
                                                                     |
                                                              Wazuh App for Splunk
```

### Настройка Splunk Forwarder

1. Установите Splunk Universal Forwarder на сервер Wazuh Manager
2. Настройте мониторинг файла алертов:

```ini
# /opt/splunkforwarder/etc/system/local/inputs.conf
[monitor:///var/ossec/logs/alerts/alerts.json]
disabled = false
index = wazuh
sourcetype = wazuh-alerts
```

3. Установите Wazuh App for Splunk на Search Head для визуализации данных

### Wazuh как standalone SIEM vs дополнение к Splunk/ELK

| Критерий | Wazuh Standalone | Wazuh + Splunk/ELK |
|---|---|---|
| Хранение данных | OpenSearch (Wazuh Indexer) | Splunk/Elasticsearch |
| Визуализация | Wazuh Dashboard | Splunk/Kibana + Wazuh App |
| Корреляция | Правила Wazuh | Правила Wazuh + SPL/KQL |
| Масштабирование | Кластер OpenSearch | Инфраструктура Splunk/ELK |
| Стоимость | Бесплатно | Лицензия Splunk / ресурсы ELK |

Для организаций, уже использующих Splunk или ELK, рекомендуется гибридный подход: Wazuh обеспечивает сбор данных и первичный анализ на конечных точках, а SIEM выполняет централизованную корреляцию и долгосрочное хранение.

## Интеграция с Elastic Stack (ELK)

Wazuh поддерживает интеграцию с Elasticsearch через Filebeat.

### Настройка Filebeat

```yaml
# /etc/filebeat/filebeat.yml
filebeat.modules:
  - module: wazuh
    alerts:
      enabled: true

output.elasticsearch:
  hosts: ["https://elasticsearch.example.com:9200"]
  index: "wazuh-alerts-%{+yyyy.MM.dd}"
  username: "elastic"
  password: "${ES_PASSWORD}"
  ssl.certificate_authorities: ["/etc/filebeat/certs/ca.pem"]
```

Подробнее о настройке Filebeat для Wazuh описано в [официальной документации Wazuh](https://documentation.wazuh.com/current/deployment-options/elastic-stack/index.html).

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

### Алерты не отправляются во внешнюю систему

1. Проверьте статус демона integratord:

```bash
/var/ossec/bin/wazuh-control status | grep integratord
```

2. Проверьте логи интеграции:

```bash
tail -f /var/ossec/logs/integrations.log
```

3. Убедитесь, что скрипт интеграции имеет корректные права:

```bash
ls -la /var/ossec/integrations/
# Ожидаемые права: -rwxr-x--- root wazuh
```

### Ошибки аутентификации

- **Slack**: проверьте, что webhook URL актуален и приложение не деактивировано
- **PagerDuty**: убедитесь, что Integration Key соответствует сервису Events API v2
- **VirusTotal**: проверьте лимит API-запросов в [Dashboard VirusTotal](https://www.virustotal.com/gui/my-apikey)

### Высокая нагрузка на integratord

При большом количестве алертов демон может создавать очередь. Рекомендации:

- Увеличьте `<level>` для фильтрации несущественных алертов
- Используйте `<rule_id>` или `<group>` для точечной отправки
- Мониторьте размер очереди через `/var/ossec/var/run/wazuh-integratord.state`

### Syslog forwarding не работает

1. Проверьте сетевую доступность:

```bash
nc -zv siem.example.com 514
```

2. Убедитесь, что блок `<syslog_output>` находится внутри `<ossec_config>`:

```bash
/var/ossec/bin/wazuh-logtest -t
```

3. Проверьте, что после изменения конфигурации сервер был перезапущен:

```bash
/var/ossec/bin/wazuh-control restart
```

Подробнее о написании собственных скриптов интеграции читайте в разделе [Разработка пользовательских интеграций](/docs/wazuh/development/wazuh-custom-integrations/).

