📌 Шпаргалка #22

ELK Stack (Elastic Stack)

✍️ pentestudy 📅 27.03.2026

📌 Что это / Зачем это нужно

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)

🔍 Как это работает вместе

Общая схема потока данных:

  1. Beats стоят на серверах/машинах → собирают логи и метрики
  2. Отправляют в Logstash → он парсит, обогащает, фильтрует
  3. Logstash отправляет в Elasticsearch → данные индексируются и хранятся
  4. 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
Содержание
📌 Что это / Зачем это нужно ⚡ Компоненты стека (на пальцах) Elasticsearch — склад с мгновенным поиском Logstash — курьер и переводчик Kibana — витрина с дашбордами Beats — лёгкие агенты-сборщики 🔍 Как это работает вместе 🛡 ELK как SIEM (для кибербезопасности) Что такое SIEM Что ELK видит Чего ELK НЕ делает ELK vs IDS vs Антивирус 🎯 ELK глазами пентестера / red team Почему нужно знать Что ELK может записать о тебе Как пентестеры обходят ELK Пентестер может использовать ELK сам 🔧 Быстрый старт: ELK в Docker 🧠 Базовые команды Elasticsearch (REST API) 📋 Kibana Query Language (KQL) — поиск в Kibana ⚠️ Важные моменты