Представленные в 2019 году, модификаторы Sigma были включены в спецификацию Sigma, позволив инженерам по обнаружению выполнять более сложные операции с правилами Sigma. Эти операции, включая регулярные выражения (Regex), булеву логику и запись в нотации CIDR, поддерживаются большинством SIEM-систем.
Обзор
Значения заданных полей внутри правил Sigma могут быть изменены с помощью Модификаторов Значений (Value Modifiers). Модификаторы значений (или проще «модификаторы») добавляются после имени поля с помощью символа вертикальной черты | к каждому полю, которое вы хотите модифицировать.
1 2 3 | detection: selection: TargetFilename|endswith: '.cmdline' |
Модификаторы также могут быть объединены в цепочку (chained) для выполнения более сложных операций.
Доступные модификаторы полей
Ниже приведен список доступных модификаторов полей.
- all
- base64 / base64offset
- cased
- cidr
- contains
- endswith
- exists
- expand
- fieldref
- gt
- gte
- lt
- lte
- re
- startswith
- utf16 / utf16le / utf16be / wide
- windash
all
1 2 3 4 5 6 7 | detection: selection: c-uri|contains|all: - "/ecp/default.aspx" - "__VIEWSTATEGENERATOR=" - "__VIEWSTATE=" condition: selection |
Обычно списки значений в сгенерированном запросе связываются оператором OR. Модификатор all изменяет это на AND.
Этот модификатор полезен, если вы хотите выразить вызов командной строки с разными параметрами, где порядок может меняться, и он устраняет необходимость в некоторых громоздких обходных решениях.
Примечание: Значения, состоящие из одного элемента, не могут иметь модификатор all, так как некоторые системы не могут его поддерживать. Если вы используете его как обходной путь для дублирования поля в выборке, вместо этого создайте новую выборку.
base64 / base64offset
1 2 3 4 5 6 7 8 9 | title: Использование base64-шелла в HTTP-трафике --- detection: selection: fieldname|base64offset|contains: - /bin/bash - /bin/sh - /bin/zsh condition: selection |
Набор модификаторов base64 закодирует предоставленные значения в строки в формате base64. Часто используется вместе с contains для идентификации вредоносной инъекции в приложения.
Эту технику часто используют злоумышленники, чтобы скрыть поведение, выполняя команды или отправляя HTTP-параметры с использованием base64, что иногда предотвращает работу традиционных методов обнаружения.
Совет: Модификатор base64offset обычно предпочтительнее модификатора base64, потому что значение ASCII, закодированное в base64, может иметь 3 разных смещения (offset или shift), которые могут возникнуть в процессе кодирования.
cased
1 2 3 4 | detection: selection: fieldname|cased: "CaseSensitiveValue" condition: selection |
Модификатор cased указывает, что значение применяется с учетом регистра. Поведение Sigma по умолчанию — сопоставление без учета регистра.
cidr
1 2 3 4 | detection: selection: first_ip_address|cidr: 192.0.0.0/8 second_ip_address|cidr: 192.168.0.0/23 |
1 2 3 | detection: selection: ipaddress|cidr: 2a03:2880:f132:83:face:b00c::/96 |
Модификатор cidr позволяет использовать подсети в формате CIDR в качестве значений полей. Поддерживаются как IPv4, так и IPv6 адреса.
contains
1 2 3 | detection: selection: fieldname|contains: needle |
Модификатор contains вставит подстановочный знак (обычно *) вокруг предоставленного значения(ий), так что значение будет найдено в любом месте поля.
endswith
1 2 3 | detection: selection: fieldname|endswith: needle |
Модификатор endswith вставит подстановочный знак (обычно *) в начале предоставленного значения(ий), так что значение будет найдено в конце поля.
exists
1 2 3 4 5 6 7 | title: Использование администратора logsource: product: windows detection: selection: user|exists: true condition: selection |
1 2 3 4 5 6 7 | title: Использование администратора logsource: product: windows detection: selection: user|exists: false condition: selection |
Модификатор exists сгенерирует запрос для проверки существования поля fieldname. Значением модификатора может быть true или false. Установка значения в false приведет к созданию запроса not exists.
expand
1 2 3 4 5 6 7 | title: Использование администратора logsource: product: windows detection: selection: user|expand: "%administrator_name%" condition: selection |
Модификатор expand может использоваться с Конвейерами Sigma (Sigma Pipelines) для замены значений-заполнителей (placeholder) на другое значение, общее для данного конвейера обработки.
1 | user="Администратор" |
fieldref
1 2 3 4 | detection: selection: fieldname|fieldref: fieldasString condition: selection |
Модификатор fieldref преобразует обычную строку в ссылку на поле (field reference). fieldname и fieldasString должны иметь одинаковое значение. Ссылка на поле может использоваться для непосредственного сравнения полей совпадающих событий во время выполнения запроса/сопоставления.
1 | fieldname=fieldasString |
gt
1 2 3 | detection: selection: fieldname|gt: 15 |
Модификатор gt обеспечит поиск, при котором значение поля fieldname больше предоставленного значения.
gte
1 2 3 | detection: selection: fieldname|gte: 15 |
Модификатор gte обеспечит поиск, при котором значение поля fieldname больше или равно предоставленному значению.
lt
1 2 3 | detection: selection: fieldname|lt: 15 |
Модификатор lt обеспечит поиск, при котором значение поля fieldname меньше предоставленного значения.
lte
1 2 3 | detection: selection: fieldname|lte: 15 |
Модификатор lte обеспечит поиск, при котором значение поля fieldname меньше или равно предоставленному значению.
re
1 2 3 | detection: selection: fieldname|re: .*needle$ |
Модификатор re обеспечит поиск, при котором значение поля fieldname соответствует предоставленному регулярному выражению.
Существуют под-модификаторы re|?:
- i: (insensitive) для включения сопоставления без учета регистра.
- m: (multi line) для сопоставления across multiple lines. ^/$ соответствуют началу/концу строки.
- s: (single line) чтобы включить сопоставление точки (.) со всеми символами, включая символ новой строки.
startswith
1 2 3 | detection: selection: fieldname|startswith: needle |
Модификатор startswith вставит подстановочный знак (обычно *) в конце предоставленного значения(ий), так что значение будет найдено в начале поля.
utf16 / utf16le / utf16be / wide
1 2 3 | detection: selection: CommandLine|wide|base64offset|contains: "ping" |
Добавляет метку порядка байтов (BOM) и кодирует в UTF16 (используется только в комбинации с модификаторами base64).
Не заканчивайте цепочку на utf16, utf16le, utf16be или wide
Цепочка модификаторов не должна заканчиваться модификаторами кодировки символов (utf16, utf16le, utf16be и wide). Итоговые значения внутренне представлены как последовательности байтов, а не текстовые строки, и содержат нулевые символы, которые обычно сложно обрабатывать в запросах. Поэтому за ними должен следовать модификатор кодирования (base64, base64offset).
windash
1 2 3 4 5 | detection: selection: fieldname|windash|contains: - " -param-name " - " -f " |
Модификатор windash преобразует любые предоставленные аргументы или флаги командной строки для использования -, а также /, – (En Dash), — (Em Dash) и ― (Horizontal Bar).
Это невероятно полезно в экосистеме Windows, где есть два стандарта передачи аргументов командам: обычно - для PowerShell (напр., -a) и / для cmd.exe (напр., /a), но большое количество команд обычно принимают оба варианта. Многие инструменты, включая PowerShell, принимают не только обычный дефис, но и другие похожие на него символы, такие как – (En Dash), — (Em Dash) и ― (Horizontal Bar).