Нормализация событий
Напомним, что нормализация событий от источников для последующей обработки и анализа выполняется по созданным заранее правилам. Специальные правила создаются для каждого источника и типа события.
Статью подготовили инженеры внедрения и технической поддержки Группа компаний «TS Solution» решает задачи по проектированию и внедрению комплексных проектов в сфере ИТ и ИБ на основе отечественных и зарубежных решений. Основные направления деятельности: – Аудит, соответствие требованиям регуляторов, категорирование объектов КИИ; – Полный спектр работ по построению системы ИБ; – Построение IT-инфраструктуры;– Проектирование и внедрение инфраструктурных решений, серверные технологии и системы хранения данных; – Работы требующие аттестации ФСТЭК и ФСБ; – Предоставление 1-й и 2-й линии технической поддержки и полное техническое сопровождение проектов; – Проведение авторизованных и авторских курсов и программ обучения |
- системные;
- пользовательские.
Пользовательские правила нормализации вы можете создавать, изменять, копировать и удалять.
Правило нормализации имеет следующие параметры:
- системное название: может состоять из букв латинского алфавита, цифр и знака подчеркивания, должно начинаться с прописной буквы или цифры;
- папка: папка или пакет экспертизы для хранения правила в БД;
- набор для установки: набор объектов, в составе которого правило будет устанавливаться в MaxPatrol SIEM (правило может быть добавлено одновременно в несколько наборов);
- может иметь описание на русском или английском языке;
- правило локализации: правило, согласно которому с событиями, нормализованными по правилу нормализации, в веб-интерфейсе MaxPatrol SIEM связывается определенное описание на русском или английском языке
Правило нормализации должно начинаться с ключевого слова, указывающего на формат необработанного события. После ключевого слова в одинарных или двойных кавычках указывается форматная строка, вид которой зависит от формата события.
Форматы событий:
- TEXT: для неструктурированного текста, например стандарта syslog;
- TABULAR: для ассоциативного массива «ключ — значение» формата JSON;
- JSON: для формата JSON;
- EVENTLOG: для событий журнала Windows;
- XML: для событий формата XML.
Правило нормализации может содержать функцию «submessage»: для объявления вложенного правила нормализации и для распознавания фрагмента необработанного события. И ключевые слова «subformula», «endsubformula» для ввода блока операторов вложенного правила нормализации.
В блоке операторов правила нормализации вы можете использовать функции, операторы и конструкции языка XP, переменные (должны начинаться с $) и поля нормализованного события:
<Ключевое слово> = '<Форматная строка>'
COND = (<Условие>)
submessage («<Формат фрагмента>», «<Название вложенного правила>», <Фрагмент события>)
subformula <Название вложенного правила>
<Ключевое слово вложенного правила> = '<Форматная строка вложенного правила>'
COND = (<Условие вложенного правила>)
<Блок операторов вложенного правила>
endsubformula
<Блок операторов>
Заполнение полей нормализованного события
Заполнение полей нормализованного события выполняется в блоке операторов правила нормализации (и вложенного правила).
В правиле нормализации обязательно нужно указать значения для следующих полей нормализованного события:
- time: для указания времени регистрации события на источнике;
- event_src.title: для указания названия продукта источника события; указывается в нижнем регистре без пробелов (можно использовать символ подчеркивания), например windows, asa, oracle_database;
- event_src.vendor: для указания производителя источника; указывается в нижнем регистре без пробелов, например microsoft, cisco;
- action, object, status: для описания характера, объекта и результата воздействия; могут принимать только определенные значения;
- event_src.category: для назначения категории источника события; может принимать только определенные значения;
- importance: для указания важности события для информационной безопасности; может принимать значения info, low, medium, high;
- id : для ввода идентификатора правила нормализации в виде: <Пространство_имен>_<Производитель>_<Название_источника>_<Транспорт>_<Тип_события>, например PT_Cisco_IOS_syslog_SEC_LOGIN_QUIET_MODE_OFF
Стандартные правила в Knowledge Base
В базовом пакете экспертизы есть стандартные правила нормализации для различных вендоров.

Есть возможность посмотреть: само правило, его системное название, идентификатор, тип, поставщика, расположение в папке и статусы валидации и установки.

Пример написания правила нормализации события
Рассмотрим пример события «Login_ongoing» о попытке пользователя войти в систему.
Сырые события в формате TEXT выглядят следующим образом:
# <134>1 2021−02−11T17:03:43Z checkpoint-sm CheckPoint 9525 — [flags:"0″; ifdir:"inbound"; loguid:"{0×0,0×0,0×0,0×0}"; origin:"10.125.1.30″; time:"1 613 063 023″; version:"1″; default_device_message:"<85>login: ROOT LOGIN ON pts/2 FROM 10.125.3.20 «; facility:"security/authorization messages»; product:"Syslog"; syslog_severity:"Notice"; ]
# <134>1 2021−03−30T17:16:55Z checkpoint-sm CheckPoint 9525 — [flags:"0″; ifdir:"inbound"; loguid:"{0×0,0×0,0×0,0×0}"; origin:"10.125.1.5″; time:"1 617 124 615″; version:"1″; default_device_message:"<86>login: LOGIN ON pts/3 BY anon FROM 10.125.2.1 «; facility:"security/authorization messages»; product:"Syslog"; syslog_severity:"Informational"; ]
Напишем формулу нормализации:
- В начале нужно указать формат события (в нашем случае TEXT) и в одинарных кавычках указать форматную строку для обработки неструктурированного текста. Форматная строка в этом случае является шаблоном для распознавания текста события, она должна повторять его структуру и содержать шаблоны для распознавания отдельных слов или символов события (в фигурных скобках) и сами слова (символы), если их расположение в событии фиксировано.
TEXT = '{"<"NUMBER">"?}{NUMBER?} {$syslog_time=DATETIME} {$hostname=HOSTNAME}
CheckPoint {NUMBER} - [ {$kv=KEYVALUE(";", ":", """)}'
# <134>1 2021-02-11T17:03:43Z checkpoint-sm CheckPoint 9525 - [flags:"0"; ifdir:"inbound"; loguid:"{0x0,0x0,0x0,0x0}"; origin:"10.125.1.30"; time:"1613063023"; version:"1"; default_device_message:"<85>login: ROOT LOGIN ON pts/2 FROM 10.125.3.20 "; facility:"security/authorization messages"; product:"Syslog"; syslog_severity:"Notice"; ]
Токен KEYVALUE используется для распознавания ассоциативного массива, содержащего пары «ключ — значение». Распознаются все символы до конца строки.
Токен имеет три аргумента: в первом нужно указать символ, разделяющий элементы строки; во втором символ, разделяющий пару «ключ — значение»; в третьем символ экранирования значения, стоящий перед каждым значением в паре и после него. Для ввода двойных кавычек — две обратные косые черты ().
- Далее объявляем условие применения правила:
and find_substr($kv["default_device_message"], "LOGIN ON") != null
В нашем случае условия выполняются:
# <134>1 2021−02−11T17:03:43Z checkpoint-sm CheckPoint 9525 — [flags:"0"; ifdir:"inbound"; loguid:"{0×0,0×0,0×0,0×0}"; origin:"10.125.1.30"; time:"1 613 063 023"; version:"1"; default_device_message:"<85>login: ROOT LOGIN ON pts/2 FROM 10.125.3.20 "; facility:"security/authorization messages"; product:"Syslog"; syslog_severity:"Notice"; ]
2. Указываем обязательные значения для следующих полей:
subject = "account" #субъект воздействия
action = "login" #характер воздействия на объект
object = "system" #объект воздействия
status = "ongoing" #конечный результат воздействия
Схему полей событий и их допустимые значения можно посмотреть в документации для разработчика.
3. Далее объявляем вложенное правило нормализации с помощью ключевых слов «subformula», «endsubformula»:
subformula 'sub1'
TEXT = '{UNTIL("login")}: {subject.account.privileges="ROOT"?} LOGIN ON {logon_service=STRING}
{"BY" subject.account.name=STRING?} {$from="FROM" src.ip=STRING?}'
endsubformula
Извлекаем "subject.account.privileges, logon_service" и "src.ip из default_device_message":
# <134>1 2021-02-11T17:03:43Z checkpoint-sm CheckPoint 9525 - [flags:"0"; ifdir:"inbound"; loguid:"{0x0,0x0,0x0,0x0}"; origin:"10.125.1.30"; time:"1613063023"; version:"1"; default_device_message:"<85>login: ROOT LOGIN ON pts/2 FROM 10.125.3.20 "; facility:"security/authorization messages"; product:"Syslog"; syslog_severity:"Notice"; ]
Токен UNTIL используется для распознавания последовательности символов (и пробелов) до ограничителя, указанного в аргументе токена.
4. Указываем функцию для объявления вложенного правила нормализации:
submessage («<Формат фрагмента>», «<Название вложенного правила>», <Фрагмент события>)
submessage('TEXT', 'sub1', $kv["default_device_message"])
5. Заключительная часть — это блок операторов. В блоке операторов правила нормализации можно использовать функции, операторы и конструкции языка XP, переменные (должны начинаться с $) и поля нормализованного события.
Определяем метод логирования (удаленно или локально):
if $from != null then
logon_auth_method = "remote"
else
logon_auth_method = "local"
endif
datafield9 = $hostname #имя устройства с LogExporter
time = coalesce(epoch_to_datetime(number($kv["time"])), $syslog_time) #время регистрации события на источнике
Функция coalesce проверяет значения аргументов слева направо и возвращает значение первого отличного от null. Количество аргументов может быть любым. Если аргументы не заданы, функция возвращает null:
importance = "info" #важность события для информационной безопасности, может принимать значения info, low, medium, high
Следующие поля служат для назначения категории нарушения информационной безопасности, в связи с которым регистрируется корреляционное событие.
Правила заполнения можно также посмотреть в документации разработчика:
category.generic = "Operating System"
category.high = "Access Management"
category.low = "Communication"
event_src.vendor = "checkpoint" #производитель источника события
event_src.title = "gaia" #название продукта источника события
event_src.ip = $kv["origin"] #IP-адрес источника события
event_src.category = "Network security" #категория источника события, принимает только определенные значения, указанные в документации разработчика
id = "PT_Checkpoint_Gaia_syslog_LogExporter_Common_Login_ongoing" #идентификатор правила нормализации
Таким образом итоговое правило нормализации выглядит следующим образом:
# <134>1 2021-02-11T17:03:43Z checkpoint-sm CheckPoint 9525 - [flags:"0"; ifdir:"inbound"; loguid:"{0x0,0x0,0x0,0x0}"; origin:"10.125.1.30"; time:"1613063023"; version:"1"; default_device_message:"<85>login: ROOT LOGIN ON pts/2 FROM 10.125.3.20 "; facility:"security/authorization messages"; product:"Syslog"; syslog_severity:"Notice"; ]
# <134>1 2021-03-30T17:16:55Z checkpoint-sm CheckPoint 9525 - [flags:"0"; ifdir:"inbound"; loguid:"{0x0,0x0,0x0,0x0}"; origin:"10.125.1.5"; time:"1617124615"; version:"1"; default_device_message:"<86>login: LOGIN ON pts/3 BY anon FROM 10.125.2.1 "; facility:"security/authorization messages"; product:"Syslog"; syslog_severity:"Informational"; ]
TEXT = '{"<"NUMBER">"?}{NUMBER?} {$syslog_time=DATETIME} {$hostname=HOSTNAME}
CheckPoint {NUMBER} - [ {$kv=KEYVALUE(";", ":", """)}'
COND = $kv["facility"] == "security/authorization messages"
and find_substr($kv["default_device_message"], "LOGIN ON") != null
subject = "account"
action = "login"
object = "system"
status = "ongoing"
subformula 'sub1'
TEXT = '{UNTIL("login")}: {subject.account.privileges="ROOT"?} LOGIN ON {logon_service=STRING}
{"BY" subject.account.name=STRING?} {$from="FROM" src.ip=STRING?}'
endsubformula
submessage('TEXT', 'sub1', $kv["default_device_message"])
if $from != null then
logon_auth_method = "remote"
else
logon_auth_method = "local"
endif
datafield9 = $hostname
time = coalesce(epoch_to_datetime(number($kv["time"])), $syslog_time)
importance = "info"
category.generic = "Operating System"
category.high = "Access Management"
category.low = "Communication"
event_src.vendor = "checkpoint"
event_src.title = "gaia"
event_src.ip = $kv["origin"]
event_src.category = "Network security"
id = "PT_Checkpoint_Gaia_syslog_LogExporter_Common_Login_ongoing"
В правилах локализации укажем:
Критерии
id = "PT_Checkpoint_Gaia_syslog_LogExporter_Common_Login_ongoing" and protocol = null and subject.name != null
Значение (русский)
Пользователь {subject.name} пытался войти в систему на узле {event_src.host} через локальную консоль
Значение (английский)
The user {subject.name} made an attempt to log in to the system on host {event_src.host} via the local console
ИЛИ
Критерии
id = "PT_Checkpoint_Gaia_syslog_LogExporter_Common_Login_ongoing" and protocol = null and subject.privileges != null
Значение (русский)
Пользователь с правами {subject.privileges} пытался войти в систему на узле {event_src.host} через локальную консоль
Значение (английский)
A user with the {subject.privileges} permissions made an attempt to log in to the system on host {event_src.host} via the local console
Отладка правил нормализации
Для отладки нового правила нормализации воспользуемся встроенными возможности Knowledge Base.
Создадим правило нормализации:

Заполняем все поля и нажимаем «создать»:

Далее нужно провалидировать наше правило и установить в SIEM:

Заключение
Сегодня мы разобрали структуру правил нормализации в MaxPatrol SIEM и написали собственное правило. В следующей заключительной статье вы узнаете все о правилах корреляции в MP SIEM и сможете поддтвердить полученные на курсе знания.
Оставайтесь с нами!
TS University делает большой шаг в сторону доступности знаний. Мы
Теперь вы можете свободно изучать и делиться понравившимися материалами с коллегами без регистрации на сайте!