SOAR с нуля: автоматизация реагирования на инциденты ИБ
- Часть 1. Основы SOAR: теория для практиков
- Часть 2. Подготовка инфраструктуры
- Часть 3. Установка и настройка Shuffle
- Часть 4. Основы работы с Shuffle: первый плейбук
- Часть 5. Интеграция Shuffle с SIEM (Wazuh)
- Часть 6. Интеграция с тикет-системой (GLPI)
- Часть 7. Продвинутые плейбуки и кейсы
- Часть 8. Альтернатива: n8n для ИБ-автоматизации
- Часть 9. Полноценный SOC с TheHive и Cortex
- Часть 10. Метрики и отчетность SOAR
- Часть 11. Процессы SOAR в реальном SOC
- Часть 12. Заключение и дальнейшие шаги
О чем этот курс
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):
- SIEM генерирует 1000 алертов в день
- Аналитик вручную проверяет каждый: смотрит IP в VirusTotal, проверяет whois, открывает тикет в Jira
- На один алерт уходит 5-10 минут
- Итого: 80+ человеко-часов в день только на триаж
- Результат: выгорание аналитиков, пропущенные инциденты, низкая скорость реагирования
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 │
└─────────────────┘ └─────────────────┘ └─────────────────┘- Оркестрация — соединение различных инструментов через API
- Автоматизация — выполнение последовательностей действий (плейбуков)
- Управление инцидентами — ведение базы инцидентов, эскалация, отчетность
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 + несколько интеграций):
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| CPU | 2 ядра | 4 ядра |
| RAM | 4 ГБ | 8 ГБ |
| Диск | 20 ГБ SSD | 50 ГБ SSD |
| ОС | Ubuntu 20.04/22.04 LTS | Ubuntu 22.04 LTS |
| Docker | 20.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 --version2.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-backendshuffle-frontendshuffle-dbshuffle-opensearch
Шаг 6. Откройте веб-интерфейс
Перейдите в браузере: http://ваш-сервер-ip:3001
3.2 Первоначальная настройка Shuffle
Шаг 1. Создайте администратора
При первом входе вас попросят создать учетную запись:
- Email: admin@example.com
- Имя: Admin
- Пароль: (надежный пароль)
Шаг 2. Изучите интерфейс
Shuffle состоит из нескольких разделов:
- Workflows — здесь создаются плейбуки
- Apps — библиотека интеграций (Apps)
- Alerts — входящие алерты из внешних систем
- Executions — история выполнения плейбуков
- Users — управление пользователями
3.3 Альтернативная установка: Shuffle Cloud
Если у вас нет сервера или вы хотите быстро попробовать, можно использовать облачную версию:
- Перейдите на https://shuffler.io
- Зарегистрируйтесь (бесплатный аккаунт позволяет создать до 5 плейбуков)
- Начните создавать плейбуки сразу в браузере
Внимание: В облачной версии данные хранятся на серверах Shuffle. Для production лучше использовать self-hosted версию.
Часть 4. Основы работы с Shuffle: первый плейбук
4.1 Структура плейбука в Shuffle
Плейбук (workflow) в Shuffle состоит из:
- Trigger — источник события (вебхук, расписание, email)
- Nodes — действия (API-запросы, условия, циклы)
- Connections — связи между узлами
4.2 Создание простейшего плейбука: прием вебхука и отправка в Telegram
Шаг 1. Создайте новый плейбук
- Нажмите Workflows → Create new workflow
- Название: “Test Telegram Alert”
- Описание: “Принимает вебхук и отправляет сообщение в Telegram”
Шаг 2. Добавьте триггер (Webhook)
- Перетащите на поле Webhook из раздела Triggers
- Настройте:
- Method: POST
- URI:
/test-alert - Остальное по умолчанию
Шаг 3. Создайте Telegram-бота
Если у вас еще нет бота, создайте его в Telegram:
- Найдите @BotFather в Telegram
- Отправьте
/newbot - Получите токен (например,
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11) - Создайте канал или группу и добавьте туда бота
- Получите 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:
- URL:
{
"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” со следующей логикой:
- Webhook — принимает алерт
- JSON Parse (из Apps) — парсит JSON (хотя он уже распарсен, но можно извлечь поля)
- IF/Else — проверяет уровень алерта
- HTTP (VirusTotal) — обогащает IP-адрес
- HTTP (GLPI) — создает тикет
- Telegram — уведомляет аналитика
5.3 Обогащение данных через VirusTotal
Шаг 1. Получите API-ключ VirusTotal
- Зарегистрируйтесь на https://www.virustotal.com
- Перейдите в профиль → API Key
- Скопируйте ключ (бесплатный тариф позволяет 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:
- Зайдите в профиль пользователя (например, glpi)
- Найдите поле API token и сгенерируйте его
- Скопируйте токен
Шаг 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/jsonAuthorization: user_token ВАШ_USER_TOKENApp-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
- Path:
Шаг 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
| Критерий | Shuffle | n8n |
|---|---|---|
| Специализация | ИБ | Универсальная |
| Готовые ИБ-интеграции | Много (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_KEYContent-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:
- Автоматическое создание рисков — если инцидент повторяется часто, создать риск в Eramba
- Обновление вероятности рисков — на основе частоты инцидентов
- Проверка контролей — если плейбук не сработал (например, блокировка IP не удалась), отметить контроль как неэффективный
Часть 12. Заключение и дальнейшие шаги
12.1 Что мы построили
Мы создали полноценную SOAR-систему, которая:
- Принимает алерты из Wazuh (SIEM)
- Обогащает данные через VirusTotal и другие источники
- Автоматически создает тикеты в GLPI
- Уведомляет аналитиков в Telegram
- Интегрируется с TheHive для управления кейсами
- Собирает метрики эффективности
- Может выполнять автоматические действия (блокировка IP)
12.2 Чек-лист внедрения SOAR
- Развернут сервер Shuffle (self-hosted или cloud)
- Настроен прием алертов из SIEM (Wazuh)
- Созданы базовые плейбуки для обогащения (VirusTotal, AbuseIPDB)
- Настроена интеграция с тикет-системой (GLPI)
- Настроены уведомления (Telegram, Slack, Email)
- Созданы плейбуки для автоматического реагирования (блокировка IP)
- Настроена интеграция с TheHive/Cortex
- Разработаны правила эскалации
- Настроен мониторинг метрик SOAR
- Проведено обучение аналитиков
12.3 Рекомендации по развитию
- Добавьте больше интеграций — MISP, Shodan, Censys, OTX, YARA
- Внедрите машинное обучение — для автоматической классификации алертов
- Создайте портал для заявителей — чтобы пользователи могли сами сообщать о подозрительных письмах
- Интегрируйтесь с EDR — для сбора данных с конечных точек
- Автоматизируйте сбор доказательств — создание PDF-отчетов по инцидентам
- Настройте динамические списки блокировки — автоматическое обновление Threat Intelligence
Практическое задание
- Разверните Shuffle на сервере (по инструкции из Части 3)
- Настройте интеграцию с Wazuh (по инструкции из Части 5)
- Создайте плейбук, который:
- Принимает алерт из Wazuh
- Проверяет IP в VirusTotal
- Если IP вредоносный, создает тикет в GLPI
- Отправляет уведомление в Telegram
- Сгенерируйте тестовый алерт и проверьте работу
- Добавьте логику эскалации (по уровням критичности)
Нужна помощь?
Если вам нужно внедрить SOAR в продуктовую среду, не хватает экспертизы или вы хотите передать эту сложную задачу профессионалам — обратитесь в компанию «Стратегия Ра». Мы поможем спроектировать архитектуру, развернуть и настроить SOAR (как на базе open-source, так и коммерческие решения), интегрировать с существующими SIEM, тикет-системами и песочницами, а также обучить вашу команду работе с плейбуками. Мы также проводим аудит текущих процессов реагирования и помогаем подготовиться к проверкам ФСТЭК.