О регулярных выражениях
В этом разделе описываются регулярные выражения и приводятся сведения об их использовании.
О регулярных выражениях
Регулярные выражения используются для анализа входящих событий, обрабатываемых правилами нормализации. Регулярные выражения извлекают информацию, которая должна быть проверена в потоках данных об угрозах и использована в исходящих оповещениях.
Предустановленные регулярные выражения соответствуют формату событий, используемых в самостоятельной диагностике.
После выполнения проверки работоспособности может потребоваться добавить ряд новых регулярных выражений или изменить существующие регулярные выражения для использования с конкретным программным обеспечением, выступающим в качестве источника событий. Примеры регулярных выражений для анализа событий, выдаваемых популярными устройствами, приведены в разделе Регулярные выражения для популярных устройств.
Рекомендуется задать регулярные выражения для извлечения данных, таких как IP-адрес и порт источника событий, а также цели события, имени пользователя и даты. Эти регулярные выражения задают формат исходящих оповещений.
Об именах регулярных выражений
Для регулярного выражения можно использовать любые имена кроме следующих:
SourceIdMatchedIndicatorRecordContextCategoryActionableFieldsConfidenceIndicatorInfoEventReceivedDateРетроскан
Составные значения
Атрибут concatenate используется для определения правила, используемого для формирования составного значения из данных, извлеченных из события. Правило оперирует группами извлеченных данных посредством символов #N, где N — номер группы (начиная с 1). Если перед символом решетки (#) стоит обратная косая черта (\), то символ решетки рассматривается не как часть номера группы, а как собственно символ решетки.
Рассмотрим парсинг на примере следующего события:
url_1=http://domain test_event url_2=/page/mypage test
Используемые регулярные выражения и соответствующие результаты парсинга примера события представлены в таблице ниже.
Примеры применения регулярных выражений
Регулярное выражение | Результат парсинга |
| http://domain/page/mypage |
| /page/mypagehttp://domain |
| /page/mypage_/_http://domain |
Если правило конкатенации не задано или атрибут concatenate имеет пустое значение, а в регулярном выражении более одной группы, конкатенация значений групп выполняется в том порядке, в котором они входят в регулярное выражении.
Если в атрибуте concatenate больше групп, чем в регулярном выражении, дополнительные группы будут игнорируются и заменяются соответствующим текстом #N.
Событие, подвергаемое парсингу: url_1=http://domain test_event url_2=/page/my_page test Используемое регулярное выражение: <RE_URL concatenate="#1#2#3">url_1=(.*?)\stest_event\surl_2=(.*?)\stest</RE_URL> Результат парсинга: http://domain/page/my_page#3 |
Несколько совпадений
При парсинге события с помощью регулярного выражения можно извлечь все значения, совпавшие с регулярным выражением. Для этого установите для атрибута extract значение "all". Если установлено значение "first" или атрибут не указан, извлекается только первое значение, совпавшее с регулярным выражением.
Для каждого совпавшего значения создается отдельное событие обнаружения киберугрозы. Если процесс обнаружения киберугрозы не затрагивает определенное поле события, в качестве значения такого поля в выходном событии используется знак дефиса (-).
Событие, подвергаемое парсингу: ip1=12.12.12.12 ip2=23.23.23.23 hash1=abc hash2=cde user1=N1 user2=N2 Элементы конфигурационного файла: <RegExps> <Source id="default"> <RE_IP extract="all">...</RE_IP> <RE_HASH extract="all">...</RE_HASH> <RE_USER extract="first">...</RE_USER> </Source> </RegExps> <EventFormat>ip=%RE_IP% hash=%RE_HASH% user=%RE_USER% %FeedContext%</EventFormat> Доступные записи потока данных: IP = 12.12.12.12 IP = 23.23.23.23 hash = cde Генерируемые события обнаружения киберугроз: ip=12.12.12.12 hash=- user= N1 <context for 12.12.12.12> ip=23.23.23.23 hash=- user= N1 <context for 23.23.23.23> ip=- hash=cde user=N1 <context for cde> |
Указание символов по их шестнадцатеричному коду
Kaspersky CyberTrace Service использует регулярные выражения, соответствующие синтаксису PCRE. Этот синтаксис позволяет указывать символ по его коду несколькими способами.
Kaspersky CyberTrace Service не поддерживает указание символов в формате \x{hhh..}. Вместо этого укажите символ по его коду следующим образом: \uhhhh, где hhhh – шестнадцатеричный код символа. Например, вместо выражения ([\x{00a1}-\x{ffff}]) можно использовать выражение ([\u00a1-\uffff]).
Оптимизация регулярных выражений
Оптимизация регулярных выражений позволяет предотвратить поиск с возвратом, который затрудняет сопоставление строки.
Для оптимизации регулярных выражений придерживайтесь следующих правил:
- Используйте сверхжадные квантификаторы
(++, *+). - Если возможно, используйте группу без сопоставления
(?:)с внешними скобками. - Старайтесь как можно реже использовать оператор альтернативы и находить совпадения в конце строки. Оператор альтернативы имеет самый низкий приоритет среди всех операторов регулярных выражений.
- Используйте символы начала и конца строки
(^, $). - Используйте атомарные группы. Атомарные группы автоматически отбрасывают все позиции возврата, запомненные любыми токенами внутри данной группы. Используется синтаксис
(?> ...). - В длинных регулярных выражениях старайтесь избегать экспоненциального роста возвратов. Не рекомендуется использовать конструкции вроде
(qwerty.*)*