Плейбуки в Kaspersky EDR Expert 8.1: Полное руководство
ℹ️ Важно: Информация, приведённая в данной статье, является разработкой команды pre-sales и/или AntiAPT Community и НЕ является официальной рекомендацией вендора.
Официальная документация по разделу «Плейбуки».
Источники информации
Статья основана на следующих материалах:
Источник | Описание |
|---|---|
Официальная справка Kaspersky EDR Expert 8.1 | Разделы «Плейбуки», «Модель данных алерта», «Модель данных инцидента», «Действия по реагированию» |
KUMA Community | Статьи «Триггеры в плейбуках» и «Действия в плейбуках» (https://kb.kuma-community.ru) |
Предустановленные плейбуки [KL] | Реальные примеры алгоритмов от Лаборатории Касперского (P001–P005 и др.) |
Практический опыт | Настройка плейбуков в реальных инфраструктурах и разбор типовых ошибок |
Для кого эта статья
Статья предназначена для:
- Аналитиков SOC, которые хотят научиться создавать и читать плейбуки
- Инженеров внедрения, настраивающих Kaspersky EDR Expert у заказчиков
- Руководителей SOC, планирующих автоматизацию реагирования
Что вы получите после прочтения
После изучения материала вы сможете:
- Читать любой плейбук и понимать, что он делает (разбирать JSON и jq-выражения)
- Писать свои плейбуки с нуля — от простого условия до сложного алгоритма
- Отлаживать плейбуки, которые не работают
- Избегать типичных ошибок, на которых теряют часы новички
- Настраивать автоматическое реагирование на критические угрозы
Ограничения
- Синтаксис jq-выражений, модель данных и имена полей могут меняться между версиями Kaspersky EDR Expert. Всегда проверяйте актуальную документацию для вашей версии.
- Перед применением в продуктивной среде обязательно тестируйте плейбуки в режиме «Обучение».
1. Что такое плейбук
1.1. Определение
Плейбук (Playbook) — это объект, который реагирует на алерты или инциденты в соответствии с заданным алгоритмом. Плейбук запускает алгоритм, включающий в себя последовательность действий по реагированию, которые помогают анализировать и обрабатывать алерты или инциденты.
Вы можете запустить плейбук вручную или настроить автоматический запуск нужного плейбука. Автоматический запуск выполняется в соответствии с триггером, который вы настраиваете при создании плейбука. Триггер определяет условия, которым должен соответствовать алерт или инцидент для автоматического запуска этого плейбука.
1.2. Режимы работы плейбука
Плейбук может выполняться в одном из трёх режимов:
Режим | Как работает | Участие аналитика |
|---|---|---|
Автоматический | Плейбук автоматически запускается при обнаружении соответствующих алертов или инцидентов | Не требуется |
Обучение | Плейбук запрашивает разрешение пользователя на запуск при обнаружении соответствующих алертов или инцидентов | Требуется подтверждение |
Ручной | Плейбук можно запустить только вручную | Полный контроль |
1.3. Зачем нужны плейбуки
Плейбуки решают три ключевые задачи SOC:
Задача | Описание |
|---|---|
Скорость реагирования | Плейбук выполняет последовательность действий автоматически, сокращая время обработки алертов и инцидентов |
Стандартизация | Один и тот же тип инцидента обрабатывается одинаково, независимо от того, кто дежурит в смену |
Разгрузка аналитиков | Рутинные действия автоматизируются, и аналитик может сосредоточиться на расследовании |
1.4. Область применения
Плейбуки используются в следующих сценариях:
- Автоматическое реагирование на критические угрозы — ransomware, sandbox-детекты, компрометация учётных записей
- Автоматическое обогащение данных — отправка наблюдаемых объектов (IP, хеши, домены, URL) в Kaspersky Threat Intelligence Portal через действие
iocsEnrichmentдля получения дополнительной информации об угрозах - Ручное реагирование — аналитик выбирает инцидент и запускает плейбук
- Расследование — сбор дампов памяти, образов дисков, ключей реестра
1.5. Перечень возможностей плейбуков
Плейбуки в Kaspersky EDR Expert 8.1 предоставляют следующие возможности:
Возможность | Описание |
|---|---|
Автоматический запуск | Плейбук срабатывает по триггеру при обнаружении соответствующих алертов/инцидентов |
Ручной запуск | Аналитик сам выбирает объекты и запускает плейбук |
Триггеры на jq | Гибкая фильтрация по свойствам, активам, наблюдаемым объектам, событиям |
19 действий по реагированию | От сбора форензики до изоляции хостов и блокировки учётных записей |
Визуальный редактор | Создание алгоритмов без написания JSON вручную |
Тестовый режим | Эмуляция запуска без выполнения реальных действий |
Ручное подтверждение | Требование одобрения перед опасными действиями |
Версионирование | Автоматическое сохранение истории изменений с возможностью отката |
Наследование тенантов | Плейбуки автоматически доступны дочерним тенантам |
2. Типы плейбуков и область действия
В этом разделе разберём, какие бывают плейбуки в Kaspersky EDR Expert, как выбрать область действия и какие архитектурные ограничения нужно учитывать при проектировании сценариев реагирования.
2.1. Два типа плейбуков
В Kaspersky EDR Expert 8.1 существует два типа плейбуков: предустановленные (от Лаборатории Касперского) и пользовательские (созданные администраторами SOC).
2.1.1. Предустановленные плейбуки [KL]
Предустановленные плейбуки созданы специалистами «Лаборатории Касперского» и отмечены префиксом [KL] в названии. Они основаны на правилах корреляции KUMA и закрывают типовые сценарии реагирования на угрозы.
Список предустановленных плейбуков:
Название | Область действия | Назначение |
|---|---|---|
| Алерт | Реагирование на фишинг через офисные приложения |
| Инцидент | Блокировка учётной записи при очистке журналов Windows |
| Алерт | Завершение подозрительных процессов и AV-проверка |
| Алерт | Блокировка файлов с уровнем важности «Средний» из Sandbox |
| Алерт | Блокировка файлов с уровнем важности «Высокий» из Sandbox |
| Инцидент | Обогащение внешних IP через Kaspersky TIP и изоляция хостов |
| Инцидент | Изоляция устройства с заражённым файлом |
Особенности предустановленных плейбуков:
Операция | Доступна | Комментарий |
|---|---|---|
Просмотр | ✅ | Полная информация о триггере и алгоритме |
Изменение режима работы | ✅ | Можно переключить между Автоматическим / Обучение / Ручной |
Изменение триггера | ✅ | Можно адаптировать условие срабатывания |
Изменение алгоритма | ❌ | JSON-код алгоритма заблокирован для редактирования |
Удаление | ❌ | Предустановленные плейбуки нельзя удалить |
Дублирование | ✅ | Можно создать копию и модифицировать её |
Как модифицировать предустановленный плейбук:
Поскольку алгоритм предустановленного плейбука нельзя изменить напрямую, необходимо:
- Открыть плейбук
[KL]в Консоли OSMP (Мониторинг → Плейбуки). - Нажать кнопку «Дублировать и изменить».
- Система создаст копию плейбука с новым именем (например,
My P003 Custom). - В копии можно изменять алгоритм, триггер и все параметры.
- Оригинальный плейбук
[KL]остаётся неизменным.
💡 Рекомендация: Перед дублированием убедитесь, что настроены интеграции, необходимые для работы плейбука (Active Directory для blockLDAPAccount, Kaspersky TIP для iocsEnrichment, KASAP для assignKasapGroup).
2.1.2. Пользовательские плейбуки
Пользовательские плейбуки создаются администраторами SOC под конкретные задачи инфраструктуры. В отличие от предустановленных, они предоставляют полный контроль над всеми компонентами.
Обязательные параметры при создании пользовательского плейбука:
Параметр | Назначение |
|---|---|
Область действия | Алерт или Инцидент (определяет синтаксис jq-выражений) |
Триггер | jq-выражение, определяющее условия автоматического запуска |
Алгоритм | JSON-код, описывающий последовательность действий |
Дополнительные возможности:
- Импорт/экспорт через XDR REST API для переноса плейбуков между тенантами
- Полное управление версиями (сравнение, восстановление)
- Настройка ручного подтверждения для опасных действий
- Использование любых из 19 действий по реагированию
2.2. Область действия (критическое ограничение)
Критическое ограничение архитектуры: Область действия одного плейбука ограничена только алертами или только инцидентами. Нельзя создать плейбук, который обрабатывает оба типа объектов одновременно.
2.2.1. Как это влияет на синтаксис
Выбранная область действия определяет, какое ключевое слово используется в jq-выражениях триггера и алгоритма:
Элемент | Для области «Алерт» | Для области «Инцидент» |
|---|---|---|
Ключевое слово |
|
|
Доступ к активам |
|
|
Доступ к наблюдаемым объектам |
|
|
Доступ к событиям |
|
|
Доступ к исходным событиям |
|
|
Доступ к просканированным файлам |
|
|
2.2.2. Почему структура различается
Различие в синтаксисе связано с моделью данных:
- Алерт — самостоятельный объект. Его активы, наблюдаемые объекты и события лежат непосредственно в корне:
alert.Assets[]. - Инцидент — агрегатор нескольких алертов. У инцидента нет собственных активов — все данные находятся внутри вложенных алертов:
incident.Alerts[].Assets[].
2.2.3. Примеры для разных областей действия
Пример 1: Извлечение ID хостов
Для плейбука с областью «Алерт»:
[alert.Assets[] | select(.Type == "host") | .ID]Для плейбука с областью «Инцидент»:
[incident.Alerts[].Assets[] | select(.Type == "host") | .ID]Пример 2: Извлечение хешей SHA256
Для плейбука с областью «Алерт»:
[alert.Observables[] | select(.Type == "sha256") | .Value]Для плейбука с областью «Инцидент»:
[incident.Alerts[].Observables[] | select(.Type == "sha256") | .Value]2.2.4. Ошибка при несоответствии области действия
Если в плейбуке с областью «Алерт» использовать ключевое слово incident (или наоборот), система выдаст ошибку:
Expression does not match the selected scopeТипичные ошибки:
Область плейбука | Неправильное выражение | Правильное выражение |
|---|---|---|
Алерт |
|
|
Алерт |
|
|
Инцидент |
|
|
Инцидент |
|
|
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: Ручной запуск
- Открыть дочерний инцидент в Консоли OSMP (Мониторинг → Инциденты → XDR-инциденты).
- Нажать «Выбрать плейбук».
- Выбрать нужный плейбук из списка.
- При необходимости выбрать целевые активы и наблюдаемые объекты.
- Нажать «Запустить».
Способ 2: Настройка сегментации
Если критично, чтобы плейбук срабатывал автоматически, можно настроить сегментацию так, чтобы критичные инциденты не становились дочерними. Это требует планирования на этапе проектирования SOC.
Способ 3: Реагирование через родительский инцидент
Если плейбук работает с родительским инцидентом, его действия (например, addFilePreventionRules с selector: execution-tenant) применяются ко всем хостам в тенанте, включая дочерние. Это позволяет централизованно реагировать на угрозу.
2.4. Наследование тенантов
Плейбук принадлежит одному тенанту и автоматически наследуется всеми дочерними тенантами.
2.4.1. Как работает наследование
Событие | Результат |
|---|---|
Создан плейбук в корневом тенанте | Автоматически доступен во всех существующих дочерних тенантах |
Добавлен новый дочерний тенант | Плейбук автоматически наследуется новым тенантом |
Изменён плейбук в корневом тенанте | Изменения применяются во всех дочерних тенантах |
Дочерний тенант дублировал плейбук | Копия становится локальной и не зависит от родительской версии |
2.4.2. Как отключить наследование
Если плейбук специфичен для конкретного тенанта (например, использует уникальные интеграции, локальные скрипты или специфичные пути к файлам), наследование можно отключить:
- Открыть плейбук для создания или изменения.
- В настройках плейбука снять флажок «Наследовать дочерними тенантами».
- Сохранить изменения.
После этого плейбук будет доступен только в том тенанте, где был создан.
2.4.3. Практические рекомендации
Сценарий | Рекомендация |
|---|---|
Плейбук использует стандартные действия ( | ✅ Оставить наследование включённым |
Плейбук использует интеграцию с локальным скриптом | ❌ Отключить наследование |
Плейбук обращается к специфичному пути в файловой системе | ❌ Отключить наследование |
Плейбук использует интеграцию с 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 | Максимальное время выполнения плейбука |
|
timeouts | Политики тайм-аута для шагов | Пусто |
input | jq-выражение для преобразования входящих данных | Пусто |
output | jq-выражение для изменения вывода плейбука | Пусто |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 249267 «Создание плейбуков» и 267548 «Алгоритм плейбука».
3.3. Режимы работы плейбука
Плейбук может выполняться в одном из трёх режимов. Режим выбирается при создании плейбука и может быть изменён позже.
Режим | Как работает | Когда использовать |
|---|---|---|
Автоматический | Плейбук автоматически запускается при обнаружении алертов или инцидентов, соответствующих триггеру | Для отработанных сценариев реагирования |
Обучение | Плейбук находит соответствующие алерты/инциденты, но запрашивает разрешение пользователя на запуск | Для тестирования новых плейбуков |
Ручной | Плейбук можно запустить только вручную через интерфейс Консоли OSMP | Для специфичных расследований |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 249249 «Плейбуки».
3.3.1. Поведение при одновременном запуске (для автоматического режима)
Если плейбук в автоматическом режиме уже выполняется и появляется новый алерт/инцидент, соответствующий триггеру, можно настроить одно из трёх поведений:
Поведение | Описание |
|---|---|
Добавить в очередь (по умолчанию) | Новый запуск добавляется в очередь и выполняется после завершения текущего |
Завершить текущий и запустить новый | Текущий запуск прерывается, начинается новый |
Не запускать новые | Новый запуск не выполняется, продолжается текущий |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 249268 «Изменение плейбуков».
3.4. Алгоритм плейбука (executionFlow)
Алгоритм плейбука описывается в формате JSON и определяет последовательность шагов выполнения.
3.4.1. Структура JSON алгоритма
{
"version": "1",
"dslSpecVersion": "1.1.0",
"actionsSpecVersion": "1",
"playbookRunTimeout": "24h",
"executionFlow": [
/* шаги выполнения */
]
}Обязательные поля:
version— версия плейбукаdslSpecVersion— версия схемы DSLactionsSpecVersion— версия спецификации действийexecutionFlow— массив шагов выполнения
Опциональные поля:
playbookRunTimeout— максимальное время выполнения (по умолчанию24h, максимум48h)input— jq-выражение для преобразования входящих данныхoutput— jq-выражение для изменения вывода плейбукаtimeouts— политики тайм-аута для шагов
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».
3.4.2. Типы шагов выполнения
Массив executionFlow содержит шаги, которые выполняются в порядке, указанном в массиве. Существует пять типов шагов:
Тип шага | Назначение | Обязательные параметры |
|---|---|---|
Действие (ResponseFunction) | Выполнение действия по реагированию |
|
Цикл (Loop) | Повторение набора шагов для каждого элемента массива |
|
Параллель (Parallel) | Параллельное выполнение нескольких веток шагов |
|
Ветвление (Decision) | Условное выполнение шагов |
|
Обновление данных (UpdateData) | Сохранение промежуточных данных в операционные данные |
|
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 270357, 270351, 270352, 270354, 270355.
3.4.3. Пример: шаг типа «Действие»
Из предустановленного плейбука [KL] P003 "Suspicious child process from wmiprvse.exe" (область действия — Алерт):
{
"action": {
"function": {
"type": "blockLDAPAccount",
"assets": "${[ alert.Assets[] | select(.Type == \"user\" and .IsAttacker) | .ID]}"
}
},
"onError": "stop"
}Разбор:
type: "blockLDAPAccount"— действие блокировки учётной записи в Active Directoryassets— jq-выражение, извлекающее ID пользователей-атакующих из алертаonError: "stop"— при ошибке прервать выполнение плейбука
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».
3.4.4. Пример: шаг типа «Цикл»
Из того же плейбука [KL] P003:
{
"loop": {
"batchSize": 1,
"input": "${ [alert.OriginalEvents[] | [select(.DestinationProcessName != null and .DestinationProcessName != \"\")][] | .DestinationProcessName] }",
"mode": "parallel",
"onError": "stop",
"steps": [
{
"action": {
"function": {
"type": "killProcess",
"assets": "${[ alert.Assets[] | select(.Type == \"host\") | .ID]}",
"params": {
"path": "${ .[0] }"
}
}
}
}
]
}
}Разбор:
input— jq-выражение, извлекающее имена процессов из исходных событий алертаbatchSize: 1— обрабатывать по одному элементу за итерациюmode: "parallel"— выполнять итерации параллельно.[0]— внутри шагов цикла текущий элемент доступен через.[0]
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».
3.4.5. Пример: шаг типа «Ветвление»
Из предустановленного плейбука [KL] "Playbook for checking external IP addresses" (область действия — Инцидент):
{
"decision": {
"conditions": [
{
"condition": "${[.details.observableData[] | select(.status == \"ok\" and .ipObservableData.ipGeneralInfo.threatScore > 80)] | length > 0}",
"name": "Condition 1",
"steps": [
/* шаги, выполняемые при истинности условия */
]
}
]
}
}Разбор:
condition— jq-выражение, возвращающееtrueилиfalsename— название условия (для удобства чтения)steps— шаги, выполняемые, если условие истинно
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 318589 «[KL] Playbook for checking external IP addresses».
3.4.6. Обработка ошибок
Каждый шаг может содержать параметр onError, определяющий поведение при ошибке:
Значение | Поведение |
|---|---|
| Прервать выполнение плейбука |
| Пропустить шаг и продолжить выполнение |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».
3.5. Визуальный редактор vs JSON
Алгоритм плейбука можно создавать двумя способами:
3.5.1. Визуальный редактор
Преимущества:
- Не требует знания синтаксиса JSON
- Автоматическая проверка синтаксиса
- Подсказки по полям при вводе jq-выражений
- Наглядное отображение потока выполнения
Недостатки:
- Ограниченная гибкость по сравнению с ручным написанием JSON
- Сложность при отладке больших алгоритмов
3.5.2. Ручное написание JSON
Преимущества:
- Полный контроль над структурой
- Возможность копирования алгоритмов из других плейбуков
- Удобство при работе с системами контроля версий
Недостатки:
- Требует знания синтаксиса JSON и jq
- Риск синтаксических ошибок
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 303486 «Настройка шагов выполнения плейбука в визуальном редакторе».
3.6. Статусы плейбуков
Плейбук может находиться в одном из следующих статусов:
Статус | Описание |
|---|---|
Активный | Плейбук готов к использованию |
Черновик | Плейбук создан, но не активирован. Нельзя запустить, но можно изменить |
Удалено | Плейбук удалён. Доступен только для просмотра и копирования |
Недоступно | Плейбук использует недоступный веб-плагин или действия не по лицензии |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264606 «Таблица плейбуков».
4. Модель данных: Алерт vs Инцидент
В этом разделе разберём, как Kaspersky EDR Expert хранит информацию об угрозах, какие данные доступны в плейбуках и как правильно к ним обращаться в зависимости от контекста выполнения.
ℹ️ Источники информации:
- Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 269168 «Модель данных инцидента»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука»
- Примеры из предустановленных плейбуков [KL]
4.1. Модель данных алерта
Алерт — это объект, создаваемый правилом корреляции KUMA при обнаружении события, соответствующего условиям правила. Алерт содержит информацию об обнаруженной угрозе, включая связанные активы, наблюдаемые объекты и события.
4.1.1. Ключевые поля алерта
Согласно официальной документации (раздел 269125), алерт содержит следующие основные поля:
Поле | Тип | Описание |
|---|---|---|
| Строка | Название алерта |
| Строка | Важность алерта ( |
| Строка | Статус алерта ( |
| Строка | Источник обнаружения ( |
| Строка | Дата и время создания алерта |
| Массив | Активы, связанные с алертом (хосты, пользователи) |
| Массив | Наблюдаемые объекты (хеши, IP, URL, пути к файлам) |
| Массив | Нормализованные события |
| Массив | Исходные события |
| Массив | Просканированные файлы |
| Массив | Технологии обнаружения ( |
| Массив | Тактики MITRE ATT&CK |
| Массив | Техники MITRE ATT&CK |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта».
4.1.2. Структура элементов массива Assets
Каждый элемент массива Assets содержит информацию об активе:
Поле | Тип | Описание |
|---|---|---|
| Строка | Уникальный идентификатор актива (UUID) |
| Строка | Имя актива (имя хоста или учётной записи) |
| Строка | Тип актива ( |
| Булево | Является ли актив атакующим |
| Булево | Является ли актив жертвой |
Пример из документации ([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 содержит информацию о наблюдаемом объекте:
Поле | Тип | Описание |
|---|---|---|
| Строка | Тип наблюдаемого объекта ( |
| Строка | Значение наблюдаемого объекта |
| Строка | Дополнительные сведения (например, путь к файлу для хеша) |
Пример из документации ([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), инцидент содержит следующие основные поля:
Поле | Тип | Описание |
|---|---|---|
| Строка | Название инцидента |
| Строка | Важность инцидента ( |
| Строка | Приоритет инцидента |
| Строка | Статус инцидента |
| Строка | Дата и время создания инцидента |
| Массив | Алерты, входящие в инцидент |
ℹ️ Источник: Официальная справка 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:
Данные | Правильное обращение | Неправильное обращение |
|---|---|---|
Активы инцидента |
|
|
Наблюдаемые объекты инцидента |
|
|
Базовые события инцидента |
|
|
Исходные события инцидента |
|
|
Просканированные файлы инцидента |
|
|
Пример из документации ([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), в плейбуке используются три типа данных:
Тип данных | Обращение | Доступ | Назначение |
|---|---|---|---|
Глобальные |
| Только чтение | Содержат информацию об алерте или инциденте |
Операционные |
| Чтение и запись | Передаются между шагами алгоритма |
Локальные | В рамках шага | Чтение и запись | Ограничены одним шагом |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».
4.3.1. Глобальные данные
Определение из документации:
«Глобальные данные содержат информацию об алерте или инциденте. Доступны только для чтения на любом шаге.»
Как обращаться:
- Для плейбука с областью действия «Алерт»:
alert.Assets[],alert.Observables[],alert.Severity - Для плейбука с областью действия «Инцидент»:
incident.Alerts[],incident.Severity,incident.Priority
Особенности:
- Доступны на любом шаге алгоритма
- Нельзя изменить через плейбук
- Ключевые слова
alertиincidentиспользуются без точки в начале
Пример из документации ([KL] P003):
[ alert.Assets[] | select(.Type == "user" and .IsAttacker) | .ID]ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука» и 271611 «[KL] P003».
4.3.2. Операционные данные
Определение из документации:
«Операционные данные передаются между шагами алгоритма. Обращение через контекст .input.»
Как обращаться:
- Через префикс
.input:.input.hashes,.input.hostIds,.input.assets
Особенности:
- Создаются и изменяются шагами
updateData - Доступны на любом шаге после сохранения
- В операционных данных имена полей задаются разработчиком плейбука
Пример из документации ([KL] "Playbook for isolating a device where an infected file is detected"):
{
"decision": {
"conditions": [
{
"condition": "${((.input.assets // []) | length) > 0 and ([.input.observables[] | select(.type == \"md5\" or .type == \"sha256\" and .value != null and .value != \"\")] | length) > 0}",
"name": "has input data"
}
]
}
}В этом примере используются операционные данные .input.assets и .input.observables, которые передаются плейбуку при ручном запуске с выбором целевых объектов.
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 324933 «[KL] Playbook for isolating a device where an infected file is detected».
4.3.3. Локальные данные
Локальные данные ограничены одним шагом выполнения. Они создаются через параметр input шага и преобразуются в операционные данные через параметр output.
Пример из документации ([KL] P003) — шаг Loop:
{
"loop": {
"input": "${ [alert.OriginalEvents[] | [select(.DestinationProcessName != null and .DestinationProcessName != \"\")][] | .DestinationProcessName] }",
"steps": [
{
"action": {
"function": {
"type": "killProcess",
"params": {
"path": "${ .[0] }"
}
}
}
}
]
}
}В этом примере:
inputшага loop — jq-выражение, возвращающее массив имён процессов- Внутри шагов цикла текущий элемент доступен через
.[0](локальные данные)
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271611 «[KL] P003».
4.4. Контекст выполнения: триггер vs алгоритм
Согласно официальной документации (раздел 273327), синтаксис обращения к данным зависит от того, где пишется jq-выражение — в триггере или в алгоритме.
4.4.1. В триггере плейбука
Определение из документации:
«Триггер плейбука — это фильтр, позволяющий выбрать алерты или инциденты, для которых необходимо запустить плейбук. Фильтр применяется к каждому объекту (алерту или инциденту) индивидуально.»
Контекст триггера — это сам алерт или инцидент, поэтому обращение идёт без префикса:
Примеры из документации:
Триггер плейбука [KL] P001 (область «Алерт»):
[.OriginalEvents[] | .ExternalID == "R350"] | anyТриггер плейбука [KL] P002 (область «Инцидент»):
[.Alerts[] | .OriginalEvents[] | .ExternalID == "R050"] | anyТриггер плейбука [KL] P004 (область «Алерт»):
event.new and .Severity == "medium" and any(.DetectionTechnologies[] == "SB"; .)ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, разделы 271609–271772 (предустановленные плейбуки [KL]).
4.4.2. В алгоритме плейбука (executionFlow)
Определение из документации:
«Алгоритм плейбука описывается в формате JSON и состоит из шагов выполнения.»
В алгоритме используются полные пути с ключевыми словами alert или incident:
Пример из документации ([KL] P002):
[ incident.Alerts[] | select(.OriginalEvents[] | .ExternalID == "R050") | .Assets[] | select(.Type == "user" and .IsAttacker) | .ID]ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271609 «[KL] P002».
4.4.3. Сравнительная таблица
Контекст | Обращение к важности | Обращение к активам | Обращение к наблюдаемым объектам |
|---|---|---|---|
Триггер (алерт) |
|
|
|
Триггер (инцидент) |
|
|
|
Алгоритм (алерт) |
|
|
|
Алгоритм (инцидент) |
|
|
|
4.5. Визуальная шпаргалка
┌─────────────────────────────────────────────────────────────┐
│ ПЛЕЙБУК (Playbook) │
├─────────────────────────────────────────────────────────────┤
│ ТРИГГЕР │
│ Контекст: сам алерт/инцидент │
│ Обращение: .Severity, .Name, .Alerts[], .Assets[] │
│ (без префикса alert. или incident.) │
├─────────────────────────────────────────────────────────────┤
│ АЛГОРИТМ (executionFlow) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ГЛОБАЛЬНЫЕ ДАННЫЕ (read-only) │ │
│ │ Для алерта: alert.Assets[] │ │
│ │ alert.Observables[] │ │
│ │ alert.Severity │ │
│ │ Для инцидента: incident.Alerts[].Assets[] │ │
│ │ incident.Alerts[].Observables[] │ │
│ │ incident.Severity │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ОПЕРАЦИОННЫЕ ДАННЫЕ (read/write) │ │
│ │ .input.hashes │ │
│ │ .input.hostIds │ │
│ │ .input.assets │ │
│ │ (обновляются через updateData) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ЛОКАЛЬНЫЕ ДАННЫЕ (в рамках шага) │ │
│ │ .[0] — текущий элемент в цикле │ │
│ │ . — текущий контекст │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Шаги: action → decision → loop → parallel → updateData │
└─────────────────────────────────────────────────────────────┘5. Чувствительность к регистру (КРИТИЧНО)
В этом разделе разберём, почему регистр символов критически важен в jq-выражениях плейбуков, какие ошибки возникают при неправильном регистре и как их избежать.
ℹ️ Источники информации:
- Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука»
- Примеры из предустановленных плейбуков [KL] (разделы 271609–324934)
- Практический опыт команды pre-sales и AntiAPT Community
5.1. Почему регистр имеет значение
Согласно официальной документации (раздел 267548), jq-выражения в плейбуках чувствительны к регистру символов. Это означает, что Assets и assets — это два разных поля, и система обрабатывает их по-разному.
Причина: Модель данных Kaspersky EDR Expert использует строгую типизацию с фиксированными именами полей. Имена полей в модели данных алерта и инцидента зафиксированы в документации и не могут быть изменены.
Критически важно: Даже одна буква в неправильном регистре приведёт к ошибке выполнения плейбука или к тому, что jq-выражение вернёт пустой результат.
5.2. Примеры ошибок из-за регистра
5.2.1. Ошибка 1: Неправильный регистр ключевого слова
Неправильно:
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)] | flatten5.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.observables[] |
Базовые события |
| alert.baseEvents[] |
Исходные события |
| alert.originalEvents[] |
Просканированные файлы |
| alert.scannedFiles[] |
Технологии обнаружения |
| alert.detectionTechnologies[] |
Тактики MITRE |
| alert.mitretactics[] |
Техники MITRE |
| alert.mitretechniques[] |
Важность |
| alert.severity |
Имя |
| alert.name |
Статус |
| alert.status |
Источник обнаружения |
| alert.detectSource |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269125 «Модель данных алерта».
5.3.2. Для инцидентов (incident)
Поле | Правильное написание | Неправильные варианты |
|---|---|---|
Алерты инцидента |
| incident.alerts[], Incident.Alerts[] |
Активы через алерты |
| incident.Alerts[].assets[] |
Наблюдаемые через алерты |
| incident.Alerts[].observables[] |
Важность инцидента |
| incident.severity |
Приоритет инцидента |
| incident.priority |
Имя инцидента |
| incident.name |
Статус инцидента |
| incident.status |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 269168 «Модель данных инцидента».
5.3.3. Для элементов массивов
Поле | Правильное написание | Неправильные варианты |
|---|---|---|
Тип актива |
| .type, .TYPE |
Значение наблюдаемого |
| .value, .VALUE |
ID актива |
| .id, .Id |
Имя актива |
| .name |
Является ли атакующим |
| .isAttacker, .isattacker |
Является ли жертвой |
| .isVictim |
Дополнительные сведения |
| .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 система автоматически показывает подсказки с правильными именами полей:
- Начните вводить
alert.→ появится список полей с правильным регистром - Начните вводить
incident.→ появится список полей с правильным регистром - Начните вводить
"(кавычку) → появится список допустимых значений для полей
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 303486 «Настройка шагов выполнения плейбука в визуальном редакторе».
5.5.2. Копируйте примеры из документации
Вместо того чтобы писать имена полей по памяти, копируйте их из:
- Официальной документации (разделы 269125, 269168)
- Предустановленных плейбуков [KL] (разделы 271609–324934)
- Этой статьи (таблицы 5.3.1–5.3.3)
5.5.3. Проверяйте регистр при возникновении ошибок
Если плейбук не работает или возвращает пустой результат:
- Проверьте, что все имена полей написаны с правильным регистром
- Сравните с таблицами 5.3.1–5.3.3
- Убедитесь, что в глобальных данных используется заглавный регистр, а в операционных — строчный (если следуете соглашению)
5.5.4. Создайте шпаргалку для команды
Распечатайте или сохраните таблицы 5.3.1–5.3.3 как шпаргалку для аналитиков SOC. Это сократит количество ошибок при создании плейбуков.
6. Этап 1. Создание плейбука в интерфейсе
В этом разделе разберём, как создать плейбук в Консоли OSMP: какие роли необходимы, какие шаги нужно выполнить, какие параметры настроить и как сохранить результат.
ℹ️ Источники информации:
- Официальная справка Kaspersky EDR Expert 8.1, раздел 249267 «Создание плейбуков»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 264606 «Таблица плейбуков»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 249268 «Изменение плейбуков»
6.1. Необходимые роли
Для создания плейбука пользователь должен обладать одной из следующих ролей в Kaspersky EDR Expert:
Роль | Возможность создания |
|---|---|
Главный администратор | ✅ Да |
Администратор тенанта | ✅ Да |
Администратор SOC | ✅ Да |
Аналитик SOC | ✅ Да |
Аналитик 1-го уровня | ✅ Да |
Аналитик 2-го уровня | ✅ Да |
Менеджер SOC | ❌ Нет |
Подтверждающий | ❌ Нет |
Аудитор | ❌ Нет |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 249267 «Создание плейбуков».
💡 Рекомендация: Если в вашей организации действует принцип минимальных привилегий, назначайте роль «Аналитик 1-го уровня» или «Аналитик 2-го уровня» только тем сотрудникам, которые действительно создают плейбуки. Остальным аналитикам достаточно роли «Аудитор» для просмотра.
6.2. Пошаговая инструкция создания
Согласно официальной документации, процесс создания плейбука состоит из следующих шагов:
Шаг 1. Открытие мастера создания
- Войдите в Консоль OSMP под учётной записью с необходимой ролью.
- Перейдите в раздел Мониторинг → Плейбуки.
- Нажмите кнопку «Создать».
Откроется мастер создания плейбука с тремя основными областями:
┌─────────────────────────────────────────────────────────────┐
│ МАСТЕР СОЗДАНИЯ ПЛЕЙБУКА │
├────────────────────┬────────────────────────────────────────┤
│ │ │
│ НАВИГАЦИЯ │ РАБОЧАЯ ОБЛАСТЬ │
│ │ │
│ • Параметры │ (зависит от выбранного пункта) │
│ • Триггер │ │
│ • Алгоритм │ │
│ │ │
│ │ │
├────────────────────┴────────────────────────────────────────┤
│ [ Сохранить как черновик ] [ Опубликовать ] │
└─────────────────────────────────────────────────────────────┘Шаг 2. Настройка параметров плейбука
В разделе «Параметры» заполните обязательные поля:
Поле | Описание | Требования |
|---|---|---|
Имя | Название плейбука | Уникально в рамках тенанта |
Область действия | Тип объекта | 🔘 Алерт / 🔘 Инцидент |
Режим работы | Способ запуска | 🔘 Автоматический / 🔘 Обучение / 🔘 Ручной |
Версия | Версия плейбука | Минимум 1 символ |
dslSpecVersion | Версия схемы DSL | Минимум 1 символ |
actionsSpecVersion | Версия спецификации действий | Минимум 1 символ |
Дополнительные поля:
- Описание — текстовое описание плейбука (опционально)
- Теги — до 30 тегов для фильтрации (опционально)
- playbookRunTimeout — максимальное время выполнения (по умолчанию
24h, максимум48h)
ℹ️ Источник: Официальная справка 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: Визуальный редактор
- Используйте интерфейс drag-and-drop
- Добавляйте шаги через кнопку «+»
- Настраивайте каждый шаг в правой панели
Способ 2: Ручное написание JSON
- Переключитесь в режим редактирования 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. Наследование тенантов
При создании плейбука можно настроить, будет ли он наследоваться дочерними тенантами.
Как работает наследование
Настройка | Результат |
|---|---|
Наследование включено (по умолчанию) | Плейбук автоматически доступен во всех существующих и будущих дочерних тенантах |
Наследование отключено | Плейбук доступен только в том тенанте, где был создан |
Когда отключать наследование
Сценарий | Рекомендация |
|---|---|
Плейбук использует стандартные действия ( | Оставить наследование |
Плейбук использует интеграцию с локальным скриптом | Отключить наследование |
Плейбук обращается к специфичному пути в файловой системе | Отключить наследование |
Плейбук использует Kaspersky TIP (лицензия только в корневом тенанте) | Отключить наследование |
💡 Подробнее про наследование — в Разделе 2.4.
6.5. Статусы плейбуков
После создания плейбук получает один из статусов:
Статус | Описание | Доступные действия |
|---|---|---|
Активный | Плейбук готов к использованию | Запуск, изменение, удаление |
Черновик | Плейбук создан, но не активирован | Изменение, публикация, удаление. Запуск невозможен |
Удалено | Плейбук удалён | Просмотр, копирование. Изменение и запуск невозможны |
Недоступно | Плейбук использует недоступный веб-плагин или действия не по лицензии | Просмотр. Запуск и изменение невозможны |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264606 «Таблица плейбуков».
Переходы между статусами
[Создание] → Черновик → [Публикация] → Активный
↓
[Удаление] → Удалено
[Создание] → Черновик → [Удаление] → Удалено
Любой статус → [Потеря лицензии/веб-плагина] → Недоступно6.6. Таблица плейбуков
После создания плейбук появляется в общей таблице плейбуков (Мониторинг → Плейбуки). Таблица содержит следующие столбцы:
Столбец | Описание |
|---|---|
Имя | Название плейбука (кликабельно — открывает детали) |
Область действия | Алерт или Инцидент |
Режим работы | Автоматический / Обучение / Ручной |
Статус | Активный / Черновик / Удалено / Недоступно |
Версия | Текущая версия плейбука |
Тенант | Тенант, которому принадлежит плейбук |
Теги | Теги, назначенные плейбуку |
Действия | Кнопки: Изменить, Дублировать, Удалить, Просмотреть историю |
Фильтрация и поиск
В таблице плейбуков доступны следующие фильтры:
- По имени (текстовый поиск)
- По области действия (Алерт / Инцидент)
- По режиму работы (Автоматический / Обучение / Ручной)
- По статусу (Активный / Черновик / Удалено / Недоступно)
- По тегам (до 30 тегов)
- По тенанту
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264606 «Таблица плейбуков».
7. Настройка триггера
В этом разделе разберём, как настроить триггер плейбука: что это такое, когда он срабатывает, как писать jq-выражения, какие поля нельзя использовать и как проверить корректность триггера.
ℹ️ Источники информации:
- Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 249267 «Создание плейбуков»
- Примеры из предустановленных плейбуков [KL] (разделы 271609–324934)
7.1. Что такое триггер
Согласно официальной документации (раздел 273327):
«Триггер плейбука — это фильтр, позволяющий выбрать алерты или инциденты, для которых необходимо запустить плейбук. Фильтр применяется к каждому объекту (алерту или инциденту) индивидуально.»
Ключевые характеристики триггера:
- Использует выражения языка jq (реализация gojq на языке Go)
- Применяется к каждому алерту или инциденту индивидуально
- Возвращает
true(запустить плейбук) илиfalse(не запускать) - Настраивается только для плейбуков в режимах «Автоматический» и «Обучение»
- Для плейбуков в режиме «Ручной» триггер не настраивается
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука».
7.2. Когда срабатывает триггер
Согласно официальной документации (раздел 273327), триггер проверяется при следующих событиях:
7.2.1. Создание нового алерта или инцидента
При создании нового алерта или инцидента система проверяет триггер всех плейбуков с соответствующей областью действия. Если триггер возвращает true, плейбук запускается.
7.2.2. Изменение существующего алерта
Триггер проверяется при следующих изменениях алерта:
Событие | Описание |
|---|---|
Назначение или удаление аналитика | Изменение ответственного за алерт |
Изменение статуса алерта | Переход между статусами ( |
Изменение базовых событий | Добавление или удаление связанных событий |
Связывание или удаление связи алерта с инцидентом | Присоединение алерта к инциденту или отвязка |
Изменение значения в поле | Обновление внешней ссылки |
ℹ️ Источник: Официальная справка 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Разбор:
.DetectionTechnologies[]— взять каждую технологию обнаружения| . == "SB"— проверить, равна ли она "SB"[...]— собрать результаты в массив (например,[false, false, true])| any— вернутьtrue, если хотя бы один элемент массиваtrue
Правильно (вариант 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"] | any7.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"
]
}Поле | Тип | Описание |
|---|---|---|
| Булево |
|
| Булево |
|
| Массив строк | Список операций, которые были выполнены |
ℹ️ Источник: Официальная справка 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 может содержать следующие значения:
Для алертов:
Операция | Описание |
|---|---|
| Изменение статуса на «New» |
| Повторное открытие алерта |
| Автоматическое связывание с инцидентом |
| Отвязка от инцидента |
| Назначение аналитика |
| Удаление аналитика |
Для инцидентов:
Операция | Описание |
|---|---|
| Изменение статуса на «New» |
| Изменение приоритета |
| Объединение инцидентов |
| Назначение аналитика |
| Удаление аналитика |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука».
7.5. Ограничения: что НЕЛЬЗЯ использовать в триггерах
Согласно официальной документации (раздел 273327), не рекомендуется использовать в триггерах следующие поля из-за их большого объёма, что может привести к деградации производительности:
Поле | Причина ограничения |
|---|---|
| Очень большой объём данных (исходные события) |
| Может содержать тысячи элементов |
| Дополнительная информация, может быть огромной |
| Массив алертов может быть очень большим |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 273327 «Триггер плейбука».
7.5.1. Почему это важно
Триггер проверяется для каждого алерта или инцидента в системе. Если в триггере используются «тяжёлые» поля, система вынуждена загружать и обрабатывать большие объёмы данных для каждого объекта. Это приводит к:
- Увеличению времени проверки триггера
- Повышенной нагрузке на сервер
- Возможным задержкам в запуске плейбуков
7.5.2. Альтернативы
Вместо этого | Используйте |
|---|---|
|
|
|
|
| Основные поля алерта/инцидента |
| Агрегированные поля инцидента |
💡 Рекомендация: Если необходимо использовать «тяжёлое» поле в триггере, тщательно протестируйте производительность на реальных данных перед внедрением в продуктивную среду.
7.6. Примеры триггеров из официальной документации
Разберём реальные триггеры из предустановленных плейбуков [KL].
7.6.1. Триггер плейбука [KL] P001
Область действия: Алерт
Триггер:
[.OriginalEvents[] | .ExternalID == "R350"] | anyРазбор:
.OriginalEvents[]— пройтись по всем исходным событиям алерта| .ExternalID == "R350"— проверить, соответствует ли событие правилу корреляции R350[...] | any— вернутьtrue, если хотя бы одно событие соответствует
Назначение: Срабатывает для алертов, созданных правилом корреляции 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Разбор:
.Alerts[]— пройтись по всем алертам инцидента| .OriginalEvents[]— пройтись по всем исходным событиям каждого алерта| .ExternalID == "R050"— проверить, соответствует ли событие правилу корреляции R050[...] | any— вернутьtrue, если хотя бы одно событие в любом алерте соответствует
Назначение: Срабатывает для инцидентов, содержащих алерты от правила корреляции 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"; .)Разбор:
event.new— только для новых алертов.Severity == "medium"— важность «medium»any(.DetectionTechnologies[] == "SB"; .)— хотя бы одна технология обнаружения — Sandbox
Назначение: Срабатывает для новых алертов с важностью «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)Разбор:
event.new— только для новых инцидентов.Alerts[]— пройтись по всем алертам инцидента.Observables[]— пройтись по всем наблюдаемым объектамselect(.Value | test("^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.|127.)") | not)— оставить только те, значение которых НЕ соответствует приватным IP-диапазонам[...] | length > 0— вернутьtrue, если есть хотя бы один внешний IP
Назначение: Срабатывает для новых инцидентов, содержащих хотя бы один внешний IP-адрес.
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 318590 «[KL] Playbook for checking external IP addresses».
7.7. Проверка триггера через кнопку «Найти»
Согласно официальной документации (раздел 249267), в интерфейсе создания плейбука доступна кнопка «Найти», которая позволяет проверить корректность триггера.
Как работает кнопка «Найти»
- Введите jq-выражение в поле триггера.
- Нажмите кнопку «Найти».
- Система применит выражение ко всем существующим алертам/инцидентам (в зависимости от выбранной области действия).
- Отобразится список алертов/инцидентов, для которых триггер возвращает
true.
Что это даёт
- Проверка синтаксиса jq-выражения
- Проверка логики триггера (возвращает ли он ожидаемые объекты)
- Оценка объёма объектов, на которые сработает триггер
- Выявление ошибок до публикации плейбука
ℹ️ Источник: Официальная справка 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-документ, какие типы шагов выполнения существуют, как извлекать данные, обрабатывать ошибки и настраивать таймауты.
ℹ️ Источники информации:
- Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука»
- Официальная справка Kaspersky EDR Expert 8.1, разделы 270351–270357 (описания типов шагов)
- Примеры из предустановленных плейбуков [KL] (разделы 271609–324934)
8.1. Структура JSON алгоритма
Согласно официальной документации (раздел 267548), алгоритм плейбука описывается в формате JSON и состоит из двух основных частей:
8.1.1. Общая информация о плейбуке
{
"version": "1",
"dslSpecVersion": "1.1.0",
"actionsSpecVersion": "1",
"playbookRunTimeout": "24h",
"executionFlow": [
/* шаги выполнения */
]
}Обязательные поля:
Поле | Тип | Описание | Требования |
|---|---|---|---|
| Строка | Версия плейбука | Минимальная длина — 1 символ |
| Строка | Версия схемы DSL | Минимальная длина — 1 символ |
| Строка | Версия спецификации действий | Минимальная длина — 1 символ |
| Массив | Шаги выполнения | Минимум один шаг |
Опциональные поля:
Поле | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| Строка | Максимальное время выполнения плейбука |
|
| Строка | jq-выражение для преобразования входящих данных | Пусто |
| Строка | jq-выражение для изменения вывода плейбука | Пусто |
| Объект | Политики тайм-аута для шагов | Пусто |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 267548 «Алгоритм плейбука».
8.1.2. Массив executionFlow
Массив executionFlow содержит шаги, которые выполняются в порядке, указанном в массиве. Каждый шаг — это объект с определённой структурой в зависимости от типа шага.
Типы шагов выполнения:
Тип шага | Ключевое поле | Назначение |
|---|---|---|
Действие (ResponseFunction) |
| Выполнение действия по реагированию |
Цикл (Loop) |
| Повторение набора шагов для каждого элемента массива |
Параллель (Parallel) |
| Параллельное выполнение нескольких веток шагов |
Ветвление (Decision) |
| Условное выполнение шагов |
Обновление данных (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. Обязательные параметры
Параметр | Тип | Описание |
|---|---|---|
| Строка | Тип действия (например, |
| Строка (jq-выражение) | jq-выражение, возвращающее массив ID активов |
8.2.3. Опциональные параметры
Параметр | Тип | Описание |
|---|---|---|
| Объект | Дополнительные параметры действия (зависят от типа действия) |
| Строка | Обработка ошибок: |
| Объект | Таймаут выполнения действия |
| Объект | Изменение выходных данных через jq-выражение |
| Объект/Булево | Настройка ручного подтверждения |
ℹ️ Источник: Официальная справка 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"
}Разбор:
type: "blockLDAPAccount"— действие блокировки учётной записи в Active Directoryassets— jq-выражение извлекает ID пользователей-атакующих из алерта:alert.Assets[]— пройтись по всем активам алертаselect(.Type == "user" and .IsAttacker)— оставить только пользователей-атакующих.ID— извлечь 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]}"
}
}
}
}
]
}
}Разбор:
type: "addFilePreventionRules"— создание правила запрета на запуск файлаassets: ["selector": "execution-tenant"]— специальный селектор, применяющий правило ко всему тенанту (не jq-выражение!)params.files— jq-выражение извлекает хеши файлов, обнаруженных через Sandbox:alert.ScannedFiles[]— пройтись по всем просканированным файламselect(any(.DetectionTechnologies[] == "SB"; .))— оставить только файлы, обнаруженные через Sandbox.Hashes | map(.Value)— извлечь значения хешей| flatten— преобразовать в плоский массив
params.notify: true— отправить уведомление о создании правила
ℹ️ Источник: Официальная справка 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. Обязательные параметры
Параметр | Тип | Описание |
|---|---|---|
| Строка (jq-выражение) | jq-выражение, возвращающее массив для итерации |
| Массив | Шаги, выполняемые для каждого элемента |
8.3.3. Опциональные параметры
Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| Число | Количество элементов за одну итерацию |
|
| Строка | Режим выполнения: |
|
| Строка | Обработка ошибок: |
|
| Строка (jq-выражение) | jq-выражение для агрегирования результатов |
|
| Объект | Изменение выходных данных | Пусто |
8.3.4. Доступ к текущему элементу
Внутри шагов цикла текущий элемент (или группа элементов, если batchSize > 1) доступен через:
.[0]— первый элемент.[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] }"
}
}
}
}
]
}
}Разбор:
input— jq-выражение извлекает имена процессов из исходных событий:alert.OriginalEvents[]— пройтись по всем исходным событиямselect(.DestinationProcessName != null and .DestinationProcessName != "")— оставить только события с непустым именем процесса.DestinationProcessName— извлечь имя процесса
batchSize: 1— обрабатывать по одному процессу за итерациюmode: "parallel"— выполнять итерации параллельно.[0]— внутри шага текущий элемент (имя процесса) доступен через.[0]assets— применить действие ко всем хостам из алерта
ℹ️ Источник: Официальная справка 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. Обязательные параметры
Параметр | Тип | Описание |
|---|---|---|
| Массив | Ветки выполнения (каждая ветка — объект с |
| Строка (jq-выражение) | jq-выражение для агрегирования результатов |
8.4.3. Опциональные параметры
Параметр | Тип | Описание |
|---|---|---|
| Строка (jq-выражение) | jq-выражение для входных данных |
| Объект | Как применить выходные данные: |
| Строка |
|
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. Обязательные параметры
Параметр | Тип | Описание |
|---|---|---|
| Массив | Условия выполнения |
8.5.3. Структура условия
{
"condition": "${jq-выражение}",
"name": "название_условия",
"steps": [ /* массив шагов */ ]
}8.5.4. Особенности
- Выполняется только первое сработавшее условие (как
if-else if-else) - Условие
${true}используется как "else" (случай по умолчанию) - Можно вкладывать
decisionвнутрьdecision
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)}"
}
}
}
]
}
]
}
}
]
}
]
}
}Разбор:
- Внешнее условие проверяет, есть ли наблюдаемые объекты с
threatScore > 80 - Если да — выполняется вложенное
decision, которое проверяет наличие хостов - Если хосты есть — выполняется сбор форензики и изоляция
ℹ️ Источник: Официальная справка 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)
Параметр | Тип | Описание |
|---|---|---|
| Строка |
|
| Строка (jq-выражение) | jq-выражение для извлечения данных |
| Строка | Имя поля в |
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)
}}"
}
}Разбор:
- Сохраняет три поля в операционные данные:
filePath,hashes,assets - Каждое поле извлекается через jq-выражение из инцидента
- Дальше эти данные можно использовать как
.input.filePath,.input.hashes,.input.assets
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 270355 «Обновление данных».
8.7. Обработка ошибок
Согласно официальной документации (раздел 267548), каждый шаг может содержать параметр onError, определяющий поведение при ошибке.
8.7.1. Значения onError
Значение | Поведение |
|---|---|
| Прервать выполнение плейбука |
| Пропустить шаг и продолжить выполнение |
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"
}Значения:
- По умолчанию:
24h - Максимум:
48h - Формат: число + единица измерения (
h— часы,m— минуты,s— секунды)
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, как их классифицировать, как правильно извлекать активы и параметры для действий, и как применять глобальные правила.
ℹ️ Источники информации:
- Официальная справка Kaspersky EDR Expert 8.1, раздел 314454 «Действия по реагированию, доступные в плейбуках»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 264315 «Действия по реагированию KATA/KEDR»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 261323 «Действия по реагированию через Active Directory»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 265935 «Назначение курса обучения KASAP»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 265824 «Выполнение скриптов»
- Официальная справка Kaspersky EDR Expert 8.1, раздел 264288 «Обогащение данных через Kaspersky TIP»
- Примеры из предустановленных плейбуков [KL] (разделы 271609–324934)
9.1. Полный список действий по реагированию
Согласно официальной документации (раздел 314454), в Kaspersky EDR Expert 8.1 доступно 19 действий по реагированию, которые можно использовать в плейбуках.
9.1.1. Сводная таблица действий
№ | Действие | Тип | Назначение |
|---|---|---|---|
1 |
| KATA/KEDR | Получить файл с хоста |
2 |
| KATA/KEDR | Собрать форензику (дампы, ключи реестра, процессы) |
3 |
| KATA/KEDR | Получить ключ реестра Windows |
4 |
| KATA/KEDR | Получить метафайлы NTFS |
5 |
| KATA/KEDR | Получить дамп памяти процесса |
6 |
| KATA/KEDR | Получить образ диска |
7 |
| KATA/KEDR | Получить дамп памяти |
8 |
| KATA/KEDR | Завершить процесс |
9 |
| KATA/KEDR | Удалить файл |
10 |
| KATA/KEDR | Поместить файл на карантин |
11 |
| KATA/KEDR | Удалить файл из карантина |
12 |
| KATA/KEDR | Восстановить файл из карантина |
13 |
| KATA/KEDR | Изолировать хост (сетевая изоляция) |
14 |
| KATA/KEDR | Запустить YARA-проверку |
15 |
| KATA/KEDR | Запустить IOC-проверку |
16 |
| KATA/KEDR | Управлять службами Windows |
17 |
| KATA/KEDR | Выполнить приложение |
18 |
| KATA/KEDR | Создать правило запрета на запуск файла |
19 |
| KATA/KEDR | Удалить правило запрета |
20 |
| Active Directory | Блокировать учётную запись |
21 |
| Active Directory | Разблокировать учётную запись |
22 |
| Active Directory | Сбросить пароль учётной записи |
23 |
| KASAP | Назначить курс обучения |
24 |
| Обновление баз | Обновить антивирусные базы |
25 |
| Выполнение скриптов | Выполнить пользовательский скрипт |
26 |
| Обогащение данных | Обогатить данные через Kaspersky TIP |
27 |
| Управление объектами | Переместить устройство в другую группу администрирования |
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 314454 «Действия по реагированию, доступные в плейбуках».
9.2. Классификация действий по группам
9.2.1. Действия KATA/KEDR (19 действий)
Действия для работы с файлами, процессами, хостами и сбора форензики. Требуют наличия агента Kaspersky Endpoint Security (KES) или Kaspersky Anti Targeted Attack (KATA) на целевом хосте.
Подкатегории:
Сбор данных и форензика (7 действий):
getFile— получить файл с хостаgetForensics— собрать форензику (дампы памяти, образы дисков, ключи реестра, список процессов)getRegistryKey— получить значение ключа реестра WindowsgetNTFSMetaFiles— получить метафайлы NTFS ($MFT, $LogFile и т.д.)getProcessMemoryDump— получить дамп памяти конкретного процессаgetDiskImage— получить образ дискаgetMemoryDump— получить полный дамп оперативной памяти
Работа с файлами (4 действия):
deleteFile— удалить файл с хостаquarantineFile— поместить файл на карантинdeleteQuarantinedFile— удалить файл из карантинаrestoreQuarantinedFile— восстановить файл из карантина
Работа с процессами (1 действие):
killProcess— завершить процесс по пути или PID
Изоляция хоста (1 действие):
isolateHost— включить сетевую изоляцию хоста
Проверки (2 действия):
runYaraScan— запустить проверку по YARA-правиламrunIOCScan— запустить проверку по IOC (Indicators of Compromise)
Управление службами (1 действие):
manageServices— запустить/остановить/перезапустить службу Windows
Выполнение приложений (1 действие):
executeApplication— выполнить приложение на хосте
Правила запрета (2 действия):
addFilePreventionRules— создать правило запрета на запуск файла по хешуdeleteFilePreventionRules— удалить правило запрета
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264315 «Действия по реагированию KATA/KEDR».
9.2.2. Действия Active Directory (3 действия)
Действия для управления учётными записями в Active Directory. Требуют настроенной интеграции с Active Directory.
blockLDAPAccount— блокировать учётную запись пользователяunblockLDAPAccount— разблокировать учётную записьresetLDAPPassword— сбросить пароль учётной записи
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 261323 «Действия по реагированию через Active Directory».
9.2.3. Действие KASAP (1 действие)
Действие для назначения курсов обучения через Kaspersky Automated Security Awareness Platform (KASAP).
assignKasapGroup— назначить пользователю курс обучения по информационной безопасности
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 265935 «Назначение курса обучения KASAP».
9.2.4. Действие обновления баз (1 действие)
updateBases— инициировать обновление антивирусных баз на хосте
9.2.5. Действие выполнения скриптов (1 действие)
executeCustomScript— выполнить пользовательский скрипт (PowerShell, Bash, Python и т.д.) на хосте
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 265824 «Выполнение скриптов».
9.2.6. Действие обогащения данных (1 действие)
iocsEnrichment— отправить наблюдаемые объекты (IP, хеши, домены, URL) в Kaspersky Threat Intelligence Portal для получения дополнительной информации
Требования:
- Настроена интеграция с Kaspersky TIP или Kaspersky OpenTIP
- Лицензия на использование TIP
Поддерживаемые типы наблюдаемых объектов:
domainurlipmd5sha256
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264288 «Обогащение данных через Kaspersky TIP».
9.2.7. Действие управления объектами (1 действие)
moveDeviceToGroup— переместить устройство в другую группу администрирования
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}"
}
}
}
}Разбор:
alert.ScannedFiles[]— пройтись по всем просканированным файламselect(any(.DetectionTechnologies[] == "SB"; .))— оставить только файлы, обнаруженные через Sandbox.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] // "")Разбор:
- Извлекает путь к файлу с именем
update.exe [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))]Разбор:
- Извлекает все IP-адреса из наблюдаемых объектов инцидента
- Фильтрует только внешние IP (исключает приватные диапазоны через регулярное выражение)
- Приватные диапазоны:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.0/8
ℹ️ Источник: Официальная справка 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, когда нужно применить правило ко всем хостам в тенанте, а не к конкретным активам из алерта/инцидента.
Типичные сценарии:
- Создание правила запрета на запуск файла по хешу (чтобы файл не запустился ни на одном хосте)
- Применение YARA-правил ко всем хостам
- Глобальная блокировка IOC
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
}
}
}
}Разбор:
assets: {"selector": "execution-tenant"}— применить правило ко всему тенантуparams.files— массив хешей для блокировкиparams.notify: true— отправить уведомление о создании правила
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271772 «[KL] P004».
9.6. Разбор 5 самых частых действий
9.6.1. deleteFile — Удаление файла
Назначение: Удаление вредоносного файла с хоста.
Параметры:
assets— массив ID хостовparams.path— путь к файлу для удаления
Пример:
{
"action": {
"function": {
"type": "deleteFile",
"assets": "${[alert.Assets[] | select(.Type == \"host\") | .ID]}",
"params": {
"path": "${alert.Observables[] | select(.Type == \"filepath\") | .Value}"
}
}
},
"onError": "continue"
}Особенности:
- Требует наличия агента KES на хосте
- Файл удаляется безвозвратно
- Рекомендуется
onError: "continue", чтобы не прерывать плейбук, если файл уже удалён
9.6.2. isolateHost — Изоляция хоста
Назначение: Включение сетевой изоляции хоста (блокировка всех сетевых соединений, кроме связи с сервером управления).
Параметры:
assets— массив ID хостовparams.exclusions— список исключений (IP-адреса, с которыми разрешена связь)params.exclusionsConflictBehavior— поведение при конфликте:replaceилиmergeparams.isolationTimeoutSec— таймаут изоляции в секундах
Пример из документации ([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"
}
}
}Разбор:
isolationTimeoutSec: 28800— изоляция на 8 часов (28800 секунд)manualApprove— требуется ручное подтверждение аналитикаemailNotifications— отправить email-уведомление с задержкой 10 минут
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 318589 «[KL] Playbook for checking external IP addresses».
9.6.3. addFilePreventionRules — Создание правила запрета
Назначение: Создание правила, запрещающего запуск файлов с указанными хешами.
Параметры:
assets— массив ID хостов или{"selector": "execution-tenant"}для применения ко всему тенантуparams.files— массив хешей (MD5 или SHA256)params.notify— отправлять ли уведомление (true/false)
Пример из документации ([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"
}Особенности:
- Поддерживаются хеши MD5 и SHA256
- Рекомендуется использовать
selector: execution-tenantдля глобального применения - Рекомендуется
onError: "stop", чтобы прервать плейбук, если правило не создано
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271772 «[KL] P004».
9.6.4. blockLDAPAccount — Блокировка учётной записи
Назначение: Блокировка учётной записи пользователя в Active Directory.
Параметры:
assets— массив ID пользователей
Пример из документации ([KL] P002):
{
"action": {
"function": {
"type": "blockLDAPAccount",
"assets": "${[ incident.Alerts[] | select(.OriginalEvents[] | .ExternalID == \"R050\") | .Assets[] | select(.Type == \"user\" and .IsAttacker) | .ID]}"
}
},
"onError": "stop"
}Разбор:
- Извлекает ID пользователей-атакующих из алертов инцидента
- Фильтрует только алерты от правила корреляции R050 (очистка журналов Windows)
- Блокирует учётные записи атакующих
Требования:
- Настроена интеграция с Active Directory
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 271609 «[KL] P002».
9.6.5. iocsEnrichment — Обогащение через Kaspersky TIP
Назначение: Отправка наблюдаемых объектов в Kaspersky Threat Intelligence Portal для получения дополнительной информации об угрозах.
Параметры:
params.observables— массив наблюдаемых объектов в формате[{"type": "ip", "value": "1.2.3.4"}, ...]params.fullEnrichment— запрашивать все записи (true) или только 100 самых популярных (false)
Пример из документации ([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"
}
}Разбор:
- Извлекает все внешние IP-адреса из наблюдаемых объектов инцидента
- Отправляет их в Kaspersky TIP
fullEnrichment: true— запрашивать все записиunique_by(.value)— оставить только уникальные IP
Требования:
- Настроена интеграция с Kaspersky TIP или OpenTIP
- Лицензия на использование TIP
Результат:
- Обогащённые данные сохраняются в инциденте
- Доступны в деталях алерта/инцидента
- Можно использовать для принятия решений (например, изоляция хоста при
threatScore > 80)
ℹ️ Источник: Официальная справка Kaspersky EDR Expert 8.1, раздел 264288 «Обогащение данных через Kaspersky TIP» и 318589 «[KL] Playbook for checking external IP addresses».
9.7. Практические рекомендации
9.7.1. Выбирайте правильное действие для сценария
Сценарий | Рекомендуемое действие |
|---|---|
Удаление вредоносного файла |
|
Блокировка файла по хешу |
|
Изоляция заражённого хоста |
|
Блокировка учётной записи атакующего |
|
Сбор доказательств для расследования |
|
Обогащение данных о внешних IP |
|
Завершение подозрительного процесса |
|
9.7.2. Настраивайте обработку ошибок
- Используйте
onError: "stop"для критичных действий (блокировка учётной записи, создание правила запрета) - Используйте
onError: "continue"для некритичных действий (удаление файла, сбор форензики)
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. Проверяйте требования к интеграциям
Перед использованием действий проверьте, что настроены необходимые интеграции:
Действие | Требования |
|---|---|
| Интеграция с Active Directory |
| Интеграция с KASAP |
| Интеграция с Kaspersky TIP или OpenTIP |
Действия KATA/KEDR | Наличие агента KES/KATA на хосте |