SOAR с нуля: автоматизация реагирования на инциденты ИБ

О чем этот курс

SOAR (Security Orchestration, Automation and Response) — это класс систем, которые автоматизируют процессы реагирования на инциденты информационной безопасности. Если SIEM отвечает на вопрос “Что происходит?”, то SOAR отвечает на вопрос “Что с этим делать?”.

SOAR позволяет:

  • Автоматически собирать данные из разных источников (обогащение)
  • Выполнять стандартизированные процедуры реагирования (плейбуки)
  • Оркестрировать работу различных инструментов (SIEM, песочницы, тикет-системы)
  • Сокращать время реагирования с часов до секунд
  • Снижать нагрузку на аналитиков SOC

В этом курсе мы пройдем путь от полного нуля до работающей SOAR-системы:

  • Что такое SOAR и зачем он нужен?
  • Как устроена архитектура SOAR?
  • Обзор open-source SOAR решений (Shuffle, n8n, TheHive/Cortex)
  • Пошаговая установка и настройка Shuffle (лучший open-source SOAR)
  • Создание плейбуков (playbooks) для автоматизации
  • Интеграция с Wazuh (SIEM) для приема алертов
  • Интеграция с GLPI для создания тикетов
  • Обогащение данных через VirusTotal, AbuseIPDB, Whois
  • Интеграция с TheHive/Cortex для кейс-менеджмента
  • Развертывание n8n как альтернативы для low-code автоматизации

Курс ориентирован на практику — вы сможете повторить все шаги на своем сервере или локальной машине.


Часть 1. Основы SOAR: теория для практиков

1.1 Что такое SOAR и зачем он нужен?

Представьте типичный день в SOC (Security Operations Center):

  1. SIEM генерирует 1000 алертов в день
  2. Аналитик вручную проверяет каждый: смотрит IP в VirusTotal, проверяет whois, открывает тикет в Jira
  3. На один алерт уходит 5-10 минут
  4. Итого: 80+ человеко-часов в день только на триаж
  5. Результат: выгорание аналитиков, пропущенные инциденты, низкая скорость реагирования

SOAR решает эту проблему:

Без SOARС SOAR
Аналитик открывает VirusTotal в браузереSOAR автоматически запрашивает API VirusTotal
Аналитик создает тикет вручнуюSOAR создает тикет через API
Аналитик ищет похожие инцидентыSOAR проверяет историю в базе
Аналитик блокирует IP на фаерволеSOAR отправляет команду на фаервол
Время реакции: 10-30 минутВремя реакции: 2-5 секунд

1.2 Ключевые компоненты SOAR

┌─────────────────────────────────────────────────────────────────┐
│                          SOAR Платформа                         │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│  │   Оркестрация   │  │  Автоматизация  │  │   Управление    │  │
│  │  (интеграции)   │  │   (плейбуки)    │  │   инцидентами   │  │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
              │                   │                   │
              ▼                   ▼                   ▼
┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│   Источники     │  │   Инструменты   │  │   Системы       │
│   • SIEM        │  │   • VirusTotal  │  │   • GLPI        │
│   • EDR         │  │   • AbuseIPDB   │  │   • Jira        │
│   • Почта       │  │   • Sandbox     │  │   • TheHive     │
│   • Тикеты      │  │   • Firewall    │  │   • Slack       │
└─────────────────┘  └─────────────────┘  └─────────────────┘
  1. Оркестрация — соединение различных инструментов через API
  2. Автоматизация — выполнение последовательностей действий (плейбуков)
  3. Управление инцидентами — ведение базы инцидентов, эскалация, отчетность

1.3 Обзор open-source SOAR решений

РешениеПлюсыМинусыДля кого
ShuffleПростой веб-интерфейс, множество готовых интеграций, активное сообщество, бесплатноОграничения в бесплатной версии (до 5 плейбуков), cloud-only для некоторых функцийМалый и средний бизнес, учебные проекты
n8nУниверсальный low-code инструмент, огромное количество интеграций (не только ИБ), self-hostedНе специализирован для ИБ, нет готовых ИБ-плейбуковКомпании, уже использующие n8n для других задач
TheHive + CortexПолноценный кейс-менеджмент (TheHive) и анализаторы (Cortex), интеграция с MISPСложная установка, нет встроенной оркестрации (только анализаторы)SOC, которым нужен кейс-менеджмент
WALKOFFОт IBM, гибкий Python-фреймворкМало документации, слабое сообществоРазработчики, готовые писать код
ShufflerЛегковесный, на PythonОчень мало функцийЭксперименты

В этом курсе мы сосредоточимся на Shuffle как самом простом для старта в ИБ, и на n8n как на универсальном инструменте для автоматизации любых процессов.


Часть 2. Подготовка инфраструктуры

2.1 Требования к оборудованию

Для учебного проекта (Shuffle + несколько интеграций):

КомпонентМинимумРекомендуется
CPU2 ядра4 ядра
RAM4 ГБ8 ГБ
Диск20 ГБ SSD50 ГБ SSD
ОСUbuntu 20.04/22.04 LTSUbuntu 22.04 LTS
Docker20.10+24.0+

2.2 Создание виртуальной машины

Вариант 1: Локальная VM (VirtualBox/VMware)

  • Скачайте Ubuntu Server 22.04 LTS
  • Создайте VM с параметрами выше
  • Настройте сеть (NAT + Host-Only для доступа)

Вариант 2: Облачный сервер (VPS)

  • Арендуйте VPS у любого провайдера (минимум 4 ГБ RAM)
  • Установите Ubuntu 22.04

2.3 Базовая настройка сервера

# Обновление системы
sudo apt update && sudo apt upgrade -y

# Установка необходимых пакетов
sudo apt install -y curl wget git vim htop net-tools docker.io docker-compose

# Настройка Docker
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER

# Выход и вход заново (или перезагрузка сессии)
exit

После повторного входа проверьте Docker:

docker --version
docker-compose --version

2.4 Открытие портов

sudo ufw allow 22/tcp        # SSH
sudo ufw allow 80/tcp         # HTTP для Shuffle
sudo ufw allow 443/tcp        # HTTPS для Shuffle
sudo ufw allow 3001/tcp       # Альтернативный порт для Shuffle
sudo ufw enable

Часть 3. Установка и настройка Shuffle

Shuffle — это open-source SOAR-платформа с веб-интерфейсом, разработанная специально для ИБ.

3.1 Установка Shuffle через Docker (рекомендуемый способ)

Шаг 1. Создайте директорию для Shuffle

mkdir ~/shuffle
cd ~/shuffle

Шаг 2. Скачайте docker-compose файл

wget https://raw.githubusercontent.com/Shuffle/Shuffle/master/docker-compose.yml

Шаг 3. Отредактируйте docker-compose.yml (опционально)

nano docker-compose.yml

Обратите внимание на переменные окружения:

environment:
  - SHUFFLE_APP_IMAGE_REPO=shuffle
  - SHUFFLE_BASE_URL=http://ваш-сервер-ip:3001
  - SHUFFLE_API_PORT=3001

Шаг 4. Запустите Shuffle

docker-compose up -d

Шаг 5. Проверьте статус

docker-compose ps

Должны быть запущены контейнеры:

  • shuffle-backend
  • shuffle-frontend
  • shuffle-db
  • shuffle-opensearch

Шаг 6. Откройте веб-интерфейс

Перейдите в браузере: http://ваш-сервер-ip:3001

3.2 Первоначальная настройка Shuffle

Шаг 1. Создайте администратора

При первом входе вас попросят создать учетную запись:

  • Email: admin@example.com
  • Имя: Admin
  • Пароль: (надежный пароль)

Шаг 2. Изучите интерфейс

Shuffle состоит из нескольких разделов:

  1. Workflows — здесь создаются плейбуки
  2. Apps — библиотека интеграций (Apps)
  3. Alerts — входящие алерты из внешних систем
  4. Executions — история выполнения плейбуков
  5. Users — управление пользователями

3.3 Альтернативная установка: Shuffle Cloud

Если у вас нет сервера или вы хотите быстро попробовать, можно использовать облачную версию:

  1. Перейдите на https://shuffler.io
  2. Зарегистрируйтесь (бесплатный аккаунт позволяет создать до 5 плейбуков)
  3. Начните создавать плейбуки сразу в браузере

Внимание: В облачной версии данные хранятся на серверах Shuffle. Для production лучше использовать self-hosted версию.


Часть 4. Основы работы с Shuffle: первый плейбук

4.1 Структура плейбука в Shuffle

Плейбук (workflow) в Shuffle состоит из:

  • Trigger — источник события (вебхук, расписание, email)
  • Nodes — действия (API-запросы, условия, циклы)
  • Connections — связи между узлами

4.2 Создание простейшего плейбука: прием вебхука и отправка в Telegram

Шаг 1. Создайте новый плейбук

  • Нажмите WorkflowsCreate new workflow
  • Название: “Test Telegram Alert”
  • Описание: “Принимает вебхук и отправляет сообщение в Telegram”

Шаг 2. Добавьте триггер (Webhook)

  • Перетащите на поле Webhook из раздела Triggers
  • Настройте:
    • Method: POST
    • URI: /test-alert
    • Остальное по умолчанию

Шаг 3. Создайте Telegram-бота

Если у вас еще нет бота, создайте его в Telegram:

  1. Найдите @BotFather в Telegram
  2. Отправьте /newbot
  3. Получите токен (например, 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11)
  4. Создайте канал или группу и добавьте туда бота
  5. Получите chat_id (можно через https://api.telegram.org/bot<TOKEN>/getUpdates)

Шаг 4. Добавьте действие (Telegram)

  • Перетащите на поле HTTP из раздела Apps (или найдите Telegram в библиотеке)
  • Настройте:
    • URL: https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage
    • Method: POST
    • Headers: Content-Type: application/json
    • Body:
{
  "chat_id": "ВАШ_CHAT_ID",
  "text": "Alert received: {{trigger.body.message}}",
  "parse_mode": "HTML"
}

Шаг 5. Соедините узлы

  • Проведите линию от Webhook к HTTP

Шаг 6. Сохраните и запустите плейбук

  • Нажмите Save (иконка дискеты)
  • Переключите тумблер Active в положение ON

Шаг 7. Протестируйте

Отправьте тестовый запрос:

curl -X POST http://ваш-сервер-ip:3001/api/v1/webhooks/trigger/test-alert \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello from Shuffle!"}'

Проверьте Telegram — должно прийти сообщение.

4.3 Добавление логики: IF-условия

Шаг 1. Добавьте узел IF/Else

  • Перетащите IF/Else из раздела Logic
  • Соедините Webhook → IF/Else

Шаг 2. Настройте условие

В настройках IF/Else укажите:

  • Condition: {{trigger.body.severity}} >= 5

Шаг 3. Создайте два пути

  • True path (если severity >= 5): отправка в Telegram (как выше)
  • False path (если severity < 5): просто логирование (можно использовать узел Logger)

Шаг 4. Протестируйте

# Это сообщение должно уйти в Telegram
curl -X POST http://ваш-сервер-ip:3001/api/v1/webhooks/trigger/test-alert \
  -H "Content-Type: application/json" \
  -d '{"message": "Critical alert", "severity": 10}'

# Это должно только залогироваться
curl -X POST http://ваш-сервер-ip:3001/api/v1/webhooks/trigger/test-alert \
  -H "Content-Type: application/json" \
  -d '{"message": "Info message", "severity": 2}'

Часть 5. Интеграция Shuffle с SIEM (Wazuh)

Теперь подключим наш SOAR к реальному источнику событий — SIEM Wazuh (который мы развернули в предыдущем курсе).

5.1 Настройка Wazuh для отправки алертов в Shuffle

Шаг 1. Создайте плейбук в Shuffle для приема алертов Wazuh

  • Создайте новый плейбук “Wazuh Alert Handler”
  • Добавьте триггер Webhook
  • URI: /wazuh-alert
  • Сохраните плейбук и скопируйте URL вебхука (он будет виден в настройках триггера)

Шаг 2. Настройте интеграцию в Wazuh

В Wazuh есть несколько способов отправки алертов. Мы используем Custom Integration.

На сервере Wazuh отредактируйте файл /var/ossec/etc/ossec.conf:

sudo nano /var/ossec/etc/ossec.conf

Добавьте в конец секции <ossec_config>:

<integration>
  <name>custom</name>
  <hook_url>http://ВАШ-СЕРВЕР-SOAR:3001/api/v1/webhooks/trigger/wazuh-alert</hook_url>
  <level>5</level>
  <alert_format>json</alert_format>
</integration>

Параметры:

  • level="5" — отправлять алерты с уровнем 5 и выше
  • alert_format="json" — отправлять в JSON-формате

Шаг 3. Перезапустите Wazuh

sudo systemctl restart wazuh-manager

Шаг 4. Протестируйте

Сгенерируйте тестовый алерт (например, неудачную попытку SSH на агенте). Проверьте в Shuffle, пришел ли алерт (раздел Executions).

5.2 Парсинг алертов Wazuh

Алерты Wazuh приходят в сложном JSON-формате. Нам нужно извлечь ключевые поля.

Шаг 1. Изучите структуру алерта

В разделе Executions откройте выполнение плейбука и посмотрите, что пришло в trigger.body. Типичный алерт Wazuh:

{
  "timestamp": "2026-03-10T12:34:56.789+0300",
  "rule": {
    "level": 10,
    "description": "SSH Brute-force attack detected",
    "id": "100002"
  },
  "agent": {
    "id": "001",
    "name": "web-server-01",
    "ip": "192.168.1.100"
  },
  "data": {
    "srcip": "185.130.5.xxx",
    "dstip": "192.168.1.100",
    "srcport": "34567"
  }
}

Шаг 2. Создайте плейбук для обработки

Создайте новый плейбук “Wazuh Alert Processor” со следующей логикой:

  1. Webhook — принимает алерт
  2. JSON Parse (из Apps) — парсит JSON (хотя он уже распарсен, но можно извлечь поля)
  3. IF/Else — проверяет уровень алерта
  4. HTTP (VirusTotal) — обогащает IP-адрес
  5. HTTP (GLPI) — создает тикет
  6. Telegram — уведомляет аналитика

5.3 Обогащение данных через VirusTotal

Шаг 1. Получите API-ключ VirusTotal

  1. Зарегистрируйтесь на https://www.virustotal.com
  2. Перейдите в профиль → API Key
  3. Скопируйте ключ (бесплатный тариф позволяет 4 запроса в минуту)

Шаг 2. Добавьте узел HTTP для запроса к VirusTotal

Настройки узла:

  • URL: https://www.virustotal.com/api/v3/ip_addresses/{{trigger.body.data.srcip}}
  • Method: GET
  • Headers:
    • x-apikey: ВАШ_API_КЛЮЧ
    • Accept: application/json

Шаг 3. Обработайте ответ

После узла VirusTotal добавьте еще один узел для извлечения данных:

  • JSON Parse — извлекает data.attributes.last_analysis_stats.malicious
  • IF/Else — если malicious > 0, то критичность повышается

Часть 6. Интеграция с тикет-системой (GLPI)

6.1 Настройка GLPI API

Шаг 1. Включите REST API в GLPI

В GLPI перейдите:

  • КонфигурацияОбщиеAPI REST
  • Включите Enable REST API
  • Создайте Client ID и Client Secret (запишите их)

Шаг 2. Получите токен для пользователя

В GLPI есть два способа аутентификации:

  • Session token (через initSession)
  • User token (в профиле пользователя)

Проще использовать user token:

  1. Зайдите в профиль пользователя (например, glpi)
  2. Найдите поле API token и сгенерируйте его
  3. Скопируйте токен

Шаг 3. Проверьте API

curl -X GET "https://glpi.example.com/apirest.php/getFullSession" \
  -H "Content-Type: application/json" \
  -H "Authorization: user_token ВАШ_USER_TOKEN" \
  -H "App-Token: ВАШ_APP_TOKEN"

6.2 Создание плейбука для создания тикетов в GLPI

Шаг 1. Добавьте узел HTTP для создания тикета

Настройки:

  • URL: https://glpi.example.com/apirest.php/Ticket
  • Method: POST
  • Headers:
    • Content-Type: application/json
    • Authorization: user_token ВАШ_USER_TOKEN
    • App-Token: ВАШ_APP_TOKEN
  • Body:
{
  "input": {
    "name": "Security Alert: {{trigger.body.rule.description}}",
    "content": "Source IP: {{trigger.body.data.srcip}}\nAgent: {{trigger.body.agent.name}}\nRule ID: {{trigger.body.rule.id}}\n\nVirusTotal report: {{virus_total_response.data.attributes.last_analysis_stats.malicious}} malicious detections",
    "urgency": 3,
    "priority": 4,
    "entities_id": 1
  }
}

Шаг 2. Добавьте обработку ответа

После создания тикета можно извлечь его номер из ответа:

{
  "id": 123,
  "message": "Ticket successfully created"
}

Шаг 3. Отправьте номер тикета в Telegram

Добавьте еще один узел Telegram:

{
  "chat_id": "ВАШ_CHAT_ID",
  "text": "✅ Тикет #{{glpi_response.id}} создан для алерта {{trigger.body.rule.description}}",
  "parse_mode": "HTML"
}

Часть 7. Продвинутые плейбуки и кейсы

7.1 Кейс 1: Автоматическая блокировка IP на фаерволе

Сценарий: Если IP из алерта Wazuh имеет высокую репутационную угрозу (VirusTotal > 5 детектов), автоматически блокировать его на фаерволе.

Плейбук:

[Webhook] → [VirusTotal] → [IF malicious > 5] → [Block on Firewall] → [Create Ticket] → [Telegram]
                                    │
                                    └→ [IF malicious <= 5] → [Create Ticket (low)] → [Telegram]

Узел “Block on Firewall” (например, для iptables на сервере):

# Это может быть SSH-команда на фаервол
ssh user@firewall "iptables -A INPUT -s {{trigger.body.data.srcip}} -j DROP"

В Shuffle это можно сделать через узел SSH или HTTP, если у фаервола есть API.

7.2 Кейс 2: Анализ подозрительных файлов в песочнице

Сценарий: При обнаружении подозрительного файла (например, через FIM в Wazuh), отправить его в песочницу (Cuckoo, CAPE) и получить отчет.

Плейбук:

[Webhook] → [Download file from host] → [Send to Sandbox] → [Wait for analysis] → [Parse report]
      │                                                                                │
      └→ [IF malicious] → [Create incident] → [Quarantine host] → [Telegram]

Узел “Send to Sandbox” (например, для Cuckoo API):

{
  "url": "http://cuckoo:8090/tasks/create/file",
  "method": "POST",
  "files": {
    "file": "{{downloaded_file.content}}"
  }
}

7.3 Кейс 3: Поиск похожих инцидентов в TheHive

Сценарий: При создании инцидента, проверить, не было ли похожих в прошлом (по IP, по типу атаки).

Плейбук:

[Webhook] → [Search TheHive] → [IF found similar] → [Link to existing case] → [Telegram]
                        │
                        └→ [IF not found] → [Create new case in TheHive] → [Create ticket]

Узел “Search TheHive”:

{
  "url": "http://thehive:9000/api/v1/case/_search",
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ВАШ_API_KEY"
  },
  "body": {
    "query": {
      "tags": ["srcip:{{trigger.body.data.srcip}}"]
    }
  }
}

Часть 8. Альтернатива: n8n для ИБ-автоматизации

n8n — это универсальный low-code инструмент для автоматизации любых процессов. Он не специализирован для ИБ, но с его помощью можно решать многие задачи SOAR.

8.1 Установка n8n

Шаг 1. Установка через Docker (проще всего)

docker run -d \
  --name n8n \
  --restart unless-stopped \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n

Шаг 2. Откройте веб-интерфейс

Перейдите в браузере: http://ваш-сервер-ip:5678

8.2 Создание первого workflow в n8n

Шаг 1. Добавьте триггер Webhook

  • Перетащите Webhook на поле
  • Настройте:
    • Path: /test
    • Method: POST

Шаг 2. Добавьте HTTP-запрос к VirusTotal

  • Перетащите HTTP Request
  • Настройте:
    • Method: GET
    • URL: https://www.virustotal.com/api/v3/ip_addresses/{{$node["Webhook"].json.body.srcip}}
    • Headers: x-apikey: ВАШ_API_КЛЮЧ

Шаг 3. Добавьте условие IF

  • Перетащите IF
  • Настройте условие:
    • {{$node["HTTP Request"].json.data.attributes.last_analysis_stats.malicious}} > 0

Шаг 4. Добавьте Telegram

  • Перетащите Telegram
  • Настройте:
    • Chat ID: ВАШ_CHAT_ID
    • Text: Malicious IP detected: {{$node["Webhook"].json.body.srcip}}

Шаг 5. Активируйте workflow

  • Нажмите Active

8.3 Сравнение Shuffle и n8n

КритерийShufflen8n
СпециализацияИБУниверсальная
Готовые ИБ-интеграцииМного (VirusTotal, MISP, TheHive)Требуют настройки через HTTP
Визуальный редакторОтличныйХороший
Self-hostedДа (бесплатно)Да (бесплатно)
Cloud-версияЕсть (ограничения)Есть (ограничения)
СообществоИБ-специалистыРазработчики всех направлений
СложностьСредняяНизкая

Когда выбрать Shuffle: если вам нужны готовые ИБ-интеграции и вы работаете в SOC.

Когда выбрать n8n: если вы уже используете n8n для других задач или вам нужна универсальная автоматизация.


Часть 9. Полноценный SOC с TheHive и Cortex

TheHive — это система управления инцидентами (кейс-менеджмент). Cortex — это движок анализаторов, который интегрируется с TheHive. Вместе они образуют мощную open-source платформу для SOC.

9.1 Установка TheHive и Cortex

Шаг 1. Установка через Docker Compose

Создайте файл docker-compose.yml:

version: '3'

services:
  elasticsearch:
    image: elasticsearch:7.17.0
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data

  cortex:
    image: thehiveproject/cortex:latest
    ports:
      - "9001:9001"
    volumes:
      - ./cortex/data:/opt/cortex/data
    depends_on:
      - elasticsearch

  thehive:
    image: thehiveproject/thehive:latest
    ports:
      - "9000:9000"
    volumes:
      - ./thehive/data:/opt/thp/thehive/data
    depends_on:
      - elasticsearch
      - cortex
    environment:
      - CORTEX_URL=http://cortex:9001

Шаг 2. Запустите контейнеры

docker-compose up -d

Шаг 3. Настройте TheHive и Cortex

  • TheHive: http://ваш-сервер-ip:9000
  • Cortex: http://ваш-сервер-ip:9001

В Cortex создайте организацию и пользователя, затем получите API-ключ.

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

Шаг 1. Создайте плейбук в Shuffle для создания кейса в TheHive

Добавьте узел HTTP:

  • URL: http://thehive:9000/api/v1/case
  • Method: POST
  • Headers:
    • Authorization: Bearer ВАШ_API_KEY
    • Content-Type: application/json
  • Body:
{
  "title": "Incident: {{trigger.body.rule.description}}",
  "description": "Source IP: {{trigger.body.data.srcip}}\nAgent: {{trigger.body.agent.name}}",
  "severity": {{trigger.body.rule.level / 3 | round}},
  "tags": ["wazuh", "{{trigger.body.rule.id}}"],
  "tlp": 2,
  "pap": 2
}

Шаг 2. Добавьте наблюдаемые (observables)

После создания кейса добавьте IP как observable:

{
  "url": "http://thehive:9000/api/v1/case/{{thehive_response.id}}/observable",
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ВАШ_API_KEY"
  },
  "body": {
    "dataType": "ip",
    "data": "{{trigger.body.data.srcip}}",
    "message": "Source IP from Wazuh alert",
    "tags": ["srcip"],
    "tlp": 2
  }
}

9.3 Использование Cortex для анализа

Cortex имеет множество анализаторов (VirusTotal, AbuseIPDB, PassiveTotal, etc.).

Шаг 1. Настройте анализаторы в Cortex

В веб-интерфейсе Cortex:

  • Organizations → выберите организацию
  • Analyzers → включите нужные (VirusTotal_IP_3, AbuseIPDB, etc.)
  • Добавьте API-ключи для каждого

Шаг 2. Запустите анализатор через API

curl -X POST "http://cortex:9001/api/analyzer/VirusTotal_IP_3/run" \
  -H "Authorization: Bearer ВАШ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "data": "8.8.8.8",
    "dataType": "ip",
    "tlp": 2
  }'

Шаг 3. Интегрируйте Cortex с Shuffle

В Shuffle создайте узел HTTP для вызова Cortex после получения алерта и добавьте результаты в кейс TheHive.


Часть 10. Метрики и отчетность SOAR

10.1 Ключевые метрики эффективности SOAR

МетрикаОписаниеФормула
MTTR (Mean Time to Respond)Среднее время реагированияСумма времени реагирования / кол-во инцидентов
Автоматизация %Доля инцидентов, обработанных без участия человека(Авто-инциденты / Все инциденты) * 100
Сэкономленное времяЧеловеко-часы, сэкономленные автоматизацией(Время ручной обработки * кол-во авто-инцидентов)
ТочностьДоля корректно классифицированных инцидентов(True positives / (True positives + False positives)) * 100
Пропускная способностьИнцидентов в час/деньОбщее кол-во инцидентов за период

10.2 Сбор метрик в Shuffle

Shuffle автоматически логирует все выполнения плейбуков в разделе Executions. Вы можете экспортировать эти данные через API.

Пример запроса к API Shuffle для получения статистики:

curl -X GET "http://localhost:3001/api/v1/workflows/stats" \
  -H "Authorization: Bearer ВАШ_API_KEY"

10.3 Создание дашборда в Grafana

Шаг 1. Настройте экспорт метрик в Prometheus

Shuffle может экспортировать метрики в формате Prometheus. Добавьте в docker-compose.yml:

environment:
  - SHUFFLE_PROMETHEUS_ENABLED=true
  - SHUFFLE_PROMETHEUS_PORT=9091

Шаг 2. Установите Prometheus и Grafana

docker run -d --name prometheus -p 9090:9090 prom/prometheus
docker run -d --name grafana -p 3000:3000 grafana/grafana

Шаг 3. Настройте дашборд

В Grafana импортируйте дашборд с метриками:

  • Количество выполненных плейбуков за час
  • Среднее время выполнения
  • Топ-5 самых частых алертов
  • Процент успешных/ошибочных выполнений

Часть 11. Процессы SOAR в реальном SOC

11.1 Уровни автоматизации

УровеньОписаниеПример
L1: ИнформационныйПростое уведомлениеОтправка алерта в Telegram
L2: ОбогащениеСбор дополнительных данныхVirusTotal, Whois, геолокация
L3: РекомендательныйАналитик получает готовые рекомендации“Заблокировать IP? Да/Нет”
L4: ПолуавтоматическийАвтоматические действия с подтверждениемСоздан тикет, ожидает approve
L5: АвтоматическийПолностью автоматическое реагированиеБлокировка IP без участия человека

11.2 Эскалация инцидентов

Правила эскалации:

[Алерт] → [Обогащение] → [Оценка критичности]
                           │
                           ├─→ [Низкая] → [Тикет в GLPI, приоритет 3] → [Уведомление в Slack]
                           │
                           ├─→ [Средняя] → [Тикет в GLPI, приоритет 2] → [SMS аналитику]
                           │
                           └─→ [Высокая] → [Звонок руководителю SOC] → [Создание комитета]

11.3 Интеграция с процессом управления рисками (Eramba)

Как и в предыдущих курсах, мы можем интегрировать SOAR с Eramba:

  1. Автоматическое создание рисков — если инцидент повторяется часто, создать риск в Eramba
  2. Обновление вероятности рисков — на основе частоты инцидентов
  3. Проверка контролей — если плейбук не сработал (например, блокировка IP не удалась), отметить контроль как неэффективный

Часть 12. Заключение и дальнейшие шаги

12.1 Что мы построили

Мы создали полноценную SOAR-систему, которая:

  1. Принимает алерты из Wazuh (SIEM)
  2. Обогащает данные через VirusTotal и другие источники
  3. Автоматически создает тикеты в GLPI
  4. Уведомляет аналитиков в Telegram
  5. Интегрируется с TheHive для управления кейсами
  6. Собирает метрики эффективности
  7. Может выполнять автоматические действия (блокировка IP)

12.2 Чек-лист внедрения SOAR

  • Развернут сервер Shuffle (self-hosted или cloud)
  • Настроен прием алертов из SIEM (Wazuh)
  • Созданы базовые плейбуки для обогащения (VirusTotal, AbuseIPDB)
  • Настроена интеграция с тикет-системой (GLPI)
  • Настроены уведомления (Telegram, Slack, Email)
  • Созданы плейбуки для автоматического реагирования (блокировка IP)
  • Настроена интеграция с TheHive/Cortex
  • Разработаны правила эскалации
  • Настроен мониторинг метрик SOAR
  • Проведено обучение аналитиков

12.3 Рекомендации по развитию

  1. Добавьте больше интеграций — MISP, Shodan, Censys, OTX, YARA
  2. Внедрите машинное обучение — для автоматической классификации алертов
  3. Создайте портал для заявителей — чтобы пользователи могли сами сообщать о подозрительных письмах
  4. Интегрируйтесь с EDR — для сбора данных с конечных точек
  5. Автоматизируйте сбор доказательств — создание PDF-отчетов по инцидентам
  6. Настройте динамические списки блокировки — автоматическое обновление Threat Intelligence

Практическое задание

  1. Разверните Shuffle на сервере (по инструкции из Части 3)
  2. Настройте интеграцию с Wazuh (по инструкции из Части 5)
  3. Создайте плейбук, который:
    • Принимает алерт из Wazuh
    • Проверяет IP в VirusTotal
    • Если IP вредоносный, создает тикет в GLPI
    • Отправляет уведомление в Telegram
  4. Сгенерируйте тестовый алерт и проверьте работу
  5. Добавьте логику эскалации (по уровням критичности)

Нужна помощь?

Если вам нужно внедрить SOAR в продуктовую среду, не хватает экспертизы или вы хотите передать эту сложную задачу профессионалам — обратитесь в компанию «Стратегия Ра». Мы поможем спроектировать архитектуру, развернуть и настроить SOAR (как на базе open-source, так и коммерческие решения), интегрировать с существующими SIEM, тикет-системами и песочницами, а также обучить вашу команду работе с плейбуками. Мы также проводим аудит текущих процессов реагирования и помогаем подготовиться к проверкам ФСТЭК.