Kaspersky Unified Monitoring and Analysis Platform

Переменные в корреляторах

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

Область применения переменных:

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

К переменным можно обращаться так же, как к полям события, предваряя их название символом $.

В этом разделе

Свойства переменных

Требования к переменным

Функции переменных

Объявление переменных

В начало
[Topic 234114]

Свойства переменных

Локальные и глобальные переменные

Свойства глобальных и локальных переменных различаются.

Глобальные переменные:

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

Локальные переменные:

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

Переменные в разных типах правил корреляции

  • В правилах корреляции типа operational в закладке Действия можно указывать все доступные или объявленные в этом правиле переменные.
  • В правилах корреляции типа standard в закладке Действия можно указывать только переменные, указанные в этих правилах на закладке Общие в поле Группирующие поля.
  • В правилах корреляции типа simple в закладке Действия можно указывать только переменные, указанные в этих правилах на закладке Общие в поле Наследуемые поля.

В начало
[Topic 234737]

Требования к переменным

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

Требования к названиям функций:

  • Должно быть уникально в рамках коррелятора.
  • Должно содержать от 1 до 128 символов Юникода.
  • Не может начинаться с символа $.
  • Должно быть написано в camelCase или CamelCase.

Особенности указания функций переменных:

  • Последовательность указания параметров имеет значение.
  • Параметры передаются через запятую: ,.
  • Строковые параметры передаются в одинарных кавычках: '.
  • Наименования полей событий и переменные указываются без кавычек.
  • При обращении к переменной как параметру перед ее названием необходимо добавлять символ $.
  • Ставить пробел между параметрами необязательно.
  • Во всех функциях, где в качестве параметров допускается использование переменной, допускается создавать вложенные функции.
В начало
[Topic 234739]

Функции переменных

Операции с активными листами и словарями

Функция "active_list"

Получение информации из активного листа о значении в указанном столбце.

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

  1. название активного листа;
  2. название столбца активного листа;
  3. ключ записи активного листа.

    В качестве ключа записи активного листа используется название одного или нескольких полей события.

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

    Результат выполнения

    active_list('exampleActiveList', 'score', SourceAddress,SourceUserName)

    Получение данных из активного листа exampleActiveList из записи SourceAddress,SourceUserName из столбца score.

Функция "table_dict"

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

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

  1. название словаря;
  2. название столбца словаря;
  3. ключ строки словаря.

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

    Результат выполнения

    table_dict('exampleTableDict', 'office', SourceUserName)

    Получение данных из словаря exampleTableDict из строки с ключом SourceUserName из столбца office.

Функция "dict"

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

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

  1. название словаря;
  2. ключ строки словаря.

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

    Результат выполнения

    dict('exampleDictionary', SourceAddress)

    Получение данных из словаря exampleDictionary из строки с ключом SourceAddress.

Операции со строками

Функция "len"

Возвращает число символов в строке.

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

Примеры использования

len('SomeText')

len(Message)

len($otherVariable)

Функция "to_lower"

Перевод символов в строке в нижний регистр.

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

Примеры использования

to_lower(SourceUserName)

to_lower('SomeText')

to_lower($otherVariable)

Функция "to_upper"

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

Примеры использования

to_upper(SourceUserName)

to_upper('SomeText')

to_upper($otherVariable)

Функция "append"

Добавление символов в конец строки.

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

  1. исходная строка;
  2. добавляемая строка.

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

Примеры использования

Результат использования

append(Message, '123')

Строка из поля Message, в конце которой добавлена строка 123.

append($otherVariable, 'text')

Строка из переменной otherVariable, в конце которой добавлена строка text.

append(Message, $otherVariable)

Строка из поля Message, в конце которой добавлена строка из переменной otherVariable.

Функция "prepend"

Добавление символов в начало строки.

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

  1. исходная строка;
  2. добавляемая строка.

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

Примеры использования

Результат использования

prepend(Message, '123')

Строка из поля Message, в начало которой добавлена строка 123.

prepend($otherVariable, 'text')

Строка из переменной otherVariable, в начало которой добавлена строка text.

prepend(Message, $otherVariable)

Строка из поля Message, в начало которой добавлена строка из переменной otherVariable.

Функция "substring"

Возвращает подстроку из строки. 

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

  1. исходная строка;
  2. позиция начала подстроки (натуральное число или 0);
  3. (необязательно) позиция конца подстроки.

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

Примеры использования

Результат использования

substring(Message, 2)

Возвращает часть строки из поля Message: от 3 символа до конца.

substring($otherVariable, 2, 5)

Возвращает часть строки из переменной otherVariable: от 3 до 6 символа.

substring(Message, 0, len(Message) - 1)

Возвращает всю строку из поля Message, кроме последнего символа.

Функция "tr"

Убирает из начала и конца строки указанные символы.

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

  1. исходная строка;
  2. (необязательно) строка, которую следует удалить из начала и конца исходной строки.

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

Примеры использования

Результат использования

tr(Message)

В начале и в конце строки из поля Message удалены пробелы.

tr($otherVariable, '_')

Если переменной otherVariable соответствует значение _test_, будет возвращена строка test.

tr(Message, '@example.com')

Если в поле события Message находится строка user@example.com, будет возвращена строка user.

Функция "replace"

Замена в строке всех вхождений последовательности символов А на последовательность символов B.

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

  1. исходная строка;
  2. строка поиска: последовательность символов, подлежащая замене;
  3. строка замены: последовательность символов, на которую необходимо заменить строку поиска.

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

Примеры использования

Результат использования

replace(Name, 'UserA', 'UserB')

Возвращается строка из поля события Name, в которой все вхождения UserA заменены на UserB.

replace($otherVariable, ' text ', '_text_')

Возвращается строка из переменной otherVariable, в которой все вхождения ' text ' заменены на '_text_'.

Функция "regexp_replace"

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

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

  1. исходная строка;
  2. строка поиска: регулярное выражение;
  3. строка замены: последовательность символов, на которую необходимо заменить строку поиска, и идентификаторы групп захвата регулярного выражения.

Строки можно передать строкой, названием поля или переменной. Допускается использовать неименованные группы захвата.

Примеры использования

Результат использования

regexp_replace(SourceAddress, '([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})', 'newIP: $1.$2.$3.10')

Возвращается строка из поля события SourceAddress, в которой перед IP-адресами вставлен текст newIP. Также последние цифры адреса заменены на 10.

Функция "regexp_capture"

Получение из исходной строки результата, удовлетворяющего условию регулярного выражения.

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

  1. исходная строка;
  2. строка поиска: регулярное выражение.

Строки можно передать строкой, названием поля или переменной. Допускается использовать неименованные группы захвата.

Примеры использования

Примеры значений

Результат использования

regexp_capture(Message, '(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})')

Message = 'Access from 192.168.1.1 session 1'

Message = 'Access from 45.45.45.45 translated address 192.168.1.1 session 1'

'192.168.1.1'

'45.45.45.45'

Операции с метками времени

Функция now

Получение временной метки в формате epoch. Запускается без аргументов.

Примеры использования

now()

Функция "extract_from_timestamp"

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

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

  1. Поле события, имеющего тип timestamp, или переменная.
  2. Обозначение атомарного представления времени. Параметр регистрозависимый.

    Возможные варианты обозначения атомарного времени:

    • y – год в виде числа.
    • M – месяц, числовое обозначение.
    • d – число месяца.
    • wd – день недели: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday.
    • h – часы в 24-часовом формате.
    • m – минуты.
    • s – секунды.
  3. (необязательно) Обозначение часового пояса. Если параметр не указан, время высчитывается в формате UTC.

    Примеры использования

    extract_from_timestamp(Timestamp, 'wd')

    extract_from_timestamp(Timestamp, 'h')

    extract_from_timestamp($otherVariable, 'h')

    extract_from_timestamp(Timestamp, 'h', 'Europe/Moscow')

Функция "parse_timestamp"

Представление времени из формата RFC3339 (например, "2022-05-24 00:00:00", "2022-05-24 00:00:00+0300) в формат epoch.

Примеры использования

parse_timestamp(Message)

parse_timestamp($otherVariable)

Функция "format_timestamp"

Представление времени из формата epoch в формат RFC3339.

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

  1. Поле события, имеющего тип timestamp, или переменная.
  2. Обозначение формата времени: RFC3339.
  3. (необязательно) Обозначение часового пояса. Если параметр не указан, время высчитывается в формате UTC.

    Примеры использования

    format_timestamp(Timestamp, 'RFC3339')

    format_timestamp($otherVariable, 'RFC3339')

    format_timestamp(Timestamp, 'RFC3339', 'Europe/Moscow')

Функция "truncate_timestamp"

Округление времени в формате epoch. После округления время возвращается в формате epoch. Время округляется в меньшую сторону.

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

  1. Поле события, имеющего тип timestamp, или переменная.
  2. Параметр округления:
    • 1s – округление до секунд;
    • 1m – округление до минут;
    • 1h – округление до часов;
    • 24h – округление до суток.
  3. (необязательно) Обозначение часового пояса. Если параметр не указан, время высчитывается в формате UTC.

    Примеры использования

    Примеры округляемых значений

    Результат использования

    truncate_timestamp(Timestamp, '1m')

    1654631774175 (7 June 2022 г., 19:56:14.175)

    1654631760000 (7 June 2022 г., 19:56:00)

    truncate_timestamp($otherVariable, '1h')

    1654631774175 (7 June 2022 г., 19:56:14.175)

    1654628400000 (7 June 2022 г., 19:00:00)

    truncate_timestamp(Timestamp, '24h', 'Europe/Moscow')

    1654631774175 (7 June 2022 г., 19:56:14.175)

    1654560000000 (7 June 2022 г., 0:00:00)

Функция "time_diff"

Получение интервала времени между двумя метками времени в формате epoch.

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

  1. Время конца отрезка. Поле события, имеющего тип timestamp, или переменная.
  2. Время начала отрезка. Поле события, имеющего тип timestamp, или переменная.
  3. Представление временного интервала:
    • ms – в миллисекундах;
    • s – в секундах;
    • m – в минутах;
    • h – в часах;
    • d – в днях.

    Примеры использования

    time_diff(EndTime, StartTime, 's')  

    time_diff($otherVariable, Timestamp, 'h')

    time_diff(Timestamp, DeviceReceiptTime, 'd')

Математические операции

Представлены как простейшими математическими операциями, так и функциями.

Простейшие математические операции

Операции:

  • сложение;
  • вычитание;
  • умножение;
  • деление;
  • деление по модулю.

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

Доступные аргументы:

  • числовые поля события;
  • числовые переменные;
  • вещественные числа.

    При делении по модулю в качестве аргументов можно использовать только натуральные числа.

Ограничения использования:

  • деление на ноль возвращает ноль;
  • математические операции между числами и строками возвращают ноль;
  • целые числа, полученные в результате операций, возвращаются без точки.

    Примеры использования

    (Type=3; otherVariable=2; Message=text)

    Результат использования

    Type + 1

    4

    $otherVariable - Type

    -1

    2 * 2.5

    5

    2 / 0

    0

    Type * Message

    0

    (Type + 2) * 2

    10

    Type % $otherVariable

    1

Функция "round"

Округление чисел. 

Доступные аргументы:

  • числовые поля события;
  • числовые переменные;
  • числовые константы.

    Примеры использования

    (DeviceCustomFloatingPoint1=7.75; DeviceCustomFloatingPoint2=7.5 otherVariable=7.2)

    Результат использования

    round(DeviceCustomFloatingPoint1)

    8

    round(DeviceCustomFloatingPoint2)

    8

    round($otherVariable)

    7

Функция "ceil"

Округление чисел в большую сторону.

Доступные аргументы:

  • числовые поля события;
  • числовые переменные;
  • числовые константы.

    Примеры использования

    (DeviceCustomFloatingPoint1=7.15; otherVariable=8.2)

    Результат использования

    ceil(DeviceCustomFloatingPoint1)

    8

    ceil($otherVariable)

    9

Функция "floor"

Округление чисел в меньшую сторону.

Доступные аргументы:

  • числовые поля события;
  • числовые переменные;
  • числовые константы.

    Примеры использования

    (DeviceCustomFloatingPoint1=7.15; otherVariable=8.2)

    Результат использования

    floor(DeviceCustomFloatingPoint1)

    7

    floor($otherVariable)

    8

Функция "abs"

Получение числа по модулю.

Доступные аргументы:

  • числовые поля события;
  • числовые переменные;
  • числовые константы.

    Примеры использования

    (DeviceCustomNumber1=-7; otherVariable=-2)

    Результат использования

    abs(DeviceCustomFloatingPoint1)

    7

    abs($otherVariable)

    2

Функция "pow"

Возведение числа в степень.

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

  1. База. Вещественные числа.
  2. Степень. Натуральные числа.

Доступные аргументы:

  • числовые поля события;
  • числовые переменные;
  • числовые константы.

    Примеры использования

    pow(DeviceCustomNumber1, DeviceCustomNumber2)

    pow($otherVariable, DeviceCustomNumber1)

В начало
[Topic 234740]

Объявление переменных

Для объявления переменных их необходимо добавить в коррелятор или правило корреляции.

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

  1. В веб-интерфейсе KUMA в разделе РесурсыКорреляторы выберите набор ресурсов нужного коррелятора.

    Откроется мастер установки коррелятора.

  2. Выберите шаг мастера установки Глобальные переменные.
  3. Нажмите на кнопку Добавить переменную и укажите следующие параметры:

    Переменных можно добавить несколько. Добавленные переменные можно изменить или удалить с помощью значка cross.

  4. Выберите шаг мастера установки Проверка параметров и нажмите Сохранить.

Глобальная переменная добавлена в коррелятор. К ней можно обращаться, как к полю события, указывая перед названием переменной символ $. Переменная будет использоваться при корреляции после перезапуска сервиса коррелятора.

Чтобы добавить локальную переменную в существующее правило корреляции:

  1. В веб-интерфейсе KUMA в разделе РесурсыПравила корреляции выберите ресурс нужного правила корреляции.

    Откроется окно параметров правила корреляции. Параметры правила корреляции можно также открыть из коррелятора, в которое оно было добавлено, перейдя на шаг мастера установки Корреляция.

  2. Откройте закладку Селекторы.
  3. В селекторе откройте закладку Локальные переменные, нажмите на кнопку Добавить переменную и укажите следующие параметры:

    Переменных можно добавить несколько. Добавленные переменные можно изменить или удалить с помощью значка cross.

    Для правил корреляции типа standard повторите этот шаг для каждого селектора, в которым вы хотите объявить переменные.

  4. Нажмите Сохранить.

Локальная переменная добавлена в правило корреляции. К ней можно обращаться, как к полю события, указывая перед названием переменной символ $. Переменная будет использоваться при корреляции после перезапуска сервиса коррелятора.

Добавленные переменные можно изменить или удалить. Если правило корреляции обращается к необъявленной переменной (например, если ее название было изменено), в качестве результата возвращается пустая строка.

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

В начало
[Topic 234738]