Плагин sigma
Введение
Плагин sigma
входит в состав YAML плагинов processors
и позволяет проводить предварительную фильтрацию на коллекторах, используя правила Sigma.
Немного о правилах Sigma: это open-source формат правил для SIEM, конвертируемый в различные представления (elasticsearch, splunk и т.д.). Преимуществами этих правил является богатый набор открытых правил и активное сообщество, покрывающее правилами появляющиеся уязвимости. Поэтому данный плагин удобен для своевременного реагирования на тенденции в сфере ИБ, поскольку новые правила достаточно загрузить в плагин, после чего новая уязвимость сразу отслеживается нашей SIEM.
Конфигурация
Не считая поля module
, обыкновенного для плагинов processors
и позволяющего определить тип плагина, в конфигурацию плагина sigma
входит 3 поля:
rules
- массив правил Sigma. Структура каждого правила полностью соответствует указанному в документации и спецификацииcase-sensitive
- по умолчанию плагинsigma
игнорирует регистр в тексте события и его полей. Данное поле позволяет управлять этим поведением, определяя, чувствителен ли плагин к регистру (case-sensitive: true
) или нет (case-sensitive: false
).deny
- отклонять событие, если оно не соответствует ни одному из правил. По умолчанию события не отклоняются.
Пример конфигурации:
processors:
- module: sigma
case-sensitive: false
deny: true
rules:
# Источник - https://github.com/SigmaHQ/sigma/blob/master/rules/linux/builtin/lnx_buffer_overflows.yml
- title: Buffer Overflow Attempts
id: 18b042f0-2ecd-4b6e-9f8d-aa7a7e7de781
status: stable
description: Detects buffer overflow attempts in Unix system log files
references:
- https://github.com/ossec/ossec-hids/blob/1ecffb1b884607cb12e619f9ab3c04f530801083/etc/rules/attack_rules.xml
author: Florian Roth (Nextron Systems)
date: 2017/03/01
tags:
- attack.t1068
- attack.privilege_escalation
logsource:
product: linux
detection:
keywords:
- 'attempt to execute code on stack by'
- 'FTP LOGIN FROM .* 0bin0sh'
- 'rpc.statd[\d+]: gethostbyname error for'
- 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
condition: keywords
falsepositives:
- Unknown
level: high
В данном примере используется правило, детектирующее попытку переполнения буфера в Linux. Более подробно о том, как плагин обрабатывает блок detection
будет рассказано далее. Если событие не будет соответствовать правилу (причем, независимо от регистра, т.к. case-sensitive
равен false
), то оно не будет отправлено на дальнейшую обработку, поскольку оно будет отклонено - deny
равен true
.
Обработка события с помощ ью блока detection правила
Согласно документации, каждая группа (т.н. selection
) может производить фильтрацию тремя различными способами:
-
По ключевым словам - идет проверка вхождения заданных ключевых слов в исходный текст события. Если говорить в контексте YAML, то для применения этого способа в блоках
selection
необходимо указать ключевые слова в виде списка, например:detection:
my_keywords:
- первое слово
- второе слово
- третье слово
condition: my_keywords -
По полю - идет проверка соответствия поля заданному значению. Для применения этого способа необходимо реализовать
selection
как словарь, а для конкретного поля запись словаря должна иметь тип "строка-строка". Например:detection:
field_selection:
field: value
second_field: second_value
condition: field_selection -
Множественная проверка по полю - идет проверка соответствия поля одному из заданных значений. Для применения этого способа необходимо реализовать
selection
как словарь, а для конкретного поля запись словаря должна иметь тип "строка-список строк". Например:detection:
field_list_selection:
field:
- first_value
- second_value
- third_value
condition: field_list_selection
Реализация плагина Sigma в KOMRAD интерпретирует эти способы фильтрации следующим образом:
- Способ фильтрации по ключевым словам представляет собой поиск любого из ключевых слов в исходном тексте события, т.е в поле
Raw
. - Способ фильтрации по полю представляет собой соответствие значения поля (нормализованного, например
field
превратится вField
) заданному. - Способ множественной фильтрации по полю представляет собой соответствие значения поля (также нормализованного) любому из заданных.
Результатом применения каждого блока selection
является логическое значение - подходит событие под этот блок или нет. Чтобы на основе результатов блоков сделать вывод о том, подходит событие под все правило или нет, необходимо использовать поле condition
. Более подробно о нем можно прочитать в документации. Если описать его вкратце: можно задать возможные комбинации результатов блоков (с помощью И, ИЛИ и НЕ).
Также полезной фишкой в правилах Sigma являются модификаторы, позволяющие как-либо обработать анализируемый текст, либо поменять семантику правил. Например, с их помощью можно использовать регулярные выражения, анализировать текст в base64 и многое другое. Плагин Sigma поддерживает модификаторы startswith
, endswith
, re
, contains
и all
.
Результат применения плагина к событию
После того, как плагин полностью обработал событие, если событие соответствует хотя бы одному правилу, то в это событие будет добавлено новое поле - Sigma.MatchedRules
. Это поле будет содержать массив имен правил, под которые подходит событие. Поле можно использовать для дальнейшей фильтрации и корреляции.
Если ни одно правило не подошло под событие, и параметр deny
имеет значение true
, то событие будет отклонено и не будет проходить дальнейшую обработку.