# Правила корреляции в KUMA (CookBook)

Этакий "CookBook" по правилам корреляции в KUMA

# Типы правил корреляции

# Простое правило (simple)

<p class="callout info">**"Обновить параметры"** нужно делать в корреляторе, когда какое-либо правило меняется, чтобы подтянулись актуальные изменения в правилах в коррелятор.</p>

**Простое правило (simple)** — срабатывает при обнаружении каждого события, удовлетворяющего условиям в одном селекторе.

Типовой пример правила:

<span style="color: rgb(0,0,0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/twoimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/twoimage.png)</span>

Параметр **Наследуемые поля (Identical fields)** имеет разный смысл, в зависимости от типа правила. В простом правиле он просто перечисляет, какие поля базового события коррелятор скопирует в корреляционное событие при срабатывании правила. Этот параметр обязательный, поэтому хотя бы одно такое поле нужно задать.

Например, если простое правило срабатывает на события о сетевых атаках, в идентичных полях уместно будет перечислить поля с информацией, характеризующие атаку: адрес злоумышленника, адрес жертвы, тип атаки. Аналитику следует посмотреть, в каких полях базовых событий содержится эта информация и перечислить эти поля в Наследуемых полях.

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

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

Селектор работает как фильтр. В настройках селектора можно выбрать фильтр из существующих ресурсов или создать новый прямо в этом правиле. Также, как и в других фильтрах, можно использовать ссылки на другие фильтры в более сложных условиях. Например, можно задать условие: "Если поле события равно Х" или "Если выполняются условия фильтра Y".

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

- output — создать корреляционное событие, которое будет передано в настроенные точки назначения (обычно это хранилище), и по которому будет создано (или дополнен) алерт
- loop — переслать корреляционное событие на вход этого же коррелятора для рекурсивной обработки
- пополнить активные списки — добавить в активный список (или удалить из списка) запись на основании содержимого полей события
- обогатить корреляционное событие по словарю, по данным исходного события, константой или по шаблону, без запросов во внешние системы (т.е. такое же обогащение как в нормализаторе на коллекторе). Обогащение правилами можно задать в корреляторе отдельно, точно так же как в коллекторе

<p class="callout warning">Необходимо указывать все поля и переменные участвующие в селекторах в наследуемых полях.</p>


#### **<span style="color: rgb(22, 145, 121);"><span style="mso-bookmark: _Ref193805437;">Создание правила корреляции типа </span><span style="mso-bookmark: _Toc225510207;"><span style="mso-bookmark: _Ref193805437;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Simple</span></span></span></span>**

В качестве примера создадим простое правило корреляции для обнаружения неудачной попытки входа в веб-интерфейс <span lang="EN-US" style="mso-ansi-language: EN-US;">KUMA</span>.

Чтобы настроить правило корреляции типа <span lang="EN-US" style="mso-ansi-language: EN-US;">Simple</span>:

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите в раздел **Ресурсы** </span>**<span style="font-family: 'Arial',sans-serif; mso-ansi-language: RU;">→</span><span style="mso-ansi-language: RU;"> <span style="mso-spacerun: yes;"> </span>Правила корреляции.</span>**

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Опционально слева нажмите **Добавить папку** для создания отдельной папки под пользовательские правила.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В окне **Новая папка** укажите **Название** и нажмите **Сохранить**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/xSyimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/xSyimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В панели слева выберите созданную папку и далее нажмите **Добавить.**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/APlimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/APlimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">5.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В появившемся окне **Создание правила корреляции** на вкладке **Общие** укажите:</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Название</span>**<span style="mso-ansi-language: RU;"> правила корреляции</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Тенант</span>**

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Тип </span>**<span style="mso-ansi-language: RU;">(в нашем примере </span>**<span lang="EN-US">simple</span>**<span style="mso-ansi-language: RU;">)</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Наследуемые поля </span>**<span style="mso-ansi-language: RU;">(в нашем примере это поля </span><span lang="EN-US">DeviceAction</span><span style="mso-ansi-language: RU;">, </span><span lang="EN-US">SourceAddress</span><span style="mso-ansi-language: RU;">, </span><span lang="EN-US">SourceUserName</span><span style="mso-ansi-language: RU;"> и </span><span lang="EN-US">EventOutcome</span><span style="mso-ansi-language: RU;">).</span>

**<span style="mso-ansi-language: RU;">Наследуемые поля – </span>**<span style="mso-ansi-language: RU;">это поля базового события, которые коррелятор скопирует в корреляционное событие при срабатывании правила.</span>

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

Какие поля с полезной информацией необходимо добавить в наследуемые можно «подсмотреть» в примере события, на которое Вы планируете, чтобы срабатывало правило корреляции и создавался алерт.

<span style="mso-no-proof: yes;"> </span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Уровень важности (в нашем примере **Средний**)</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Опционально **Описание**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/0LIimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/0LIimage.png)

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Уровень важности (в нашем примере **Средний**)</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Опционально **Описание**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/Rpzimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/Rpzimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите на вкладку **Селекторы** и добавьте условия (**Добавить условие**) согласно скриншоту ниже. На вкладке **Селекторы** определяются условия, которым должны удовлетворять обрабатываемые события для срабатывания правила корреляции.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/PLximage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/PLximage.png)

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/ICrimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/ICrimage.png)

**<span style="mso-ansi-language: RU;"> </span>**

Условия можно задавать как в виде **конструктора**, так и в виде **кода**.

Какие поля и их значения необходимо использовать в качестве условий **Селектора** можно «подсмотреть» в примере события, на которое Вы планируете, чтобы срабатывало правило корреляции и создавался алерт.

Для повышения производительности более специфичные условия рекомендуется размещать выше, например, условие <span lang="EN-US" style="mso-ansi-language: EN-US;">DeviceAction</span> = ‘<span lang="EN-US" style="mso-ansi-language: EN-US;">user</span> <span lang="EN-US" style="mso-ansi-language: EN-US;">login</span>’ является более специфичным, чем условие <span lang="EN-US" style="mso-ansi-language: EN-US;">DeviceProduct</span> = ‘<span lang="EN-US" style="mso-ansi-language: EN-US;">KUMA</span>’.

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">7.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите на вкладку **Действия** и установите флажок возле параметра **В дальнейшую обработку** для отправки корреляционного события, создаваемого в результате срабатывания правила корреляции, на хранение в Хранилище**.**</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">8.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Добавьте обогащение, нажав **Добавить обогащение:**</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Укажите **Исходный тип** – **Шаблон**</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В поле **Шаблон** добавьте следующий текст:</span>

<span style="mso-ansi-language: RU;">Обнаружена неудачная попытка входа в веб-интерфейс </span><span lang="EN-US">KUMA</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">под учетной записью </span><span lang="EN-US">{{.SourceUserName}} c IP-</span><span style="mso-ansi-language: RU;">адреса </span><span lang="EN-US">{{.SourceAddress}}</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В поле **Целевое поле** укажите </span>**<span lang="EN-US">Message</span>**

<span style="mso-ansi-language: RU;">Данное обогащение является опциональным и используется для информирования аналитика какое потенциально вредоносное действие было совершено.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">9.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Нажмите **Создать**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/A2Eimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/A2Eimage.png)

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

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Выберите созданное правило корреляции и нажмите **Привязать к коррелятору**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/osaimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/osaimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В окне **Корреляторы** выберите сервис Коррелятора, к которому будет привязано правило и нажмите **ОК**.</span><span style="mso-ansi-language: RU;"> </span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/eF9image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/eF9image.png)

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

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите в **Ресурсы** </span>**<span style="font-family: 'Arial',sans-serif; mso-ansi-language: RU;">→</span><span style="mso-ansi-language: RU;"> <span style="mso-spacerun: yes;"> </span>Активные сервисы</span>**<span style="mso-ansi-language: RU;">.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Нажмите **ПКМ** на сервис Коррелятора и выберите **Обновить параметры**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/rkfimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/rkfimage.png)

Чтобы проверить корректность работы созданного правила корреляции выполните неудачную попытку входа в веб-интерфейс <span lang="EN-US" style="mso-ansi-language: EN-US;">KUMA</span>.

Для проверки, что созданное правило сработало:

<span lang="EN-US" style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light';"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите в **Алерты.**</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что в списке алертов присутствует алерт **Неудачная попытка входа в веб-интерфейс KUMA**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/W2Iimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/W2Iimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Откройте карточку алерта, нажав на алерт.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В карточке алерта в секции **Связанные события** нажмите на созданное корреляционное событие.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/WElimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/WElimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">5.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что в окне **Информация о корреляционном событии** присутствуют поля, которые при создании правила корреляции были добавлены в **Наследуемые поля:**</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">DeviceAction</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">SourceAddress</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">SourceUserName</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">EventOutcome</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что в окне **Информация о корреляционном событии** в поле </span>**<span lang="EN-US">Message</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span>**<span style="mso-ansi-language: RU;">добавлен текст согласно ранее настроенному обогащению для информирования аналитика какое потенциально вредоносное действие было совершено.</span>

# Стандартное правило (standard)

<p class="callout info">**"Обновить параметры"** нужно делать в корреляторе, когда какое-либо правило меняется, чтобы подтянулись актуальные изменения в правилах в коррелятор.</p>

<span style="color: rgb(0,0,0);">**<iframe class="align-center" height="315" src="https://www.youtube.com/embed/TauttDGugBc?si=jw05NxFfgxOuyioY" style="border: 0;" title="YouTube video player" width="560"></iframe>** </span>

**Стандартное правило (standard)** — срабатывает при достижении определенного порогового значения группы событий, которые удовлетворяют условиям селектора, полей группировки событий (на основе значений поля создается группа) и времени жизни контейнера для группы.

Если **частота срабатывания (Rate limiting)** явна не указана, то устанавливается лимит умолчанию - 100 срабатываний в секунду. При превышении лимита правило ничего не делает.

Политика хранения базовых событий (Base events keep policy) - указание, какие из базовых событий должны сохраняться в корреляционном. Возможно указать одно из значений:

- first (по умолчанию) - сохранять только первое базовое событие от каждого селектора в корреляционном событии
- last - сохранять только последнее базовое событие от каждого селектора в корреляционном событии
- all - сохранять все базовые события в корреляционном событии

Типовой пример правила (обнаружение сканирования портов, перебор портов &gt;30 назначения, от одного адреса источника и назначения в течение 60 секунд):

<span style="color: rgb(0,0,0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/a95image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/a95image.png)</span>

Другие подходящие примеры для стандартных правил:

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

Стандартные правила разбивают все анализируемые события на группы (так называемые «корзины», buckets) с совпадающими значениями полей, перечисленных в параметре **Группируемые поля (Identical fields)** и затем обрабатывает каждую группу независимо от других. Критерии срабатывания применяются отдельно в каждой такой группе. Состояние всех групп хранится в памяти коррелятора.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/scaled-1680-/9bximage.png)

**Бакет (Окно корреляции):**

<div id="bkmrk--5"></div>
1. Бакет открывается на событие из любого селектора, не важно в каком они порядке в правиле, порядок проверяется после наполнения бакета!
2. Для каждого набора Identical Fields создается свой бакет.
3. Когда событие подпадает под селектор, коррелятор смотрит, есть ли уже бакет с нужным набором полей Identical Fields, если нет - создает, если есть - событие отправляется в существующий.
4. Когда под селектор с Unique fields подпадает событие, то проверяется, есть ли уже в бакете события с таким же набором значений для Unique Fields, если есть, то событие не учитывается.

Пример для Identical Fields с полями RequestUrl и SourceAddress:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/scaled-1680-/M5dimage.png)

В более общем смысле параметр **Время жизни контейнера (Window)** определяет время жизни группы. Принцип такой:

- identical fields определяет, на какие группы разбивать события
- селекторы определяют, какие событие будут включены в группы (если событие не соответствует ни одному селектору, оно не попадет ни в одну группу)
- если событие соответствует селектору и уже есть группа с таким же набором значений идентичных полей, как в событии, событие добавляется в эту группу
- если событие соответствует селектору, но его значения идентичных полей не соответствуют ни одной группе, создается новая группа с временем жизни, заданным параметром Window
- по истечении времени жизни группы, группа удаляется
- если позже поступает новое событие с набором значений идентичных параметров группы, которой больше нет, создается новая группа и отсчет времени жизни начинается заново

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

Правило срабатывает, если группа за время жизни накапливает число событий, указанное в параметре **Порог срабатывания (Threshold)** селектора.

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/scaled-1680-/Ewpimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/Ewpimage.png)

В общих настройках стандартного правила есть еще параметр **Уникальные поля (Unique fields)**. Он не является обязательным, но он позволяет считать в группах только события с уникальными значениями выбранных полей. При добавлении событий в группу правило будет сравнивать значение уникальных полей нового события со значениями уникальных полей событий, которые уже есть в группе. Если комбинация значений уникальных полей нового событий уже встречается у одного из событий в группе, новое событие отбрасывается и в группу не попадает.

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/scaled-1680-/qt1image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/qt1image.png)

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

<div id="bkmrk--8"></div>- On first threshold — создавать корреляционное событие только после первого превышения порога, а двукратное, трехкратное и т.д. превышение порога за время жизни группы игнорировать. *Например, если при пороге 3 за 30 секунд группа накопит 10 событий, корреляционное событие все равно будет одно - после третьего накопленного события*
- On every threshold — создавать корреляционное событие после каждого превышения порога за время жизни группы. *Если группа накопит 10 событий при пороге 3, будет создано 3 корреляционных события: после 3-го, 6-го и 9-го события в группе*
- On subsequent threshold — создавать корреляционные событие при всех превышениях порога, кроме первого. *Например, при пороге 3 после 6-го, 9-го и т.д. события. Так можно по-разному реагировать на первое переполнение порога и последующие. Например, можно настроить отправлять на вход коррелятора только первое корреляционное событие, но в хранилище писать все. Или пополнять активный список только данными из первого события, а при последующих превышениях порога этого не делать, так как в последующих событиях нет новых артефактов для списка*
- On timeout — в стандартных правилах есть еще возможность настройки действий по окончании времени жизни группы. Это действие используется в связке с опцией **Recovery (Обнуление)** в настройках селектора, в каких случаях это уместно и как именно это работает рассматривается ниже. Обнуляющие селекторы можно использовать и не только с действием onTimeout.

Можно также использовать **несколько селекторов**. Например, несколько неудачных попыток брутфорса (ловится на основе сработки другого правила корреляции) и успешный вход. В общем случае правило, в котором задано несколько селекторов, срабатывает при одновременном превышении порогов во всех селекторах.

Пример правила с несколькими селекторами:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/scaled-1680-/Ofbimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/Ofbimage.png)

Можно также **рекавери правило**. Например, когда событие типа «Вредоносное ПО удалено» не обнаружено в течение 5 минут после получения события «Вредоносное ПО обнаружено».

<span style="color: rgb(0,0,0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/IDqimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/IDqimage.png)</span>

Recovery селектор (Обнуление):

1. Бакет открывается только на событие из обычного селектора, на событие из recovery-селектора бакет не открывается никогда!
2. Место нахождения селектора с recovery не имеет значения, как только в бакет попадут все нужные recovery-события бакет будет закрыт!
3. На recovery-селектор не влияет настройка фильтра Order By.
4. Если нужно, чтобы произошло событие А, и не произошло событие Б, при этом событие Б может произойти раньше А, нужно использовать активные листы, т.к. с помощью recovery-селектора такой логики не достичь (см п.1).

#### **<span style="color: rgb(22, 145, 121);"><span style="mso-bookmark: _Ref193805442;"><span style="mso-bookmark: _Ref193805314;">Создание правила корреляции типа </span></span><span style="mso-bookmark: _Toc225510208;"><span style="mso-bookmark: _Ref193805442;"><span style="mso-bookmark: _Ref193805314;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Standard</span></span></span></span></span>**

В качестве примера создадим стандартное правило корреляции для обнаружения 3 (трех) неудачных попыток входа в веб-интерфейс <span lang="EN-US" style="mso-ansi-language: EN-US;">KUMA</span>.

Чтобы настроить правило корреляции типа <span lang="EN-US" style="mso-ansi-language: EN-US;">Standard</span>:

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите в раздел **Ресурсы** </span>**<span style="font-family: 'Arial',sans-serif; mso-ansi-language: RU;">→</span><span style="mso-ansi-language: RU;"> <span style="mso-spacerun: yes;"> </span>Правила корреляции.</span>**

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В панели слева выберите ранее созданную папку для пользовательских правил корреляции и далее нажмите **Добавить.**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/efwimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/efwimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В появившемся окне **Создание правила корреляции** на вкладке **Общие** укажите:</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Название</span>**<span style="mso-ansi-language: RU;"> правила корреляции</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Тенант</span>**

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Тип </span>**<span style="mso-ansi-language: RU;">(в нашем примере </span>**<span lang="EN-US">standard</span>**<span style="mso-ansi-language: RU;">)</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Группирующие поля </span>**<span style="mso-ansi-language: RU;">(в нашем примере это поля </span><span lang="EN-US">DeviceAction</span><span style="mso-ansi-language: RU;">, </span><span lang="EN-US">SourceAddress</span><span style="mso-ansi-language: RU;">, </span><span lang="EN-US">SourceUserName</span><span style="mso-ansi-language: RU;"> и </span><span lang="EN-US">EventOutcome</span><span style="mso-ansi-language: RU;">).</span>

<span style="mso-ansi-language: RU;">Стандартные правила разбивают все поступающие события на группы («бакеты»), с совпадающими значениями полей из **Группирующих полей.** Затем каждая сформировавшаяся группа обрабатывается независимо от других. Критерии срабатывания применяются отдельно в каждой такой группе.</span>

По аналогии с **Наследуемыми полями** правил **<span lang="EN-US" style="mso-ansi-language: EN-US;">Simple</span>** значения полей, перечисленных в **Группирующих полях**, будут скопированы в корреляционное событие.

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

<span style="mso-ansi-language: RU;"> </span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/QEVimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/QEVimage.png)

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Время жизни контейнера </span>**<span style="mso-ansi-language: RU;">(в нашем примере «в течение какого периода времени мы ожидаем 3 неудачные попытки входа»)</span>

<span style="mso-ansi-language: RU;">Время жизни контейнера («бакета») в секундах. Отсчет времени начинается при создании контейнера, когда контейнер получает первое событие.</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Уникальные поля </span>**

<span style="mso-ansi-language: RU;">Не является обязательным, но позволяют реализовать более сложную логику правила корреляции. Не рассматривается в данном примере.</span>

<span style="mso-ansi-language: RU;">При добавлении событий в группу («бакет») правило будет сравнивать значение уникальных полей нового события со значениями уникальных полей событий, которые уже есть в группе. Если комбинация значений уникальных полей нового событий уже встречается у одного из событий в группе, новое событие отбрасывается и в группу не попадает.</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Политика хранения базовых событий (</span>**<span style="mso-ansi-language: RU;">в нашем примере </span>**<span lang="EN-US">all</span><span style="mso-ansi-language: RU;">)</span>**

<span style="mso-ansi-language: RU;">Позволяет определить, какие базовые события требуется поместить в корреляционное событие.</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Уровень важности</span>**<span style="mso-ansi-language: RU;"> (в нашем примере **Высокий**)</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="mso-ansi-language: RU;">Сортировать по </span>**<span style="mso-ansi-language: RU;">(в нашем примере </span>**<span lang="EN-US">Timestamp</span>**<span style="mso-ansi-language: RU;">)</span>

<span style="mso-ansi-language: RU;">Поле события, на основании которого события будут отсортированы в группе («бакете»).</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Опционально **Описание**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/W68image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/W68image.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите на вкладку **Селекторы,** укажите **Название** селектора, **Порог срабатывания селектора** (количество событий; в нашем примере мы ожидаем 3 события неудачной попытки входа) и добавьте условия (**Добавить условие**) согласно скриншоту ниже. На вкладке **Селекторы** с помощью условий определяется какие события будут включены в группы (если событие не соответствует ни одному селектору, оно не попадет ни в одну группу).</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/GIlimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/GIlimage.png)

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/MRuimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/MRuimage.png)

Условия можно задавать как в виде **конструктора**, так и в виде **кода**.

Какие поля и их значения необходимо использовать в качестве условий **Селектора** можно «подсмотреть» в примере события, на которое Вы планируете, чтобы срабатывало правило корреляции и создавался алерт.

Для повышения производительности более специфичные условия рекомендуется размещать выше, например, условие <span lang="EN-US" style="mso-ansi-language: EN-US;">DeviceAction</span> = ‘<span lang="EN-US" style="mso-ansi-language: EN-US;">user</span> <span lang="EN-US" style="mso-ansi-language: EN-US;">login</span>’ является более специфичным, чем условие <span lang="EN-US" style="mso-ansi-language: EN-US;">DeviceProduct</span> = ‘<span lang="EN-US" style="mso-ansi-language: EN-US;">KUMA</span>’.

В стандартном правиле можно добавить несколько селекторов.

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">5.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите на вкладку **Действия,** выберите триггер **На каждом срабатывании правила** (т.е. при каждых трех неудачных попытках входа будет срабатывать правило корреляции и создаваться алерт), установите флажок возле параметра **В дальнейшую обработку** для отправки корреляционного события, создаваемого в результате срабатывания правила корреляции, на хранение в Хранилище**.**</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Добавьте обогащение, нажав **Добавить обогащение:**</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Укажите **Исходный тип** – **Шаблон**</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В поле **Шаблон** добавьте следующий текст:</span>

<span style="mso-ansi-language: RU;">Обнаружено 3 (три) неудачные попытки входа в веб-интерфейс </span><span lang="EN-US">KUMA</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">под учетной записью </span><span lang="EN-US">{{.SourceUserName}} c IP-</span><span style="mso-ansi-language: RU;">адреса </span><span lang="EN-US">{{.SourceAddress}}</span><span style="mso-ansi-language: RU;"> в течение 60 секунд</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В поле **Целевое поле** укажите </span>**<span lang="EN-US">Message</span>**

<span style="mso-ansi-language: RU;">Данное обогащение является опциональным и используется для информирования аналитика какое потенциально вредоносное действие было совершено.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">7.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Нажмите **Создать**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/th0image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/th0image.png)

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

1. <span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Выберите созданное правило корреляции и нажмите **Привязать к коррелятору**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/xtqimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/xtqimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В окне **Корреляторы** выберите сервис Коррелятора, к которому будет привязано правило и нажмите **ОК**.</span>

<span style="mso-ansi-language: RU;"> </span>[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/2dKimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/2dKimage.png)

<span style="mso-ansi-language: RU; mso-no-proof: yes;"> </span>

<span style="mso-ansi-language: RU;"> </span>

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

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите в **Ресурсы** </span>**<span style="font-family: 'Arial',sans-serif; mso-ansi-language: RU;">→</span><span style="mso-ansi-language: RU;"> <span style="mso-spacerun: yes;"> </span>Активные сервисы</span>**<span style="mso-ansi-language: RU;">.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Нажмите **ПКМ** на сервис Коррелятора и выберите **Обновить параметры**.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/dqfimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/dqfimage.png)

Чтобы проверить корректность работы созданного правила корреляции выполните 3 неудачных попытки входа в веб-интерфейс <span lang="EN-US" style="mso-ansi-language: EN-US;">KUMA</span> в течение 60 секунд.

Для проверки, что созданное правило сработало:

<span lang="EN-US" style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light';"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перейдите в **Алерты.**</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что в списке алертов присутствует алерт **Обнаружено 3 (три) неудачных попытки входа в веб-интерфейс KUMA**</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/OwTimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/OwTimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Откройте карточку алерта, нажав на алерт.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В карточке алерта в секции **Связанные события** раскройте созданное корреляционное событие и далее нажмите на корреляционное событие.</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/i5iimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/i5iimage.png)

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">5.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что в окне **Информация о корреляционном событии** присутствуют поля, которые при создании правила корреляции были добавлены в **Группирующие поля:**</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">DeviceAction</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">SourceAddress</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">SourceUserName</span>

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: RU;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">EventOutcome</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что в окне **Информация о корреляционном событии** в поле </span>**<span lang="EN-US">Message</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span>**<span style="mso-ansi-language: RU;">добавлен текст согласно ранее настроенному обогащению для информирования аналитика какое потенциально вредоносное действие было совершено.</span>

<span style="mso-fareast-font-family: 'Kaspersky Sans Display Light'; mso-bidi-font-family: 'Kaspersky Sans Display Light'; mso-ansi-language: RU;"><span style="mso-list: Ignore;">7.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Убедитесь, что при раскрытии корреляционного события отображается 3 события неудачной попытки входа, которые стали триггером для срабатывания правила корреляции.</span>

<table border="0" cellpadding="0" cellspacing="0" class="MsoTableGrid" id="bkmrk-%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD-%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA" style="border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt;"><tbody><tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes; mso-yfti-lastfirstrow: yes; mso-yfti-lastrow: yes;"><td style="width: 510.2pt; border: solid #00A88E 1.5pt; mso-border-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="680"><span style="color: rgb(22, 145, 121);">Статья онлайн-справки «Правила корреляции»:</span>

<span style="color: rgb(22, 145, 121);">**[<span style="font-weight: normal;">https://support.kaspersky.ru/kuma/3.2/217783</span>](https://support.kaspersky.ru/kuma/3.2/217783)**</span>

<span style="color: rgb(22, 145, 121);"> </span>

<span style="color: rgb(22, 145, 121);">KUMA Community правила корреляции в KUMA (CookBook):</span>

<span style="color: rgb(22, 145, 121);">**[<span style="font-weight: normal;">https://kb.kuma-community.ru/books/pravila-korreliacii-v-kuma-cookbook</span>](https://kb.kuma-community.ru/books/pravila-korreliacii-v-kuma-cookbook)**</span>

<span style="color: rgb(22, 145, 121);"> </span>

<span style="color: rgb(22, 145, 121);">Видео «Работа с правилами корреляции»:</span>

<span style="color: rgb(22, 145, 121);">**[<span style="font-weight: normal;">https://rutube.ru/video/cc57b965e06574165617b37ea1d8ac96/?playlist=891489</span>](https://rutube.ru/video/cc57b965e06574165617b37ea1d8ac96/?playlist=891489)**</span>

</td></tr></tbody></table>

# Операционное правило (operational)

<p class="callout info"><span data-position="3740" data-size="34"><span data-position="855" data-size="30">**<span data-position="235" data-size="20">"Обновить параметры"</span>**<span data-position="257" data-size="127"> </span></span></span><span data-position="3740" data-size="34"><span data-position="855" data-size="30"><span data-position="257" data-size="127">нужно делать в корреляторе, когда какое-либо правило меняется, чтобы подтянулись актуальные изменения в правилах в коррелятор.</span></span></span></p>

<span style="color: rgb(0, 0, 0);">**<span data-position="3740" data-size="34"><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" class=" align-center" frameborder="0" height="315" src="https://www.youtube.com/embed/TauttDGugBc?si=jw05NxFfgxOuyioY" title="YouTube video player" width="560"></iframe>

</span>**</span>

**<span data-position="3740" data-size="34">Операционное правило (operational)</span>**<span data-position="3776" data-size="121"> — наполняет активные листы без создания корреляционного события, механика работы аналогична простому правилу корреляции. С помощью списков можно отслеживать закономерности на длительных промежутках времени. Активный список хранится в памяти коррелятора (и кешируется на диск), так что состояние списка не теряется при перезагрузке службы или сбое.</span>

<span data-position="3776" data-size="121">Наполнять список могут любые правила. Но простые и стандартные правила всегда создают корреляционные события и предупреждения. Чтобы просто наполнять список и не создавать предупреждений, предусмотрены операционные правила.  
</span>

<span data-position="3776" data-size="121">В операционном правиле доступны только две операции над списком: set и del. Операция get не имеет смысла, поскольку она призвана обогащать корреляционное событие, а операционное правило не создает таких событий.  
</span>

<span data-position="3898" data-size="230">Пример правила:</span>

<span style="color: rgb(0, 0, 0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/fBIimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/fBIimage.png)</span>

<p class="callout info"><span data-position="3898" data-size="230"><span data-position="4177" data-size="190">Если при выполнении операции set окажется, что запись с таким же ключом уже есть в списке, она будет перезаписана новым значением на основании полей нового события.  
</span></span></p>

<span data-position="3898" data-size="230"><span data-position="4177" data-size="190">При записи в активный лист, в качестве ключевого поля могут быть несколько занчений полей события, для составления комбинированного ключа, при этом в значении ключа это быдет выглядеть так: </span>*<span data-position="4368" data-size="17">поле1|поле2|поле3 </span>*<span data-position="4368" data-size="17">сравнивать с этим впоследствии можно будет только с целым ключом, а не с какой-то его частью.</span></span>

<span data-position="3898" data-size="230"><span data-position="4368" data-size="17">Атрибуты записей из активного списка можно использовать для обогащения корреляционных событий. Для этого его нужно сохранить в виде атрибута записи в активном списке операционным правилом. А затем в корреляционном правиле в разделе действий нужно будет выполнить операцию get над активным списком и записать в какое-нибудь поле корреляционного события содержимое атрибута записи из активного списка.  
</span></span>

<p class="callout warning"><span data-position="3898" data-size="230"><span data-position="4368" data-size="17">Если есть несколько служб коррелятора, использующих один и тот же ресурс списка, у каждой будет свое состояние этого списка.</span></span></p>

<span data-position="3898" data-size="230"><span data-position="4368" data-size="17">Чтобы просмотреть содержимое списка нужно открыть список активных сервисов (Active services), выбрать службу типа Correlator (поставить галочку слева) и у нее появится активная кнопка Go to active lists (Перейти в активные листы).</span></span>

<span data-position="3898" data-size="230"><span data-position="4368" data-size="17">Аналитик может экспортировать и импортировать, а также очистить содержимое списка. Аналитик также может отобразить содержимое списка, увидеть, какие в нем есть записи, когда они были созданы или обновлены, и когда у них истекает время жизни, если для списка настроено время жизни. Аналитик может вручную удалять (но не редактировать) записи.  
Каждую запись можно открыть и изучить ее дополнительные атрибуты.  
</span></span>

# Использование Листов, Списков, Таблиц

### <span>Общая информация</span>

<span>Контекстные таблицы и активные листы:</span>

- <span>живут на корреляторе;</span>
- <span>по большей части наполняются им же, реже - вручную и через API;</span>
- <span>используются для корреляционной логики и обогащения на корреляторе.</span>

<p class="callout warning"><span>Важно! Содержимое активного листа/контекстной таблицы **РАЗНОЕ** на каждом корреляторе.</span></p>

<span>Словарь / таблица - это ключ и значение, который можно задать один раз и ручками править (можно через API), этот словарь доступен в коллекторах и на корреляторах, причем он один может быть доступен сразу всем. Поле значение не обязательно использовать, можно его пустым сделать, можно "-", "0" написать туда, как удобно. Особенности словарей и таблиц:</span>

- <span>живут на ядре, но транслируются на все сервисы, где они указаны;</span>
- <span>наполняются только вручную или через API, более статичны;</span>
- <span>используются в основном для обогащения на коллекторах/корреляторах, реже для корреляционной логики.</span>

<p class="callout info"><span>Если словарь содержит более 5000 записей, тогда KUMA в веб-интерфейсе не отображает содержимое словаря. Чтобы изменить содержимое словаря, отредактируйте CSV-файл и загрузите его в KUMA.</span></p>

<p class="callout warning"><span>Важно! Содержимое словаря/таблицы **ОДИНАКОВОЕ** для всех сервисов, где он используется.</span></p>

### <span>Активный список / лист</span>

<span>Активный лист (AL) – это контейнер для данных (представляет собой структуру ключ и значение), предназначенный для быстрой записи/чтения динамических данных, доступных всем фильтрам и корреляционным правилам в рамках одного сервиса Коррелятора. Чтобы их посмотреть, нужно из активных сервисов нажать кнопку </span>**<span>Смотреть активные листы</span>**<span>.</span>

<span style="color:rgb(0,0,0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/rQfimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/rQfimage.png)</span>

Взаимодействовать с активным листом могут не только компоненты коррелятора, но и пользователи, с помощью Web-консоли и API. Пользователь KUMA имеет возможность работы с данными AL:

- выполнять поиск по именам записей (выполняться по полному вхождению указанной пользователем подстроки);
- удалить записи;
- открыть содержимое записи.

Производительность активных листов комфортан (максимальна) с десятками тысяч записей.

Активные листы работают в памяти коррелятора, также при работе активного листа используется Write-Ahead Log (WAL), который предполагает сохранение каждого изменения состояния в виде двоичного файла на жестком диске. Каждой записи журнала присваивается уникальный идентификатор, позволяющий выполнять дополнительные операции с журналом, такие как сегментация журнала и очистка. Уникальность записей журнала также помогает применять обновления журнала с использованием единой очереди обновлений, обеспечивая последовательные и согласованные обновления.

Примеры использования [**тут**](https://kb.kuma-community.ru/books/pravila-korreliacii-v-kuma-cookbook/page/priemy-v-pravilax-korreliacii#bkmrk-%D0%90%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%2F-%D0%BB%D0%B8).

<p class="callout warning">Синхронизация активного листа между несколькими корреляторами. **ВАЖНО это не поддерживаемый и не официальный сценарий.** Можно попробовать сделать так: WAL записывается на сетевую папку, примонтиованную к двум корреляторам. И если один из корреляторов упал, скрипт (заранее написанный) запускает службу второго коррелятора. Второй коррелятор перечитает WAL и импортирует данные в лист.</p>

### Конекстная таблица

Конекстная таблица - это тот же лист, только с дополнительными возможностями по хранению в разных полях разных структур данных. Существует только в рамках конкретного коррелятора, в который она была добавлена либо через фильтры, либо через действия в корреляционных правилах.

Функциональные возможности контекстных таблиц:

- список ключевых полей определяется пользователем;
- данные в контекстных таблицах типизированы (целые числа, числа с плавающей точкой, строки, логический тип, timestamp, IP);
- поддерживаются массивы для всех типов данных, перечисленных выше;
- в корреляции, для полей с массивами возможны подсчеты уникальных значений, вычисление длины массива, обращение к определенному элементу массива.

Примеры использования [**тут**](https://kb.kuma-community.ru/books/pravila-korreliacii-v-kuma-cookbook/page/priemy-v-pravilax-korreliacii#bkmrk-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE%D0%B9).

# Приемы в правилах корреляции

### <span>Сравнение с константой</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/Ggoimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/Ggoimage.png)

### <span>Сравнение с листом/списком</span>

<div class="popover selection-popover top in" id="bkmrk--1" style="text-align:justify;"></div>
<span>Аналогично =константе </span>**<span>ИЛИ</span>**<span> =константе</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/0pqimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/0pqimage.png)

### <span>Содержит список констант регистронезависимый</span>

<div class="popover selection-popover top in" id="bkmrk--4" style="text-align:justify;"></div>
<span>Ищется заданная подстрока </span>*<span>“whoami” или "ipconfig" и др</span>*<span> в занчении поля </span>*<span>DestinationProcessName</span>*

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-11/scaled-1680-/YOaimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-11/YOaimage.png)

### <span>Соответствие регулярному выражению (REGEX)</span>

<div class="popover selection-popover top in" id="bkmrk--7" style="text-align:justify;"></div>
<span>Должно быть условие регулярного выражения в формате RE2</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/KDcimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/KDcimage.png)

### <span>Работа с подсетями</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/ePHimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/ePHimage.png)

### <span>Содержит любое значение (не пустое)</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/oKqimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/oKqimage.png)

### <span>Активный список / лист</span>

#### <span>Активный лист содержит ключ</span>

<div class="popover selection-popover top in" id="bkmrk--12" style="text-align:justify;"></div>
<span>Ключ листа должен совпадать со значением поля </span>*<span>Message</span>*

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/fwpimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/fwpimage.png)

#### <span>Сравнение по экстра данным в активном листе (неключевому полю)</span>

<div class="popover selection-popover top in" id="bkmrk--15" style="text-align:justify;"></div>
<span>В актуальных версиях, используйте комбинацию Ctrl+Enter для прододжения наполнения условия в конструкторе</span>

<span>Где </span>*<span>threat\_score</span>*<span> &gt; 70</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/3udimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/3udimage.png)

#### <span>Фильтр по количеству записей по ключу в активном листе</span>

<div class="popover selection-popover top in" id="bkmrk--22" style="text-align:justify;"></div>
<span>Где количество записей &gt; 1, используется служебная переменная \_</span>*<span>count</span>*

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/9ikimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/9ikimage.png)

<span>Другие служебные поля активных листов:</span>

<div class="popover selection-popover top in" id="bkmrk--25" style="text-align:justify;"></div>- <span>\_count (счетчик количества записей)</span>
- <span>\_created (время создания записи UnixTime, в наносекундах)</span>
- <span>\_updated (время обновления записи UnixTime<span>, в наносекундах</span>)</span>
- <span>\_expires (время окончания жизни записи UnixTime<span>, в наносекундах</span>)</span>
- <span>\_key (значение ключевой записи)</span>

#### <span>Событие истечения времени жизни в активном листе</span>

<span>Возникает служебное событие </span>*<span>active list record expired</span>*<span>, помимо этого необходимо указать UUID активного листа в поле </span>*<span>DeviceExternalID</span>*

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/avTimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/avTimage.png)

<span>Значение ключевого поля передатся в </span>*<span>DevicePayloadID</span>*<span> служебного события.</span>

#### Работа с активным листом не по его ID

Если указывать ID листа неудобно (а это обычно так), то можно в ключевое поле писать уникальный префикс типа "failed login attempts|username|1.1.1.1" и в события ловить по полю devicePayloadID функцией startsWith "failed login attempts" такой вариант реализации правила не зависит от инсталляции.

<p class="callout warning">Такие события существуют только в рамках коррелятора (служебные события) и не сохраняются в сторадже, их можно поймать только правилом корреляции.</p>

### <span>Сравнение переменной с числовым значением</span>

<span>Из строки с REGEX вырезается число и кладется его в переменную, например, для получения SID пользователя из "SID: 1-21-1231-500", получаем "500", кладем в переменную $temp, чтобы сделать сравнение необходимо $temp привести к числовому типу это можно сделать новой переменной `$usersid = $temp + 0` и далее сравнивать, например, `$usersid <span><span class="ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak" dir="ltr">> 1000</span></span>`</span>

### <span>Условие с полем TI, сравнение с категорией</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-11/scaled-1680-/yRdimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-11/yRdimage.png)

Значение feed это именование фидов из CyberTrace, например для фидов Kaspersky бывают такие значения (зависит какие фиды приобретены/подключены):

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/scaled-1680-/uj3image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/uj3image.png)

### <span>Работа с группами AD</span>

<div class="popover selection-popover top in" id="bkmrk--28" style="text-align:justify;"></div>
<span>Необходимо указывать полный DN, пример:</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/vhnimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/vhnimage.png)

Условие фильтра:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/Mk2image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/Mk2image.png)

### <span>Актив находится в определенной категории</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/8SNimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/8SNimage.png)

### <span>Работа с полем Extra в селекторе</span>

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/ZJfimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/ZJfimage.png)

### Работа с полями типа SA (массив строк) KUMA 3.0+  


При операции **match** к полям типа SA применяется как к строке, т.е. массив представляется в виде строки **\["a1", "b2", "c3"\]** и т.д. Т.е. ко всему массиву сразу, а не к отдельным его элементам по очереди.

При операции **contains** применяется именно к элементам массива. Т.е. **contains \[** для массива вернет false, как и **contains "** или **'**. Но при этом же, если в массиве есть элемент abc, то contains abc вернет true и contains ab тоже вернет true

## Работа с переменными (KUMA 2.1+)  


### <span>Вход в рабочее время</span>

<div class="popover selection-popover top in" id="bkmrk--35" style="text-align:justify;"></div>
[**<span>Документация</span>**](https://support.kaspersky.com/help/KUMA/2.1/ru-RU/234740.htm)<span> по функциям переменных (локальные переменные).</span>

<span>Сначала извлекается час из таймштемпа, с помощью функции: </span>*<span>extract\_from\_timestamp(Timestamp, ‘h’, ‘Europe/Moscow’)</span>*

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/0IBimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/0IBimage.png)

Условие в селекторе:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/rytimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/rytimage.png)

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

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/ldsimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/ldsimage.png)

### <span>Работа с Extra</span>

<div class="popover selection-popover top in" id="bkmrk--40" style="text-align:justify;"></div>
<span>Здесь вместо </span>*<span>Event.System.Channel</span>*<span> нужно указать интересующее вас поле экстра. Регулярка: </span>`.<em>"Event\.System\.Channel":"([^"]+)".</em>`

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/Dpkimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/Dpkimage.png)

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

- $firstIndex=index\_of('(', fieldName)
- $lastIndex=index\_of('.', fieldName)
- $getSubstring=substring(fieldName, $firstIndex, $lastIndex)

### Работа с контекстной таблицей (KUMA 3.0+)  


Исходная задача: Необходимо отслеживать, на каких отличных друг от друга устройствах производится вход одной УЗ. (активный лист будет менее удобен т.к. различных устройств может быть &gt; 1)

Пример Контестной таблицы:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-06/scaled-1680-/aFhimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-06/aFhimage.png)

Примеры переменных:

Извлечение содержимого поля с массивом `pc` из контекстной таблицы в тенанте `Shared` (только для этого тенанта нужно в переменной это указывать) по ключевому полю `user` и его значением `DestinationUserName`, назовем переменную `ct_value`:

```bash
context_table('pc-user@Shared', 'pc', 'user', DestinationUserName)
```

В событии выглядит это так:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-06/scaled-1680-/bCIimage.png)

Получение индекса (номер символа) по содержимому поля массива `pc` по значению поля `DestinationHostName` из контекстной таблицы в тенанте Shared (только для этого тенанта нужно в переменной это указывать) по ключевому полю user и его значением DestinationUserName, назовем переменную `ct_contains`:

```bash
index_of(DestinationHostName, $ct_value)
```

Возвращает первую позицию символа или подстроки в строке, расчет индекса начинается с 0. Если в результате работы функции подстрока не была найдена, функция вернёт значение -9223372036854775808

Вот как выглядит это в событии, значение `ct_contains` в поле FlexNumber1.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-06/scaled-1680-/yopimage.png)

Получение количества элементов в поле с массивом `pc` из контекстной таблицы (пример в собтии на рисунке выыше в поле FlexNumber2), назовем переменную `ct_len`:

```bash
len($ct_value)
```

Если в содержимом поля с массивом `pc` из контекстной таблицы есть подстока см. выше описание переменной `ct_contains`, то вернуть `true` назовем переменную `ct_item_exist`:

```bash
conditional(`$ct_contains LIKE '-.*'`, 'false', 'true')
```

Вот как выглядит это в событии, значение `ct_item_exist` в поле FlexString2.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-06/scaled-1680-/7bVimage.png)

### Как записать значение из нескольких событий в одно поле в правиле корреляции типа Standard

В обогащении можнонаписать шаблон, в котором можно пройтись по всем подсобытиям и получить список всех полей. Дальше уже с помощью функционала Go template можете сделать что хотите. Для правильной работы метода keep event policy в правиле корреляции должна иметь значение all.

  
В данном примере можно получить в строку все значения SourceAddress из базовых событий через ";" в корреляционном событии.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-10/scaled-1680-/BBjimage.png)

На выходе получается примерно следующее

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-10/scaled-1680-/R5iimage.png)

# Тестирование правил корреляции (ретроскан)

Для тестирования правил можно использовать ретроскан (из раздела “События”), предварительно это правило нужно добавить в коррелятор и осуществить выборку интересующих событий запросом (выбрать временной диапазон):

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/Qadimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/Qadimage.png)

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

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/cUtimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/cUtimage.png)

<p class="callout info">В случае отсутствия сработки попробуйте убрать LIMIT в SQL запросе при ретроскане</p>

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

### <span style="color:rgb(0,0,0);"><span>Написание правил</span></span>

<p class="callout warning"><span style="color:rgb(0,0,0);"><span><span class="ui-provider ed bdu bdv bdw bdx bdy bdz bea beb bec bed bee bef beg beh bei bej bek bel bem ben beo bep beq ber bes bet beu bev bew bex bey bez bfa bfb" dir="ltr">В правилах корреляции очередность условий в селекторах имеет значение, НЕ актуально для **Коррелятора 2.0 (Correlator-NG)**</span></span></span></p>

<span style="color:rgb(0,0,0);"><span>Уникальные условия надо поднимать вверх в правиле корреляции, чем раньше условие «провалится», тем лучше:</span></span>

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-06/scaled-1680-/cKpimage.png)

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-01/scaled-1680-/gpdimage.png)

В случае несколльких селекторов, в начале лучше указать жесткое условие (например с "=") с полем из стандартной модели данных (не композитных полей S. или N. и т.д.), а затем условия где используются операторы contains или regex.

Операционные правила должны идти вначале:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-01/scaled-1680-/G2Eimage.png)

Еще, например, есть правило, в котором в переменную кладется значение из активного листа, а затем эта переменная сравнивается в условии. Так вот в этом случае очередность условий имеет большое значение, так как поменяв условия местами и отодвинув проверку по активному листу в конец, в метриках количество OPS с активным листом уменьшилось со 100000 OPS до 1,1 OPS.

<p class="callout warning">Все поля модели данных ищутся с одинаковой скоростью, а поля \*Extra, S, SA, N, NA, F, FA работают медленнее  
</p>

<p class="callout warning">Значение переменной в селекторе высчитывается в момент, когда событие доходит до этого условия с переменной. Если переменная в группирующих полях, то переменная высчитывается после прохождения всех условий селектора.</p>

<p class="callout warning">При наличии условия с листами, словарями и т.д., отодвигайте их в конец.</p>

### <span style="color:rgb(0,0,0);"><span>Мониторинг произвоительности</span></span>

<span style="color:rgb(0,0,0);"><span>Для мониторинга производительности по корреляции есть метрики, градации веса по операциям в продукте нет, все выполняется быстро благодаря GoLang. Метрики по правилам можно увидеть в разделе метрики, нажав на название </span>*<span>“KUMA Collectors”</span>*<span> затем выбрав </span>*<span>“KUMA Correlators”</span>*<span>:</span></span>

<span style="color:rgb(0,0,0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/bBMimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/bBMimage.png)</span>

<span style="color:rgb(0,0,0);">Пример метрик по корреляции:</span>

<span style="color:rgb(0,0,0);">[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/scaled-1680-/4zKimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-08/4zKimage.png)</span>

# Сегментация правил корреляции

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

<p class="callout info">Порядок применения правил сегментации соответсвует порядку правил сегментации созданным в интерфейсе KUMA (могут примениться и несколько сегментаций, если сработка правила корреляции соответствует нескольким правилам сегментации)</p>

Блок-схема работы сегментации (спасибо за наработку интегратору):

[![ssegm2.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-01/scaled-1680-/ssegm2.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-01/ssegm2.png)

Пример работы, есть правило корреляции, которое срабатывает на событие с полем Code равное "777" с разными значениями SourceUserName, все сработки правила складываются в один Алерт, мы хотим создать отдельные алерты для отдельных пользователей:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/gTvimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/gTvimage.png)

Для этог онужно создать правило сегментации ипривязать его к правилу корреляции. Перейдите в **Ресурсы - Правила сегментации** и нажмите на кнопку **Добавить правило сегментации**. В нашем случае подойдет тип **По группирующим полям**:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/Zpyimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/Zpyimage.png)

Указываем свой шаблон именования и группирующее поле - используем поля имени пользователя и **Сохраняем**:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/4cDimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/4cDimage.png)

Далее необходимо привязать правило сегментации к нашему правилу корреляции. Это делается в **Параметры - Алерты - вкладка Сегментация**. Выбираем необходимый тенант, нажимаем кнопку Добавить, Указываем название, Выбираем правило корреляции и добавлем правило сегментации, затем на каждом шаге все **Сохраняем**.

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/3DXimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/3DXimage.png)

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/me5image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/me5image.png)

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/tv2image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/tv2image.png)

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

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/v2aimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/v2aimage.png)

Аналогичным образом можно использовать и другие типы правил сегментации.

# Правила сбора и анализа данных (Data Mining)

В отличие от потоковой корреляции, работающей в режиме реального времени, Data Mining правила позволяют с помощью языка SQL и функций ClickHouse ([примеры](https://kb.kuma-community.ru/books/sozdanie-zaprosov-v-kuma-cookbook/page/zaprosy-v-kuma-primery) запросов, почти все возможно использовать) распознавать и анализировать события, сохраненных в хранилище KUMA (можно указать и конкретный спейс хранилища).

#### Принцип работы

Выполнение **SQL-запросов к ClickHouse** и приведение результатов к формату нормализованных событий KUMA происходит на уровне **Core** с помощью новой сущности **DataMiningRule** и встроенного механизма **Scheduler**. Полученные результаты преобразуются в события и распространяются по корреляторам через стандартный API, который также используется коллекторами.

Важно, что:

- **запрос к ClickHouse выполняется строго один раз** за указанный период расписания;
- сформированный результат может быть направлен **одному или нескольким корреляторам**, а также в другие подсистемы в будущем;
- корреляторы, получающие данные, **могут принадлежать различным тенантам**, что обеспечивает гибкость и масштабируемость архитектуры.

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

#### Преимущества и недостатки

<table id="bkmrk-%D0%9F%D0%BB%D1%8E%D1%81%D1%8B%C2%A0-%D0%9C%D0%B8%D0%BD%D1%83%D1%81%D1%8B-%D0%A1%D0%BD%D0%B8%D0%B6%D0%B5%D0%BD" style="border-collapse:collapse;width:100%;height:558.003px;"><colgroup><col style="width:49.9392%;"></col><col style="width:49.9392%;"></col></colgroup><tbody><tr style="height:29.8785px;"><td class="align-center" style="height:29.8785px;">Плюсы </td><td class="align-center" style="height:29.8785px;">Минусы</td></tr><tr style="height:63.4549px;"><td class="align-left" style="height:63.4549px;">**Снижение нагрузки на корреляторы** — отсутствует необходимость хранить большие объёмы временных данных в оперативной памяти

</td><td class="align-left" style="height:63.4549px;">**Увеличение нагрузки на хранилище данных**, для которого постоянные сложные запросы не являются целевой нагрузкой.

</td></tr><tr style="height:63.4549px;"><td class="align-left" style="height:63.4549px;">**Кросстенантное обнаружение** — правило может передавать результаты нескольким корреляторам разных тенантов.

</td><td class="align-left" style="height:63.4549px;">**Риск тяжелых запросов** — неэффективный SQL может существенно нагрузить кластер.

</td></tr><tr style="height:63.4549px;"><td class="align-left" style="height:63.4549px;">**Гибкость создания правил** — возможность строить корреляцию напрямую на основе SQL-запросов.

</td><td class="align-left" style="height:63.4549px;">**Отложенное обнаружение** — аналитика работает постфактум, поэтому алерт приходит позже, чем при потоковой корреляции.

</td></tr><tr style="height:63.4549px;"><td class="align-left" style="height:63.4549px;">**Распределённое выполнение запросов** — нагрузка обрабатывается кластером хранилища, а не одним сервером корреляции.

</td><td class="align-left" style="height:63.4549px;">  
</td></tr><tr style="height:63.4549px;"><td class="align-left" style="height:63.4549px;">**Поддержка поиска аномалий и долгих сценариев атак** — отклонения от нормы, тренды, девиации, редкие последовательности.

</td><td class="align-left" style="height:63.4549px;">  
</td></tr><tr style="height:113.819px;"><td style="height:113.819px;">**Устойчивость к задержкам и несинхронности событий** — если события приходят с опозданием или в неправильном порядке (например, правила по Golden Ticket), анализ всё равно будет корректным.

</td><td style="height:113.819px;">  
</td></tr><tr style="height:97.0312px;"><td style="height:97.0312px;">**Сохранность состояния при рестарте** — бакеты и промежуточные данные не сбрасываются при перезагрузке коррелятора.

</td><td style="height:97.0312px;">  
</td></tr></tbody></table>

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

Процесс создания правила можно разделить на три этапа:

##### 1 этап. Создание непосредственно самого Data Mining правила

Создать правило можно двумя способами (из SQL-запроса в разделе Поиск по событиям):

- Формируем SQL-запрос в разделе Поиска по событиям (тестируем гипотезы, проводим атаку на полигоне, наполняем БД синтетическими событиями)
- Необходимо проверить что запрос выполняется, не вешает базу, возвращает осмысленный результат, который можно далее анализировать с помощью коррелятора
- Нажмите на значок "Create data mining rule" ![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/TENimage.png)
- Далее открывается окно Создания правила, автоматически заполнится сам запрос, глубина и частота запуска. Заполнится маппинг полей из запроса в поля KUMA

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/RbGimage.png)

- Здесь необходимо вписать название, выбрать тенант, дозаполнить поля и создать правило.

Второй способ (создать правило как ресурс):

- В **Ресурсах - Правила сбора** и анализа данных Создать правило

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/J0Fimage.png)

- В правиле указать:

- - **Интервал (частота) выполнения SQL-запроса** можно указать в минутах, часах и днях (минимум 1 минута)
    - **SQL-запрос** должен содержать функцию агрегации ([примеры](https://clickhouse.com/docs/ru/sql-reference/aggregate-functions/reference)) и/или группировку (GROUP BY) данных c обязательным указанием ограничения LIMIT (от 1 до 10 000)

<p class="callout warning">Каждое выполнение такого правила происходит в виде запроса в Хранилище, а это значит неосторожным движением в виде частого или тяжелого правила можно нагрузить базу больше чем хотелось бы</p>

В примере рассматривается запрос на основе событий Windows по пользователям (DestinationUserName) событиям входа (EventID 4624) и выхода (EventID 4634) с расчетом среднего времени сесии пользователя за последние 24 часа.

<details id="bkmrk-%D0%9F%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C-sql-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE-1"><summary>Посмотреть SQL запрос (пример)</summary>

```sql
SELECT
    login_events.DestinationUserName AS destination_user_name,
    round(AVG(logout_events.logout_time - login_events.login_time)/1000) AS avg_time_diff_s,
    COUNT(DISTINCT login_events.login_time) AS total_logins,
    COUNT(DISTINCT logout_events.logout_time) AS total_logouts,
    concat(
        toString(floor(avg_time_diff_s / 86400)), ' days, ',
        toString(floor((avg_time_diff_s % 86400) / 3600)), ' hours, ',
        toString(floor((avg_time_diff_s % 3600) / 60)), ' minutes, ',
        toString(avg_time_diff_s % 60), ' seconds'
    ) AS human_readable_diff
FROM 
    (SELECT
        DestinationUserName,
        toUnixTimestamp(EndTime) AS login_time,
        FlexString1 AS logon_id
    FROM `events`
    WHERE DeviceEventClassID = '4624'
    AND EndTime >= now() - INTERVAL 24 HOUR
    AND DestinationUserName NOT LIKE '%$%') AS login_events
INNER JOIN 
    (SELECT
        DestinationUserName,
        toUnixTimestamp(EndTime) AS logout_time,
        FlexString1 AS logon_id
    FROM `events`
    WHERE DeviceEventClassID = '4634'
    AND EndTime >= now() - INTERVAL 24 HOUR
    AND DestinationUserName NOT LIKE '%$%') AS logout_events

    ON login_events.DestinationUserName = logout_events.DestinationUserName 
    AND logout_events.logon_id = login_events.logon_id

WHERE logout_events.logout_time >= login_events.login_time 
GROUP BY login_events.DestinationUserName
ORDER BY avg_time_diff_s DESC 
LIMIT 100
```

</details>- - **Добавить маппинг** (сопоставление) по полям запроса и модели KUMA

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/F04image.png)

##### 2 этап. Создание планировщика

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

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/fopimage.png)

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

##### 3 этап Создание simple правила на результат

  
В нашем случае правило ловит события, где время сессии меньше 5 секунд:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/dlDimage.png)

Корреляционное событие выглядит следующим образом:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/9yiimage.png)

А событие на основе которого произошла сработка:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/8lsimage.png)

Еще пример:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/jV9image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/jV9image.png)

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/i9Yimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/i9Yimage.png)

Работу правил можно отслеживать с помощью метрик в разделе KUMA Core:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/gSiimage.png)


#### Кейсы использования правил

Использование Data Mining правил особенно актуально в ситуациях, когда классическая потоковая корреляция либо неэффективна, либо слишком ресурсоёмка. Рассмотрим основные практические сценарии:

1. **Когда нужно обработать много событий за период**  
    Например, большое число неуспешных логинов за 5 минут или массовое сканирование портов.  
    Data Mining позволяет считать такие вещи в ClickHouse, не загружая корреляторы.
2. **Когда нужно суммировать или усреднять значения**  
    Можно использовать агрегирующие функции SQL: `SUM()`, `AVG()` и т.д.  
    **Пример:** средний объём исходящего трафика или количество DNS-запросов.  
    Алерт срабатывает при превышении порога.
3. **Когда нужен сравнительный анализ**  
    Например, сравнить количество событий за последний час с таким же периодом сутки назад.
4. **Когда нужно работать со “скользящим” окном времени** Анализировать события за период, независимо от того, с какой задержкой они пришли.
5. **Операции которые невозможны на уровне цепочки событий** (Количественный прирост, анализ на схожесть, а не на одинаковость)
6. **Подсчет энтропии** Определение при помощи энтропии, какие хосты генерируют одни и те же сработки для формирования исключений (рандомность, неожиданность цепочки)

#### Описание кейсов

Рассмотрим более подробно на парочке примеров:

##### 1. Частые неуспешные попытки входа

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

- более **10 неуспешных попыток аутентификации под пользователем `root`**
- Берём **окно поиска 15 минут** и запускаем правило каждые **14 минут**.
- Так мы анализируем накопившиеся события и получаем результат без необходимости хранить все данные в памяти коррелятора.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/U74image.png)

<details id="bkmrk-%D0%9F%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C-sql-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE"><summary>Частые неуспешные попытки входа под УЗ root</summary>

```sql
SELECT 
	SourceAddress,
	SourceHostName,
	DestinationUserName,
min(Timestamp) as StartTime,
max(Timestamp) as EndTime,
	count(Distinct(DestinationServiceName)) as cnt_spn_names, 
	arrayCompact(groupUniqArray(DestinationServiceName)) as spn_names,
arrayStringConcat(
  arrayMap(x -> '\'' || x || '\'', groupUniqArray(Distinct(ID))),
  ', '
) AS BaseEventIDs,
 Count(*) as EventIDsCount,
 'SOCSh_Kerberoasting' as exID
FROM 'events' 
WHERE
DeviceEventClassID = '4769' AND SourceUserID  != '' AND NOT ( SourceAddress in ('','::1') or SourceAddress like '127.0.0.%') AND NOT endsWith(DestinationUserName,'$')
GROUP BY SourceAddress, SourceHostName, DestinationUserName
HAVING cnt_spn_names > 10
LIMIT 100
```

</details>##### 2. Подсчёт исходящего сетевого трафика  


Простой пример, где нужно суммировать данные и обнаруживать превышение порога.

- Суммируем исходящий трафик (`SUM(bytes_out)`) и группируем по адресу источника.
- В поле **«Глубина»** оставляем пусто — тогда нижняя граница интервала определяется автоматически как конец предыдущего запроса + 1.
- В поле **«Частота запуска»** ставим минимальное значение — **1 минута**.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/ZIDimage.png)

В результате Scheduler каждую минуту запускает SQL-запрос с небольшим окном данных. Получается **скользящее окно**, которое постоянно обновляется и позволяет корректно работать даже при задержках в доставке событий и нарушении их порядка. Это как раз тот случай, когда **Data Mining правила способны сделать то, с чем потоковая корреляция справиться не может.**

#### Примеры готовых правил

##### 1. Массовый перебор TGS билетов (Kerberoasting)

<details id="bkmrk-kerberoasting-select"><summary>Kerberoasting</summary>

```sql
SELECT 
	SourceAddress,
	SourceHostName,
	DestinationUserName,
min(Timestamp) as StartTime,
max(Timestamp) as EndTime,
	count(Distinct(DestinationServiceName)) as cnt_spn_names, 
	arrayCompact(groupUniqArray(DestinationServiceName)) as spn_names,
arrayStringConcat(
  arrayMap(x -> '\'' || x || '\'', groupUniqArray(Distinct(ID))),
  ', '
) AS BaseEventIDs,
 Count(*) as EventIDsCount,
 'SOCSh_Kerberoasting' as exID
FROM 'events' 
WHERE
DeviceEventClassID = '4769' AND SourceUserID  != '' AND NOT ( SourceAddress in ('','::1') or SourceAddress like '127.0.0.%') AND NOT endsWith(DestinationUserName,'$')
GROUP BY SourceAddress, SourceHostName, DestinationUserName
HAVING cnt_spn_names > 10
LIMIT 100
```

</details>##### 2. Сканирование портов и сканирование хостов (сетевые события)

<details id="bkmrk-%D0%A1%D0%BA%D0%B0%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2-"><summary>Сканирование портов</summary>

```sql
SELECT
arrayStringConcat(arraySort(groupUniqArray(Distinct(DeviceProduct))), ', ' ) AS DeviceProduct,
arrayStringConcat(arraySort(groupUniqArray(Distinct(DeviceAddress))), ', ' ) AS DeviceAddresses,
SourceAddress,
SourceHostName,
SourceNtDomain,
DestinationAddress,
min(Timestamp) as StartTime,
max(Timestamp) as EndTime,
arrayStringConcat(arraySort(groupUniqArray(Distinct(DestinationPort))), ', ' ) AS DeviceCustomString1,
arrayStringConcat(
   arrayMap(x -> '\'' || x || '\'', groupUniqArray(Distinct(ID))),
   ', '
) AS DeviceCustomString2,
  Count(*) as DeviceCustomNumber2,
  Count(Distinct(DestinationPort)) as DeviceCustomNumber1,
  'SOCSh_ScanPort' as exID
FROM `events`
WHERE 
Type=1 and
(DestinationPort < 1024 or DestinationPort in (1434,1521,3306,3389,5432,8080,9200,1352,1540,1541)) AND
SourcePort>1024 and DestinationPort!=0 and SourceAddress!='' and DestinationAddress!='' AND 
(isIPAddressInRange(SourceAddress, '192.168.0.0/16') or isIPAddressInRange(SourceAddress, '10.0.0.0/8') or isIPAddressInRange(SourceAddress, '172.16.0.0/12')) AND
(isIPAddressInRange(DestinationAddress, '192.168.0.0/16') or isIPAddressInRange(DestinationAddress, '10.0.0.0/8') or isIPAddressInRange(DestinationAddress, '172.16.0.0/12'))
GROUP BY SourceAddress,SourceHostName,SourceNtDomain,DestinationAddress
HAVING DeviceCustomNumber1>=10
LIMIT 100
```

</details>##### 3. Прирост корреляционных событий (Обнаружение отклонений)

<details id="bkmrk-%D0%9F%D1%80%D0%B8%D1%80%D0%BE%D1%81%D1%82-%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD"><summary>Прирост корреляционных событий более 20% за сутки</summary>

```sql
SELECT
   'CorrelationSplash' as ExternalId,
   TenantID,
   CorrelationRuleID,
   CorrelationRuleName,
   countIf(Timestamp between toUnixTimestamp64Milli(now64()) - 1*3600000 and toUnixTimestamp64Milli(now64())) as today,
   countIf(Timestamp between toUnixTimestamp64Milli(now64()) - 25*3600000 and toUnixTimestamp64Milli(now64())-24*3600000) as yesterday,
   round(today/yesterday,2) as k
FROM `events`
WHERE Type=3 and toDayOfWeek(now64())!=1
GROUP  BY TenantID,CorrelationRuleID,CorrelationRuleName
HAVING yesterday > 20 and k>1.2
LIMIT 250
```

</details>##### 4. Распыление/подбор паролей

<details id="bkmrk-sql-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-p"><summary>SQL запрос правила Password Spraying</summary>

```sql
SELECT 
	SourceAddress, SourceHostName, 
	min(Timestamp) as StartTime, max(Timestamp) as EndTime,
    count(Distinct(DestinationUserName)) as cnt_usernames, /*кол-во уникальных УЗ*/
    arrayCompact(groupUniqArray(DestinationUserName)) as spray_usernames, /*уникальные сортированные имена УЗ, склеенные в строку*/
    arrayStringConcat(arrayMap(x -> '\'' || x || '\'', groupUniqArray(Distinct(ID))),', ') as BaseEventIDs, /*уникальные сортированные ID базовых событий, склеенные в строку*/
	Count(*) as EventIDsCount,
 	'SOCSh_PasswordSpray' as exID
FROM 
  'events' 
WHERE 
  DeviceEventClassID = '4625' 
  AND DestinationNtDomain  != '' 
  AND NOT endsWith(DestinationUserName,'$') 
GROUP BY SourceAddress, SourceHostName
HAVING cnt_usernames > 10
LIMIT 100

```

</details>![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/2KTimage.png)

<details id="bkmrk-sql-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-p-1"><summary>SQL запрос правила Password Spraying с сохранением имен пользователей успешного и неудачного логина</summary>

```sql
SELECT 
  SourceAddress, SourceHostName, StartTime, EndTime,failure_logins,success_logins,failed_usernames,success_usernames,exID
FROM (
  SELECT 
      SourceAddress, SourceHostName, min(Timestamp) as StartTime, max(Timestamp) as EndTime,
      countIf(DeviceEventClassID = '4625') AS failure_logins,
      countIf(DeviceEventClassID = '4624') AS success_logins, 
      arrayCompact(groupUniqArrayIf(DestinationUserName, DeviceEventClassID = '4625')) AS failed_usernames,
      arrayCompact(groupUniqArrayIf(DestinationUserName, DeviceEventClassID = '4624')) AS success_usernames,
      'SOCSh_PasswordSpray' as exID
  FROM events 
  WHERE 
        DeviceEventClassID IN ('4625', '4624') 
        AND DestinationNtDomain != '' 
        AND NOT endsWith(DestinationUserName,'$')
  GROUP BY SourceAddress, SourceHostName)
WHERE failure_logins > 10
LIMIT 100

```

</details>![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/sEpimage.png)

##### 6. Подсчет энтропии для определения исключений.

Запрос на Подсчет энтропии, который может помочь для определения и внесения исключений в правила корреляции.

Если очень грубо, энтропия это показатель случайности и чем она ниже - тем ниже случайности попадания источника DeviceAddress в корреляционное событие

Иными словами, можно определить, какие одни и те же хосты попадают в одни и те же алерты на постоянной основе и после проверки внести их в исключения

<details id="bkmrk-%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82-%D1%8D%D0%BD%D1%82%D1%80%D0%BE%D0%BF%D0%B8%D0%B8-%D0%B4%D0%BB%D1%8F"><summary>Подсчет энтропии для определения исключений</summary>

```sql
SELECT
  CorrelationRuleID, 
  CorrelationRuleName,
  entropy(DeviceAddress) as entr, /*"показатель случайности" попадающих DeviceAddress. Чем ниже - тем меньше случайности*/
  count(*) as cnt, /*объем выборки энтропии (маленькая выборка не информативна)*/
  count(distinct(DeviceAddress)) as hosts, /*количество уникальных DeviceAddress*/
'SOCSh_Entropy'as ExternalID
FROM events
WHERE Type=3 /*корр. события*/
GROUP BY CorrelationRuleID, CorrelationRuleName
HAVING
   hosts > 1 and /*хостов в результате больше 1 (иначе о энтропии речи быть не может)*/
   cnt > 10 /*количество событий достаточно для оптимальной оценки*/
ORDER BY entr ASC /*сортируем по принципу "наименее случайные последовательности"*/
LIMIT 250
```

</details>[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/SFdimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/SFdimage.png)

А также другие примеры:

1. Скачок событий/алертов со средств защиты
2. Большое количество DNS запросов с хоста

Пакет ресурсов Data Mining правил: [Shared\_20251113\_231513\_DMRules](https://kb.kuma-community.ru/attachments/5)  
Пароль к ресурсу: `!QAZ2wsx#EDC_!QAZ2wsx#EDC_`

#### Часто используемые функции SQL и лайфхаки

Здесь перечислены самые часто встречающиеся функции, которые используются в запросах:

1. `arrayStringConcat` - объединяет элементы массива в строку
2. `arrayCompact` - удаляет последовательные дублирующиеся элементы из массива
3. `distinct` - уникальные значения
4. `groupUniqArray` - собирает значения в массив
5. `arraySort` - сортирует массив
6. `arrayMap` - применяет выражение к каждому элементу массива и возвращает новый массив с результатами

Возможно использовать все функции, описанные в документации ClickHouse: [https://clickhouse.com/docs/ru/sql-reference/functions](https://clickhouse.com/docs/ru/sql-reference/functions)

А также набор специальных функций enrich и lookup в KUMA: [https://support.kaspersky.com/help/KUMA/4.0/ru-RU/294927.htm](https://support.kaspersky.com/help/KUMA/4.0/ru-RU/294927.htm)

Например:

1\. Уникальные отсортированные имена пользователей, склеенные в строку.

```sql
arrayCompact(arraySort(groupUniqArray(DestinationUserName)))
```

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/LiUimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/LiUimage.png)

2\. Уникальные ID базовых событий, склеенные в строку

```sql
arrayStringConcat(  arrayMap(x -> '\'' || x || '\'', groupUniqArray(Distinct(ID))),  ', ') AS BaseEventIDs
```

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/scaled-1680-/9x6image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-06/9x6image.png)

# Конвертер правил Sigma

<p class="callout info">Информация, приведенная на данной странице, является разработкой команды pre-sales и/или community KUMA и **НЕ** является официальной рекомендацией вендора.</p>

<p class="callout info">Официальная документация по данному разделу приведена в Онлайн-справке на продукт: [https://support.kaspersky.com/help/kuma/4.0/ru-RU/296337.htm](https://support.kaspersky.com/help/kuma/4.0/ru-RU/296337.htm)</p>

<p class="callout info">Поддерживаемые примеры конвертации правил Sigma [тут](https://support.kaspersky.com/help/kuma/4.0/ru-RU/301637.htm)</p>

Конвертер правил Sigma преобразует правила корреляции в понятный KUMA формат и облегчает импорт простых правил для последующей доработки аналитиком.

#### Разворачивание конвертера правил Sigma

1. Установите конвертер правил Sigma. Для этого распайкуйте архив kuma-sigma-converter-x.x.x.tr.gz в папке установщика и после перейдите в распакованную директорию.

<p class="callout warning">Установку можно произвести на отдельной машине</p>

<p class="callout danger">Для работы необходим установленный Docker на ОС. Документация: [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/) </p>

```bash
tar -xf kuma-sigma-converter-0.1.0.tar.gz && cd kuma-sigma-converter-0.1.0/
```

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-08/scaled-1680-/mM6image.png)

далее запускаем файл командой

```bash
./run.sh
```

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-08/scaled-1680-/cRMimage.png)

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

```
<IP_сервера>:<порт>
```

#### Работа с конвертером правил Sigma

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-08/scaled-1680-/mtKimage.png)

Тут уже видим, как форматируется sigma-rule в запрос, читаемый KUMA.

Но для дополнительной демонстрации возьмем еще правило и доработаем его, вставим правило во вкладку конвертера "rule"

В поле **<span class="guicharacter">backend</span>** выберите **<span class="guicharacter">kuma</span>**, в поле **<span class="guicharacter">Format</span>** выберите **<span class="guicharacter">default</span>**, поле **<span class="guicharacter">pipeline</span>** оставьте пустым. При необходимости нужно исправить ошибки в rule.yaml

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-08/scaled-1680-/Wdximage.png)

Поскольку в предустановленных нормализаторах используется обогащение событий to lower case для полей, содержащих имена пользователей, имена хостов, имена процессов, мы рекомендуем в исходном правиле Sigma приводить соответствующие поля к нижнему регистру, иначе придется корректировать правило в KUMA.

<p class="callout info">Мы не рекомендуем в условиях contains и подобных условиях писать комментарии или дополнительную информацию. В случае необходимости оставить комментарий рекомендуем использовать символ #, тогда комментарий не окажет влияния на условие.</p>

<p class="callout warning">Правило должно начинаться со слова title, дефисов перед ним не должно быть.</p>

3\. Готовый результат из **query** скопируйте в KUMA. В результате получим условие WHERE для sql запроса.

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-08/scaled-1680-/OgUimage.png)

Проверим и вставим запрос для фильтраций событий в KUMA:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-08/scaled-1680-/bBCimage.png)

Видим события, связанные с данным фильтром.

Примеры для теста:

- [https://detection.fyi/sigmahq/sigma/windows/process\_creation/proc\_creation\_win\_conhost\_susp\_winshell\_child\_process/](https://detection.fyi/sigmahq/sigma/windows/process_creation/proc_creation_win_conhost_susp_winshell_child_process/)
- [https://detection.fyi/sigmahq/sigma/windows/process\_creation/proc\_creation\_win\_conhost\_susp\_winshell\_child\_process/](https://detection.fyi/sigmahq/sigma/windows/process_creation/proc_creation_win_conhost_susp_winshell_child_process/)