ELK Stack (Elastic Stack)
📌 Что это / Зачем это нужно
ELK Stack — это связка из трёх инструментов для сбора, хранения, поиска и визуализации логов. Название — аббревиатура: Elasticsearch + Logstash + Kibana. Сейчас официально называется Elastic Stack, потому что добавился четвёртый компонент — Beats.
Зачем: в любой компании серверы, приложения, файрволы генерируют тонны логов. Без централизованной системы — это хаос. ELK собирает всё в одно место, позволяет искать за секунды и рисует дашборды. Для кибербезопасности используется как SIEM — система, которая показывает что происходит в сети и помогает ловить атаки.
⚡ Компоненты стека (на пальцах)
Elasticsearch — склад с мгновенным поиском
Ядро всего стека. Распределённый поисковый движок, хранит данные в формате JSON. Умеет искать по миллионам записей за миллисекунды.
Аналогия: представь библиотеку, где каждая книга мгновенно находится по любому слову из её содержания. Не только по названию или автору — по любому слову на любой странице. Это и есть Elasticsearch.
Ключевые моменты:
- Хранит данные как JSON-документы
- Инвертированный индекс — поэтому поиск мгновенный (как в Google)
- Горизонтально масштабируется — добавляешь ноды, растёт производительность
- REST API — всё управление через HTTP-запросы
- Порт по умолчанию: 9200
Logstash — курьер и переводчик
Собирает логи из разных источников, обрабатывает (парсит, фильтрует, обогащает) и отправляет в Elasticsearch.
Аналогия: курьер, который забирает посылки из разных городов, пересортировывает их по категориям и складывает на нужные полки на складе.
Три фазы работы:
- Input — откуда берёт данные (файлы, syslog, TCP/UDP, Kafka)
- Filter — как обрабатывает (парсинг, извлечение полей, геолокация IP)
- Output — куда отправляет (Elasticsearch, файл, другой сервис)
Порт по умолчанию: 5044
На практике Logstash часто заменяют на Fluentd или Fluent Bit — они легче и жрут меньше ресурсов.
Kibana — витрина с дашбордами
Веб-интерфейс для визуализации данных из Elasticsearch. Графики, таблицы, карты, алерты — всё здесь.
Аналогия: если Elasticsearch — это база данных, то Kibana — это Excel с красивыми графиками поверх неё. Только мощнее.
Что умеет:
- Поиск по логам в реальном времени (KQL — Kibana Query Language)
- Дашборды с графиками, картами, heatmaps
- Настройка алертов (оповещений при аномалиях)
- SIEM-модуль для безопасности
- Порт по умолчанию: 5601
Beats — лёгкие агенты-сборщики
Маленькие агенты, которые ставятся на каждую машину и отправляют данные в Elasticsearch или Logstash. Жрут минимум ресурсов.
Виды:
- Filebeat — собирает логи из файлов (самый популярный)
- Metricbeat — метрики системы (CPU, RAM, диск)
- Packetbeat — сетевой трафик
- Auditbeat — аудит-логи Linux (кто что запускал)
- Winlogbeat — Windows Event Log
- Heartbeat — мониторинг доступности (uptime)
🔍 Как это работает вместе
Общая схема потока данных:
- Beats стоят на серверах/машинах → собирают логи и метрики
- Отправляют в Logstash → он парсит, обогащает, фильтрует
- Logstash отправляет в Elasticsearch → данные индексируются и хранятся
- Kibana подключается к Elasticsearch → аналитик видит дашборды и ищет по логам
Упрощённый вариант (без Logstash): Beats → Elasticsearch → Kibana. Работает для простых случаев, когда парсинг не нужен.
🛡 ELK как SIEM (для кибербезопасности)
Что такое SIEM
SIEM (Security Information and Event Management) — система, которая собирает логи безопасности со всей инфраструктуры и помогает обнаруживать угрозы. ELK — одна из самых популярных open-source основ для SIEM.
Что ELK видит
- Логины и неудачные попытки аутентификации
- Запуск подозрительных процессов (cmd.exe порождает сетевое соединение — красный флаг)
- Сетевые аномалии (всплеск трафика, подключения к необычным IP)
- Изменения файлов и конфигураций
- Алерты от IDS/IPS (Snort, Suricata)
- Логи файрволов, антивирусов, прокси
Чего ELK НЕ делает
- Не блокирует атаки автоматически (это задача IDS/IPS, файрвола, EDR)
- Не детектит атаки по сигнатурам (это IDS)
- Сам по себе не знает что такое атака — ему нужны правила и аналитик
Аналогия: ELK — система видеонаблюдения. Камеры пишут всё. Но ловит преступников не камера, а охранник, который смотрит на мониторы. ELK показывает картинку — решения принимает человек.
ELK vs IDS vs Антивирус
Антивирус/EDR (CrowdStrike, Defender): стоит на конечном устройстве, блокирует угрозы автоматически. Знает сигнатуры вирусов.
IDS/IPS (Snort, Suricata): анализирует сетевой трафик в реальном времени, ищет паттерны атак (SQL-инъекции, сканирование портов, reverse shell). Собака-ищейка — натренирована на конкретные запахи.
ELK/SIEM: собирает логи ОТ ВСЕХ вышеперечисленных, складывает в одно место, даёт аналитику полную картину. Архив видеозаписей со всех камер здания.
На практике они работают вместе: IDS ловит атаку → отправляет алерт в ELK → ELK сопоставляет с логами серверов, файрволов, антивирусов → аналитик видит полную картину инцидента.
🎯 ELK глазами пентестера / red team
Почему нужно знать
Если на целевой сети стоит ELK — твои действия логируются. Не зная об этом, ты спалишься.
Что ELK может записать о тебе
- Сканирование портов (nmap) — Packetbeat или логи файрвола
- Брутфорс — серия неудачных логинов в auth.log
- Reverse shell — нетипичное исходящее соединение от bash/cmd
- Эксплуатация уязвимости — логи веб-сервера (странные запросы в access.log)
- Перемещение по сети (lateral movement) — логины на других машинах
- Запуск подозрительных процессов — Auditbeat/Sysmon
Как пентестеры обходят ELK
- Работают медленно — не триггерят алерты на «50 неудачных логинов за минуту»
- Используют легитимные учётные данные вместо брутфорса
- Маскируют трафик под обычный (reverse shell через 443/HTTPS)
- После получения доступа — ищут куда идут логи и можно ли их отключить
- Знают что просто почистить
/var/logнедостаточно — копия уже в Elasticsearch на отдельном сервере
Пентестер может использовать ELK сам
При пентесте крупной сети можно поднять свой ELK для:
- Сбора и анализа результатов сканов
- Хранения найденных уязвимостей и кредов
- Визуализации топологии сети
- Корреляции данных из разных источников
🔧 Быстрый старт: ELK в Docker
Самый простой способ попробовать — Docker Compose:
mkdir elk-stack && cd elk-stack
Минимальный docker-compose.yml:
version: '3.8'
services:
elasticsearch:
image: elasticsearch:8.12.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- "9200:9200"
volumes:
- es-data:/usr/share/elasticsearch/data
kibana:
image: kibana:8.12.0
ports:
- "5601:5601"
depends_on:
- elasticsearch
volumes:
es-data:
Запуск:
docker compose up -d
Проверка:
# Elasticsearch работает?
curl http://localhost:9200
# Kibana — открой в браузере:
# http://localhost:5601
🧠 Базовые команды Elasticsearch (REST API)
Проверка здоровья кластера:
curl http://localhost:9200/_cluster/health?pretty
Список индексов:
curl http://localhost:9200/_cat/indices?v
Добавить документ:
curl -X POST "http://localhost:9200/logs/_doc" \
-H "Content-Type: application/json" \
-d '{"timestamp":"2026-03-27","message":"SSH login failed","src_ip":"192.168.1.100"}'
Поиск по полю:
curl -X GET "http://localhost:9200/logs/_search?pretty" \
-H "Content-Type: application/json" \
-d '{"query":{"match":{"message":"SSH login failed"}}}'
Поиск по IP:
curl -X GET "http://localhost:9200/logs/_search?pretty" \
-H "Content-Type: application/json" \
-d '{"query":{"term":{"src_ip":"192.168.1.100"}}}'
Удалить индекс:
curl -X DELETE "http://localhost:9200/logs"
📋 Kibana Query Language (KQL) — поиск в Kibana
В строке поиска Kibana используется KQL:
message: "failed login"
src_ip: "192.168.1.100" and status: "error"
NOT user.name: "admin"
response_code >= 400 and response_code < 500
host.name: "web-server-*"
KQL проще чем Lucene-синтаксис, поддерживает автодополнение. Для сложных запросов можно переключиться на Lucene.
⚠️ Важные моменты
- ELK жрёт ресурсы. Elasticsearch любит RAM. Минимум 4 GB для тестов, 16+ GB для продакшена.
- Безопасность по умолчанию выключена. Если поднял ELK без
xpack.security.enabled=true— любой с доступом к порту 9200 видит все твои данные. Обязательно настраивай аутентификацию - ELK ≠ SIEM из коробки. Нужны правила детекции, дашборды, настроенные алерты. Elastic предлагает готовые SIEM-правила, но их нужно включить и настроить
- OpenSearch — бесплатная альтернатива. После смены лицензии Elastic на проприетарную, Amazon сделал форк — OpenSearch. Функционально почти то же самое, но полностью open source
- Logstash можно не ставить. Для простых случаев Filebeat → Elasticsearch → Kibana достаточно. Logstash нужен когда требуется сложный парсинг
- Для пентестера главное — знать что ELK существует и что он логирует. Глубокая настройка — задача blue team. Но понимать архитектуру нужно, чтобы знать где искать следы и как их заметают
- Elastic Agent — новый единый агент от Elastic, постепенно заменяет отдельные Beats. Делает всё то же, но управляется централизованно через Fleet в Kibana