Плейбуки

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

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

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

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

Источник

Описание

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

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

KUMA Community

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

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

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

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

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

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

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

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

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

Ограничения


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

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

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

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

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

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

Режим

Как работает

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

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

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

Не требуется

Обучение

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

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

Ручной

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

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

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

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

Задача

Описание

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

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

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

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

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

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

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

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

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-код, описывающий последовательность действий


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


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. Почему структура различается

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

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": [
    /* шаги выполнения */
  ]
}

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

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

ℹ️ Источник: Официальная справка 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"
}

Разбор:

ℹ️ Источник: Официальная справка 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] }"
            }
          }
        }
      }
    ]
  }
}

Разбор:

ℹ️ Источник: Официальная справка 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": [
          /* шаги, выполняемые при истинности условия */
        ]
      }
    ]
  }
}

Разбор:

ℹ️ Источник: Официальная справка 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. Визуальный редактор

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

Недостатки:

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

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

Недостатки:

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


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

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

Статус

Описание

Активный

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

Черновик

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

Удалено

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

Недоступно

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

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




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

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

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


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. Глобальные данные

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

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

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

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

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

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

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

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

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

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

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

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

Пример из документации ([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] }"
            }
          }
        }
      }
    ]
  }
}

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

ℹ️ Источник: Официальная справка 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-выражениях плейбуков, какие ошибки возникают при неправильном регистре и как их избежать.

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


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

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

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

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


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

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

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

Alert.Assets[]

Правильно:

alert.Assets[]

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

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


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

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

alert.assets[]

Правильно:

alert.Assets[]

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

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


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

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

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

Правильно:

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

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

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

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

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

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

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

Правильно:

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

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

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

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

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

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

.input.Assets[]

Правильно:

.input.assets[]

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

((.input.assets // []) | length) > 0

ℹ️ Источник: Официальная справка 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)

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

alert.Assets[]
alert.Observables[]
select(.Type == "host")
.Value

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

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

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

.input.assets[]
.input.observables[]
select(.type == "host")
.value

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

((.input.assets // []) | length) > 0 and ([.input.observables[] | select(.type == "md5" or .type == "sha256")] | length) > 0

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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




6. Создание плейбука в интерфейсе

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

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


6.1. Необходимые роли

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

Роль

Возможность создания

Главный администратор

✅ Да

Администратор тенанта

✅ Да

Администратор SOC

✅ Да

Аналитик SOC

✅ Да

Аналитик 1-го уровня

✅ Да

Аналитик 2-го уровня

✅ Да

Менеджер SOC

❌ Нет

Подтверждающий

❌ Нет

Аудитор

❌ Нет

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

💡 Рекомендация: Если в вашей организации действует принцип минимальных привилегий, назначайте роль «Аналитик 1-го уровня» или «Аналитик 2-го уровня» только тем сотрудникам, которые действительно создают плейбуки. Остальным аналитикам достаточно роли «Аудитор» для просмотра.


6.2. Пошаговая инструкция создания

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

Шаг 1. Открытие мастера создания

  1. Войдите в Консоль OSMP под учётной записью с необходимой ролью.
  2. Перейдите в раздел Мониторинг → Плейбуки.
  3. Нажмите кнопку «Создать».

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

┌─────────────────────────────────────────────────────────────┐
│                    МАСТЕР СОЗДАНИЯ ПЛЕЙБУКА                 │
├────────────────────┬────────────────────────────────────────┤
│                    │                                        │
│   НАВИГАЦИЯ        │         РАБОЧАЯ ОБЛАСТЬ                │
│                    │                                        │
│   • Параметры      │   (зависит от выбранного пункта)       │
│   • Триггер        │                                        │
│   • Алгоритм       │                                        │
│                    │                                        │
│                    │                                        │
├────────────────────┴────────────────────────────────────────┤
│          [ Сохранить как черновик ]  [ Опубликовать ]       │
└─────────────────────────────────────────────────────────────┘

Шаг 2. Настройка параметров плейбука

В разделе «Параметры» заполните обязательные поля:

Поле

Описание

Требования

Имя

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

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

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

Тип объекта

🔘 Алерт / 🔘 Инцидент

Режим работы

Способ запуска

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

Версия

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

Минимум 1 символ

dslSpecVersion

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

Минимум 1 символ

actionsSpecVersion

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

Минимум 1 символ

Дополнительные поля:

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

Шаг 3. Настройка триггера

Перейдите в раздел «Триггер» и введите jq-выражение, определяющее условия автоматического запуска плейбука.

Пример простого триггера для алерта:

.Severity == "critical" and event.new

Пример триггера для инцидента:

[.Alerts[] | .Severity == "critical"] | any and event.new

💡 Подробнее про синтаксис jq — в Разделе 7. Сейчас достаточно понимать, что триггер — это условие, которое возвращает true или false для каждого алерта/инцидента.

Шаг 4. Построение алгоритма

Перейдите в раздел «Алгоритм» и создайте последовательность шагов выполнения. Это можно сделать двумя способами:

Способ 1: Визуальный редактор

Способ 2: Ручное написание JSON

Пример простейшего алгоритма:

{
  "version": "1",
  "dslSpecVersion": "1.1.0",
  "actionsSpecVersion": "1",
  "executionFlow": [
    {
      "action": {
        "function": {
          "type": "isolateHost",
          "assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}"
        }
      },
      "onError": "stop"
    }
  ]
}

💡 Подробнее про построение алгоритма — в Разделе 8.

Шаг 5. Сохранение

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

Вариант

Описание

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

Сохранить как черновик

Плейбук сохраняется, но не активируется

Для продолжения работы позже

Опубликовать

Плейбук активируется и готов к запуску

Когда все настройки завершены

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


6.3. Настройка одновременного запуска

Если плейбук работает в автоматическом режиме, необходимо настроить поведение при одновременном запуске нескольких экземпляров.

Когда это актуально

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

Варианты поведения

Поведение

Описание

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

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

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

Для большинства сценариев

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

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

Когда актуальна только последняя информация

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

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

Когда важно не прерывать текущую работу

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

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


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

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

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

Настройка

Результат

Наследование включено (по умолчанию)

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

Наследование отключено

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

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

Сценарий

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

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

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

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

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

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

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

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

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


💡 Подробнее про наследование — в Разделе 2.4.


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

После создания плейбук получает один из статусов:

Статус

Описание

Доступные действия

Активный

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

Запуск, изменение, удаление

Черновик

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

Изменение, публикация, удаление. Запуск невозможен

Удалено

Плейбук удалён

Просмотр, копирование. Изменение и запуск невозможны

Недоступно

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

Просмотр. Запуск и изменение невозможны

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

Переходы между статусами

[Создание] → Черновик → [Публикация] → Активный
                             ↓
                        [Удаление] → Удалено

[Создание] → Черновик → [Удаление] → Удалено

Любой статус → [Потеря лицензии/веб-плагина] → Недоступно

6.6. Таблица плейбуков

После создания плейбук появляется в общей таблице плейбуков (Мониторинг → Плейбуки). Таблица содержит следующие столбцы:

Столбец

Описание

Имя

Название плейбука (кликабельно — открывает детали)

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

Алерт или Инцидент

Режим работы

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

Статус

Активный / Черновик / Удалено / Недоступно

Версия

Текущая версия плейбука

Тенант

Тенант, которому принадлежит плейбук

Теги

Теги, назначенные плейбуку

Действия

Кнопки: Изменить, Дублировать, Удалить, Просмотреть историю

Фильтрация и поиск

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

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




7. Настройка триггера

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


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


7.1. Что такое триггер

Согласно официальной документации (раздел 273327):

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

Ключевые характеристики триггера:

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


7.2. Когда срабатывает триггер

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

7.2.1. Создание нового алерта или инцидента

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

7.2.2. Изменение существующего алерта

Триггер проверяется при следующих изменениях алерта:

Событие

Описание

Назначение или удаление аналитика

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

Изменение статуса алерта

Переход между статусами (new, inProgress, inIncident, closed)

Изменение базовых событий

Добавление или удаление связанных событий

Связывание или удаление связи алерта с инцидентом

Присоединение алерта к инциденту или отвязка

Изменение значения в поле ExternalReference

Обновление внешней ссылки

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

7.2.3. Изменение существующего инцидента

Триггер проверяется при следующих изменениях инцидента:

Событие

Описание

Назначение или удаление аналитика

Изменение ответственного за инцидент

Изменение статуса инцидента

Переход между статусами

Изменение приоритета инцидента

Обновление приоритета

Объединение инцидентов

Слияние нескольких инцидентов в один

Изменение базовых событий

Добавление или удаление связанных событий

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

7.2.4. Ручной запуск с опцией «Запустить для всех соответствующих»

При ручном запуске плейбука можно выбрать опцию «Запустить для всех соответствующих алертов/инцидентов». В этом случае система применяет триггер ко всем существующим алертам/инцидентам и запускает плейбук для тех, для которых триггер возвращает true.

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


7.3. Синтаксис jq (gojq)

Триггеры плейбуков используют язык jq в реализации gojq (на языке Go). Реализация gojq совместима со стандартным jq, но имеет некоторые улучшения:

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука». Ссылка на документацию gojq: https://github.com/itchyny/gojq

7.3.1. Базовые конструкции jq

Точка (.) — текущий объект (алерт или инцидент):

.

Обращение к полю:

.Severity
.Name
.Status

Сравнение значений:

.Severity == "critical"
.Severity != "low"

Логические операторы:

(.Severity == "critical") and (.DetectSource == "KES")
(.Severity == "high") or (.Severity == "critical")
not (.Status == "closed")

Итерация по массиву:

.Assets[]
.Observables[]
.MITRETactics[]

Фильтрация через select:

.Assets[] | select(.Type == "host")
.Observables[] | select(.Type == "sha256")

Обёртка в массив:

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

Проверка наличия подстроки:

jq1.Name | contains("Ransomware")

Проверка соответствия регулярному выражению:

.Name | test("Ransomware.*")

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука». Полное руководство по jq: https://jqlang.org/manual/

7.3.2. Работа с массивами — критически важно

Это самая частая причина ошибок в триггерах. Рассмотрим пример:

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

.DetectionTechnologies[] == "SB"

Это выражение вернёт несколько значений true или false (по одному для каждого элемента массива). jq не сможет интерпретировать результат как единое условие.

Правильно (вариант 1):

[.DetectionTechnologies[] | . == "SB"] | any

Разбор:

Правильно (вариант 2, более короткий):

any(.DetectionTechnologies[]; . == "SB")

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

event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)

7.3.3. Проверка наличия элементов в массиве

Чтобы проверить, содержит ли массив хотя бы один элемент, используйте функцию length:

[.Assets[] | select(.Type == "host")] | length > 0

Это выражение возвращает true, если в алерте есть хотя бы один хост.


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

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

7.3.4. Использование переменных

Если одно и то же выражение используется несколько раз, его можно сохранить в переменную:

.Severity == "critical" as $is_critical |
$is_critical and ([.Assets[] | select(.Type == "host")] | length > 0)

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

7.3.5. Работа с датами

Для работы с датами в jq доступны функции now, todate, fromdate:

now
now | todate
.CreatedAt | split(".")[0] + "Z" | fromdate

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


7.4. Функция event для отслеживания изменений

Согласно официальной документации (раздел 273327), в триггере доступен специальный объект event, который содержит информацию о том, что именно произошло с алертом или инцидентом.

7.4.1. Структура объекта event

{
  "new": true,
  "manual": true,
  "updateOperations": [
    "alertChangedToNew",
    "alertLinkedWithIncidentBySystem"
  ]
}

Поле

Тип

Описание

new

Булево

true, если алерт/инцидент только что создан

manual

Булево

true, если изменение сделано вручную (не системой)

updateOperations

Массив строк

Список операций, которые были выполнены

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

7.4.2. Примеры использования функции event

Пример 1: Срабатывать только для новых алертов

event.new

Это выражение возвращает true только при создании нового алерта/инцидента.


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

event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)

Пример 2: Срабатывать только при ручном переоткрытии алерта

event.manual and ([event.updateOperations[] | . == "alertReopened"] | any)

Пример 3: Срабатывать только при автоматическом связывании с инцидентом

[event.updateOperations[] | . == "alertLinkedWithIncidentBySystem"] | any

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

7.4.3. Список операций updateOperations

Согласно официальной документации, объект event.updateOperations может содержать следующие значения:

Для алертов:

Операция

Описание

alertChangedToNew

Изменение статуса на «New»

alertReopened

Повторное открытие алерта

alertLinkedWithIncidentBySystem

Автоматическое связывание с инцидентом

alertUnlinkedFromIncident

Отвязка от инцидента

alertAssignedToAnalyst

Назначение аналитика

alertUnassignedFromAnalyst

Удаление аналитика

Для инцидентов:

Операция

Описание

incidentChangedToNew

Изменение статуса на «New»

incidentPriorityChanged

Изменение приоритета

incidentMerged

Объединение инцидентов

incidentAssignedToAnalyst

Назначение аналитика

incidentUnassignedFromAnalyst

Удаление аналитика

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


7.5. Ограничения: что НЕЛЬЗЯ использовать в триггерах

Согласно официальной документации (раздел 273327), не рекомендуется использовать в триггерах следующие поля из-за их большого объёма, что может привести к деградации производительности:

Поле

Причина ограничения

OriginalEvents

Очень большой объём данных (исходные события)

Observables

Может содержать тысячи элементов

Extra

Дополнительная информация, может быть огромной

Alerts (для инцидентов)

Массив алертов может быть очень большим

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

7.5.1. Почему это важно

Триггер проверяется для каждого алерта или инцидента в системе. Если в триггере используются «тяжёлые» поля, система вынуждена загружать и обрабатывать большие объёмы данных для каждого объекта. Это приводит к:

7.5.2. Альтернативы

Вместо этого

Используйте

OriginalEvents

BaseEvents или обогащённые поля

Observables

ScannedFiles или DetectionTechnologies

Extra

Основные поля алерта/инцидента

Alerts (для инцидентов)

Агрегированные поля инцидента

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


7.6. Примеры триггеров из официальной документации

Разберём реальные триггеры из предустановленных плейбуков [KL].

7.6.1. Триггер плейбука [KL] P001

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

Триггер:

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

Разбор:

Назначение: Срабатывает для алертов, созданных правилом корреляции R350 «Creation of executable files by office applications».

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

7.6.2. Триггер плейбука [KL] P002

Область действия: Инцидент

Триггер:

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

Разбор:

Назначение: Срабатывает для инцидентов, содержащих алерты от правила корреляции R050 «Windows Event Log was cleared».

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

7.6.3. Триггер плейбука [KL] P003

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

Триггер:

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

Разбор: Аналогично P001, но для правила корреляции R297 «Suspicious child process from wmiprvse.exe».

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

7.6.4. Триггер плейбука [KL] P004

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

Триггер:

event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)

Разбор:

Назначение: Срабатывает для новых алертов с важностью «medium», обнаруженных через Sandbox.

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

7.6.5. Триггер плейбука [KL] P005

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

Триггер:

event.new and .Severity == "high" and any(.DetectionTechnologies[] == "SB"; .)

Разбор: Аналогично P004, но для важности «high».

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

7.6.6. Триггер плейбука [KL] "Playbook for checking external IP addresses"

Область действия: Инцидент

Триггер:

event.new and ([ .Alerts[] | .Observables[] | select(.Value | test("^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.|127.)") | not) | .Value ] | length > 0)

Разбор:

Назначение: Срабатывает для новых инцидентов, содержащих хотя бы один внешний IP-адрес.

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


7.7. Проверка триггера через кнопку «Найти»

Согласно официальной документации (раздел 249267), в интерфейсе создания плейбука доступна кнопка «Найти», которая позволяет проверить корректность триггера.

Как работает кнопка «Найти»

  1. Введите jq-выражение в поле триггера.
  2. Нажмите кнопку «Найти».
  3. Система применит выражение ко всем существующим алертам/инцидентам (в зависимости от выбранной области действия).
  4. Отобразится список алертов/инцидентов, для которых триггер возвращает true.

Что это даёт

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

💡 Рекомендация: Всегда используйте кнопку «Найти» перед публикацией плейбука. Это позволяет убедиться, что триггер срабатывает на ожидаемые объекты и не захватывает лишние.


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

7.8.1. Начинайте с простых триггеров

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

Шаг 1: Простая проверка важности

.Severity == "critical"

Шаг 2: Добавление проверки источника

.Severity == "critical" and .DetectSource == "KES"

Шаг 3: Добавление проверки технологий обнаружения

.Severity == "critical" and .DetectSource == "KES" and any(.DetectionTechnologies[] == "SB"; .)

Шаг 4: Добавление проверки через event

event.new and .Severity == "critical" and .DetectSource == "KES" and any(.DetectionTechnologies[] == "SB"; .)

7.8.2. Всегда используйте event.new для автоматических плейбуков

Если плейбук должен срабатывать только при создании нового алерта/инцидента, добавьте event.new в триггер. Это предотвратит повторные срабатывания при изменении алерта/инцидента.

7.8.3. Оборачивайте итераторы в [...] | any

Это критически важно для корректной работы с массивами. Без обёртки jq вернёт несколько значений, и система не сможет интерпретировать результат как условие.

7.8.4. Избегайте «тяжёлых» полей

Не используйте OriginalEvents, Observables, Extra, Alerts в триггерах без крайней необходимости. Если они необходимы, тщательно тестируйте производительность.

7.8.5. Проверяйте синтаксис через кнопку «Найти»

Перед публикацией плейбука всегда проверяйте триггер через кнопку «Найти». Это позволяет выявить ошибки синтаксиса и логики до запуска в продуктивной среде.

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

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

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




8. Построение алгоритма (executionFlow)

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

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


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

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

8.1.1. Общая информация о плейбуке

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

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

Поле

Тип

Описание

Требования

version

Строка

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

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

dslSpecVersion

Строка

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

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

actionsSpecVersion

Строка

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

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

executionFlow

Массив

Шаги выполнения

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

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

Поле

Тип

Описание

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

playbookRunTimeout

Строка

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

24h

input

Строка

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

Пусто

output

Строка

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

Пусто

timeouts

Объект

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

Пусто

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

8.1.2. Массив executionFlow

Массив executionFlow содержит шаги, которые выполняются в порядке, указанном в массиве. Каждый шаг — это объект с определённой структурой в зависимости от типа шага.

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

Тип шага

Ключевое поле

Назначение

Действие (ResponseFunction)

action

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

Цикл (Loop)

loop

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

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

parallel

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

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

decision

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

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

updateData

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

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


8.2. Шаг 1: Action (Действие)

Согласно официальной документации (раздел 270357), шаг типа «Действие» выполняет конкретное действие по реагированию.

8.2.1. Структура шага Action

{
  "action": {
    "function": {
      "type": "deleteFile",
      "assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}",
      "params": {
        "path": "${alert.Observables[] | select(.Type == \"filepath\") | .Value}"
      }
    }
  },
  "onError": "stop",
  "timeout": {
    "scheduleToCloseTimeout": "24h"
  },
  "output": {
    "action": "merge",
    "filter": "${.}"
  },
  "manualApprove": {
    "timeout": "60m",
    "emailNotifications": {
      "enabled": true,
      "delay": "10m"
    }
  }
}

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

Параметр

Тип

Описание

type

Строка

Тип действия (например, deleteFile, isolateHost, blockLDAPAccount)

assets

Строка (jq-выражение)

jq-выражение, возвращающее массив ID активов

8.2.3. Опциональные параметры

Параметр

Тип

Описание

params

Объект

Дополнительные параметры действия (зависят от типа действия)

onError

Строка

Обработка ошибок: stop (прервать) или continue (пропустить)

timeout

Объект

Таймаут выполнения действия

output

Объект

Изменение выходных данных через jq-выражение

manualApprove

Объект/Булево

Настройка ручного подтверждения

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

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

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

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

Разбор:

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

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

Из предустановленного плейбука [KL] P004 "Sandbox Medium Detect":

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

Разбор:

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


8.3. Шаг 2: Loop (Цикл)

Согласно официальной документации (раздел 270351), шаг типа «Цикл» повторяет набор шагов для каждого элемента массива.

8.3.1. Структура шага Loop

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

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

Параметр

Тип

Описание

input

Строка (jq-выражение)

jq-выражение, возвращающее массив для итерации

steps

Массив

Шаги, выполняемые для каждого элемента

8.3.3. Опциональные параметры

Параметр

Тип

Описание

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

batchSize

Число

Количество элементов за одну итерацию

1

mode

Строка

Режим выполнения: sequential или parallel

sequential

onError

Строка

Обработка ошибок: stop или continue

stop

aggregate

Строка (jq-выражение)

jq-выражение для агрегирования результатов

${.}

output

Объект

Изменение выходных данных

Пусто

8.3.4. Доступ к текущему элементу

Внутри шагов цикла текущий элемент (или группа элементов, если batchSize > 1) доступен через:

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

Из предустановленного плейбука [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] }"
            }
          }
        }
      }
    ]
  }
}

Разбор:

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


8.4. Шаг 3: Parallel (Параллель)

Согласно официальной документации (раздел 270352), шаг типа «Параллель» выполняет несколько веток шагов одновременно с одними и теми же входными данными.

8.4.1. Структура шага Parallel

{
  "parallel": {
    "input": "${[incident.Alerts[].Assets[] | select(.Type == \"host\") | .ID]}",
    "aggregate": "${.}",
    "output": {
      "action": "merge",
      "filter": "${.}"
    },
    "onError": "continue",
    "branches": [
      {
        "name": "isolate_hosts",
        "steps": [
          {
            "action": {
              "function": {
                "type": "isolateHost",
                "assets": "${.}"
              }
            }
          }
        ]
      },
      {
        "name": "collect_forensics",
        "steps": [
          {
            "action": {
              "function": {
                "type": "getForensics",
                "assets": "${.}"
              }
            }
          }
        ]
      }
    ]
  }
}

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

Параметр

Тип

Описание

branches

Массив

Ветки выполнения (каждая ветка — объект с name и steps)

aggregate

Строка (jq-выражение)

jq-выражение для агрегирования результатов

8.4.3. Опциональные параметры

Параметр

Тип

Описание

input

Строка (jq-выражение)

jq-выражение для входных данных

output

Объект

Как применить выходные данные: merge или overwrite

onError

Строка

stop (завершить все ветки) или continue (остановить только сбойную)

8.4.4. Структура ветки

{
  "name": "имя_ветки",
  "steps": [ /* массив шагов */ ]
}

8.4.5. Отличие от Loop

Характеристика

Loop

Parallel

Входные данные

Разные элементы массива

Одни и те же данные

Выполнение

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

Всегда параллельное

Назначение

Обработать каждый элемент

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

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


8.5. Шаг 4: Decision (Ветвление)

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

8.5.1. Структура шага Decision

{
  "decision": {
    "conditions": [
      {
        "condition": "${incident.Severity == \"Critical\"}",
        "name": "Critical severity",
        "steps": [
          {
            "action": {
              "function": {
                "type": "isolateHost",
                "assets": "${[incident.Alerts[].Assets[] | select(.Type == \"host\") | .ID]}"
              }
            }
          }
        ]
      },
      {
        "condition": "${incident.Severity == \"High\"}",
        "name": "High severity",
        "steps": [
          {
            "action": {
              "function": {
                "type": "addComment",
                "params": {
                  "comment": "High severity incident detected"
                }
              }
            }
          }
        ]
      },
      {
        "condition": "${true}",
        "name": "Default case",
        "steps": [
          {
            "action": {
              "function": {
                "type": "addComment",
                "params": {
                  "comment": "Low or medium severity"
                }
              }
            }
          }
        ]
      }
    ]
  }
}

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

Параметр

Тип

Описание

conditions

Массив

Условия выполнения

8.5.3. Структура условия

{
  "condition": "${jq-выражение}",
  "name": "название_условия",
  "steps": [ /* массив шагов */ ]
}

8.5.4. Особенности

8.5.5. Пример из документации: [KL] "Playbook for checking external IP addresses"

Из предустановленного плейбука [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": [
          {
            "decision": {
              "conditions": [
                {
                  "condition": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | length > 0}",
                  "name": "alert has host(s)",
                  "steps": [
                    {
                      "action": {
                        "function": {
                          "type": "getForensics",
                          "assets": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | map(.ID)}",
                          "params": {
                            "processes": {"collect": true},
                            "autoruns": {"collect": false}
                          }
                        }
                      }
                    },
                    {
                      "action": {
                        "function": {
                          "type": "netIsolateOn",
                          "assets": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | map(.ID)}"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          }
        ]
      }
    ]
  }
}

Разбор:

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


8.6. Шаг 5: UpdateData (Обновление данных)

Согласно официальной документации (раздел 270355), шаг типа «Обновление данных» сохраняет промежуточные данные в операционные данные (.input).

8.6.1. Способ 1: jq-скрипт

{
  "updateData": "${.input | .hashes = [incident.Alerts[].Observables[] | select(.Type == \"sha256\") | .Value]}"
}

8.6.2. Способ 2: Объект Output

{
  "updateData": {
    "action": "merge",
    "filter": "${[incident.Alerts[].Observables[] | select(.Type == \"sha256\") | .Value]}",
    "key": "hashes"
  }
}

8.6.3. Параметры (Способ 2)

Параметр

Тип

Описание

action

Строка

merge (объединить) или overwrite (перезаписать)

filter

Строка (jq-выражение)

jq-выражение для извлечения данных

key

Строка

Имя поля в .input (опционально)

8.6.4. Пример из документации

Из плейбука, который мы разбирали ранее:

{
  "updateData": {
    "action": "merge",
    "filter": "${{
      \"filePath\": ([incident.Alerts[] | .Observables[]? | select(.Type == \"fileFullName\" and (.Value | contains(\"update.exe\"))) | .Value][0] // \"\"),
      \"hashes\": ([incident.Alerts[] | .Observables[]? | select((.Type == \"md5\" or .Type == \"sha256\") and .Details != null and .Details != \"\" and (.Details | contains(\"update.exe\"))) | .Value] | unique),
      \"assets\": ([incident.Alerts[] | .Assets[]? | select(.Type == \"host\") | .ID] | unique)
    }}"
  }
}

Разбор:

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


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

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

8.7.1. Значения onError

Значение

Поведение

stop

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

continue

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

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

Используйте onError: "stop" для критичных действий, без которых дальнейшее выполнение плейбука не имеет смысла:

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

Используйте onError: "continue" для некритичных действий, которые можно пропустить:

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


8.8. Таймауты

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

8.8.1. Таймаут плейбука

{
  "playbookRunTimeout": "24h"
}

Значения:

8.8.2. Таймаут шага

{
  "action": {
    "function": {
      "type": "getForensics"
    }
  },
  "timeout": {
    "scheduleToCloseTimeout": "24h"
  }
}

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


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

8.9.1. Начинайте с простых алгоритмов

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

8.9.2. Используйте updateData для сложных вычислений

Если одно и то же jq-выражение используется несколько раз, вычислите его один раз и сохраните в .input:

{
  "updateData": {
    "action": "merge",
    "filter": "${{
      \"hostIds\": [incident.Alerts[].Assets[] | select(.Type == \"host\") | .ID]
    }}"
  }
}

Дальше используйте ${.input.hostIds} вместо повторного вычисления.

8.9.3. Настраивайте playbookRunTimeout

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

{
  "playbookRunTimeout": "48h"
}

8.9.4. Тестируйте в режиме «Обучение»

Перед переводом в «Автоматический» протестируйте плейбук в режиме «Обучение». Это позволит проверить логику без риска выполнить деструктивные действия.

8.9.5. Проверяйте jq-выражения

Используйте кнопку «Найти» в триггере и тестируйте jq-выражения в алгоритме перед публикацией.




9. Действия по реагированию

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

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


9.1. Полный список действий по реагированию

Согласно официальной документации (раздел 314454), в Kaspersky EDR Expert 8.1 доступно 19 действий по реагированию, которые можно использовать в плейбуках.

9.1.1. Сводная таблица действий

Действие

Тип

Назначение

1

getFile

KATA/KEDR

Получить файл с хоста

2

getForensics

KATA/KEDR

Собрать форензику (дампы, ключи реестра, процессы)

3

getRegistryKey

KATA/KEDR

Получить ключ реестра Windows

4

getNTFSMetaFiles

KATA/KEDR

Получить метафайлы NTFS

5

getProcessMemoryDump

KATA/KEDR

Получить дамп памяти процесса

6

getDiskImage

KATA/KEDR

Получить образ диска

7

getMemoryDump

KATA/KEDR

Получить дамп памяти

8

killProcess

KATA/KEDR

Завершить процесс

9

deleteFile

KATA/KEDR

Удалить файл

10

quarantineFile

KATA/KEDR

Поместить файл на карантин

11

deleteQuarantinedFile

KATA/KEDR

Удалить файл из карантина

12

restoreQuarantinedFile

KATA/KEDR

Восстановить файл из карантина

13

isolateHost

KATA/KEDR

Изолировать хост (сетевая изоляция)

14

runYaraScan

KATA/KEDR

Запустить YARA-проверку

15

runIOCScan

KATA/KEDR

Запустить IOC-проверку

16

manageServices

KATA/KEDR

Управлять службами Windows

17

executeApplication

KATA/KEDR

Выполнить приложение

18

addFilePreventionRules

KATA/KEDR

Создать правило запрета на запуск файла

19

deleteFilePreventionRules

KATA/KEDR

Удалить правило запрета

20

blockLDAPAccount

Active Directory

Блокировать учётную запись

21

unblockLDAPAccount

Active Directory

Разблокировать учётную запись

22

resetLDAPPassword

Active Directory

Сбросить пароль учётной записи

23

assignKasapGroup

KASAP

Назначить курс обучения

24

updateBases

Обновление баз

Обновить антивирусные базы

25

executeCustomScript

Выполнение скриптов

Выполнить пользовательский скрипт

26

iocsEnrichment

Обогащение данных

Обогатить данные через Kaspersky TIP

27

moveDeviceToGroup

Управление объектами

Переместить устройство в другую группу администрирования

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


9.2. Классификация действий по группам

9.2.1. Действия KATA/KEDR (19 действий)

Действия для работы с файлами, процессами, хостами и сбора форензики. Требуют наличия агента Kaspersky Endpoint Security (KES) или Kaspersky Anti Targeted Attack (KATA) на целевом хосте.

Подкатегории:

Сбор данных и форензика (7 действий):

Работа с файлами (4 действия):

Работа с процессами (1 действие):

Изоляция хоста (1 действие):

Проверки (2 действия):

Управление службами (1 действие):

Выполнение приложений (1 действие):

Правила запрета (2 действия):

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264315 «Действия по реагированию KATA/KEDR».

9.2.2. Действия Active Directory (3 действия)

Действия для управления учётными записями в Active Directory. Требуют настроенной интеграции с Active Directory.

ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 261323 «Действия по реагированию через Active Directory».

9.2.3. Действие KASAP (1 действие)

Действие для назначения курсов обучения через Kaspersky Automated Security Awareness Platform (KASAP).

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

9.2.4. Действие обновления баз (1 действие)

9.2.5. Действие выполнения скриптов (1 действие)

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

9.2.6. Действие обогащения данных (1 действие)

Требования:

Поддерживаемые типы наблюдаемых объектов:

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

9.2.7. Действие управления объектами (1 действие)


9.3. Как извлекать активы для действий

Большинство действий требуют параметр assets — jq-выражение, возвращающее массив ID активов, к которым применяется действие.

9.3.1. Извлечение ID хостов

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

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

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

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

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

{
  "action": {
    "function": {
      "type": "killProcess",
      "assets": "${[ alert.Assets[] | select(.Type == \"host\") | .ID]}"
    }
  }
}

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

9.3.2. Извлечение ID пользователей

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

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

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

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

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

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

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

9.3.3. Извлечение ID пользователей-атакующих

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

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

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

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

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

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

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

9.3.4. Извлечение ID пользователей-жертв

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

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

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

[incident.Alerts[].Assets[] | select(.Type == "user" and .IsVictim) | .ID]

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


9.4. Как извлекать параметры для действий

9.4.1. Извлечение хешей файлов

Извлечение хешей SHA256:

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

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

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

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

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

{
  "action": {
    "function": {
      "type": "addFilePreventionRules",
      "assets": ["selector": "execution-tenant"],
      "params": {
        "files": "${[alert.ScannedFiles[] | select(any(.DetectionTechnologies[] == \"SB\"; .)) | .Hashes | map(.Value)] | flatten}"
      }
    }
  }
}

Разбор:

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

9.4.2. Извлечение путей к файлам

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

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

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

[incident.Alerts[].Observables[] | select(.Type == "fileFullName") | .Value]

Пример из плейбука, который мы разбирали ранее:

([incident.Alerts[] | .Observables[]? | select(.Type == "fileFullName" and (.Value | contains("update.exe"))) | .Value][0] // "")

Разбор:

9.4.3. Извлечение IP-адресов

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

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

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

[incident.Alerts[].Observables[] | select(.Type == "ip") | .Value]

Пример из документации ([KL] "Playbook for checking external IP addresses"):

[incident.Alerts[] | .Observables[] | {"type": .Type, "value": .Value} | select(.type == "ip" and (.value | test("^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.|127.)") | not))]

Разбор:

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

9.4.4. Извлечение имён процессов

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

[alert.OriginalEvents[] | .DestinationProcessName]

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

[incident.Alerts[].OriginalEvents[] | .DestinationProcessName]

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

[alert.OriginalEvents[] | [select(.DestinationProcessName != null and .DestinationProcessName != "")][] | .DestinationProcessName]

Разбор:

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


9.5. Глобальные правила (selector: execution-tenant)

Некоторые действия (например, addFilePreventionRules) могут применяться не к конкретным хостам, а ко всему тенанту. Для этого используется специальный селектор.

9.5.1. Как использовать selector

Вместо jq-выражения в параметре assets указывается объект с селектором:

{
  "assets": {
    "selector": "execution-tenant"
  }
}

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

Используйте selector: execution-tenant, когда нужно применить правило ко всем хостам в тенанте, а не к конкретным активам из алерта/инцидента.

Типичные сценарии:

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

{
  "action": {
    "function": {
      "type": "addFilePreventionRules",
      "assets": {
        "selector": "execution-tenant"
      },
      "params": {
        "files": "${[alert.ScannedFiles[] | select(any(.DetectionTechnologies[] == \"SB\"; .)) | .Hashes | map(.Value)] | flatten}",
        "notify": true
      }
    }
  }
}

Разбор:

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


9.6. Разбор 5 самых частых действий

9.6.1. deleteFile — Удаление файла

Назначение: Удаление вредоносного файла с хоста.

Параметры:

Пример:

{
  "action": {
    "function": {
      "type": "deleteFile",
      "assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}",
      "params": {
        "path": "${alert.Observables[] | select(.Type == \"filepath\") | .Value}"
      }
    }
  },
  "onError": "continue"
}

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

9.6.2. isolateHost — Изоляция хоста

Назначение: Включение сетевой изоляции хоста (блокировка всех сетевых соединений, кроме связи с сервером управления).

Параметры:

Пример из документации ([KL] "Playbook for checking external IP addresses"):

{
  "action": {
    "function": {
      "type": "netIsolateOn",
      "assets": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | map(.ID)}",
      "params": {
        "exclusions": [],
        "exclusionsConflictBehavior": "replace",
        "isolationTimeoutSec": 28800
      }
    }
  },
  "manualApprove": {
    "timeout": "60m",
    "emailNotifications": {
      "enabled": true,
      "delay": "10m"
    }
  }
}

Разбор:

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

9.6.3. addFilePreventionRules — Создание правила запрета

Назначение: Создание правила, запрещающего запуск файлов с указанными хешами.

Параметры:

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

{
  "action": {
    "function": {
      "type": "addFilePreventionRules",
      "assets": {
        "selector": "execution-tenant"
      },
      "params": {
        "files": "${[alert.ScannedFiles[] | select(any(.DetectionTechnologies[] == \"SB\"; .)) | .Hashes | map(.Value)] | flatten}",
        "notify": true
      }
    }
  },
  "onError": "stop"
}

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

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

9.6.4. blockLDAPAccount — Блокировка учётной записи

Назначение: Блокировка учётной записи пользователя в Active Directory.

Параметры:

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

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

Разбор:

Требования:

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

9.6.5. iocsEnrichment — Обогащение через Kaspersky TIP

Назначение: Отправка наблюдаемых объектов в Kaspersky Threat Intelligence Portal для получения дополнительной информации об угрозах.

Параметры:

Пример из документации ([KL] "Playbook for checking external IP addresses"):

{
  "action": {
    "function": {
      "type": "iocsEnrichment",
      "params": {
        "fullEnrichment": true,
        "observables": "${[incident.Alerts[] | .Observables[] | {\"type\": .Type, \"value\": .Value} | select(.type == \"ip\" and (.value | test(\"^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.|127.)\") | not))] | unique_by(.value)}"
      }
    }
  },
  "onError": "stop",
  "timeout": {
    "scheduleToCloseTimeout": "24h"
  }
}

Разбор:

Требования:

Результат:

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


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

9.7.1. Выбирайте правильное действие для сценария

Сценарий

Рекомендуемое действие

Удаление вредоносного файла

deleteFile

Блокировка файла по хешу

addFilePreventionRules с selector: execution-tenant

Изоляция заражённого хоста

isolateHost с manualApprove

Блокировка учётной записи атакующего

blockLDAPAccount

Сбор доказательств для расследования

getForensics

Обогащение данных о внешних IP

iocsEnrichment

Завершение подозрительного процесса

killProcess

9.7.2. Настраивайте обработку ошибок

9.7.3. Требуйте подтверждения для опасных действий

Для деструктивных действий (изоляция хоста, блокировка учётной записи) настраивайте manualApprove:

{
  "manualApprove": {
    "timeout": "60m",
    "emailNotifications": {
      "enabled": true,
      "delay": "10m"
    }
  }
}

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

Если нужно заблокировать файл на всех хостах, используйте selector: execution-tenant:

{
  "assets": {
    "selector": "execution-tenant"
  }
}

9.7.5. Проверяйте требования к интеграциям

Перед использованием действий проверьте, что настроены необходимые интеграции:

Действие

Требования

blockLDAPAccount, unblockLDAPAccount, resetLDAPPassword

Интеграция с Active Directory

assignKasapGroup

Интеграция с KASAP

iocsEnrichment

Интеграция с Kaspersky TIP или OpenTIP

Действия KATA/KEDR

Наличие агента KES/KATA на хосте




10. Тестирование и отладка

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

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



10.1. Режим «Обучение» — безопасный тест

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

10.1.1. Как работает режим «Обучение»

  1. Плейбук находит алерт или инцидент, соответствующий триггеру.
  2. Вместо выполнения действий плейбук создаёт «Запрос на подтверждение» для аналитика.
  3. Аналитик просматривает, какие действия планировалось выполнить, и принимает решение:
    • Подтвердить — плейбук выполнит действия
    • Отклонить — запуск отменяется

10.1.2. Когда использовать режим «Обучение»

Сценарий

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

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

Режим «Обучение»

Проверка корректности триггера

Режим «Обучение»

Отладка jq-выражений в алгоритме

Режим «Обучение»

Проверка перед переводом в «Автоматический»

Режим «Обучение»

Продуктивная эксплуатация отработанного сценария

Режим «Автоматический»

Разовое расследование

Режим «Ручной»

10.1.3. Преимущества режима «Обучение»

10.1.4. Время ожидания подтверждения

Согласно официальной документации (раздел 249275), по умолчанию запрос на подтверждение действует 60 минут. Если аналитик не подтверждает запуск в течение этого времени, запрос автоматически отменяется со статусом «Истекло время подтверждения».

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


10.2. Тестовый режим (эмуляция запуска плейбука)

Согласно официальной документации (раздел 303867), тестовый режим — это способ проверки плейбука, при котором система обрабатывает выбранные алерты или инциденты, но не выполняет действия по реагированию с активами.

10.2.1. Отличие от режима «Обучение»

Характеристика

Режим «Обучение»

Тестовый режим (эмуляция)

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

Да (при срабатывании триггера)

Нет (запускается вручную)

Создание запроса на подтверждение

Да

Нет

Выполнение действий

После подтверждения — да

Никогда

Назначение

Тестирование в продуктивной среде

Отладка логики плейбука

Где сохраняются результаты

В «История реагирований» общего раздела

В «История реагирований» СВОЙСТВ плейбука

10.2.2. Роли для запуска в тестовом режиме

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

Роль

Возможность запуска

Главный администратор

Да

Аналитик 1-го уровня

Да

Аналитик 2-го уровня

Да

Администратор тенанта

Да

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

10.2.3. Процесс запуска в тестовом режиме

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

Шаг 1. Перейти в раздел Мониторинг → Плейбуки.

Шаг 2. Выбрать плейбук и нажать кнопку «Запустить в тестовом режиме».

Шаг 3. Выбрать алерт или инцидент, на котором будет выполняться эмуляция.

Шаг 4. Опционально: включить опцию «Выберите целевые объекты» для выбора конкретных активов и наблюдаемых объектов.

Шаг 5. Нажать «Запустить».

Шаг 6. Просмотреть результат в «История реагирований» свойств плейбука.

10.2.4. Критическое отличие в сохранении результатов

Важно: Согласно официальной документации (раздел 303867), результаты тестового режима сохраняются в «История реагирований» СВОЙСТВ плейбука и НЕ отображаются в общем разделе «История реагирований» (Мониторинг → История реагирований).

Это означает, что для просмотра результатов эмуляции необходимо:

  1. Открыть свойства плейбука
  2. Перейти в раздел «История реагирований» внутри свойств плейбука
  3. Просмотреть результаты там

10.2.5. Назначение тестового режима

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

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


10.3. История реагирований

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

10.3.1. Где находится «История реагирований»

В системе есть два места для просмотра истории:

Место

Путь

Что отображается

Общий раздел

Мониторинг → История реагирований

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

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

Плейбуки → [выбрать плейбук] → История реагирований

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

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

10.3.2. Структура таблицы «История реагирований»

Согласно официальной документации, таблица содержит следующие столбцы:

Столбец

Описание

Действия

Название действия по реагированию

Параметры реагирования

Параметры, переданные в действие

Начало

Дата и время начала выполнения

Конец

Дата и время завершения выполнения

ID алерта или инцидента

Ссылка на детали алерта/инцидента

Запущено

Имя пользователя, запустившего плейбук

Подтверждающий

Имя пользователя, подтвердившего запуск (скрыт по умолчанию)

Время подтверждения

Дата и время подтверждения/отклонения (скрыт по умолчанию)

Статус

Статус выполнения

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

10.3.3. Статусы выполнения

Согласно официальной документации, плейбук может находиться в одном из следующих статусов:

Статус

Описание

Ожидание подтверждения

Плейбук ожидает одобрения аналитика

В обработке

Выполнение действий в процессе

Успешно

Все действия выполнены успешно

Предупреждение

Выполнено с предупреждениями

Ошибка

Выполнено с ошибками

Прервано

Пользователь прервал выполнение

Истекло время подтверждения

Время ожидания подтверждения истекло

Отклонено

Пользователь отклонил запуск

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

10.3.4. Просмотр деталей запуска

Согласно официальной документации:

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

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


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

Согласно официальной документации (раздел 264288), пользователь может прервать выполнение плейбука, находящегося в статусе «В обработке» или «Ожидание подтверждения».

10.4.1. Как прервать выполнение

Шаг 1. Перейти в раздел Мониторинг → История реагирований.

Шаг 2. Найти плейбук в статусе «В обработке» или «Ожидание подтверждения».

Шаг 3. Нажать кнопку «Прервать».

Шаг 4. Подтвердить прерывание.

После прерывания плейбук получает статус «Прервано».

10.4.2. Когда прерывать выполнение

Сценарий

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

Плейбук выполняется слишком долго

Прервать

Обнаружена ошибка в алгоритме

Прервать

Алерт/инцидент оказался ложным

Прервать

Нужно запустить другую версию плейбука

Прервать

Плейбук успешно выполняется

Не прерывать

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


10.5. Типичные сценарии отладки

10.5.1. Сценарий 1: Плейбук не срабатывает автоматически

Симптом: Плейбук в режиме «Автоматический» не запускается при появлении алерта/инцидента.

Диагностика:

  1. Проверьте, что плейбук опубликован (не в статусе «Черновик»).
  2. Проверьте, что область действия плейбука соответствует типу объекта (алерт или инцидент).
  3. Проверьте синтаксис триггера через кнопку «Найти».
  4. Убедитесь, что алерт/инцидент соответствует условиям триггера.
  5. Проверьте, что плейбук не прерывается из-за ошибки в алгоритме.

Решение:

10.5.2. Сценарий 2: Плейбук запускается, но не выполняет действия

Симптом: Плейбук запускается, но в «История реагирований» отображается статус «Ошибка».

Диагностика:

  1. Открыть «История реагирований» и найти проблемный запуск.
  2. Нажать на статус «Ошибка» для просмотра деталей.
  3. Проверить текст ошибки.
  4. Проверить jq-выражения в алгоритме.

Типичные причины:

Решение:

10.5.3. Сценарий 3: Плейбук выполняется, но не на тех объектах

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

Диагностика:

  1. Проверить jq-выражение в параметре assets.
  2. Убедиться, что выражение извлекает правильные ID.
  3. Проверить, что используется правильный ключевой слово (alert или incident).

Типичные причины:

Решение:

10.5.4. Сценарий 4: Время подтверждения истекло

Симптом: Плейбук в режиме «Обучение» не выполняется, статус «Истекло время подтверждения».

Диагностика:

  1. Проверить, что аналитик получил уведомление о необходимости подтверждения.
  2. Проверить, что у аналитика есть необходимая роль для подтверждения.
  3. Проверить настройки email-уведомлений.

Решение:

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


10.6. Чек-лист перед переводом в продуктивную среду

Перед переводом плейбука из режима «Обучение» в «Автоматический» рекомендуется выполнить следующие проверки:

10.6.1. Проверка триггера

10.6.2. Проверка алгоритма

10.6.3. Проверка в тестовом режиме

10.6.4. Проверка в режиме «Обучение»

10.6.5. Проверка интеграций

10.6.6. Проверка ролей




11. Запуск и управление

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

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


11.1. Способы запуска плейбуков

Согласно официальной документации (раздел 249249), в Kaspersky EDR Expert существует несколько способов запуска плейбуков:

Способ

Описание

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

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

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

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

Ручной запуск для алерта/инцидента

Аналитик вручную выбирает алерт/инцидент и запускает плейбук

Для разовых операций

Запуск для выбранных объектов

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

Для точечных операций

Тестовый режим (эмуляция)

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

Для отладки

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

11.2. Ручной запуск для алерта или инцидента

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

11.2.1. Роли для ручного запуска

Согласно официальной документации, запускать плейбуки вручную могут пользователи со следующими ролями:

Роль

Возможность запуска

Главный администратор

Да

Аналитик 1-го уровня

Да

Аналитик 2-го уровня

Да

Администратор тенанта

Да

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

11.2.2. Запуск для алерта

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

Шаг 1. Перейти в раздел Мониторинг → Алерты.

Шаг 2. Найти нужный алерт и нажать на его идентификатор для открытия деталей.

Шаг 3. В панели действий выбрать пункт «Выбрать плейбук».

Шаг 4. Выбрать плейбук из списка доступных.

Шаг 5. Нажать «Запустить».

Шаг 6. Плейбук запускается, статус отображается в разделе «История реагирований» со статусом «В обработке».

11.2.3. Запуск для инцидента

Шаг 1. Перейти в раздел Мониторинг → Инциденты → XDR-инциденты.

Шаг 2. Найти нужный инцидент и нажать на его идентификатор.

Шаг 3. В панели действий выбрать «Выбрать плейбук».

Шаг 4. Выбрать плейбук из списка.

Шаг 5. Нажать «Запустить».

11.2.4. Поведение при уже запущенном плейбуке

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

Вариант

Описание

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

Подождите и запустите

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

Когда важно дождаться завершения текущего запуска

Прервать и запустить новый

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

Когда актуальна только последняя информация

Закрыть

Запуск отменяется

Когда запуск был ошибочным

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


11.3. Запуск для выбранных объектов

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

11.3.1. Требования к плейбуку

Для запуска плейбука для выбранных объектов необходимо:

  1. Плейбук должен иметь область действия «Алерт» или «Инцидент».
  2. Плейбук должен работать в режиме «Ручной».
  3. В алгоритме плейбука должны использоваться jq-выражения для обращения к входным данным через .input.assets и .input.observables.

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

11.3.2. Структура входных данных

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

{
  "input": {
    "observables": [
      {"type": "ip", "value": "127.0.0.1"},
      {"type": "ip", "value": "127.0.0.2"},
      {"type": "md5", "value": "29f975b01f762f1a6d2fe1b33b8e3e6e"}
    ],
    "assets": [
      {
        "ID": "c13a6983-0c40-4986-ab30-e85e49f98114",
        "Name": "VIM-W10-64-01",
        "Type": "host"
      }
    ]
  }
}

Ключевые особенности:

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

11.3.3. Пример jq-выражения для работы с выбранными объектами

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

${ "-ip " + ([.input.observables[] | select(.type == "ip")] | map(.value) | join(",")) }

Разбор:

Результат: -ip 127.0.0.1,127.0.0.2

11.3.4. Пример использования в действии

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

{
  "action": {
    "function": {
      "type": "executeCustomScript",
      "params": {
        "commandLine": "./script.py",
        "commandLineParameters": "${ \"-ip \" + ([.input.observables[] | select(.type == \"ip\")] | map(.value) | join(\",\")) }",
        "workingDirectory": "/folder/with/script"
      }
    }
  }
}

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

11.3.5. Критическое предупреждение

Важно: Согласно официальной документации (раздел 281686), если объекты не указаны в алгоритме плейбука через jq-выражения, они будут проигнорированы. Это означает, что даже если аналитик выбрал объекты при запуске, плейбук их не использует, если в алгоритме нет обращения к .input.assets или .input.observables.

11.3.6. Процесс запуска

Шаг 1. Создать плейбук с областью действия «Алерт» или «Инцидент» и режимом «Ручной».

Шаг 2. В алгоритме использовать jq-выражения для обращения к .input.assets и .input.observables.

Шаг 3. Перейти в раздел Мониторинг → Алерты (или Инциденты).

Шаг 4. Выбрать алерт/инцидент и нажать «Выбрать плейбук».

Шаг 5. Включить опцию «Выберите целевые объекты».

Шаг 6. Выбрать активы и наблюдаемые объекты.

Шаг 7. Нажать «Запустить».

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


11.4. Настройка ручного подтверждения

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

11.4.1. Когда использовать ручное подтверждение

Согласно официальной документации, ручное подтверждение рекомендуется для следующих действий:

Действие

Причина

Перемещение устройств в другую группу администрирования

Изменение структуры управления

Помещение файлов на карантин

Потенциальная потеря данных

Включение/выключение сетевой изоляции

Блокировка сетевых соединений

Реагирование на учётные записи через Active Directory

Блокировка пользователей

Обогащение данных

Длительные операции

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

11.4.2. Настройка в JSON-алгоритме

Согласно официальной документации, ручное подтверждение настраивается через параметр manualApprove в шаге действия.

Пример 1: Включить подтверждение (по умолчанию 60 минут)

{
  "action": {
    "function": {
      "type": "isolateHost",
      "assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}"
    }
  },
  "manualApprove": true
}

Пример 2: Настраиваемое время подтверждения

{
  "action": {
    "function": {
      "type": "isolateHost"
    }
  },
  "manualApprove": {
    "timeout": "20h"
  }
}

Пример 3: Время с минутами

{
  "manualApprove": {
    "timeout": "2h30m"
  }
}

11.4.3. Настройка email-уведомлений

Согласно официальной документации, можно настроить отправку email-уведомлений о необходимости подтверждения.

Пример 4: Включить email-уведомления

{
  "manualApprove": {
    "emailNotifications": {
      "enabled": true
    }
  }
}

Пример 5: Email-уведомление с задержкой

{
  "manualApprove": {
    "emailNotifications": {
      "enabled": true,
      "delay": "20m"
    }
  }
}

Параметры email-уведомлений:

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

11.4.4. Полный пример из документации

Согласно официальной документации ([KL] "Playbook for checking external IP addresses"), полный пример настройки ручного подтверждения:

{
  "action": {
    "function": {
      "type": "netIsolateOn",
      "assets": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | map(.ID)}",
      "params": {
        "exclusions": [],
        "exclusionsConflictBehavior": "replace",
        "isolationTimeoutSec": 28800
      }
    }
  },
  "onError": "stop",
  "timeout": {
    "scheduleToCloseTimeout": "24h"
  },
  "manualApprove": {
    "timeout": "60m",
    "emailNotifications": {
      "enabled": true,
      "delay": "10m"
    }
  }
}

Разбор:

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


11.5. Подтверждение и отклонение плейбуков

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

11.5.1. Роли для подтверждения

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

Объект подтверждения

Роли

Плейбуки

Главный администратор, Аналитик 1-го уровня, Аналитик 2-го уровня, Администратор тенанта

Действия по реагированию

Главный администратор, Подтверждающий, Администратор тенанта

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

11.5.2. Процесс подтверждения

Шаг 1. Получить уведомление в верхней части консоли OSMP или по email.

Шаг 2. Нажать на уведомление или перейти в раздел «Запросы о подтверждении».

Шаг 3. Выбрать плейбук или действие из списка.

Шаг 4. Просмотреть параметры запуска (какие действия, для каких объектов).

Шаг 5. Нажать «Одобрить» или «Отклонить».

11.5.3. Таблица «Запросы о подтверждении»

Согласно официальной документации, таблица содержит следующие столбцы:

Столбец

Описание

Время запроса

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

Срок утверждения

Дедлайн для подтверждения

Плейбук

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

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

Название действия (если подтверждается конкретное действие)

Активы

Количество активов, для которых выполняется действие

Параметры реагирования

Параметры, переданные в действие

ID алерта или инцидента

Ссылка на детали алерта/инцидента

Тенант

Тенант, к которому относится запрос

11.5.4. Поведение при истечении времени

Согласно официальной документации:

11.5.5. Подтверждение для конкретных активов

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

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

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

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


11.6. Управление версиями плейбуков

Согласно официальной документации (раздел 302860), Kaspersky EDR Expert автоматически хранит историю версий плейбуков.

11.6.1. Когда создаётся новая версия

Согласно официальной документации, новая версия создаётся автоматически в следующих случаях:

Событие

Результат

Создание плейбука

Создаётся версия 1

Сохранение изменений в существующем плейбуке

Создаётся новая версия с инкрементом номера

11.6.2. Просмотр истории версий

Согласно официальной документации, для просмотра истории версий:

Шаг 1. Перейти в раздел Мониторинг → Плейбуки.

Шаг 2. Выбрать плейбук.

Шаг 3. В правой панели нажать «История версий».

Отобразится список всех версий с датами и авторами изменений.

11.6.3. Сравнение версий

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

Процесс:

Шаг 1. Открыть историю версий плейбука.

Шаг 2. Выбрать две версии для сравнения (удерживая Ctrl или Shift).

Шаг 3. Нажать «Сравнить».

Система отобразит различия в параметрах, триггере и алгоритме.

11.6.4. Восстановление предыдущей версии

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

Процесс:

Шаг 1. Открыть историю версий плейбука.

Шаг 2. Найти нужную версию.

Шаг 3. Нажать «Восстановить».

Шаг 4. Подтвердить восстановление.

Система создаст новую версию с содержимым выбранной старой версии.

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


11.7. Изменение плейбуков

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

11.7.1. Роли для изменения

Роль

Возможность изменения

Главный администратор

Да

Администратор тенанта

Да

Администратор SOC

Да

Аналитик SOC

Да

Аналитик 1-го уровня

Да

Аналитик 2-го уровня

Да

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

11.7.2. Что можно изменить

Согласно официальной документации, можно изменить:

Параметр

Описание

Имя

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

Описание

Текстовое описание

Режим работы

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

Теги

Метки для фильтрации

Триггер

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

Алгоритм

JSON-код выполнения

playbookRunTimeout

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

Настройки наследования

Доступность в дочерних тенантах

11.7.3. Процесс изменения

Шаг 1. Перейти в раздел Мониторинг → Плейбуки.

Шаг 2. Найти плейбук и нажать «Изменить».

Шаг 3. Внести изменения в параметры, триггер или алгоритм.

Шаг 4. Нажать «Сохранить».

Система автоматически создаст новую версию плейбука.

11.7.4. Ограничения для предустановленных плейбуков [KL]

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

Операция

Доступна

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

Да

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

Да

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

Нет

Изменение имени

Нет

Удаление

Нет

Для модификации алгоритма необходимо дублировать плейбук.

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


11.8. Удаление плейбуков

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

11.8.1. Роли для удаления

Роль

Возможность удаления

Главный администратор

Да

Администратор тенанта

Да

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

11.8.2. Процесс удаления

Шаг 1. Перейти в раздел Мониторинг → Плейбуки.

Шаг 2. Найти плейбук и нажать «Удалить».

Шаг 3. Подтвердить удаление.

Плейбук получает статус «Удалено».

11.8.3. Поведение удалённых плейбуков

Согласно официальной документации:

11.8.4. Ограничения для предустановленных плейбуков [KL]

Согласно официальной документации, предустановленные плейбуки [KL] нельзя удалить.

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


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

11.9.1. Когда использовать ручной запуск

Сценарий

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

Разовое расследование конкретного инцидента

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

Тестирование плейбука на реальном объекте

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

Применение действий к выбранным объектам

Запуск для выбранных объектов

Массовая обработка типовых угроз

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

11.9.2. Когда использовать ручное подтверждение

Действие

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

Изоляция хоста

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

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

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

Удаление файла

По ситуации (если файл критичен)

Создание правила запрета

Автоматически (если сценарий отработан)

Сбор форензики

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

Обогащение данных

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

11.9.3. Управление версиями

11.9.4. Работа с выбранными объектами




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

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

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


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

Согласно официальной документации, предустановленные плейбуки — это сценарии реагирования, созданные специалистами «Лаборатории Касперского» на основе правил корреляции KUMA. Они отмечены префиксом [KL] в названии и тегом Predefined.

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

Характеристика

Описание

Автор

Лаборатория Касперского

Основа

Правила корреляции KUMA

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

Недоступно

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

Доступно

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

Доступно

Удаление

Недоступно

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

Доступно

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

Автоматически наследуются дочерними тенантами

Режим по умолчанию

Обучение

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

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

Название

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

Назначение

1

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

Алерт

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

2

[KL] P002 "Windows Event Log was cleared"

Инцидент

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

3

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

Алерт

Завершение процессов и AV-проверка

4

[KL] P004 "Sandbox Medium Detect"

Алерт

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

5

[KL] P005 "Sandbox High Detect"

Алерт

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

6

[KL] Playbook for checking external IP addresses

Инцидент

Обогащение IP через Kaspersky TIP

7

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

Инцидент

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


12.2. Требования перед использованием

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

12.2.1. Настройка обогащения событий в KUMA

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

Плейбук

Требуемое обогащение

[KL] P001

VictimUserID — идентификатор атакуемого пользователя

[KL] P002

AttackerUserID — идентификатор атакующего пользователя

[KL] P003

AttackerUserID — идентификатор атакующего пользователя

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

12.2.2. Настройка интеграций

Плейбук

Требуемая интеграция

[KL] P001

KASAP (для назначения курса обучения)

[KL] P002, [KL] P003

Active Directory (для блокировки учётных записей)

[KL] Playbook for checking external IP addresses

Kaspersky TIP или OpenTIP (для обогащения данных)

12.2.3. Настройка получения журналов событий Windows

Для работы плейбуков, анализирующих исходные события (например, [KL] P002), необходимо настроить получение журналов событий Windows в KUMA.

12.2.4. Настройка правил сегментации

Для плейбуков, работающих с инцидентами ([KL] P002, [KL] Playbook for checking external IP addresses, [KL] Playbook for isolating a device), необходимо настроить правила сегментации, которые определяют, какие алерты объединяются в инциденты.


12.3. Разбор плейбуков

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

Назначение: Предотвращение использования офисных приложений для фишинговых атак. Сценарий: заражённый документ создаёт и выполняет исполняемый файл.

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

Триггер:

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

Разбор триггера:

Алгоритм:

{
  "dslSpecVersion": "1.1.0",
  "version": "1",
  "actionSpecVersion": "1",
  "executionFlow": [
    {
      "action": {
        "function": {
          "type": "resetLDAPPassword",
          "assets": "${[ alert.Assets[] | select(.Type == \"user\") | .ID]}"
        }
      },
      "onError": "stop"
    },
    {
      "action": {
        "function": {
          "type": "assignKasapGroup",
          "assets": "${[ alert.Assets[] | select(.Type == \"user\") | .ID]}",
          "params": {
            "groupId": "SET KASAP GROUP ID"
          }
        }
      },
      "onError": "continue"
    }
  ]
}

Разбор алгоритма:

  1. Шаг 1: Сброс паролей всех пользователей из алерта через resetLDAPPassword
  2. Шаг 2: Назначение курса обучения через assignKasapGroup

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

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


12.3.2. [KL] P002 "Windows Event Log was cleared"

Назначение: Предотвращение очистки журнала событий Windows атакующим. Журнал содержит критическую телеметрию для расследования.

Область действия: Инцидент

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

Триггер:

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

Разбор триггера:

Алгоритм:

{
  "dslSpecVersion": "1.1.0",
  "version": "1",
  "actionSpecVersion": "1",
  "executionFlow": [
    {
      "action": {
        "function": {
          "type": "blockLDAPAccount",
          "assets": "${[ incident.Alerts[] | select(.OriginalEvents[] | .ExternalID == \"R050\") | .Assets[] | select(.Type == \"user\" and .IsAttacker) | .ID]}"
        }
      },
      "onError": "stop"
    }
  ]
}

Разбор алгоритма:

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

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


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

Назначение: Обнаружение и блокировка подозрительных дочерних процессов от wmiprvse.exe.

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

Триггер:

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

Алгоритм:

{
  "dslSpecVersion": "1.1.0",
  "version": "1",
  "actionSpecVersion": "1",
  "executionFlow": [
    {
      "action": {
        "function": {
          "type": "blockLDAPAccount",
          "assets": "${[ alert.Assets[] | select(.Type == \"user\" and .IsAttacker) | .ID]}"
        }
      },
      "onError": "stop"
    },
    {
      "loop": {
        "input": "${ [alert.OriginalEvents[] | [select(.DestinationProcessName != null and .DestinationProcessName != \"\")][] | .DestinationProcessName] }",
        "batchSize": 1,
        "mode": "parallel",
        "onError": "stop",
        "steps": [
          {
            "action": {
              "function": {
                "type": "killProcess",
                "assets": "${[ alert.Assets[] | select(.Type == \"host\") | .ID]}",
                "params": {
                  "path": "${ .[0] }"
                }
              }
            }
          }
        ]
      }
    },
    {
      "action": {
        "function": {
          "type": "avScan",
          "assets": "${[ alert.Assets[] | select(.Type == \"host\") | .ID]}",
          "params": {
            "scope": {
              "area": "full",
              "allowScanNetworkDrives": false
            },
            "wait": false
          }
        }
      },
      "onError": "stop"
    }
  ]
}

Разбор алгоритма:

  1. Шаг 1: Блокировка учётной записи атакующего через blockLDAPAccount
  2. Шаг 2: Завершение подозрительных процессов через killProcess в цикле:
    • input — извлекает имена процессов из исходных событий
    • batchSize: 1 — обрабатывает по одному процессу за итерацию
    • mode: "parallel" — выполняет итерации параллельно
    • .[0] — текущий элемент (имя процесса)
  3. Шаг 3: Полная антивирусная проверка через avScan:
    • area: "full" — полная проверка
    • allowScanNetworkDrives: false — не проверять сетевые диски
    • wait: false — асинхронная проверка

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

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


12.3.4. [KL] P004 "Sandbox Medium Detect"

Назначение: Создание правила блокировки для файлов, которым Sandbox назначил уровень важности «Средний».

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

Триггер:

event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)

Разбор триггера:

Алгоритм:

{
  "version": "1",
  "dslSpecVersion": "1.1.0",
  "actionsSpecVersion": "1",
  "executionFlow": [
    {
      "action": {
        "function": {
          "type": "addFilePreventionRules",
          "assets": ["selector": "execution-tenant"],
          "params": {
            "files": "${[alert.ScannedFiles[] | select(any(.DetectionTechnologies[] == \"SB\"; .)) | .Hashes | map(.Value)] | flatten}",
            "notify": true
          }
        }
      },
      "onError": "stop"
    }
  ]
}

Разбор алгоритма:

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

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


12.3.5. [KL] P005 "Sandbox High Detect"

Назначение: Создание правила блокировки для файлов, которым Sandbox назначил уровень важности «Высокий».

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

Триггер:

event.new and .Severity == "high" and any(.DetectionTechnologies[] == "SB"; .)

Алгоритм: Аналогичен P004, отличается только фильтром по .Severity == "high".

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

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


12.3.6. [KL] "Playbook for checking external IP addresses"

Назначение: Проверка внешних IP-адресов через Kaspersky TIP и изоляция хостов при высокой угрозе.

Область действия: Инцидент

Триггер:

event.new and ([ .Alerts[] | .Observables[] | select(.Value | test("^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.|127.)") | not) | .Value ] | length > 0)

Разбор триггера:

Приватные диапазоны, которые исключаются:

Алгоритм (упрощённо):

{
  "version": "1",
  "dslSpecVersion": "1.1.0",
  "actionsSpecVersion": "1",
  "playbookRunTimeout": "24h",
  "executionFlow": [
    {
      "action": {
        "function": {
          "type": "iocsEnrichment",
          "params": {
            "fullEnrichment": true,
            "observables": "${[incident.Alerts[] | .Observables[] | {\"type\": .Type, \"value\": .Value} | select(.type == \"ip\" and (.value | test(\"^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.|127.)\") | not))] | unique_by(.value)}"
          }
        },
        "onError": "stop",
        "timeout": {"scheduleToCloseTimeout": "24h"},
        "output": {"filter": "${.}", "action": "overwrite"}
      }
    },
    {
      "decision": {
        "conditions": [
          {
            "condition": "${[.details.observableData[] | select(.status == \"ok\" and .ipObservableData.ipGeneralInfo.threatScore > 80)] | length > 0}",
            "name": "Condition 1",
            "steps": [
              {
                "decision": {
                  "conditions": [
                    {
                      "condition": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | length > 0}",
                      "name": "alert has host(s)",
                      "steps": [
                        {
                          "action": {
                            "function": {
                              "type": "getForensics",
                              "assets": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | map(.ID)}",
                              "params": {
                                "processes": {"collect": true},
                                "autoruns": {"collect": false}
                              }
                            }
                          }
                        },
                        {
                          "action": {
                            "function": {
                              "type": "netIsolateOn",
                              "assets": "${incident.Alerts | map(.Assets) | flatten | map(select(.Type == \"host\")) | map(.ID)}",
                              "params": {
                                "exclusions": [],
                                "exclusionsConflictBehavior": "replace",
                                "isolationTimeoutSec": 28800
                              }
                            },
                            "manualApprove": {
                              "timeout": "60m",
                              "emailNotifications": {
                                "enabled": true,
                                "delay": "10m"
                              }
                            }
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Разбор алгоритма:

  1. Шаг 1: Обогащение внешних IP через iocsEnrichment:
    • Извлекает все внешние IP из наблюдаемых объектов инцидента
    • Отправляет их в Kaspersky TIP
    • fullEnrichment: true — запрашивать все записи
    • unique_by(.value) — оставить только уникальные IP
  2. Шаг 2: Ветвление decision:
    • Проверяет, есть ли наблюдаемые объекты с threatScore > 80
    • Если да — проверяет наличие хостов в инциденте
    • Если хосты есть — выполняет сбор форензики (getForensics) и изоляцию (netIsolateOn)
  3. Шаг 3: Изоляция хоста через netIsolateOn:
    • isolationTimeoutSec: 28800 — изоляция на 8 часов
    • manualApprove — требуется ручное подтверждение аналитика (60 минут)
    • emailNotifications — отправить email-уведомление с задержкой 10 минут

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

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


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

Назначение: Изоляция устройства после обнаружения заражённого файла.

Область действия: Инцидент

Триггер: Отсутствует (ручной запуск)

Алгоритм (упрощённо):

{
  "version": "1",
  "dslSpecVersion": "1.1.0",
  "actionsSpecVersion": "1",
  "playbookRunTimeout": "24h",
  "executionFlow": [
    {
      "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",
            "steps": [
              {
                "loop": {
                  "input": "${[(.input.observables | map(select(.type == \"md5\" or .type == \"sha256\") | select(.value != null and .value != \"\") | .value))[] as $hash | [incident.Alerts[] | .Observables[]? | select((.Type == \"md5\" or .Type == \"sha256\") and .Value == $hash and .Details != \"\")][0] | {\"path\": .Details, \"hash\":.Value}]}",
                  "steps": [
                    {
                      "decision": {
                        "conditions": [
                          {
                            "condition": "${.[0].path? | length > 0}",
                            "name": "hash with path",
                            "steps": [
                              {
                                "updateData": {
                                  "action": "merge",
                                  "filter": "${.[0]}"
                                }
                              },
                              {
                                "action": {
                                  "function": {
                                    "type": "getFile",
                                    "asset": "${([incident.Alerts[] | .Assets[]? | select(.Type == \"host\")][0].ID // (.assets[0] // \"\"))}",
                                    "params": {
                                      "path": "${.path}"
                                    }
                                  },
                                  "onError": "continue",
                                  "timeout": {"scheduleToCloseTimeout": "24h"},
                                  "output": {
                                    "action": "merge",
                                    "filter": "${{\"fileID\": (.details[0].details.file.id // null), \"scanResult\": null}}"
                                  }
                                }
                              },
                              {
                                "decision": {
                                  "conditions": [
                                    {
                                      "condition": "${.fileID != null and .fileID != \"\"}",
                                      "name": "fileID exists",
                                      "steps": [
                                        {
                                          "action": {
                                            "function": {
                                              "type": "serverScan",
                                              "params": {
                                                "file": {
                                                  "id": "${.fileID}"
                                                }
                                              }
                                            },
                                            "onError": "continue",
                                            "timeout": {"scheduleToCloseTimeout": "24h"},
                                            "output": {
                                              "action": "merge",
                                              "filter": "${{\"scanResult\": .}}"
                                            }
                                          }
                                        },
                                        {
                                          "decision": {
                                            "conditions": [
                                              {
                                                "condition": "${[.scanResult.details.scanResult.technologies[] | .result] | contains([\"Infected\"])}",
                                                "name": "infected",
                                                "steps": [
                                                  {
                                                    "action": {
                                                      "function": {
                                                        "type": "addFilePreventionRules",
                                                        "assets": ["selector": "execution-tenant"],
                                                        "params": {
                                                          "files": "${[.hash]}"
                                                        }
                                                      },
                                                      "onError": "stop",
                                                      "timeout": {"scheduleToCloseTimeout": "24h"},
                                                      "manualApprove": true
                                                    }
                                                  },
                                                  {
                                                    "updateData": {
                                                      "action": "overwrite",
                                                      "filter": "${{\"isInfected\": true}}"
                                                    }
                                                  }
                                                ]
                                              }
                                            ]
                                          }
                                        }
                                      ]
                                    }
                                  ]
                                }
                              }
                            ]
                          }
                        ]
                      }
                    }
                  ],
                  "onError": "continue",
                  "batchSize": 1,
                  "aggregate": "${.}",
                  "output": {"filter": "${{\"scanResult\": .}}"}
                }
              },
              {
                "decision": {
                  "conditions": [
                    {
                      "condition": "${.scanResult | map(.isInfected) | any}",
                      "name": "isInfected",
                      "steps": [
                        {
                          "action": {
                            "function": {
                              "type": "netIsolateOn",
                              "assets": "${.input.assets | map(select(.Type == \"host\") | .ID)}",
                              "params": {
                                "exclusions": [],
                                "exclusionsConflictBehavior": "replace",
                                "isolationTimeoutSec": 28800
                              }
                            },
                            "onError": "stop",
                            "timeout": {"scheduleToCloseTimeout": "24h"}
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Разбор алгоритма:

  1. Шаг 1: Проверка наличия входных данных (активы и наблюдаемые объекты)
  2. Шаг 2: Цикл по хешам:
    • Извлекает хеши MD5 и SHA256 из .input.observables
    • Для каждого хеша находит путь к файлу в наблюдаемых объектах инцидента
    • Получает файл с хоста через getFile
    • Проверяет файл на сервере через serverScan
    • Если обнаружена угроза (Infected):
      • Добавляет правило запрета на весь тенант через addFilePreventionRules
      • Требует ручного подтверждения (manualApprove: true)
      • Устанавливает флаг isInfected: true
  3. Шаг 3: Если хотя бы один файл заражён — изолирует все выбранные хосты через netIsolateOn

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

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


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

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

12.4.1. Процесс дублирования

Шаг 1. Перейти в раздел Мониторинг → Плейбуки.

Шаг 2. Найти предустановленный плейбук [KL].

Шаг 3. Нажать кнопку «Дублировать».

Шаг 4. Система создаст копию плейбука с новым именем (например, My P003 Custom).

Шаг 5. В копии можно изменять:

Шаг 6. Оригинальный плейбук [KL] остаётся неизменным.

12.4.2. Типичные модификации

Модификация 1: Изменение области действия в селекторе активов

Оригинал (P001):

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

Модификация (только атакуемый пользователь):

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

Модификация 2: Включение проверки сетевых дисков (P003)

Оригинал:

"params": {
  "scope": {
    "area": "full",
    "allowScanNetworkDrives": false
  }
}

Модификация:

"params": {
  "scope": {
    "area": "full",
    "allowScanNetworkDrives": true
  }
}

Модификация 3: Изменение времени изоляции

Оригинал:

"params": {
  "isolationTimeoutSec": 28800
}

Модификация (24 часа):

"params": {
  "isolationTimeoutSec": 86400
}

Модификация 4: Указание реального groupId для KASAP (P001)

Оригинал:

"params": {
  "groupId": "SET KASAP GROUP ID"
}

Модификация:

"params": {
  "groupId": "actual-kasap-group-id-from-kasap"
}

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


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

12.5.1. Когда использовать предустановленные плейбуки

Сценарий

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

Типовая угроза, описанная в [KL]

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

Требуется модификация алгоритма

Дублировать и модифицировать

Нет настроенных интеграций (AD, KASAP, TIP)

Не использовать плейбук, требующий интеграции

Специфичная инфраструктура

Дублировать и адаптировать

12.5.2. Проверка готовности к использованию

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

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

  1. Переведите плейбук в режим «Обучение» (если он не в этом режиме)
  2. Дождитесь срабатывания триггера на реальном алерте/инциденте
  3. Проверьте запрос на подтверждение — какие действия планируются, для каких объектов
  4. Подтвердите запуск и проверьте результат в «История реагирований»
  5. При необходимости дублируйте и модифицируйте плейбук

12.5.4. Отключение наследования

Если модифицированный плейбук специфичен для конкретного тенанта:

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



13. Ролевая модель и права доступа

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

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


13.1. Роли в Kaspersky EDR Expert

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

13.1.1. Список ролей

Роль

Назначение

1

Главный администратор

Полный доступ ко всем функциям системы

2

Администратор тенанта

Управление конкретным тенантом

3

Администратор SOC

Администрирование центра мониторинга безопасности

4

Аналитик SOC

Анализ инцидентов и реагирование

5

Аналитик 1-го уровня

Первичная обработка алертов

6

Аналитик 2-го уровня

Углублённый анализ инцидентов

7

Менеджер SOC

Управление процессами SOC

8

Подтверждающий

Подтверждение опасных действий

9

Аудитор

Просмотр и аудит без права изменения

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

13.2. Таблица прав доступа к плейбукам

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

13.2.1. Создание плейбуков

Роль

Возможность создания

Главный администратор

✅ Да

Администратор тенанта

✅ Да

Администратор SOC

✅ Да

Аналитик SOC

✅ Да

Аналитик 1-го уровня

✅ Да

Аналитик 2-го уровня

✅ Да

Менеджер SOC

❌ Нет

Подтверждающий

❌ Нет

Аудитор

❌ Нет

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

13.2.2. Изменение плейбуков

Роль

Возможность изменения

Главный администратор

✅ Да

Администратор тенанта

✅ Да

Администратор SOC

✅ Да

Аналитик SOC

✅ Да

Аналитик 1-го уровня

✅ Да

Аналитик 2-го уровня

✅ Да

Менеджер SOC

❌ Нет

Подтверждающий

❌ Нет

Аудитор

❌ Нет

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

13.2.3. Удаление плейбуков

Роль

Возможность удаления

Главный администратор

✅ Да

Администратор тенанта

✅ Да

Администратор SOC

❌ Нет

Аналитик SOC

❌ Нет

Аналитик 1-го уровня

❌ Нет

Аналитик 2-го уровня

❌ Нет

Менеджер SOC

❌ Нет

Подтверждающий

❌ Нет

Аудитор

❌ Нет

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

13.2.4. Ручной запуск плейбуков

Роль

Возможность запуска

Главный администратор

✅ Да

Администратор тенанта

✅ Да

Администратор SOC

❌ Нет

Аналитик SOC

❌ Нет

Аналитик 1-го уровня

✅ Да

Аналитик 2-го уровня

✅ Да

Менеджер SOC

❌ Нет

Подтверждающий

❌ Нет

Аудитор

❌ Нет

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

13.2.5. Запуск в тестовом режиме (эмуляция)

Роль

Возможность запуска

Главный администратор

✅ Да

Администратор тенанта

✅ Да

Администратор SOC

❌ Нет

Аналитик SOC

❌ Нет

Аналитик 1-го уровня

✅ Да

Аналитик 2-го уровня

✅ Да

Менеджер SOC

❌ Нет

Подтверждающий

❌ Нет

Аудитор

❌ Нет

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

13.2.6. Подтверждение плейбуков и действий

Объект подтверждения

Роли с правом подтверждения

Плейбуки

Главный администратор, Аналитик 1-го уровня, Аналитик 2-го уровня, Администратор тенанта

Действия по реагированию

Главный администратор, Подтверждающий, Администратор тенанта

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

13.3. Сводная таблица прав доступа

Роль

Создание и изменение

Удаление

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

Подтверждение опасных действий

Главный администратор

Администратор тенанта

Аналитик 1-го / 2-го уровня

Администратор SOC / Аналитик SOC

Подтверждающий

Менеджер SOC / Аудитор


ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 249267, 249268, 249270, 249272, 264272, 303867.

Ключевые выводы

  1. Только администраторы (Главный администратор и Администратор тенанта) могут удалять плейбуки.
  2. Аналитики 1-го и 2-го уровня — самая сбалансированная роль: могут создавать, запускать и подтверждать плейбуки, но не удалять их.
  3. Администратор SOC и Аналитик SOC могут настраивать плейбуки, но не могут их запускать. Если нужен запуск — назначьте роль «Аналитик 1-го уровня».
  4. Роль «Подтверждающий» создана для разделения ответственности: аналитик запускает, подтверждающий одобряет опасные действия (изоляция хоста, блокировка учётной записи).

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



13.4. Описание ролей и их назначение

13.4.1. Главный администратор

Назначение: Полный контроль над системой Kaspersky EDR Expert.

Права в контексте плейбуков:

Когда назначать:

13.4.2. Администратор тенанта

Назначение: Управление конкретным тенантом (организацией или подразделением).

Права в контексте плейбуков:

Когда назначать:

13.4.3. Администратор SOC

Назначение: Администрирование центра мониторинга безопасности.

Права в контексте плейбуков:

Когда назначать:

Особенность: Эта роль имеет ограниченную функциональность по сравнению с аналитиками. Если нужно, чтобы администратор SOC мог запускать плейбуки, рассмотрите назначение роли «Аналитик 1-го уровня» или «Аналитик 2-го уровня».

13.4.4. Аналитик SOC

Назначение: Анализ инцидентов и реагирование на угрозы.

Права в контексте плейбуков:

Когда назначать:

Особенность: Аналогично администратору SOC, эта роль не имеет прав на запуск. Если аналитику нужно запускать плейбуки, назначьте роль «Аналитик 1-го уровня» или «Аналитик 2-го уровня».

13.4.5. Аналитик 1-го уровня

Назначение: Первичная обработка алертов и инцидентов.

Права в контексте плейбуков:

Когда назначать:

Особенность: Это одна из самых сбалансированных ролей для аналитиков — позволяет создавать, запускать и подтверждать плейбуки, но не удалять их.

13.4.6. Аналитик 2-го уровня

Назначение: Углублённый анализ инцидентов и расследование сложных угроз.

Права в контексте плейбуков:

Когда назначать:

13.4.7. Менеджер SOC

Назначение: Управление процессами SOC, отчётность, координация работы аналитиков.

Права в контексте плейбуков:

Когда назначать:

Особенность: Эта роль предназначена для управленческих задач и не предполагает работу с плейбуками. Если менеджеру нужен доступ к плейбукам (например, для просмотра), назначьте роль «Аудитор».

13.4.8. Подтверждающий

Назначение: Подтверждение опасных действий по реагированию.

Права в контексте плейбуков:

Когда назначать:

Особенность: Эта роль создана специально для разделения ответственности. Например, аналитик запускает плейбук, а подтверждающий одобряет опасные действия (изоляция хоста, блокировка учётной записи).

13.4.9. Аудитор

Назначение: Просмотр и аудит без права изменения.

Права в контексте плейбуков:

Когда назначать:

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


13.5. Практические рекомендации по назначению ролей

13.5.1. Принцип минимальных привилегий

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

Примеры:

Сценарий

Рекомендуемая роль

Обоснование

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

Аудитор

Не нужно право изменения или запуска

Аналитик создаёт плейбуки, но не запускает

Аналитик SOC

Достаточно прав на создание и изменение

Аналитик создаёт и тестирует плейбуки

Аналитик 1-го уровня

Нужны права на запуск в тестовом режиме

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

Аналитик 1-го уровня или 2-го уровня

Нужны права на ручной запуск

Аналитик подтверждает опасные действия

Подтверждающий

Специализированная роль для подтверждения

Администратор управляет тенантом

Администратор тенанта

Полный контроль в рамках тенанта

Руководитель SOC

Главный администратор

Полный доступ ко всем функциям

13.5.2. Разделение ответственности

Для критических операций рекомендуется использовать разделение ответственности:

Пример 1: Изоляция хоста

Этап

Роль

Действие

1. Обнаружение угрозы

Аналитик 1-го уровня

Запуск плейбука для изоляции

2. Подтверждение изоляции

Подтверждающий

Одобрение опасного действия

3. Выполнение изоляции

Система

Автоматическое выполнение после подтверждения

Пример 2: Блокировка учётной записи

Этап

Роль

Действие

1. Обнаружение компрометации

Аналитик 2-го уровня

Запуск плейбука для блокировки

2. Подтверждение блокировки

Подтверждающий

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

3. Выполнение блокировки

Система

Автоматическое выполнение после подтверждения

13.5.3. Типовые конфигурации ролей

Конфигурация 1: Малый SOC (3-5 человек)

Пользователь

Роль

Обоснование

Руководитель SOC

Главный администратор

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

Старший аналитик

Аналитик 2-го уровня + Подтверждающий

Анализ и подтверждение

Аналитик 1

Аналитик 1-го уровня

Первичная обработка

Аналитик 2

Аналитик 1-го уровня

Первичная обработка

Конфигурация 2: Средний SOC (10-15 человек)

Пользователь

Роль

Обоснование

Руководитель SOC

Главный администратор

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

Администратор SOC

Администратор SOC

Настройка системы

Старшие аналитики (2-3 чел.)

Аналитик 2-го уровня

Углублённый анализ

Аналитики (5-7 чел.)

Аналитик 1-го уровня

Первичная обработка

Подтверждающие (2 чел.)

Подтверждающий

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

Аудитор

Аудитор

Внешний аудит

Конфигурация 3: Крупный SOC (20+ человек)

Пользователь

Роль

Обоснование

Руководитель SOC

Главный администратор

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

Администраторы тенантов (по тенантам)

Администратор тенанта

Управление тенантами

Администраторы SOC (2-3 чел.)

Администратор SOC

Настройка системы

Старшие аналитики (5-7 чел.)

Аналитик 2-го уровня

Углублённый анализ

Аналитики 1-й линии (10-15 чел.)

Аналитик 1-го уровня

Первичная обработка

Подтверждающие (3-5 чел.)

Подтверждающий

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

Менеджеры SOC (2-3 чел.)

Менеджер SOC

Управление процессами

Аудиторы (2-3 чел.)

Аудитор

Внешний аудит

13.5.4. Частые ошибки при назначении ролей

Ошибка 1: Назначение роли «Аналитик SOC» вместо «Аналитик 1-го уровня»

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

Решение: Если аналитику нужно запускать плейбуки, назначьте роль «Аналитик 1-го уровня» или «Аналитик 2-го уровня».

Ошибка 2: Назначение роли «Главный администратор» всем пользователям

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

Решение: Назначайте роль «Главный администратор» только тем, кому действительно нужен полный доступ.

Ошибка 3: Отсутствие роли «Подтверждающий»

Проблема: Аналитики сами подтверждают опасные действия, что создаёт риск ошибочных решений.

Решение: Назначьте роль «Подтверждающий» независимому специалисту или руководителю для разделения ответственности.

Ошибка 4: Назначение роли «Менеджер SOC» аналитикам

Проблема: Аналитики не имеют доступа к плейбукам вообще.

Решение: Роль «Менеджер SOC» предназначена для управленческих задач. Для аналитиков используйте «Аналитик 1-го уровня» или «Аналитик 2-го уровня».


13.6. Проверка прав доступа

13.6.1. Как проверить права пользователя

Шаг 1. Войти в Консоль OSMP под учётной записью администратора.

Шаг 2. Перейти в раздел Администрирование → Пользователи.

Шаг 3. Найти нужного пользователя и открыть его свойства.

Шаг 4. Проверить назначенные роли в разделе «Роли».

13.6.2. Как назначить роль

Шаг 1. Перейти в раздел Администрирование → Пользователи.

Шаг 2. Выбрать пользователя и нажать «Изменить».

Шаг 3. В разделе «Роли» выбрать необходимые роли.

Шаг 4. Нажать «Сохранить».

13.6.3. Как проверить доступ к плейбукам

Шаг 1. Войти в Консоль OSMP под учётной записью проверяемого пользователя.

Шаг 2. Перейти в раздел Мониторинг → Плейбуки.

Шаг 3. Проверить доступные действия:




14. Типичные ошибки и их решение

В этом разделе разберём наиболее частые ошибки, возникающие при создании и эксплуатации плейбуков в Kaspersky EDR Expert. Информация основана на официальной документации и практическом опыте команды pre-sales и AntiAPT Community.

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


14.1. Сводная таблица типичных ошибок

Ошибка

Симптом

Причина

Решение

1

Несоответствие области действия

Ошибка валидации jq-выражения

Используется alert.* в плейбуке с областью «Инцидент» (или наоборот)

Использовать ключевое слово, соответствующее области действия

2

Неправильный регистр полей

Пустой результат или ошибка

assets вместо Assets, type вместо Type

Использовать регистр из официальной документации

3

Отсутствие any() для массивов

Ошибка выполнения триггера

Сравнение с массивом без обёртки [...] | any

Обернуть выражение в [...] | any

4

Префикс в триггере

Ошибка валидации

Использование alert. или incident. в триггере

В триггере обращаться без префикса: .Severity

5

Отсутствие префикса в алгоритме

Ошибка выполнения

Обращение к .Severity вместо alert.Severity в алгоритме

В алгоритме использовать полные пути: alert.Severity

6

Тяжёлые поля в триггере

Деградация производительности

Использование OriginalEvents, Observables в триггере

Использовать лёгкие поля или выносить проверку в алгоритм

7

Пустой массив активов

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

В алерте/инциденте нет хостов или пользователей

Добавить проверку length > 0 перед действием

8

Истечение времени подтверждения

Статус «Истекло время подтверждения»

Аналитик не подтвердил запуск вовремя

Увеличить timeout или настроить email-уведомления

9

Объекты игнорируются при ручном запуске

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

В алгоритме нет обращения к .input.assets

Добавить jq-выражения для .input.assets и .input.observables

10

Синтаксические ошибки JSON

Ошибка парсинга алгоритма

Незакрытые скобки, неэкранированные кавычки

Проверить JSON через валидатор


14.2. Ошибка 1: Несоответствие области действия

Симптом

При сохранении плейбука система выдаёт ошибку валидации jq-выражения. Либо плейбук сохраняется, но не выполняется.

Причина

В плейбуке с областью действия «Алерт» используется ключевое слово incident, или наоборот.

Пример неправильного кода:

Плейбук с областью «Алерт», но в алгоритме:

incident.Alerts[].Assets[]

Решение

Использовать ключевое слово, соответствующее области действия:

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

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

Алерт

alert

Инцидент

incident

Правильный код:

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

alert.Assets[]

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

incident.Alerts[].Assets[]

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


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

Симптом

jq-выражение выполняется без ошибок, но возвращает пустой результат. Или система выдаёт ошибку «Поле не найдено».

Причина

Kaspersky EDR Expert чувствителен к регистру. Assets и assets — это разные поля.

Пример неправильного кода:

alert.assets[]
select(.type == "host")
.Observables[].value

Решение

Использовать регистр из официальной документации:

Неправильно

Правильно

alert.assets[]

alert.Assets[]

.type == "host"

.Type == "host"

.value

.Value

incident.alerts[]

incident.Alerts[]

.id

.ID

Правильный код:

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

Особый случай: операционные данные

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

.input.assets[]
.input.observables[]

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


14.4. Ошибка 3: Отсутствие any() для массивов

Симптом

Триггер не срабатывает или система выдаёт ошибку: «Ожидается булево значение, получен массив».

Причина

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

Пример неправильного кода:

.DetectionTechnologies[] == "SB"

Это выражение вернёт [false, true, false] для массива из трёх элементов, а не одно булево значение.

Решение

Обернуть выражение в [...] | any или использовать функцию any(...; ...):

Вариант 1:

[.DetectionTechnologies[] | . == "SB"] | any

Вариант 2 (более короткий):

any(.DetectionTechnologies[]; . == "SB")

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

event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)

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


14.5. Ошибка 4: Префикс в триггере

Симптом

Ошибка валидации: «Выражение не соответствует выбранной области действия».

Причина

В триггере используется префикс alert. или incident., хотя в триггере контекстом является сам алерт/инцидент, и префикс не нужен.

Пример неправильного кода:

Триггер для плейбука с областью «Алерт»:

alert.Severity == "critical"

Решение

В триггере обращаться к полям без префикса:

Правильный код:

.Severity == "critical"

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

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

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

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

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

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


14.6. Ошибка 5: Отсутствие префикса в алгоритме

Симптом

Ошибка выполнения: «Поле не найдено» или «Неизвестное ключевое слово».

Причина

В алгоритме (executionFlow) используется обращение без префикса, хотя в алгоритме нужно явно указывать alert или incident.

Пример неправильного кода:

Алгоритм плейбука с областью «Алерт»:

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

Решение

В алгоритме использовать полные пути с префиксом:

Правильный код:

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

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

{
  "action": {
    "function": {
      "type": "killProcess",
      "assets": "${[ alert.Assets[] | select(.Type == \"host\") | .ID]}"
    }
  }
}

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


14.7. Ошибка 6: Тяжёлые поля в триггере

Симптом

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

Причина

В триггере используются поля с большим объёмом данных: OriginalEvents, Observables, Extra, Alerts (для инцидентов).

Решение

Согласно официальной документации, не рекомендуется использовать эти поля в триггерах. Вместо этого:

Тяжёлое поле

Альтернатива

OriginalEvents

BaseEvents или обогащённые поля

Observables

ScannedFiles или DetectionTechnologies

Extra

Основные поля алерта/инцидента

Alerts (для инцидентов)

Агрегированные поля инцидента

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

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


14.8. Ошибка 7: Пустой массив активов

Симптом

Действие не выполняется. В «История реагирований» статус «Успешно», но действие не применено ни к одному объекту.

Причина

В алерте или инциденте нет хостов или пользователей, соответствующих фильтру. jq-выражение возвращает пустой массив [].

Пример:

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

Если в алерте нет хостов, результат будет [], и действие не применится.

Решение

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

{
  "decision": {
    "conditions": [
      {
        "condition": "${[alert.Assets[] | select(.Type == \"host\") | .ID] | length > 0}",
        "name": "has hosts",
        "steps": [
          {
            "action": {
              "function": {
                "type": "isolateHost",
                "assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}"
              }
            }
          }
        ]
      }
    ]
  }
}

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

((.input.assets // []) | length) > 0

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


14.9. Ошибка 8: Истечение времени подтверждения

Симптом

Плейбук в режиме «Обучение» или с manualApprove не выполняется. Статус в «История реагирований» — «Истекло время подтверждения».

Причина

Аналитик не подтвердил запуск в течение заданного времени (по умолчанию 60 минут).

Решение

Вариант 1: Увеличить время подтверждения

{
  "manualApprove": {
    "timeout": "4h"
  }
}

Вариант 2: Настроить email-уведомления

{
  "manualApprove": {
    "timeout": "60m",
    "emailNotifications": {
      "enabled": true,
      "delay": "10m"
    }
  }
}

Вариант 3: Назначить ответственных аналитиков

Убедиться, что у аналитиков есть необходимая роль для подтверждения (Аналитик 1-го уровня, Аналитик 2-го уровня, Администратор тенанта, Главный администратор).

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


14.10. Ошибка 9: Объекты игнорируются при ручном запуске

Симптом

Плейбук запускается вручную с выбранными объектами, но действие применяется ко всем объектам из алерта/инцидента, а не к выбранным.

Причина

В алгоритме плейбука нет обращения к .input.assets и .input.observables. Плейбук использует глобальные данные (alert.Assets[] или incident.Alerts[].Assets[]), игнорируя выбранные объекты.

Решение

Использовать jq-выражения для обращения к операционным данным:

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

${ "-ip " + ([.input.observables[] | select(.type == "ip")] | map(.value) | join(",")) }

Важно: в операционных данных используется строчный регистр (.type, .value), а не заглавный (.Type, .Value).

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


14.11. Ошибка 10: Синтаксические ошибки JSON

Симптом

Ошибка парсинга алгоритма: «Invalid JSON» или «Unexpected token».

Причина

Незакрытые скобки, неэкранированные кавычки, пропущенные запятые в JSON-коде алгоритма.

Пример неправильного кода:

{
  "action": {
    "function": {
      "type": "deleteFile",
      "assets": "${[alert.Assets[] | select(.Type == "host") | .ID]}"
    }
  }
}

Здесь кавычки внутри jq-выражения не экранированы.

Решение

Экранировать кавычки внутри jq-выражений:

Правильный код:

{
  "action": {
    "function": {
      "type": "deleteFile",
      "assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}"
    }
  }
}

Проверка JSON:


14.12. Чек-лист для самопроверки

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

Проверка синтаксиса

Проверка области действия

Проверка регистра

Проверка работы с массивами

Проверка производительности

Проверка в тестовом режиме

Проверка в режиме «Обучение»

Проверка интеграций

Проверка ролей