Перейти к основному содержимому
Версия: 4.3.58

Директивы

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

Директива корреляции – логическая совокупность правил, построенных по иерархическому принципу, в соответствии с которыми осуществляется сравнение параметров событий информационной безопасности, а также их количества и частоты с заданными показателями для выявления инцидентов информационной безопасности. Формирование директив производится следующим образом:

  1. Нажмите на кнопку Добавить и введите название директивы
  2. Сформируйте директиву корреляции с помощью Конструктора директив
  3. Перейдите на вкладку «Дополнительные настройки»
  4. Задайте уровень важности инцидента (критичности): несущественная, низкая, средняя, высокая
  5. Задайте ответственного
  6. Заполните рекомендации по реагированию на инцидент
  7. Сохраните директиву корреляции

Дополнительно каждой отдельной директиве можно задать:

  1. Запуск скрипта реакции на инцидент при его появлении
  2. Категорию ГосСОПКА
  3. Отправку инцидентов в ГосСОПКА
  4. Агрегирование однотипных инцидентов
  5. Создание в случае срабатывания директивы:
  • только инцидента
  • только события информационной безопасности
  • инцидента и события информационной безопасности одновременно

Конструктор директив

Расположение: Инциденты ⇒ Директивы ⇒ Добавить (или выбрать существующую директиву) ⇒ Конструктор директивы

1

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

Типы блоков

Доступные типы блоков в конструкторе директив:

  • «Событие» – блок конструктора директив для проверки приходящих событий на соответствие заранее созданным фильтрам. Данный тип блока может иметь привязку ко времени до и после события, может дополнительно содержать выражение и переменные, также в нем доступна функция «ветвления»
  • «Отсутствие события» – блок обратный блоку «Событие». Данный блок сработает в случае, если событие, соответствующее указанным параметрам в данном блоке, не поступило
  • «Утверждение» – блок на простое утверждение. Содержит булево выражение. Если результат вычисления выражения — истина, то выполнение правила корреляции продолжается, иначе — прерывается, инцидент не будет зарегистрирован
  • «Задержка» – интервал времени, которое коррелятор проигнорирует. Отсчет выполняется от времени предыдущего найденного события

Фильтр

Для каждого блока директивы типов «Событие» и «Отсутствие события» обязательным является выбор фильтра.

Выражение

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

2

Для проверки того или иного выражения можно воспользоваться утилитой 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

В самой директиве есть возможность извлечь значение поля и использовать его в выражении.

Пример:

3

Ветвление

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

4

filter1

5

filter2

6

filter3

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

7

Directive (Filters 1 and 2 and 3)

В качестве входных данных (событий ИБ) используется следующая последовательность: «один», «два» (первое такое событие), «два» (второе такое событие), «три» (первое такое событие), «три» (второе такое событие). Рассмотрим 4 случая работы данной директивы, используя разные комбинации ветвлений.

Параметр1 случай2 случай3 случай4 случай
Ветвление 2 блока--++
Ветвление 3 блока-+-+
Количество инцидентов1111
История инцидента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 – один

Визуально результаты можно представить так

8

Время после/до предыдущего блока

Время после предыдущего блока – время ожидания события после предыдущего найденного события в часах, минутах, секундах.

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

подсказка

Время до или после блока ориентируется на значение поля (GenerationTime)

CEL-Go

Для построения сложной логики в полях директивы можно использовать скриптовый язык Google CEL-Go

Директивы в формате YAML

Расположение: Инциденты ⇒ Директива ⇒ Добавить (или выбрать существующую директиву) ⇒ Код

Типы элементов

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

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

Виды Type:

  1. Filter – утверждение на присутствие фильтрованных данных по указанному фильтру. Иначе, поиск присутствия события.
  2. NoFilter – обратное типу Filter — утверждается отсутствие события по указанному фильтру.
  3. Assert – простое утверждение. Содержит булево выражение. Если результат вычисления выражения — истина, то выполнение правила корреляции продолжается, иначе — прерывается, инцидента не будет.
  4. Delay – задержка. Интервал времени, который коррелятор проигнорирует. Отсчет выполняется от времени предыдущего найденного события.
  5. Sequence – список элементов, который интерпретируется последовательно. Выполнение директивы продолжится, если будут выполнены все элементы. Операция «Последовательное И».
  6. OneOf – список элементов. Выполнение директивы продолжится, если будет выполнен хотя бы один из элементов. Операция «ИЛИ».

Поля общего назначения

ID – идентификатор элемента. Полезен для информирования об ошибках: ошибки и замечания содержат идентификатор элемента, к которому они относятся. В корреляции значение этого поля не играет никакой роли.

ParentID – идентификатор родительского элемента. Нужен только для корректной работы визуального конструктора. В корреляции значение этого поля не играет никакой роли.

Type – упомянутый ранее тип элемента.

Поля, зависящие от типа элемента

  • Variables – экспорт значений в переменные
  • NegativeWait – ожидание в прошлом относительно предыдущего найденного события в секундах (минутах, если NegativeWaitMinutes, и часах, если NegativeWaitHours)
  • PositiveWait – ожидание после предыдущего найденного события в секундах (минутах, если PositiveWaitMinutes, и часах, если PositiveWaitHours)
  • Filter – название фильтра
  • Expression – условие (where), булево выражение
  • Forking – включено ли ветвление
  • Children – список дочерних элементов

Удаление директив

Директивы можно удалять, предварительно выбрав их и нажав на значок с корзиной Удалить. Однако полностью из системы они удалены не будут. Это сделано для того, чтобы была возможность видеть срабатывания по удалённым директивам в списке старых инцидентов. Имя удалённой директивы будет отображаться серым цветом.

Alt text

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

Alt text

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

Alt text

Для улучшения последующей обработки инцидентов следует указать дополнительные настройки для созданной директивы. В качестве таких настроек выступают:

  1. Важность: несущественная, низкая, средняя и высокая
  2. Ответственный – указать ответственного за расследование инцидента
  3. Рекомендации
  4. Категория ГосСОПКА
  5. Отправлять инциденты в ГосСОПКА
  6. Включить автоматический запуск реакции на инцидент
  7. Агрегировать инциденты
  8. Создавать инцидент
  9. Создавать событие информационной безопасности

Автоматическое реагирование на инциденты

Действия:

  1. Нажмите на директиву корреляции, к которой следует применить автоматический запуск реакции на инцидент
  2. Зайдите в «Дополнительные настройки»
  3. Отметьте функцию Включить автоматический запуск реакции на инцидент внизу страницы
  4. Выберите файл скрипта из выпадающего списка (будут указаны скрипты, находящиеся в директории скриптов)
  5. Нажмите на кнопку Сохранить

Агрегирование инцидентов

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

Параметры для агрегации инцидентов:

  1. Минимальное количество событий инцидентов в агрегированном - данное число однотипных инцидентов должно сформироваться для того, чтобы подвергнуть их агрегации и перевести в истории одного инцидента
  2. Временное окно – в течение данного времени будет работать «окно» агрегации, т.е. подсчет однотипных инцидентов, которые могут быть собраны в историю формирования одного уже агрегированного инцидента

Действия:

  1. Нажмите на директиву корреляции, к которой следует применить агрегацию инцидентов
  2. Зайдите в «Дополнительные настройки»
  3. Отметьте функцию Агрегировать инциденты внизу страницы
  4. Установите параметры агрегирования инцидентов
  5. Нажмите на кнопку Сохранить

Создание инцидента

Действия:

  1. Нажать на директиву корреляции, у которой следует включить функцию создания инцидента
  2. Зайти в «Дополнительные настройки»
  3. Отметить функцию Создавать инцидент внизу страницы
  4. Нажать на кнопку Сохранить.

Создание события информационной безопасности из инцидента

Действия:

  1. Нажать на директиву корреляции, для которой требуется создание события ИБ в случае её срабатывания
  2. Зайти в «Дополнительные настройки»
  3. Отметить функцию Создавать событие информационной безопасности внизу страницы
  4. Нажать на кнопку Сохранить

Матрица атак

Нажмите кнопку Добавить, после чего появятся 5 граф для заполнения, с помощью которых можно классифицировать атаки: матрица атаки, версия матрицы атак, техника атаки, подтехника атаки и тактика атаки. В указанных выше полях можно классифицировать поступающие угрозы, например, с помощью базы Mitre Att&ck, либо банка угроз безопасности информации ФСТЭК России. После чего необходимо нажать кнопку Добавить, далее Сохранить.

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

Alt text

Примеры директив корреляции

Инфраструктура: веб-сервер доступен из интернета и защищен межсетевым экраном. Нам необходимо выявлять попытки сканирования портов и факты запросов к веб-серверу с административными правами, которые сами по себе не являются инцидентами. В случае если сканирование портов и успешная авторизация были осуществлены с одного 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

Директива корреляции, которая будет срабатывать в случае прихода событий, удовлетворяющих любому из составленных выше фильтров, в Конструкторе директив приведена на рисунке

Alt text

Пример директивы корреляции 2

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

Alt text Alt text

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

Alt text

Поиск по директивам

В KOMRAD присутствует возможность при поиске по директивам отразить результаты поиска фильтров в директивах. Поэтому в результатах поиска вы не сразу увидите принадлежность запросу, но когда зайдёте в директиву — там будет фильтр, название которого содержит поисковый запрос.