Skip to main content

Плейбуки в Kaspersky EDR Expert 8.1: Полное руководство

ℹ️ Важно: Информация, приведённая в данной статье, является разработкой команды pre-sales и/или AntiAPT Community и НЕ является официальной рекомендацией вендора.
Официальная документация по разделу «Плейбуки».

Источники информации

Статья основана на следующих материалах:

Источник

Описание

Официальная справка Kaspersky EDR Expert 8.1

Разделы «Плейбуки», «Модель данных алерта», «Модель данных инцидента», «Действия по реагированию»

KUMA Community

Статьи «Триггеры в плейбуках» и «Действия в плейбуках» (https://kb.kuma-community.ru)

Предустановленные плейбуки [KL]

Реальные примеры алгоритмов от Лаборатории Касперского (P001–P005 и др.)

Практический опыт

Настройка плейбуков в реальных инфраструктурах и разбор типовых ошибок

Для кого эта статья

Статья предназначена для:

  • Аналитиков SOC, которые хотят научиться создавать и читать плейбуки
  • Инженеров внедрения, настраивающих Kaspersky EDR Expert у заказчиков
  • Руководителей SOC, планирующих автоматизацию реагирования

Что вы получите после прочтения

После изучения материала вы сможете:

  • Читать любой плейбук и понимать, что он делает (разбирать JSON и jq-выражения)
  • Писать свои плейбуки с нуля — от простого условия до сложного алгоритма
  • Отлаживать плейбуки, которые не работают
  • Избегать типичных ошибок, на которых теряют часы новички
  • Настраивать автоматическое реагирование на критические угрозы

Ограничения

  • Синтаксис jq-выражений, модель данных и имена полей могут меняться между версиями Kaspersky EDR Expert. Всегда проверяйте актуальную документацию для вашей версии.
  • Перед применением в продуктивной среде обязательно тестируйте плейбуки в режиме «Обучение».

1. Что такое плейбук

1.1. Определение

Плейбук (Playbook) — это объект, который реагирует на алерты или инциденты в соответствии с заданным алгоритмом. Плейбук запускает алгоритм, включающий в себя последовательность действий по реагированию, которые помогают анализировать и обрабатывать алерты или инциденты.

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

1.2. Режимы работы плейбука

Плейбук может выполняться в одном из трёх режимов:

Режим

Как работает

Участие аналитика

🟢 Автоматический

Плейбук автоматически запускается при обнаружении соответствующих алертов или инцидентов

❌ Не требуется

🟡 Обучение

Плейбук запрашивает разрешение пользователя на запуск при обнаружении соответствующих алертов или инцидентов

✅ Требуется подтверждение

🔴 Ручной

Плейбук можно запустить только вручную

✅ Полный контроль

1.3. Зачем нужны плейбуки

Плейбуки решают три ключевые задачи SOC:

Задача

Описание

Скорость реагирования

Плейбук выполняет последовательность действий автоматически, сокращая время обработки алертов и инцидентов

Стандартизация

Один и тот же тип инцидента обрабатывается одинаково, независимо от того, кто дежурит в смену

Разгрузка аналитиков

Рутинные действия автоматизируются, и аналитик может сосредоточиться на расследовании

1.4. Область применения

Плейбуки используются в следующих сценариях:

  • 🔴 Автоматическое реагирование на критические угрозы — ransomware, sandbox-детекты, компрометация учётных записей
  • 🟡 Автоматическое обогащение данных — отправка наблюдаемых объектов (IP, хеши, домены, URL) в Kaspersky Threat Intelligence Portal через действие iocsEnrichment для получения дополнительной информации об угрозах
  • 🟢 Ручное реагирование — аналитик выбирает инцидент и запускает плейбук
  • 🔵 Расследование — сбор дампов памяти, образов дисков, ключей реестра

1.5. Перечень возможностей плейбуков

Плейбуки в Kaspersky EDR Expert 8.1 предоставляют следующие возможности:

Возможность

Описание

Автоматический запуск

Плейбук срабатывает по триггеру при обнаружении соответствующих алертов/инцидентов

Ручной запуск

Аналитик сам выбирает объекты и запускает плейбук

Триггеры на jq

Гибкая фильтрация по свойствам, активам, наблюдаемым объектам, событиям

19 действий по реагированию

От сбора форензики до изоляции хостов и блокировки учётных записей

Визуальный редактор

Создание алгоритмов без написания JSON вручную

Тестовый режим

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

Ручное подтверждение

Требование одобрения перед опасными действиями

Версионирование

Автоматическое сохранение истории изменений с возможностью отката

Наследование тенантов

Плейбуки автоматически доступны дочерним тенантам



2. Типы плейбуков и область действия

В этом разделе разберём, какие бывают плейбуки в Kaspersky EDR Expert, как выбрать область действия и какие архитектурные ограничения нужно учитывать при проектировании сценариев реагирования.


2.1. Два типа плейбуков

В Kaspersky EDR Expert 8.1 существует два типа плейбуков: предустановленные (от Лаборатории Касперского) и пользовательские (созданные администраторами SOC).

2.1.1. Предустановленные плейбуки [KL]

Предустановленные плейбуки созданы специалистами «Лаборатории Касперского» и отмечены префиксом [KL] в названии. Они основаны на правилах корреляции KUMA и закрывают типовые сценарии реагирования на угрозы.

Список предустановленных плейбуков:

Название

Область действия

Назначение

[KL] P001 "Creation of executable files by office applications"

Алерт

Реагирование на фишинг через офисные приложения

[KL] P002 "Windows Event Log was cleared"

Инцидент

Блокировка учётной записи при очистке журналов Windows

[KL] P003 "Suspicious child process from wmiprvse.exe"

Алерт

Завершение подозрительных процессов и AV-проверка

[KL] P004 "Sandbox Medium Detect"

Алерт

Блокировка файлов с уровнем важности «Средний» из Sandbox

[KL] P005 "Sandbox High Detect"

Алерт

Блокировка файлов с уровнем важности «Высокий» из Sandbox

[KL] "Playbook for checking external IP addresses"

Инцидент

Обогащение внешних IP через Kaspersky TIP и изоляция хостов

[KL] "Playbook for isolating a device where an infected file is detected"

Инцидент

Изоляция устройства с заражённым файлом


Особенности предустановленных плейбуков:

Операция

Доступна

Комментарий

Просмотр

Полная информация о триггере и алгоритме

Изменение режима работы

Можно переключить между Автоматическим / Обучение / Ручной

Изменение триггера

Можно адаптировать условие срабатывания

Изменение алгоритма

JSON-код алгоритма заблокирован для редактирования

Удаление

Предустановленные плейбуки нельзя удалить

Дублирование

Можно создать копию и модифицировать её


Как модифицировать предустановленный плейбук:

Поскольку алгоритм предустановленного плейбука нельзя изменить напрямую, необходимо:

  1. Открыть плейбук [KL] в Консоли OSMP (Мониторинг → Плейбуки).
  2. Нажать кнопку «Дублировать и изменить».
  3. Система создаст копию плейбука с новым именем (например, My P003 Custom).
  4. В копии можно изменять алгоритм, триггер и все параметры.
  5. Оригинальный плейбук [KL] остаётся неизменным.

💡 Рекомендация: Перед дублированием убедитесь, что настроены интеграции, необходимые для работы плейбука (Active Directory для blockLDAPAccount, Kaspersky TIP для iocsEnrichment, KASAP для assignKasapGroup).

2.1.2. Пользовательские плейбуки

Пользовательские плейбуки создаются администраторами SOC под конкретные задачи инфраструктуры. В отличие от предустановленных, они предоставляют полный контроль над всеми компонентами.

Обязательные параметры при создании пользовательского плейбука:

Параметр

Назначение

Область действия

Алерт или Инцидент (определяет синтаксис jq-выражений)

Триггер

jq-выражение, определяющее условия автоматического запуска

Алгоритм

JSON-код, описывающий последовательность действий


Дополнительные возможности:

  • Импорт/экспорт через XDR REST API для переноса плейбуков между тенантами
  • Полное управление версиями (сравнение, восстановление)
  • Настройка ручного подтверждения для опасных действий
  • Использование любых из 19 действий по реагированию

2.2. Область действия (критическое ограничение)

Критическое ограничение архитектуры: Область действия одного плейбука ограничена только алертами или только инцидентами. Нельзя создать плейбук, который обрабатывает оба типа объектов одновременно.

2.2.1. Как это влияет на синтаксис

Выбранная область действия определяет, какое ключевое слово используется в jq-выражениях триггера и алгоритма:

Элемент

Для области «Алерт»

Для области «Инцидент»

Ключевое слово

alert

incident

Доступ к активам

alert.Assets[]

incident.Alerts[].Assets[]

Доступ к наблюдаемым объектам

alert.Observables[]

incident.Alerts[].Observables[]

Доступ к событиям

alert.BaseEvents[]

incident.Alerts[].BaseEvents[]

Доступ к исходным событиям

alert.OriginalEvents[]

incident.Alerts[].OriginalEvents[]

Доступ к просканированным файлам

alert.ScannedFiles[]

incident.Alerts[].ScannedFiles[]


2.2.2. Почему структура различается

Различие в синтаксисе связано с моделью данных:

  • Алерт — самостоятельный объект. Его активы, наблюдаемые объекты и события лежат непосредственно в корне: alert.Assets[].
  • Инцидент — агрегатор нескольких алертов. У инцидента нет собственных активов — все данные находятся внутри вложенных алертов: incident.Alerts[].Assets[].
2.2.3. Примеры для разных областей действия

Пример 1: Извлечение ID хостов

Для плейбука с областью «Алерт»:

[alert.Assets[] | select(.Type == "host") | .ID]

Для плейбука с областью «Инцидент»:

[incident.Alerts[].Assets[] | select(.Type == "host") | .ID]

Пример 2: Извлечение хешей SHA256

Для плейбука с областью «Алерт»:

[alert.Observables[] | select(.Type == "sha256") | .Value]

Для плейбука с областью «Инцидент»:

[incident.Alerts[].Observables[] | select(.Type == "sha256") | .Value]
2.2.4. Ошибка при несоответствии области действия

Если в плейбуке с областью «Алерт» использовать ключевое слово incident (или наоборот), система выдаст ошибку:

Expression does not match the selected scope

Типичные ошибки:

Область плейбука

Неправильное выражение

Правильное выражение

Алерт

incident.Alerts[].Assets[]

alert.Assets[]

Алерт

incident.Severity

alert.Severity

Инцидент

alert.Assets[]

incident.Alerts[].Assets[]

Инцидент

alert.Severity

incident.Severity

2.2.5. Как выбрать область действия

Критерий

Выбирайте «Алерт»

Выбирайте «Инцидент»

Сценарий

Реагирование на одиночное событие

Реагирование на расследование из нескольких связанных алертов

Пример

Sandbox-детект одного файла

Компрометация учётной записи с несколькими алертами

Данные

Все данные в одном объекте

Нужно агрегировать данные из нескольких алертов

Предустановленные плейбуки

P001, P003, P004, P005

P002, External IP, Infected file


💡 Рекомендация: Если сценарий реагирования требует анализа нескольких связанных событий (например, фишинг + запуск вредоноса + очистка журналов), выбирайте область «Инцидент». Для точечных детектов (один файл, один процесс) достаточно области «Алерт».


2.3. Дочерние инциденты (ограничение автозапуска)

Ограничение: Плейбуки не могут быть запущены автоматически для дочерних инцидентов. Для дочерних инцидентов плейбук можно запустить только вручную.

2.3.1. Что такое дочерние инциденты

В Kaspersky EDR Expert поддерживается сегментация — разделение инфраструктуры на логические сегменты (тенанты). При срабатывании правила корреляции может создаваться:

  • Родительский инцидент — в корневом тенанте
  • Дочерние инциденты — в дочерних тенантах (копии родительского для каждого сегмента)
2.3.2. Почему автоматический запуск не работает

Автоматические плейбуки срабатывают только для родительского инцидента. Это архитектурное ограничение, связанное с тем, что:

  • Дочерние инциденты создаются системой автоматически при сегментации
  • Автоматический запуск плейбука на каждом дочернем инциденте привёл бы к дублированию действий (например, многократной изоляции одного и того же хоста)
  • Аналитик должен вручную оценить, какие действия применять к дочерним инцидентам
2.3.3. Как работать с дочерними инцидентами

Способ 1: Ручной запуск

  1. Открыть дочерний инцидент в Консоли OSMP (Мониторинг → Инциденты → XDR-инциденты).
  2. Нажать «Выбрать плейбук».
  3. Выбрать нужный плейбук из списка.
  4. При необходимости выбрать целевые активы и наблюдаемые объекты.
  5. Нажать «Запустить».

Способ 2: Настройка сегментации

Если критично, чтобы плейбук срабатывал автоматически, можно настроить сегментацию так, чтобы критичные инциденты не становились дочерними. Это требует планирования на этапе проектирования SOC.

Способ 3: Реагирование через родительский инцидент

Если плейбук работает с родительским инцидентом, его действия (например, addFilePreventionRules с selector: execution-tenant) применяются ко всем хостам в тенанте, включая дочерние. Это позволяет централизованно реагировать на угрозу.


2.4. Наследование тенантов

Плейбук принадлежит одному тенанту и автоматически наследуется всеми дочерними тенантами.

2.4.1. Как работает наследование

Событие

Результат

Создан плейбук в корневом тенанте

Автоматически доступен во всех существующих дочерних тенантах

Добавлен новый дочерний тенант

Плейбук автоматически наследуется новым тенантом

Изменён плейбук в корневом тенанте

Изменения применяются во всех дочерних тенантах

Дочерний тенант дублировал плейбук

Копия становится локальной и не зависит от родительской версии

2.4.2. Как отключить наследование

Если плейбук специфичен для конкретного тенанта (например, использует уникальные интеграции, локальные скрипты или специфичные пути к файлам), наследование можно отключить:

  1. Открыть плейбук для создания или изменения.
  2. В настройках плейбука снять флажок «Наследовать дочерними тенантами».
  3. Сохранить изменения.

После этого плейбук будет доступен только в том тенанте, где был создан.

2.4.3. Практические рекомендации

Сценарий

Рекомендация

Плейбук использует стандартные действия (deleteFile, isolateHost, addFilePreventionRules)

✅ Оставить наследование включённым

Плейбук использует интеграцию с локальным скриптом

❌ Отключить наследование

Плейбук обращается к специфичному пути в файловой системе

❌ Отключить наследование

Плейбук использует интеграцию с Active Directory, доступной во всех тенантах

✅ Оставить наследование включённым

Плейбук использует Kaspersky TIP (лицензия только в корневом тенанте)

❌ Отключить наследование


💡 Рекомендация: При создании нового плейбука всегда оценивайте, нужен ли он во всех тенантах. Если есть сомнения — отключите наследование. Включить его позже можно в любой момент.



3. Архитектура плейбука

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


3.1. Три компонента плейбука

Согласно официальной документации, плейбук состоит из трёх основных компонентов:

Компонент

Назначение

Где настраивается

Параметры плейбука

Определение свойств плейбука (имя, область действия, режим работы)

В интерфейсе Консоли OSMP

Триггер плейбука

Определение условий автоматического запуска

В интерфейсе Консоли OSMP (jq-выражение)

Алгоритм плейбука

Определение последовательности действий

В интерфейсе Консоли OSMP (JSON-код или визуальный редактор)

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 249249 «Плейбуки».


3.2. Параметры плейбука

При создании плейбука в Консоли OSMP настраиваются следующие параметры:

3.2.1. Обязательные параметры

Параметр

Описание

Требования

Имя

Название плейбука

Уникально в рамках тенанта

Область действия

Тип объекта, с которым работает плейбук

Алерт или Инцидент (выбирается один)

Версия

Версия плейбука

Минимальная длина — 1 символ

dslSpecVersion

Версия схемы DSL

Минимальная длина — 1 символ

actionsSpecVersion

Версия спецификации действий

Минимальная длина — 1 символ

executionFlow

Массив шагов выполнения

Минимум один шаг

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».

3.2.2. Дополнительные параметры

Параметр

Описание

Значение по умолчанию

Описание

Текстовое описание плейбука

Пусто

Режим работы

Автоматический / Обучение / Ручной

Обучение (для предустановленных)

Теги

Метки для фильтрации (до 30 тегов)

Пусто

playbookRunTimeout

Максимальное время выполнения плейбука

24h

timeouts

Политики тайм-аута для шагов

Пусто

input

jq-выражение для преобразования входящих данных

Пусто

output

jq-выражение для изменения вывода плейбука

Пусто

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 249267 «Создание плейбуков» и 267548 «Алгоритм плейбука».


3.3. Режимы работы плейбука

Плейбук может выполняться в одном из трёх режимов. Режим выбирается при создании плейбука и может быть изменён позже.

Режим

Как работает

Когда использовать

Автоматический

Плейбук автоматически запускается при обнаружении алертов или инцидентов, соответствующих триггеру

Для отработанных сценариев реагирования

Обучение

Плейбук находит соответствующие алерты/инциденты, но запрашивает разрешение пользователя на запуск

Для тестирования новых плейбуков

Ручной

Плейбук можно запустить только вручную через интерфейс Консоли OSMP

Для специфичных расследований

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 249249 «Плейбуки».

3.3.1. Поведение при одновременном запуске (для автоматического режима)

Если плейбук в автоматическом режиме уже выполняется и появляется новый алерт/инцидент, соответствующий триггеру, можно настроить одно из трёх поведений:

Поведение

Описание

Добавить в очередь (по умолчанию)

Новый запуск добавляется в очередь и выполняется после завершения текущего

Завершить текущий и запустить новый

Текущий запуск прерывается, начинается новый

Не запускать новые

Новый запуск не выполняется, продолжается текущий

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 249268 «Изменение плейбуков».


3.4. Алгоритм плейбука (executionFlow)

Алгоритм плейбука описывается в формате JSON и определяет последовательность шагов выполнения.

3.4.1. Структура JSON алгоритма

{
  "version": "1",
  "dslSpecVersion": "1.1.0",
  "actionsSpecVersion": "1",
  "playbookRunTimeout": "24h",
  "executionFlow": [
    /* шаги выполнения */
  ]
}

Обязательные поля:

  • version — версия плейбука
  • dslSpecVersion — версия схемы DSL
  • actionsSpecVersion — версия спецификации действий
  • executionFlow — массив шагов выполнения

Опциональные поля:

  • playbookRunTimeout — максимальное время выполнения (по умолчанию 24h, максимум 48h)
  • input — jq-выражение для преобразования входящих данных
  • output — jq-выражение для изменения вывода плейбука
  • timeouts — политики тайм-аута для шагов
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».

3.4.2. Типы шагов выполнения

Массив executionFlow содержит шаги, которые выполняются в порядке, указанном в массиве. Существует пять типов шагов:

Тип шага

Назначение

Обязательные параметры

Действие (ResponseFunction)

Выполнение действия по реагированию

type, assets

Цикл (Loop)

Повторение набора шагов для каждого элемента массива

input, steps

Параллель (Parallel)

Параллельное выполнение нескольких веток шагов

branches, aggregate

Ветвление (Decision)

Условное выполнение шагов

conditions

Обновление данных (UpdateData)

Сохранение промежуточных данных в операционные данные

filter или output

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 270357, 270351, 270352, 270354, 270355.

3.4.3. Пример: шаг типа «Действие»

Из предустановленного плейбука [KL] P003 "Suspicious child process from wmiprvse.exe" (область действия — Алерт):

{
  "action": {
    "function": {
      "type": "blockLDAPAccount",
      "assets": "${[ alert.Assets[] | select(.Type == \"user\" and .IsAttacker) | .ID]}"
    }
  },
  "onError": "stop"
}

Разбор:

  • type: "blockLDAPAccount" — действие блокировки учётной записи в Active Directory
  • assets — jq-выражение, извлекающее ID пользователей-атакующих из алерта
  • onError: "stop" — при ошибке прервать выполнение плейбука
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».

3.4.4. Пример: шаг типа «Цикл»

Из того же плейбука [KL] P003:

{
  "loop": {
    "batchSize": 1,
    "input": "${ [alert.OriginalEvents[] | [select(.DestinationProcessName != null and .DestinationProcessName != \"\")][] | .DestinationProcessName] }",
    "mode": "parallel",
    "onError": "stop",
    "steps": [
      {
        "action": {
          "function": {
            "type": "killProcess",
            "assets": "${[ alert.Assets[] | select(.Type == \"host\") | .ID]}",
            "params": {
              "path": "${ .[0] }"
            }
          }
        }
      }
    ]
  }
}

Разбор:

  • input — jq-выражение, извлекающее имена процессов из исходных событий алерта
  • batchSize: 1 — обрабатывать по одному элементу за итерацию
  • mode: "parallel" — выполнять итерации параллельно
  • .[0] — внутри шагов цикла текущий элемент доступен через .[0]

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».

3.4.5. Пример: шаг типа «Ветвление»

Из предустановленного плейбука [KL] "Playbook for checking external IP addresses" (область действия — Инцидент):

{
  "decision": {
    "conditions": [
      {
        "condition": "${[.details.observableData[] | select(.status == \"ok\" and .ipObservableData.ipGeneralInfo.threatScore > 80)] | length > 0}",
        "name": "Condition 1",
        "steps": [
          /* шаги, выполняемые при истинности условия */
        ]
      }
    ]
  }
}

Разбор:

  • condition — jq-выражение, возвращающее true или false
  • name — название условия (для удобства чтения)
  • steps — шаги, выполняемые, если условие истинно

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 318589 «[KL] Playbook for checking external IP addresses».

3.4.6. Обработка ошибок

Каждый шаг может содержать параметр onError, определяющий поведение при ошибке:

Значение

Поведение

stop

Прервать выполнение плейбука

continue

Пропустить шаг и продолжить выполнение

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».


3.5. Визуальный редактор vs JSON

Алгоритм плейбука можно создавать двумя способами:

3.5.1. Визуальный редактор

Преимущества:

  • Не требует знания синтаксиса JSON
  • Автоматическая проверка синтаксиса
  • Подсказки по полям при вводе jq-выражений
  • Наглядное отображение потока выполнения

Недостатки:

  • Ограниченная гибкость по сравнению с ручным написанием JSON
  • Сложность при отладке больших алгоритмов

3.5.2. Ручное написание JSON

Преимущества:

  • Полный контроль над структурой
  • Возможность копирования алгоритмов из других плейбуков
  • Удобство при работе с системами контроля версий

Недостатки:

  • Требует знания синтаксиса JSON и jq
  • Риск синтаксических ошибок

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 303486 «Настройка шагов выполнения плейбука в визуальном редакторе».


3.6. Статусы плейбуков

Плейбук может находиться в одном из следующих статусов:

Статус

Описание

Активный

Плейбук готов к использованию

Черновик

Плейбук создан, но не активирован. Нельзя запустить, но можно изменить

Удалено

Плейбук удалён. Доступен только для просмотра и копирования

Недоступно

Плейбук использует недоступный веб-плагин или действия не по лицензии

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264606 «Таблица плейбуков».




4. Модель данных: Алерт vs Инцидент

В этом разделе разберём, как Kaspersky EDR Expert хранит информацию об угрозах, какие данные доступны в плейбуках и как правильно к ним обращаться в зависимости от контекста выполнения.

ℹ️ Источники информации:
  • Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта»
  • Официальная справка Kaspersky EDR Expert 8.1, раздел 269168 «Модель данных инцидента»
  • Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука»
  • Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука»
  • Примеры из предустановленных плейбуков [KL]

4.1. Модель данных алерта

Алерт — это объект, создаваемый правилом корреляции KUMA при обнаружении события, соответствующего условиям правила. Алерт содержит информацию об обнаруженной угрозе, включая связанные активы, наблюдаемые объекты и события.

4.1.1. Ключевые поля алерта

Согласно официальной документации (раздел 269125), алерт содержит следующие основные поля:

Поле

Тип

Описание

Name

Строка

Название алерта

Severity

Строка

Важность алерта (critical, high, medium, low)

Status

Строка

Статус алерта (new, inProgress, inIncident, closed)

DetectSource

Строка

Источник обнаружения (KES, KATA, KUMA)

CreatedAt

Строка

Дата и время создания алерта

Assets

Массив

Активы, связанные с алертом (хосты, пользователи)

Observables

Массив

Наблюдаемые объекты (хеши, IP, URL, пути к файлам)

BaseEvents

Массив

Нормализованные события

OriginalEvents

Массив

Исходные события

ScannedFiles

Массив

Просканированные файлы

DetectionTechnologies

Массив

Технологии обнаружения (SB, IOC, ML, AV)

MITRETactics

Массив

Тактики MITRE ATT&CK

MITRETechniques

Массив

Техники MITRE ATT&CK

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта».

4.1.2. Структура элементов массива Assets

Каждый элемент массива Assets содержит информацию об активе:

Поле

Тип

Описание

ID

Строка

Уникальный идентификатор актива (UUID)

Name

Строка

Имя актива (имя хоста или учётной записи)

Type

Строка

Тип актива (host, user)

IsAttacker

Булево

Является ли актив атакующим

IsVictim

Булево

Является ли актив жертвой

Пример из документации ([KL] P003):

[ alert.Assets[] | select(.Type == "user" and .IsAttacker) | .ID]

Это jq-выражение извлекает ID всех пользователей-атакующих из алерта.

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».

4.1.3. Структура элементов массива Observables

Каждый элемент массива Observables содержит информацию о наблюдаемом объекте:

Поле

Тип

Описание

Type

Строка

Тип наблюдаемого объекта (sha256, md5, ip, fileFullName, fileName, url, domain)

Value

Строка

Значение наблюдаемого объекта

Details

Строка

Дополнительные сведения (например, путь к файлу для хеша)

Пример из документации ([KL] P004):

[alert.ScannedFiles[] | select(any(.DetectionTechnologies[] == "SB"; .)) | .Hashes | map(.Value)] | flatten

Это jq-выражение извлекает хеши файлов, обнаруженных через Sandbox.

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271772 «[KL] P004».

4.2. Модель данных инцидента

Инцидент — это объект, объединяющий несколько связанных алертов в одно расследование. Инцидент создаётся либо автоматически (по правилам сегментации или корреляции), либо вручную аналитиком.

4.2.1. Ключевые поля инцидента

Согласно официальной документации (раздел 269168), инцидент содержит следующие основные поля:

Поле

Тип

Описание

Name

Строка

Название инцидента

Severity

Строка

Важность инцидента (critical, high, medium, low)

Priority

Строка

Приоритет инцидента

Status

Строка

Статус инцидента

CreatedAt

Строка

Дата и время создания инцидента

Alerts

Массив

Алерты, входящие в инцидент

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269168 «Модель данных инцидента».

4.2.2. Вложенная структура инцидента

Критически важно: У инцидента нет собственных активов, наблюдаемых объектов и событий. Все эти данные находятся внутри вложенных алертов в массиве Alerts.

incident
├── Name, Severity, Priority, Status, CreatedAt
└── Alerts[]                  ← массив алертов
    ├── Name, Severity, Status, DetectSource
    ├── Assets[]              ← активы каждого алерта
    ├── Observables[]         ← наблюдаемые объекты каждого алерта
    ├── BaseEvents[]          ← нормализованные события каждого алерта
    ├── OriginalEvents[]      ← исходные события каждого алерта
    └── ScannedFiles[]        ← просканированные файлы каждого алерта

4.2.3. Как обращаться к данным инцидента

Чтобы получить доступ к активам, наблюдаемым объектам или событиям инцидента, необходимо сначала обратиться к массиву Alerts:

Данные

Правильное обращение

Неправильное обращение

Активы инцидента

incident.Alerts[].Assets[]

incident.Assets[]

Наблюдаемые объекты инцидента

incident.Alerts[].Observables[]

incident.Observables[]

Базовые события инцидента

incident.Alerts[].BaseEvents[]

incident.BaseEvents[]

Исходные события инцидента

incident.Alerts[].OriginalEvents[]

incident.OriginalEvents[]

Просканированные файлы инцидента

incident.Alerts[].ScannedFiles[]

incident.ScannedFiles[]

Пример из документации ([KL] P002):

[ incident.Alerts[] | select(.OriginalEvents[] | .ExternalID == "R050") | .Assets[] | select(.Type == "user" and .IsAttacker) | .ID]

Это jq-выражение извлекает ID пользователей-атакующих из алертов инцидента, у которых исходные события содержат ExternalID == "R050".

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271609 «[KL] P002».


4.3. Три типа данных в плейбуке

Согласно официальной документации (раздел 267548), в плейбуке используются три типа данных:

Тип данных

Обращение

Доступ

Назначение

Глобальные

alert.* или incident.*

Только чтение

Содержат информацию об алерте или инциденте

Операционные

.input.*

Чтение и запись

Передаются между шагами алгоритма

Локальные

В рамках шага

Чтение и запись

Ограничены одним шагом

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».

4.3.1. Глобальные данные

Определение из документации:

«Глобальные данные содержат информацию об алерте или инциденте. Доступны только для чтения на любом шаге.»

Как обращаться:

  • Для плейбука с областью действия «Алерт»: alert.Assets[], alert.Observables[], alert.Severity
  • Для плейбука с областью действия «Инцидент»: incident.Alerts[], incident.Severity, incident.Priority

Особенности:

  • Доступны на любом шаге алгоритма
  • Нельзя изменить через плейбук
  • Ключевые слова alert и incident используются без точки в начале

Пример из документации ([KL] P003):

[ alert.Assets[] | select(.Type == "user" and .IsAttacker) | .ID]
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука» и 271611 «[KL] P003».

4.3.2. Операционные данные

Определение из документации:

«Операционные данные передаются между шагами алгоритма. Обращение через контекст .input

Как обращаться:

  • Через префикс .input: .input.hashes, .input.hostIds, .input.assets

Особенности:

  • Создаются и изменяются шагами updateData
  • Доступны на любом шаге после сохранения
  • В операционных данных имена полей задаются разработчиком плейбука

Пример из документации ([KL] "Playbook for isolating a device where an infected file is detected"):

{
  "decision": {
    "conditions": [
      {
        "condition": "${((.input.assets // []) | length) > 0 and ([.input.observables[] | select(.type == \"md5\" or .type == \"sha256\" and .value != null and .value != \"\")] | length) > 0}",
        "name": "has input data"
      }
    ]
  }
}

В этом примере используются операционные данные .input.assets и .input.observables, которые передаются плейбуку при ручном запуске с выбором целевых объектов.

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 324933 «[KL] Playbook for isolating a device where an infected file is detected».

4.3.3. Локальные данные

Локальные данные ограничены одним шагом выполнения. Они создаются через параметр input шага и преобразуются в операционные данные через параметр output.

Пример из документации ([KL] P003) — шаг Loop:

{
  "loop": {
    "input": "${ [alert.OriginalEvents[] | [select(.DestinationProcessName != null and .DestinationProcessName != \"\")][] | .DestinationProcessName] }",
    "steps": [
      {
        "action": {
          "function": {
            "type": "killProcess",
            "params": {
              "path": "${ .[0] }"
            }
          }
        }
      }
    ]
  }
}

В этом примере:

  • input шага loop — jq-выражение, возвращающее массив имён процессов
  • Внутри шагов цикла текущий элемент доступен через .[0] (локальные данные)

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».


4.4. Контекст выполнения: триггер vs алгоритм

Согласно официальной документации (раздел 273327), синтаксис обращения к данным зависит от того, где пишется jq-выражение — в триггере или в алгоритме.

4.4.1. В триггере плейбука

Определение из документации:

«Триггер плейбука — это фильтр, позволяющий выбрать алерты или инциденты, для которых необходимо запустить плейбук. Фильтр применяется к каждому объекту (алерту или инциденту) индивидуально.»

Контекст триггера — это сам алерт или инцидент, поэтому обращение идёт без префикса:

Примеры из документации:

Триггер плейбука [KL] P001 (область «Алерт»):

[.OriginalEvents[] | .ExternalID == "R350"] | any

Триггер плейбука [KL] P002 (область «Инцидент»):

[.Alerts[] | .OriginalEvents[] | .ExternalID == "R050"] | any

Триггер плейбука [KL] P004 (область «Алерт»):

event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 271609–271772 (предустановленные плейбуки [KL]).

4.4.2. В алгоритме плейбука (executionFlow)

Определение из документации:

«Алгоритм плейбука описывается в формате JSON и состоит из шагов выполнения.»

В алгоритме используются полные пути с ключевыми словами alert или incident:

Пример из документации ([KL] P002):

[ incident.Alerts[] | select(.OriginalEvents[] | .ExternalID == "R050") | .Assets[] | select(.Type == "user" and .IsAttacker) | .ID]
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271609 «[KL] P002».

4.4.3. Сравнительная таблица

Контекст

Обращение к важности

Обращение к активам

Обращение к наблюдаемым объектам

Триггер (алерт)

.Severity

.Assets[]

.Observables[]

Триггер (инцидент)

.Severity

.Alerts[].Assets[]

.Alerts[].Observables[]

Алгоритм (алерт)

alert.Severity

alert.Assets[]

alert.Observables[]

Алгоритм (инцидент)

incident.Severity

incident.Alerts[].Assets[]

incident.Alerts[].Observables[]


4.5. Визуальная шпаргалка

┌─────────────────────────────────────────────────────────────┐
│                     ПЛЕЙБУК (Playbook)                      │
├─────────────────────────────────────────────────────────────┤
│  ТРИГГЕР                                                    │
│  Контекст: сам алерт/инцидент                               │
│  Обращение: .Severity, .Name, .Alerts[], .Assets[]          │
│  (без префикса alert. или incident.)                        │
├─────────────────────────────────────────────────────────────┤
│  АЛГОРИТМ (executionFlow)                                   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ ГЛОБАЛЬНЫЕ ДАННЫЕ (read-only)                       │   │
│  │ Для алерта:  alert.Assets[]                         │   │
│  │              alert.Observables[]                    │   │
│  │              alert.Severity                         │   │
│  │ Для инцидента: incident.Alerts[].Assets[]           │   │
│  │                incident.Alerts[].Observables[]      │   │
│  │                incident.Severity                    │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ ОПЕРАЦИОННЫЕ ДАННЫЕ (read/write)                    │   │
│  │ .input.hashes                                       │   │
│  │ .input.hostIds                                      │   │
│  │ .input.assets                                       │   │
│  │ (обновляются через updateData)                      │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ ЛОКАЛЬНЫЕ ДАННЫЕ (в рамках шага)                    │   │
│  │ .[0] — текущий элемент в цикле                      │   │
│  │ . — текущий контекст                                │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Шаги: action → decision → loop → parallel → updateData     │
└─────────────────────────────────────────────────────────────┘



5. Чувствительность к регистру (КРИТИЧНО)

В этом разделе разберём, почему регистр символов критически важен в jq-выражениях плейбуков, какие ошибки возникают при неправильном регистре и как их избежать.

ℹ️ Источники информации:
  • Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука»
  • Примеры из предустановленных плейбуков [KL] (разделы 271609–324934)
  • Практический опыт команды pre-sales и AntiAPT Community

5.1. Почему регистр имеет значение

Согласно официальной документации (раздел 267548), jq-выражения в плейбуках чувствительны к регистру символов. Это означает, что Assets и assets — это два разных поля, и система обрабатывает их по-разному.

Причина: Модель данных Kaspersky EDR Expert использует строгую типизацию с фиксированными именами полей. Имена полей в модели данных алерта и инцидента зафиксированы в документации и не могут быть изменены.

⚠️ Критически важно: Даже одна буква в неправильном регистре приведёт к ошибке выполнения плейбука или к тому, что jq-выражение вернёт пустой результат.

5.2. Примеры ошибок из-за регистра

5.2.1. Ошибка 1: Неправильный регистр ключевого слова

❌ Неправильно:

jq1

✅ Правильно:

jq1

Объяснение: Ключевое слово alert всегда пишется строчными буквами. Alert с заглавной буквы система не распознает.

ℹ️ Источник: Примеры из официальной документации ([KL] P001–P005).

5.2.2. Ошибка 2: Неправильный регистр имени поля

❌ Неправильно:

jq1

✅ Правильно:

jq1

Объяснение: Имя поля Assets в модели данных алерта пишется с заглавной буквы A. Строчное assets не существует в модели данных.

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта».

5.2.3. Ошибка 3: Неправильный регистр значения поля Type

❌ Неправильно:

jq1

✅ Правильно:

jq1

Объяснение: Поле Type в элементе массива Assets пишется с заглавной буквы T. Строчное type не существует.

ℹ️ Источник: Пример из официальной документации ([KL] P003):

[ alert.Assets[] | select(.Type == "host") | .ID]

5.2.4. Ошибка 4: Неправильный регистр значения поля Value

❌ Неправильно:

jq1

✅ Правильно:

jq1

Объяснение: Поле Value в элементе массива Observables пишется с заглавной буквы V.

ℹ️ Источник: Пример из официальной документации ([KL] P004):

[alert.ScannedFiles[] | select(any(.DetectionTechnologies[] == "SB"; .)) | .Hashes | map(.Value)] | flatten

5.2.5. Ошибка 5: Неправильный регистр в операционных данных

❌ Неправильно:

jq1

✅ Правильно:

jq1

Объяснение: В операционных данных (.input) имена полей задаются разработчиком плейбука. В примере из документации ([KL] "Playbook for isolating a device where an infected file is detected") используется строчное .input.assets:

jq1
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 324933.

5.3. Таблица правильных написаний полей

5.3.1. Для алертов (alert)

Поле

Правильное написание

Неправильные варианты

Активы

alert.Assets[]

alert.assets[], alert.ASSETS[]

Наблюдаемые объекты

alert.Observables[]

alert.observables[]

Базовые события

alert.BaseEvents[]

alert.baseEvents[]

Исходные события

alert.OriginalEvents[]

alert.originalEvents[]

Просканированные файлы

alert.ScannedFiles[]

alert.scannedFiles[]

Технологии обнаружения

alert.DetectionTechnologies[]

alert.detectionTechnologies[]

Тактики MITRE

alert.MITRETactics[]

alert.mitretactics[]

Техники MITRE

alert.MITRETechniques[]

alert.mitretechniques[]

Важность

alert.Severity

alert.severity

Имя

alert.Name

alert.name

Статус

alert.Status

alert.status

Источник обнаружения

alert.DetectSource

alert.detectSource

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта».

5.3.2. Для инцидентов (incident)

Поле

Правильное написание

Неправильные варианты

Алерты инцидента

incident.Alerts[]

incident.alerts[], Incident.Alerts[]

Активы через алерты

incident.Alerts[].Assets[]

incident.Alerts[].assets[]

Наблюдаемые через алерты

incident.Alerts[].Observables[]

incident.Alerts[].observables[]

Важность инцидента

incident.Severity

incident.severity

Приоритет инцидента

incident.Priority

incident.priority

Имя инцидента

incident.Name

incident.name

Статус инцидента

incident.Status

incident.status

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269168 «Модель данных инцидента».

5.3.3. Для элементов массивов

Поле

Правильное написание

Неправильные варианты

Тип актива

.Type

.type, .TYPE

Значение наблюдаемого

.Value

.value, .VALUE

ID актива

.ID

.id, .Id

Имя актива

.Name

.name

Является ли атакующим

.IsAttacker

.isAttacker, .isattacker

Является ли жертвой

.IsVictim

.isVictim

Дополнительные сведения

.Details

.details

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 269125 и 269168.

5.4. Разный регистр в глобальных и операционных данных

5.4.1. Глобальные данные (alert/incident)

В глобальных данных имена полей зафиксированы в модели данных и пишутся с заглавных букв:

jq1234
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».

5.4.2. Операционные данные (.input)

В операционных данных имена полей задаются разработчиком плейбука через шаг updateData. В примерах из официальной документации используется строчный регистр:

jq1234

Пример из документации ([KL] "Playbook for isolating a device where an infected file is detected"):

jq1
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 324933.

5.4.3. Почему разный регистр?

Глобальные данные — это часть модели данных KUMA, где имена полей стандартизированы и пишутся с заглавных букв (CamelCase).

Операционные данные — это "переменные", которые создаёт разработчик плейбука. В примерах от Лаборатории Касперского используется соглашение: когда в .input сохраняются те же данные, что были в alert.Assets[], разработчики используют строчные буквы для визуального различия.

⚠️ Важно: Это соглашение, а не требование системы. Вы можете назвать поле в .input как угодно (например, .input.MyCustomField), но для совместимости с примерами из документации рекомендуется использовать строчные буквы.

5.5. Практические рекомендации

5.5.1. Используйте подсказки интерфейса

При вводе jq-выражений в Консоли OSMP система автоматически показывает подсказки с правильными именами полей:

  • Начните вводить alert. → появится список полей с правильным регистром
  • Начните вводить incident. → появится список полей с правильным регистром
  • Начните вводить " (кавычку) → появится список допустимых значений для полей
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 303486 «Настройка шагов выполнения плейбука в визуальном редакторе».

5.5.2. Копируйте примеры из документации

Вместо того чтобы писать имена полей по памяти, копируйте их из:

  • Официальной документации (разделы 269125, 269168)
  • Предустановленных плейбуков [KL] (разделы 271609–324934)
  • Этой статьи (таблицы 5.3.1–5.3.3)

5.5.3. Проверяйте регистр при возникновении ошибок

Если плейбук не работает или возвращает пустой результат:

  1. Проверьте, что все имена полей написаны с правильным регистром
  2. Сравните с таблицами 5.3.1–5.3.3
  3. Убедитесь, что в глобальных данных используется заглавный регистр, а в операционных — строчный (если следуете соглашению)

5.5.4. Создайте шпаргалку для команды

Распечатайте или сохраните таблицы 5.3.1–5.3.3 как шпаргалку для аналитиков SOC. Это сократит количество ошибок при создании плейбуков.