Найти в Дзене

Языковые запросы в ELK

В этой статье я немного остановился на простом промере работы KQL и EQL. Помимо этого доступны Elasticsearch Query DSL и Watcher он же Kibana Alerting. Эти подходы не могут заменить друг друга, но зато прекрасно дополняют. Одни попроще для быстрого поиска и анализа, вторые пригодятся в сложной автоматизации. Самый простой KQL - Kibana Query language Интуитивно понятный язык для быстрого поиска и фильтрации данных. Предназначен - для быстрой проверки предположений, интерактивной фильтрации, анализа и визуализации в дашбоард. Плюсы: Прост в освоении, так как поддерживает базовые операторы: and, or, not. Автоподставка символов в Kibana. Поддерживает CIDR. Минусы: KQL ограничен в возможностях выполнения сложных агрегаций. Не получится найти с помощью одного KQL запроса пользователя с нескольким десятком неудачных запросов на вход за несколько минут. Пример запроса для отображения всех событий сети (при условии что настроен аудит): source.ip: 192.168.0.0/16 EQL используемый в Apache Lucene

В этой статье я немного остановился на простом промере работы KQL и EQL.

Помимо этого доступны Elasticsearch Query DSL и Watcher он же Kibana Alerting. Эти подходы не могут заменить друг друга, но зато прекрасно дополняют. Одни попроще для быстрого поиска и анализа, вторые пригодятся в сложной автоматизации.

Самый простой KQL - Kibana Query language

Интуитивно понятный язык для быстрого поиска и фильтрации данных.

Предназначен - для быстрой проверки предположений, интерактивной фильтрации, анализа и визуализации в дашбоард.

Плюсы:

  • Прост в освоении, так как поддерживает базовые операторы: and, or, not.
  • Автоподставка символов в Kibana.
  • Поддерживает CIDR.

Минусы:

  • KQL ограничен в возможностях выполнения сложных агрегаций. Не получится найти с помощью одного KQL запроса пользователя с нескольким десятком неудачных запросов на вход за несколько минут.

Пример запроса для отображения всех событий сети (при условии что настроен аудит): source.ip: 192.168.0.0/16

EQL используемый в Apache Lucene он же Lucene Syntax

EQL чуть более сложен в освоении, но имеет в своём арсенале понятные операторы, с его помощью можно делать простые корреляции между несколькими событиями.

Плюсы:

  • Возможность создать чуть более сложные корреляции
  • Синтаксис похож на SQL
  • Да чуть сложнее KQL но все же остаётся весьма простым для использования

Минусы:

  • Нет автоподстановки в Kibana, потребуется чуть больше времени для освоения.

EKL: Пример запроса поиска процессов с оператором by со связанным одинаковым процессом. В прошлой статье мы искали два связанных между собой события с разницей в 5 секунд на одном хосте. Тут ищем связанные библиотеки, программы с одним процессом и разницей в 1 час.

GET /my-data-stream/_eql/search
{
"query": """
sequence with maxspan=1h
[ process where process.name == "regsvr32.exe" ] by process.pid
[ file where stringContains(file.name, "scrobj.dll") ] by process.pid
"""
}

Elasticsearch Query DSL

Работает в формате JSON, это позволяет ему взаимодействовать с БД через API. На момент написания этой статьи самый мощный и гибкий инструмент для написания правил, агрегации и автоматизации. Используется когда KQL и EQL для задач не хватает.

Плюсы:

  • JSON запросы позволяют представлять разнообразные структуры данных. В свою очередь это позволяет писать максимально сложные правила корреляции.
  • Вложенные запросы и программное управление.

Минусы

  • Сложен в освоении.
  • Не работает в поисковой строке Kibana и используется в DEV Tools скриптах и Watcher.

Пример запроса: Например вам нужно найти диапазон IP узлов из определённой сети, и отсортировать среди них только те узлы на которые было больше всего запросов, затем просканировать эти узлы на алерты, и если они были положительные получим алерт в дашбоард.

Пример запроса
Пример запроса

Watcher он же Kibana Alerting

Это платный фреймворк в ELK доступный только при покупке лицензии. Представляет собой интерфейс для работы с языками для автоматизации.

В основном используется для создания правил из запросов и выполнении действий при срабатывании.

Плюсы:

  • Планировщик задач.
  • Логика и действия.
  • Интеграция с другими инструментами.

Минусы:

  • Платный

Правила можно сделать следующего типа:

  • Триггер: запуск правила каждые 3 минуты
  • Запрос: Извлечение данных
  • Условие: Логика на проверку запроса, количество запросов превышает 10
  • Действие: Отправить письмо на почту, телегу, JIRA и т.п.

Ему есть opensource альтернатива, которая позволяет делать всё тоже самое. Но работает чуть по другому.

ElasticAlert2

Этот фреймворк работает на Python, логика оповещений сначала описывается в текстовых файлах.. Инструмент запускает правила описанные в YAML файлах, где каждый файл это запрос к ELASTICSEARCH с параметрами для проверки. Если ответ положительный срабатывает правило отправки письма, сообщения.

  • Есть большое количество готовых правил.
  • Возможна интеграция с другими системами оповещений.

Официальная страница проекта.