Директивы
Директивы позволяют выявлять инциденты информационной безопасности по срабатыванию фильтров и выполнению различных условий, определенных в директиве корреляции.
Директива корреляции – логическая совокупность правил, построенных по иерархическому принципу, в соответствии с которыми осуществляется сравнение параметров событий информационной безопасности, а также их количества и частоты с заданными показателями для выявления инцидентов информационной безопасности. Формирование директив производится следующим образом:
-
Нажмите на кнопку «Добавить» и введите название директивы
-
Сформируйте директиву корреляции с помощью Конструктора директив
-
Перейдите на вкладку «Дополнительные настройки»
-
Задайте уровень важности инцидента (критичности): несущественная, низкая, средняя, высокая
-
Задайте ответственного
-
Заполните рекомендации по реагированию на инцидент
-
Сохраните директиву корреляции
Дополнительно каждой отдельной директиве можно задать:
-
Запуск скрипта реакции на инцидент при его появлении
-
Категорию ГосСОПКА
-
Отправку инцидентов в ГосСОПКА
-
Агрегирование однотипных инцидентов
-
Создание в случае срабатывания директивы:
-
только инцидента
-
только события информационной безопасности
-
инцидента и события информационной безопасности одновременно
-
Конструктор директив
Расположение: Инциденты → Директивы → Добавить (или выбрать существующую директиву) → Конструктор директивы

Конструктор директив необходим для обнаружения инцидентов информационной безопасности. С помощью блоков составляется логическая цепочка для выявления инцидентов информационной безопасности.
Типы блоков
Доступные типы блоков в конструкторе директив:
-
«Событие» – блок конструктора директив для проверки приходящих событий на соответствие заранее созданным фильтрам. Данный тип блока может иметь привязку ко времени до и после события, может дополнительно содержать выражение и переменные, также в нем доступна функция «ветвления»
-
«Отсутствие события» – блок обратный блоку «Событие». Данный блок сработает в случае, если событие, соответствующее указанным параметрам в данном блоке, не поступило
-
«Утверждение» – блок на простое утверждение. Содержит булевое выражение. Если результат вычисления выражения — истина, то выполнение правила корреляции продолжается, иначе — прерывается, инцидент не будет зарегистрирован
-
«Задержка» – интервал времени, которое коррелятор проигнорирует. Отсчет выполняется от времени предыдущего найденного события
Фильтр
Для каждого блока директивы типов «Событие» и «Отсутствие события» обязательным является выбор фильтра.
Выражение
В данном поле можно указать булевое выражение. Помимо этого, можно работать с нормализованными полями и возвращаемыми параметрами событий (через ключевое слово ep
) как, например, IP-адрес, который можно сравнивать по строке, узнать вхождение его в подстроку или использовать регулярные выражения. Также можно использовать в выражении переменные предыдущих блоков через ключевое слово vars
. Пример сравнения IP-адресов двух подряд событий блокировки соединения межсетевым экраном представлен на скриншоте ниже (подробнее о работе данной директиве можно узнать в примере).

Для проверки того или иного выражения можно воспользоваться утилитой komrad-cli. Для этого необходимо ввести команду в терминале:
komrad-cli toolbox cel-go
Пример:
cel-repl> %let x = 1 cel-repl> x == 1 true : bool cel-repl> (x == 1) && (x > 0) true : bool
Переменные и логические условия
В переменные можно добавлять нормализованные поля и возвращаемые параметры события, используемые в корреляции, или добавлять свои значения.
Если вы используете переменные, то рекомендуем добавлять в фильтре условие, что ожидаемое значение поля события не является пустым. В случае, если в директиве указать извлекать значение поля события, которого нет, то инциденты могут не создаться. |
Примеры:
event["ECS.Source.IP"] == "8.8.8.10" || event["ECS.Event.Severity"] == 4
Создастся инцидент, при получении события:
Jan 08 2021 00:16:11 UTC+03 fw.network.lan CEF:0|npo-echelon.ru|echelon|1.1.1111|021|lock connection|5|src=8.8.8.10 spt=46117 dst=8.8.8.1 dpt=75 act=block
event["ECS.Source.IP"] == "8.8.8.10" && event["ECS.Event.Severity"] == 5
Создастся инцидент, при получении события:
Jan 08 2021 00:16:11 UTC+03 fw.network.lan CEF:0|npo-echelon.ru|echelon|1.1.1111|021|lock connection|5|src=8.8.8.10 spt=46117 dst=8.8.8.1 dpt=75 act=block
event["ECS.Source.IP"] != "8.8.8.1" && event["CEF.DeviceProduct"] == "echelon"
Создастся инцидент, при получении события
Jan 08 2021 00:16:11 UTC+03 fw.network.lan CEF:0|npo-echelon.ru|echelon|1.1.1111|021|block connection|5|src=8.8.8.10 spt=46117 dst=8.8.8.1 dpt=75 act=block
Пример:

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

filter1

filter2

filter3
Создаем директиву, используя созданные нами фильтры

Directive (Filters 1 and 2 and 3)
В качестве входных данных (событий ИБ) используется следующая последовательность: «один», «два» (первое такое событие), «два» (второе такое событие), «три» (первое такое событие), «три» (второе такое событие). Рассмотрим 4 случая работы данной директивы, используя разные комбинации ветвлений.
Параметр |
1 случай |
2 случай |
3 случай |
4 случай |
Ветвление 2 блока |
- |
- |
+ |
+ |
Ветвление 3 блока |
- |
+ |
- |
+ |
Количество инцидентов |
1 |
1 |
1 |
1 |
История инцидента |
1 история: Filter 3 – три(первое событие) Filter 2 – два (первое событие) Filter 1 – один |
1 история: Filter 3 – три (первое событие) Filter 2 – два (первое событие) Filter 1 – один 2 история: Filter 3 – три (второе событие) Filter 2 – два (первое событие) Filter 1 – один |
1 история: Filter 3 – три (первое событие) Filter 2 – два (первое событие) Filter 1 – один 2 история: Filter 3 – три (первое событие) Filter 2 – два (второе событие) Filter 1 – один |
1 история: Filter 3 – три (первое событие) Filter 2 – два (первое событие) Filter 1 – один 2 история: Filter 3 – три (второе событие) Filter 2 – два (первое событие) Filter 1 – один 3 история: Filter 3 – три (первое событие) Filter 2 – два (второе событие) Filter 1 – один 4 история: Filter 3 – три (второе событие) Filter 2 – два (второе событие) Filter 1 – один |
Визуально результаты можно представить так

Время после/до предыдущего блока
Время после предыдущего блока – время ожидания события после предыдущего найденного события в часах, минутах, секундах.
Время до предыдущего блока – время ожидания события в прошлом относительно предыдущего найденного события в часах, минутах, секундах
Время до или после блока ориентируется на значение поля (GenerationTime) |
CEL-Go
Для построения сложной логики в полях директивы можно использовать скриптовый язык Google CEL-Go
Директивы в формате YAML
Расположение: Инциденты → Директива → Добавить (или выбрать существующую директиву) → Код
Типы элементов
Правило корреляции представляет собой дерево, каждый элемент которого имеет структуру с одним набором полей.
В этой структуре семантику полей определяет поле Type
, оно всегда является обязательным. Остальные поля могут быть задействованы, могут игнорироваться, все зависит от типа элемента, т.е. этого Type
.
Виды Type:
-
Filter – утверждение на присутствие фильтрованных данных по указанному фильтру. Иначе, поиск присутствия события.
-
NoFilter – обратное типу Filter — утверждается отсутствие события по указанному фильтру.
-
Assert – простое утверждение. Содержит булевое выражение. Если результат вычисления выражения — истина, то выполнение правила корреляции продолжается, иначе — прерывается, инцидента не будет.
-
Delay – задержка. Интервал времени, который коррелятор проигнорирует. Отсчет выполняется от времени предыдущего найденного события.
-
Sequence – список элементов, который интерпретируется последовательно. Выполнение директивы продолжится, если будут выполнены все элементы. Операция «Последовательное И».
-
OneOf – список элементов. Выполнение директивы продолжится, если будет выполнен хотя бы один из элементов. Операция «ИЛИ».
Поля общего назначения
ID – идентификатор элемента. Полезен для информирования об ошибках: ошибки и замечания содержат идентификатор элемента, к которому они относятся. В корреляции значение этого поля не играет никакой роли.
ParentID – идентификатор родительского элемента. Нужен только для корректной работы визуального конструктора. В корреляции значение этого поля не играет никакой роли.
Type – упомянутый ранее тип элемента.
Поля, зависящие от типа элемента
-
Variables – экспорт значений в переменные
-
NegativeWait – ожидание в прошлом относительно предыдущего найденного события в секундах (минутах, если NegativeWaitMinutes, и часах, если NegativeWaitHours)
-
PositiveWait – ожидание после предыдущего найденного события в секундах (минутах, если PositiveWaitMinutes, и часах, если PositiveWaitHours)
-
Filter – название фильтра
-
Expression – условие (where), булевое выражение
-
Forking – включено ли ветвление
-
Children – список дочерних элементов
Удаление директив
Директивы можно удалять, предварительно выбрав их и нажав на значок с корзиной "Удалить". Однако полностью из системы они удалены не будут. Это сделано для того, чтобы была возможность видеть срабатывания по удалённым директивам в списке старых инцидентов. Имя удалённой директивы будет отображаться серым цветом.

При переходе в карточку инцидента в скобках будет указано, что директива удалена.

Дополнительные настройки

Для улучшения последующей обработки инцидентов следует указать дополнительные настройки для созданной директивы. В качестве таких настроек выступают:
-
Важность: несущественная, низкая, средняя и высокая
-
Ответственный – указать ответственного за расследование инцидента
-
Рекомендации
-
Категория ГосСОПКА
-
Отправлять инциденты в ГосСОПКА
-
Включить автоматический запуск реакции на инцидент
-
Агрегировать инциденты
-
Создавать инцидент
-
Создавать событие информационной безопасности
Автоматическое реагирование на инциденты
Действия:
-
Нажмите на директиву корреляции, к которой следует применить автоматический запуск реакции на инцидент
-
Зайдите в «Дополнительные настройки»
-
Отметьте функцию «Включить автоматический запуск реакции на инцидент» внизу страницы
-
Выберите файл скрипта из выпадающего списка (будут указаны скрипты, находящиеся в директории скриптов)
-
Нажмите на кнопку «Сохранить»
Агрегирование инцидентов
Данная функция позволяет агрегировать, т.е. собирать несколько однотипных инцидентов в один по заданным параметрам.
Параметры для агрегации инцидентов:
-
Минимальное количество событий инцидентов в агрегированном - данное число однотипных инцидентов должно сформироваться для того, чтобы подвергнуть их агрегации и перевести в истории одного инцидента
-
Временное окно – в течение данного времени будет работать «окно» агрегации, т.е. подсчет однотипных инцидентов, которые могут быть собраны в историю формирования одного уже агрегированного инцидента
Действия:
-
Нажмите на директиву корреляции, к которой следует применить агрегацию инцидентов
-
Зайдите в «Дополнительные настройки»
-
Отметьте функцию «Агрегировать инциденты» внизу страницы;
-
Установите параметры агрегирования инцидентов;
-
Нажмите на кнопку «Сохранить».
Создание инцидента
Действия:
-
Нажать на директиву корреляции, у которой следует включить функцию создания инцидента;
-
Зайти в «Дополнительные настройки»;
-
Отметить функцию «Создавать инцидент» внизу страницы;
-
Нажать на кнопку «Сохранить».
Создание события информационной безопасности из инцидента
Действия:
-
Нажать на директиву корреляции, для которой требуется создание события ИБ в случае её срабатывания;
-
Зайти в «Дополнительные настройки»;
-
Отметить функцию «Создавать событие информационной безопасности» внизу страницы
-
Нажать на кнопку «Сохранить»
Матрица атак
Нажмите кнопку «Добавить», после чего появятся 5 граф для заполнения, с помощью которых можно классифицировать атаки: матрица атаки, версия матрицы атак, техника атаки, подтехника атаки и тактика атаки. В указанных выше полях можно классифицировать поступающие угрозы, например, с помощью базы Mitre Att&ck, либо банка угроз безопасности информации ФСТЭК России. После чего необходимо нажать кнопку «Добавить», далее «Сохранить».
В случае необходимости, эту информацию можно удалить — выбрать ненужные данные и нажать на значок удаления.

Примеры директив корреляции
Инфраструктура: веб-сервер доступен из интернета и защищен межсетевым экраном. Нам необходимо выявлять попытки сканирования портов и факты запросов к веб-серверу с административными правами, которые сами по себе не являются инцидентами. В случае если сканирование портов и успешная авторизация были осуществлены с одного IP-адреса, должен создаваться инцидент.
Интересующие нас события:
-
блокировка соединения межсетевым экраном:
May 20 2022 00:16:11 UTC+03 fw.network.lan CEF:0|npo-echelon.ru|echelon|1.1.1111|021|block connection|5|src=8.8.8.10 spt=46117 dst=8.8.8.1 dpt=75 act=block
-
запрос к веб-серверу с учетной записью admin:
May 20 2021 00:16:30 UTC+03 http.network.lan CEF:0|npo-echelon.ru|echelon|1.1.1111|011|http request to web-server|5|src=8.8.8.10 spt=56117 dst=8.8.8.1 dpt=80 act=block duser=admin request=manager/html
Фильтр для выявления блокировки соединения, возвращающий IP-адрес источника соединения (идентификатор фильтра: 10001):
local strings = require("strings")
function filter(event)
local ok_1 = true
-- and
do
ok_1 = ok_1 and event:hasString("CEF.DeviceEventClassID", "021") and event:hasString("ECS.Event.Action", "block")
end
if ok_1 then return {eventSrcIP=event:get('ECS.Source.IP')} end
end
Фильтр для выявления запросов к веб-серверу с учетной записью администратора (идентификатор фильтра: 10002):
local strings = require("strings")
function filter(event)
local ok_1 = true
-- and
do
ok_1 = ok_1 and event:hasString("CEF.DeviceEventClassID", "011") and event:hasString("ECS.Destination.UserName", "admin")
end
if ok_1 then return {eventSrcIP=event:get('ECS.Source.IP')} end
end
Пример директивы корреляции 1
Директива корреляции, которая будет срабатывать в случае прихода событий, удовлетворяющих любому из составленных выше фильтров, в Конструкторе директив приведена на рисунке

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


После срабатывания директивы появится инцидент с историей
