О регулярных выражениях

20 февраля 2025

ID 171632

В этом разделе описываются регулярные выражения и приводятся сведения об их использовании.

О регулярных выражениях

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

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

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

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

Об именах регулярных выражений

Для регулярного выражения можно использовать любые имена кроме следующих:

  • SourceId
  • MatchedIndicator
  • RecordContext
  • Category
  • ActionableFields
  • Confidence
  • IndicatorInfo
  • EventReceivedDate
  • Ретроскан

Составные значения

Атрибут concatenate используется для определения правила, используемого для формирования составного значения из данных, извлеченных из события. Правило ссылается на группы извлеченных данных посредством комбинации символов #N, где N — номер группы (начиная с 1). Если перед символом решетки (#) стоит обратная косая черта (\), то символ решетки рассматривается не как часть номера группы, а как собственно символ решетки.

Рассмотрим парсинг на примере следующего события:

url_1=http://domain test_event url_2=/page/mypage test

Используемые регулярные выражения и соответствующие результаты парсинга примера события представлены в таблице ниже.

Примеры применения регулярных выражений

Если правило конкатенации не задано или в качестве значения атрибута concatenate задана пустая строка, а при этом регулярное выражение содержит более одной группы, значения групп объединяются в том порядке, в котором они встречаются в регулярном выражении.

Если атрибут concatenate содержит больше групп, чем имеется в регулярном выражении, дополнительные группы игнорируются и заменяются соответствующим текстом #N.

Множественное сопоставление

При парсинге события с помощью регулярного выражения можно извлечь все значения, сопоставляемые с регулярным выражением. Для этого у атрибута extract должно быть задано значение «all»‎. Если для этого атрибута установлено значение «first»‎ или атрибут не указан, извлекается только первое значение, сопоставленное с регулярным выражением.

Для каждого сопоставленного значения генерируется отдельное событие обнаруженной киберугрозы. Если процесс обнаружения киберугрозы не затрагивает определенное поле события, в качестве значения этого поля в выходном событии указывается дефис (-).

Указание символов по их шестнадцатеричному коду

Kaspersky CyberTrace Service использует регулярные выражения, соответствующие синтаксису PCRE. Этот синтаксис позволяет указывать символ по его коду несколькими способами.

Kaspersky CyberTrace Service не поддерживает указание символов в формате \x{hhh..}. Вместо этого символ указывается по его коду следующим образом: \uhhhh, где hhhh — шестнадцатеричный код символа. Например, вместо недопустимого выражения ([\x{00a1}-\x{ffff}]) следует использовать выражение ([\u00a1-\uffff]).

Оптимизация регулярных выражений

Регулярные выражения можно оптимизировать, чтобы предотвратить поиск с возвратом, мешающий сопоставлению строки.

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

  • Используйте сверхжадные квантификаторы (++, *+).
  • Если возможно, используйте несопоставляемую группу (?:) с внешними скобками.
  • Старайтесь как можно реже использовать оператор альтернативы и находить совпадения в конце строки. Оператор альтернативы имеет самый низкий приоритет среди всех операторов регулярных выражений.
  • Используйте привязки (^, $), которые соответствуют начальной и конечной позиции в строке.
  • Используйте атомарные группы. Атомарные группы автоматически отбрасывают все позиции поиска с возвратом, запомненные любыми токенами внутри группы. Используется синтаксис (?> ...).
  • В длинных регулярных выражениях старайтесь избегать экспоненциального роста поиска с возвратом. Рекомендуется избегать, например, выражений наподобие (qwerty.*)*.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!