Директивы

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

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

  1. Нажмите на кнопку «Добавить» и введите название директивы

  2. Сформируйте директиву корреляции с помощью Конструктора директив

  3. Перейдите на вкладку «Дополнительные настройки»

  4. Задайте уровень важности инцидента (критичности): несущественная, низкая, средняя, высокая

  5. Задайте ответственного

  6. Заполните рекомендации по реагированию на инцидент

  7. Сохраните директиву корреляции

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

  1. Запуск скрипта реакции на инцидент при его появлении

  2. Категорию ГосСОПКА

  3. Отправку инцидентов в ГосСОПКА

  4. Агрегирование однотипных инцидентов

  5. Создание в случае срабатывания директивы:

    • только инцидента

    • только события информационной безопасности

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

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

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

конструктор

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

Типы блоков

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

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

  • «Отсутствие события» – блок обратный блоку «Событие». Данный блок сработает в случае, если событие, соответствующее указанным параметрам в данном блоке, не поступило

  • «Утверждение» – блок на простое утверждение. Содержит булевое выражение. Если результат вычисления выражения — истина, то выполнение правила корреляции продолжается, иначе — прерывается, инцидент не будет зарегистрирован

  • «Задержка» – интервал времени, которое коррелятор проигнорирует. Отсчет выполняется от времени предыдущего найденного события

Фильтр

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

Выражение

В данном поле можно указать булевое выражение. Помимо этого, можно работать с нормализованными полями и возвращаемыми параметрами событий (через ключевое слово 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

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

Пример:

переменные

Ветвление

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

filter1

filter1

filter2

filter2

filter3

filter3

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

конструктор3

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:

  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 – список дочерних элементов

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

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

dddir11

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

dddir

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

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

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

  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, либо банка угроз безопасности информации ФСТЭК России. После чего необходимо нажать кнопку «Добавить», далее «Сохранить».

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

mittre

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

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

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

example directive1

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

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

example directive2
example directive3

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

incident history

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

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