Перейти до змісту

Архітектура та потік даних

Огляд

Архітектура SOC — пошаровий потік: збір з ендпоінтів → кореляція у Wazuh Manager → зберігання у Wazuh Indexer → автоматична диспетчеризація у TheHive/CrowdSec/Teams → triage людиною → розслідування у Case → опціонально форензика через Velociraptor.

Поточний стан (2026-04-15) має 2 ключові відмінності від цільового роадмапу:

  1. Оркестрація йде не через Shuffle (SOAR), а через прості custom-скрипти на Wazuh Manager. Shuffle розгорнутий, але playbook'и не написані — він зараз idle.
  2. Tier 3 компоненти не розгорнуті: Suricata (NIDS) блокована відсутністю SPAN port, Grafana не розгорнута, Sigma community rules не імпортовані.

Потік даних (крок за кроком)

Крок 1. Збір

  • Wazuh agents (35 Active) на CT/хостах Академії — збирають login events, File Integrity Monitoring (FIM), процеси, USB-події, vulnerability scans.
  • FortiGate шле syslog у Wazuh Manager (порт 514/udp).

Крок 2. Прийом і кореляція

  • Wazuh Manager (CT702) приймає події через порт 1514 (agent protocol, TCP+UDP).
  • Застосовує декодери + правила:
    • Builtin Wazuh ruleset (thousands of rules)
    • Локальні /var/ossec/etc/rules/local_rules.xml (в т.ч. RFC 5737 suppressions — див. Daily Routine Tier 1)
  • Генерує alert'и з level 0-15 (0 = suppressed, 15 = critical).

Крок 3. Зберігання

  • Усі події індексуються у Wazuh Indexer (3-node OpenSearch cluster):
    • CT701 primary на siem-px1
    • CT704 replica 1 на siem-px3
    • CT705 replica 2 на siem-px5
  • Дані індексуються з replicas 2 (кожен документ на 2 нодах) — втрата 1 ноди не втрачає дані.

Крок 4. Автоматична диспетчеризація (level ≥ 10)

⚠️ Відхилення від плану: замість єдиного Shuffle (SOAR) зараз працюють 3 незалежні custom-скрипти на Wazuh Manager (тимчасове рішення, міграція у Shuffle — TASK-114):

Скрипт Куди шле Мета
custom-thehive.py TheHive (CT710) → POST /api/v1/alert Створити Alert у TheHive (НЕ Case!)
custom-crowdsec-block.py CrowdSec (CT707) → POST /v1/alerts Забанити IP (з whitelist фільтром + TTL)
custom-teams.sh Microsoft Teams webhook Adaptive Card у SIEM-Alerts канал

Ці три роботи виконуються паралельно у Wazuh Manager.

Крок 5. Triage (Tier 1 аналітик, людина)

Аналітик відкриває TheHive Alerts queue. Для кожного Alert:

  1. 📄 Preview and Import (іконка у рядку alert'а) → модальне вікно з description, tags, observables.
  2. На основі тексту (rule, agent, srcip, full_log) аналітик приймає рішення:
    • Підозрілий"Yes, Import" → alert стає Case
    • FP (шум) → Cancel, "Mark as read"
  3. Cortex аналізатори (VirusTotal, AbuseIPDB, MISP) запускаються тільки в Case (не в Alert) — кнопка "Run analyzers" доступна на observable у Case → Observables tab.

Alert vs Case — фундаментальна різниця:

Alert Case
Як створюється Автоматично (Wazuh→TheHive) Вручну (з Alert через "Yes, Import")
Що означає Сира тривога, ще не triage Підтверджений інцидент на розслідування
Скільки їх Багато (~100-1000/день), 70% FP Мало (~5-20/день), всі значущі
Cortex аналізатори ❌ недоступні ✅ кнопка "Run analyzers" на кожному observable
Де у TheHive UI Alerts tab Cases tab

Без проміжного етапу "Alert → triage → Case" TheHive забився б шумом за кілька днів.

Крок 6. Розслідування (Tier 2+)

Аналітик працює у TheHive Case: - Додає tasks (що перевірити) - Додає observables (знайдені IoCs) - Для кожного observable — Cortex enrichment (VT/AbuseIPDB/MISP повторно) - Шукає у MISP — "чи цей IoC хтось уже бачив? коли? в якому event?" - За потреби — Velociraptor hunt на host'і: "покажи процеси / файли / registry"

Крок 7. Реагування на WAN атаки

Це паралельний flow, не залежить від TheHive: - CrowdSec зберігає decisions локально (SQLite) - blocklist-mirror на CT707 експортує активні decisions як HTTP feed (http://10.250.0.16/security/blocklist) - FortiGate підтягує feed кожну хвилину як external-resource - FortiGate Policy 137 DROP'ить трафік з IP у feed

Тобто ban відбувається через 1-2 хвилини після Wazuh alert — атакуючий IP перестає досягати навіть публічних сервісів Академії.


Діаграма (поточний реальний flow)

  Зовнішні threat feeds                           ┌────────────────────────┐
  (CERT-UA, MISP feeds)──────hourly feed────────▶│  MISP (CT706)           │
                                                  │  570+ events           │
                                                  └───────┬─────────┬──────┘
                                                          │         │
                                           (analyzer query│         │ hourly sync
                                            from Cortex)  │         ▼
                                                          │  ┌───────────────┐
                                                          │  │ TheHive Alerts │
                                                          │  │ queue (CT710) │
                                                          │  └───────┬───────┘
                                                          │          │ Import as Case
                                                          │          │ (human click)
                                                          ▼          ▼
                                                    ┌──────────────────────┐
                                                    │  Cortex (CT711)       │
                                                    │  ↑ enrichment         │
                                                    │  VT+AbuseIPDB+MISP   │
                                                    └──────────┬───────────┘
                     ┌───────────────┐                        │
35 Wazuh agents ─────│                │  custom-thehive.py   │
FortiGate syslog ────│ Wazuh Manager ├──────────────────────▶│
                     │    (CT702)     │  custom-crowdsec...   │
                     │                │─────────▶ CrowdSec (CT707) ──feed──▶ FortiGate Policy 137 DROP
                     │                │  custom-teams.sh
                     │                │─────────▶ MS Teams SIEM-Alerts
                     └───────┬────────┘
                             │ all events indexed
                     ┌─────────────────────────────────┐
                     │  Wazuh Indexer (OpenSearch 3-node)│
                     │  Primary:  CT701 @ siem-px1      │
                     │  Replica1: CT704 @ siem-px3      │
                     │  Replica2: CT705 @ siem-px5      │
                     └──────────┬──────────────────────┘
                                │ queries
                     ┌──────────────────────┐
                     │ Wazuh Dashboard (CT703)│
                     └──────────────────────┘


                     ┌───────────────────────────┐
                     │ Velociraptor (CT713)       │
                     │ — сервер розгорнутий       │
                     │ — клієнти ще НЕ розгорнуті │  ⟵ subtask 26
                     └───────────────────────────┘


🟡 НЕ У FLOW зараз:
   Shuffle (idle — playbooks не написані, subtask 22)
   Suricata (не розгорнуто — блокер SPAN port)
   Grafana (не розгорнуто, Tier 3)
   Sigma rules (не імпортовано, Tier 3)

Інтеграційні точки (активні)

Звідки Куди Метод Статус
Wazuh Agent Wazuh Manager Agent protocol (1514 TCP+UDP) 🟢 35 agents active
FortiGate Wazuh Manager Syslog (514 UDP) 🟢
Wazuh Manager Wazuh Indexer REST API (9200 TCP) 🟢 3-node cluster
Wazuh Manager TheHive custom-thehive.py → HTTPS POST /api/v1/alert 🟢 (level ≥ 10)
Wazuh Manager CrowdSec custom-crowdsec-block.py → HTTP POST /v1/alerts 🟢 (level ≥ 10, з whitelist)
Wazuh Manager MS Teams custom-teams.sh → HTTPS Power Automate webhook 🟢 (level ≥ 10)
Wazuh Dashboard Wazuh Indexer REST API (9200) 🟢
TheHive Cortex REST API з application.conf (Bearer auth) 🟢
TheHive MISP REST API з application.conf (key auth, hourly sync) 🟢 570+ events imported
Cortex VirusTotal REST API (HTTPS outbound) 🟢 500 lookups/day free
Cortex AbuseIPDB REST API (HTTPS outbound) 🟢 1000 lookups/day free
Cortex MISP (local) REST API 🟢
CrowdSec FortiGate External-resource HTTP feed (pull кожну хв) 🟢 Policy 137 DROP

Плановані інтеграції (НЕ активні)

Інтеграція Мета Де у BACKLOG
Wazuh Manager → Shuffle SOAR оркестрація замість custom scripts TASK-092d subtask 22
Shuffle → TheHive / Cortex / Teams / CrowdSec Playbooks для automation flows subtask 22
MISP → Wazuh CDB lists IoC matching у Wazuh rules (99906-99920) subtask 28
Suricata → Wazuh Manager Network-level detection TASK-092e
Sigma rules → Wazuh rules 100+ community detection rules TASK-092e
Wazuh Indexer → Grafana Executive dashboards для Manager/CISO TASK-092e
Teams Adaptive Card → action buttons One-click "Open in TheHive" / "Wazuh Discover" subtask 29
Velociraptor agents → Velociraptor server Endpoint forensics working реально subtask 26 (Phase 1-3)

Чому саме такий flow (історичний контекст)

Первинний план (Tier 2 deployment plan 2026-04-14) передбачав Shuffle як центральний orchestration layer. Під час реального deployment ми вирішили:

  1. Швидко вивести MVP у прод — Wazuh→TheHive flow критичний, не чекати написання playbooks
  2. Написати прості custom-скрипти Python/bash (99 рядків у сумі) для тривіальних flows
  3. Shuffle залишити розгорнутим, але idle — поки не буде потреби у складніших workflow (if → else → parallel гілки)

Це зробило MVP живим за 1 день замість тижнів. Ціна — код у 3 місцях замість одного Shuffle UI.

⚠️ TASK-114: Міграція custom scripts → Shuffle (обов'язкова)

Принцип: якщо можливо щось НЕ мати на Wazuh Manager як custom script, а в Shuffle — то це має бути в Shuffle. Wazuh Manager = detection + correlation. Shuffle SOAR = orchestration + response + notification.

Всі 3 custom scripts (custom-thehive.py, custom-crowdsec-block.py, custom-teams.sh) мають бути замінені Shuffle playbooks. Міграція поетапна (по одному скрипту з паралельним тестуванням). Трекається у BACKLOG як TASK-114.


Останнє оновлення: 2026-04-16.