---
# System prepended metadata

title: Правила корреляции в KUMA
tags: [correlation, kuma]

---

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

:::warning
:warning: Для открытия рисунка в полном размере, нажмите правой кнопкой мыши на изображении и выберите пункт "Открыть изображение в новой вкладке"
:::

:::warning
:warning: **"Обновить параметры"** нужно делать в корреляторе, когда какое-либо правило меняется, чтобы подтянулись актуальные изменения в правилах в коррелятор.
:::

# Содержание
[toc]


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

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

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

![](https://hackmd.io/_uploads/HJE_NpJon.png)

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

:::danger
:bulb: Необходимо указывать все поля и переменные участвующие в селекторах в наследуемых полях.
:::

<br>

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

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

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

![](https://hackmd.io/_uploads/ByuMST1sn.png)

Возможные действия правила:
- On first threshold — создавать корреляционное событие только после первого превышения порога, а двукратное, трехкратное и т.д. превышение порога за время жизни группы игнорировать.
- On every threshold — создавать корреляционное событие после каждого превышения порога за время жизни группы. 
- On subsequent threshold — создавать корреляционные событие при всех превышениях порога, кроме первого. 
- On timeout — в стандартных правилах есть еще возможность настройки действий по окончании времени жизни группы. Это действие используется в связке с опцией Recovery (Обнуление) в настройках селектора, в каких случаях это уместно и как именно это работает рассматривается ниже.

<br>

:::danger
:bulb: Необходимо указывать все поля и переменные участвующие в селекторах в группирующих/уникальных полях.
:::

<br>

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

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

![](https://hackmd.io/_uploads/S1GsBpys3.png)

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

![](https://hackmd.io/_uploads/SkK6STyih.png)

### Бакет (Окно корреляции)
1. Бакет открывается на событие из любого селектора, не важно в каком они порядке в правиле, порядок проверяется после наполнения бакета!
2. Для каждого набора Identical Fields создается свой бакет.
3. Когда событие подпадает под селектор, коррелятор смотрит, есть ли уже бакет с нужным набором полей Identical Fields, если нет - создает, если есть - событие отправляется в существующий.
4. Когда под селектор с Unique fields подпадает событие, то проверяется, есть ли уже в бакете события с таким же набором значений для Unique Fields, если есть, то событие не учитывается.

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

<br>

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

**Операционное правило (operational)** — наполняют активные листы без создания корреляционного события, механика работы аналогична простому правилу корреляции.
Чтобы просмотреть содержимое списка нужно открыть список активных сервисов (Active services), выбрать службу типа Correlator (поставить галочку слева) и у нее появится активная кнопка Go to active lists (Перейти в активные листы).

![](https://hackmd.io/_uploads/rklfIpyj2.png)

При записи в активный лист, в качестве ключевого поля могут быть несколько занчений полей события, для составления комбинированного ключа, при этом в значении ключа это быдет выглядеть так: _поле1|поле2|поле3_

<br>

# Посмотреть активные листы в корреляторе

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

![](https://hackmd.io/_uploads/BkdEM1bnh.png)

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

<br>

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

### Сравнение с константой

![](https://hackmd.io/_uploads/BJLPYaJsn.png)

### Сравнение с листом
Аналогично =константе **ИЛИ** =константе

![](https://hackmd.io/_uploads/B1RUKpJo2.png)

### Содержит константу
Ищется заданная подстрока _"%%2091"_ в занчении поля _DeviceCustomString6_

![](https://hackmd.io/_uploads/rJIBY6kih.png)

### Содержит регистронезависимое значение

![](https://hackmd.io/_uploads/BJn_Nyb2n.png)



### Соответствие регулярному выражению (REGEX)
Должно быть условие регулярного выражения в формате RE2

![](https://hackmd.io/_uploads/ryS6oT1i2.png)

### Работа с подсетями

![](https://hackmd.io/_uploads/S1Gy2TJj2.png)

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

![](https://hackmd.io/_uploads/BkAAhpysn.png)

### Активный лист содержит ключ
Ключ листа должен совпадать со значением поля _Message_

![](https://hackmd.io/_uploads/HyURpTysh.png)

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

![](https://hackmd.io/_uploads/B1BD6TJs3.png)

### Фильтр по количеству записей по ключу в активном листе
Где количество записей > 1, используется служебная переменная __count_

![](https://hackmd.io/_uploads/r1b5CaJj3.png)

Другие служебные поля активных листов:
Служебные поля активных листов
- _count (счетчик количества записей)
- _created (время создания записи UnixTime)
- _updated (время обновления записи UnixTime)
- _expires (время окончания жизни записи UnixTime)
- _key (значение ключевой записи)

### Событие истечения времени жизни в активном листе
Возникает служебное событие _active list record expired_, помимо этого необходимо указать UUID активного листа в поле _DeviceExternalID_

![](https://hackmd.io/_uploads/S1Qz7RJo2.png)


Значение ключевого поля передатся в _DevicePayloadID_ служебного события.

### Работа с группами AD
Необходимо указывать полный DN, пример:

![](https://hackmd.io/_uploads/r15jZAJj3.png)

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

![](https://hackmd.io/_uploads/BJUsg01i2.png)

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

![](https://hackmd.io/_uploads/Bkk1GA1i3.png)

### Работа с полем Extra в селекторе

![](https://hackmd.io/_uploads/Hy3mzIWon.png)

### Вход в рабочее время, работа с переменной

[**Документация**](https://support.kaspersky.com/help/KUMA/2.1/ru-RU/234740.htm) по функциям переменных.

Сначала извлекается час из таймштемпа, с помощью функции: *extract_from_timestamp(Timestamp, 'h', 'Europe/Moscow')*

![](https://hackmd.io/_uploads/ryKc71Z23.png)

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

![](https://hackmd.io/_uploads/ByOT71Zh2.png)

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

![](https://hackmd.io/_uploads/S1b7Vybh2.png)


### Работа с Extra в переменной
Здесь вместо *Event\.System\.Channel* нужно указать интересующее вас поле экстра. Регулярка: ```.*"Event\.System\.Channel":"([^"]+)".*```

![](https://hackmd.io/_uploads/SJ3aSJb2h.png)

<br>

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

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

![](https://hackmd.io/_uploads/r1NrY1W32.png)

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

![](https://hackmd.io/_uploads/r1h5KJ-32.png)

<br>

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

Для мониторинга производительности по корреляции есть метрики, градации веса по операциям в продукте нет, все выполняется быстро благодаря Golang. Метрики по правилам можно увидеть в разделе метрики, нажав на название *"KUMA Collectors"* затем выбрав *"KUMA Correlators"*:

![](https://hackmd.io/_uploads/Hy8vsk-2n.png)

Пример метрик по корреляции:

![](https://hackmd.io/_uploads/Bkyoj1Zhn.png)


