
Воспроизводимая SOC-лаборатория для обнаружения и реагирования на CVE-2024-4577
HTSOC — это самостоятельно построенная система Security Operations Center в лабораторной среде. Система объединяет сбор логов, обнаружение с помощью Splunk, управление алертами/кейсами через TheHive, анализ Observable через Cortex, поиск IOC с помощью MISP или VirusTotal, а затем координирует уведомления через n8n и Telegram.
CVE-2024-4577 — лишь один из use case, используемый для проверки способности многоуровневого обнаружения; весь проект не ограничивается одним CVE.
Система моделирует полный процесс SOC:
flowchart LR
K[Kali или источник тестирования] --> W[Windows/XAMPP + Apache/PHP-CGI]
L[Linux endpoint] --> F[Universal Forwarder]
W --> A[Apache access/error log]
W --> S[Windows Security + Sysmon]
A --> F
S --> F
F --> SP[Splunk]
L --> F
SP -->|Alert webhook| TH[TheHive]
TH -->|Alert + Observable| N[n8n]
N --> T[Telegram]
N -->|Analyzer, выбранный аналитиком| C[Cortex]
C --> M[MISP]
C --> V[VirusTotal]
M --> N
V --> N
N --> TУказанные выше адреса предназначены только для лаборатории. При повторном развертывании замените их переменными окружения и не открывайте сервисы в Интернет.
Splunk — центр обнаружения системы. Поиски охватывают brute force login, подозрительный NTLM network logon, изменение групп с высокими привилегиями, lateral movement через SMB, создание новых служб Windows, закодированный PowerShell и PHP-CGI argument injection.
TheHive получает алерты из Splunk, отображает severity/source/title, сохраняет Observable и позволяет аналитику преобразовывать алерты в кейсы. Cortex получает Observable из TheHive для запуска анализаторов. MISP и VirusTotal — два параллельных варианта анализа, не обязательных для последовательного выполнения.
n8n получает webhook из TheHive и отправляет первоначальный SOC-алерт в Telegram. Когда аналитик нажимает на Observable, n8n обрабатывает callback, определяет анализатор, создает задание Cortex, ожидает отчет и отправляет результат в Telegram. Механизмы update_id, callback_query_id, suppression и job ID предотвращают повторное выполнение.
Генерация лога
→ Universal Forwarder
→ Splunk search/correlation
→ TheHive alert
→ n8n webhook
→ Telegram SOC Alert
Аналитик нажимает Observable в Telegram
→ Telegram callback
→ n8n немедленно отвечает на callback
→ повторное получение Observable из TheHive
→ проверка типа Observable и анализатора
→ Cortex создает задание
→ n8n ожидает и получает отчет
→ Telegram отправляет результат
n8n не запускает автоматически все Observable сразу при поступлении алерта. Анализатор запускается только по выбору аналитика, что снижает затраты, уменьшает повторные уведомления и сохраняет контроль над расследованием.
Базовые detection находятся в config/splunk/core-savedsearches.conf, с lookup для исключения легитимной активности:
Этот use case имеет два уровня:
Метаданные правил в формате Sigma находятся в detections/sigma/cve-2024-4577-php-cgi-argument-injection.yml. Поиск, выполняемый в Splunk, находится в config/splunk/install-cve-detections.ps1.
config/
├── forwarder/ конфигурация input/output Windows и Linux
├── misp/ имитированные IOC для внутреннего поиска
├── n8n/ шаблон workflow TheHive–Telegram–Cortex
├── splunk/ saved search, lookup и скрипт корреляции
└── sysmon/ конфигурация телеметрии Windows
deploy/ шаблон Docker Compose с удаленными секретами
detections/
└── sigma/ метаданные правил, независимые от вендора
scripts/
├── splunk/ обновление поисков через API
├── validation/ проверка готовности
└── windows/ установка телеметрии на целевую лабораторную машину
docs/ эксплуатационная документация и Telegram callback
Сопоставление между исходным кодом и живой системой находится в инвентаризации системы. Реальный манифест workflow n8n с удаленными секретами находится в config/n8n/live-workflow-manifest.json; небольшой шаблон импорта хранится отдельно для безопасного создания новой лаборатории.
cp deploy/docker-compose.soc.example.yml deploy/docker-compose.yml
cp .env.example .env
# Заполните секреты через secret manager или локальный файл .env.
docker compose -f deploy/docker-compose.yml config
docker compose -f deploy/docker-compose.yml up -d
docker compose -f deploy/docker-compose.yml ps
Шаблон Compose развертывает TheHive, Cortex, MISP, Cassandra, Elasticsearch, MinIO, Redis и модули MISP. n8n в настоящее время работает как host service, а конфигурация workflow находится в config/n8n/.
# PowerShell Administrator на лабораторной Windows
.\scripts\windows\install-lab-telemetry.ps1
# На машине Splunk, не записывайте пароль в исходный код
$env:SPLUNK_PASSWORD = '<local-secret>'
.\config\splunk\install-cve-detections.ps1
python .\scripts\splunk\update-correlation-searches.py
# Проверка готовности
.\scripts\validation\check-system-readiness.ps1
Подробности callback находятся в docs/telegram-callback-setup.md.
Тестирование выполняется снизу вверх:
Показатели, используемые в лаборатории: MTTD от события до обнаружения Splunk, MTTN от алерта до уведомления в Telegram, MTTR от получения алерта до triage/закрытия кейса, False Positive Rate и Duplicate rate.
| Компонент | Роль | Справочный адрес |
|---|
| Kali | источник авторизованного тестового трафика | 192.168.10.132 |
| Windows/XAMPP | целевая машина Apache/PHP-CGI и Sysmon | 192.168.10.130:8080 |
| Splunk | сбор, поиск, корреляция и алерты | 192.168.10.128 |
| TheHive | управление алертами, кейсами и Observable | 192.168.10.133:9000 |
| Cortex | запуск анализаторов | 192.168.10.133:9001 |
| MISP | внутреннее хранилище IOC | 192.168.10.133:443 |
| n8n | автоматизация webhook/callback | 192.168.10.133:5678 |
| Detection | Основные данные | Цель |
|---|
| Brute Force Login | Windows Event ID 4625 | множественные неудачные входы в окне времени |
| Suspicious NTLM Logon | Windows Event ID 4624 | аномальный network logon type 3 с NTLM |
| Privileged Group Change | Event ID 4732/4728/4756 | добавление учетной записи в группу с высокими правами |
| Lateral Movement SMB | Event ID 4624 | аномальный доступ одного источника к нескольким хостам |
| New Windows Service | Event ID 7045 | создание новой службы вне allowlist |
| Encoded PowerShell | Event ID 4688 | PowerShell с -enc или -EncodedCommand |