Директивы
Директивы позволяют выявлять инциденты информационной безопасности по срабатыванию фильтров и выполнению различных условий, определенных в директиве корреляции.
Директива корреляции – логическая совокупность правил, построенных по иерархическому принципу, в соответствии с которыми осуществляется сравнение параметров событий информационной безопасности, а также их количества и частоты с заданными показателями для выявления инцидентов информационной безопасности. Формирование директив производится следующим образом:
- Нажмите на кнопку
Добавить
и введите название директивы - Сформируйте директиву корреляции с помощью Конструктора директив
- Перейдите на вкладку «Дополнительные настройки»
- Задайте уровень важности инцидента (критичности): несущественная, низкая, средняя, высокая
- Задайте ответственного
- Заполните рекомендации по реагированию на инцидент
- Сохраните директиву корреляции
Дополнительно каждой отдельной директиве можно задать:
- Запуск скрипта реакции на инцидент при его появлении
- Категорию ГосСОПКА
- Отправку инцидентов в ГосСОПКА
- Агрегирование однотипных инцидентов
- Создание в случае срабатывания директивы:
- только инцидента
- только события информационной безопасности
- инцидента и события информационной безопасности одновременно
Конструктор директив
Расположение: Инциденты ⇒ Директивы ⇒ Добавить (или выбрать существующую директиву) ⇒ Конструктор директивы
Конструктор директив необходим для обнаружения инцидентов информационной безопасности. С помощью блоков составляется логическая цепочка для выявления инцидентов информационной безопасности.
Типы блоков
Доступные типы блоков в конструкторе директив:
- «Событие» – блок конструктора директив для проверки приходящих событий на соответствие заранее созданным фильтрам. Данный тип блока может иметь привязку ко времени до и после события, может дополнительно содержать выражение и переменные, также в нем доступна функция «ветвления»
- «Отсутствие события» – блок обратный блоку «Событие». Данный блок сработает в случае, если событие, соответствующее указанным параметрам в данном блоке, не поступило
- «Утверждение» – блок на простое утверждение. Содержит булево выражение. Если результат вычисления выражения — истина, то выполнение правила корреляции продолжается, иначе — прерывается, инцидент не будет зарегистрирован
- «Задержка» – интервал времени, которое коррелятор проигнорирует. Отсчет выполняется от времени предыдущего найденного события
Фильтр
Для каждого блока директивы типов «Событие» и «Отсутствие события» обязательным является выбор фильтра.
Выражение
В данном поле можно указать булево выражение. Помимо этого, можно работать с нормализованными полями и возвращаемыми параметрами событий (через ключевое слово 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-адреса, в Конструкторе директив приведена ниже
После срабатывания директивы появится инцидент с историей
Поиск по директивам
В KOMRAD присутствует возможность при поиске по директивам отразить результаты поиска фильтров в директивах. Поэтому в результатах поиска вы не сразу увидите принадлежность запросу, но когда зайдёте в директиву — там будет фильтр, название которого содержит поисковый запрос.