Сопоставление регулярных выражений правил Snort

Я хочу генерировать событие в snort всякий раз, когда кто-то посещает URL-адрес, структурированный как

site/year2015.pdf
site/year2014.pdf
:
:
site/year2000.pdf

Вместо того, чтобы писать несколько правил snort, поскольку с годами будет добавляться больше URL, я подумал об использовании PERC. Правило записывается как.

alert tcp any any -> any any(msg:"PDF is being downloaded"; pcre:"(/.*site\/year\d\d\d\d\.pdf)/i"; sid: 100003; rev:3;)

Я пробовал много разных способов вставить регулярное выражение в приведенное выше правило, но он всегда не разбирает его. Regex отлично справляется с тем, что я хочу, здесь. Все начинает давать сбой, потому что не запускается из-за того, что правило не анализируется.

Получена ошибка

Error: /etc/snort/rules/assignment.rules Line 3 => unable to parse pcre regex "(/.*site\/year\d\d\d\d\.pdf)/i"
Fatal Error Quitting..

person Babar    schedule 09.06.2015    source источник
comment
В чем ошибка, где код?   -  person    schedule 09.06.2015
comment
какова фактическая строка, с которой вы сопоставляете?   -  person Barton Chittenden    schedule 09.06.2015


Ответы (2)


Синтаксис (немного сумасшедший) - pcre:"/regex/flags". Скобки, которые вы хотели поставить здесь, в любом случае излишни. Вам также нужно избегать любой косой черты, которая является частью фактического регулярного выражения, как в примере .

alert tcp any any -> any any(msg:"PDF is being downloaded"; pcre:"/.*site\/year\d\d\d\d.pdf/i"; sid: 100003; rev:3;)

... хотя, вероятно, вам следует удалить лишний подстановочный знак .* и добавить якорь $ в конце, а также избежать точки, чтобы сделать его буквальным. Вы также можете использовать квантификатор, чтобы указать ровно четыре повторения цифры.

alert tcp any any -> any any(msg:"PDF is being downloaded"; pcre:"/site\/year\d{4}\.pdf$/i"; sid: 100003; rev:3;)

Вы действительно уверены, что хотите, чтобы флаг /i делал совпадение нечувствительным к регистру?

person tripleee    schedule 09.06.2015

Как упоминал tripleee, ваши круглые скобки неуместны ... но я также думаю, что стоит упомянуть, что, поскольку это регулярные выражения Perl, у вас есть некоторая гибкость в разделителях, которые вы используете для регулярного выражения :

Синтаксис

pcre:[!]"(/<regex>/|m<delim><regex><delim>)[ismxAEGRUBPHMCOIDKYS]";

указывает, что вместо использования традиционного разделителя / вы можете использовать оператор m (сокращение от 'match'), за которым следуют альтернативные разделители ... В этом случае я использую [ и ]:

msg:"PDF is being downloaded"; pcre:"m[site/year\d{4}\.pdf$]i"; sid: 100003; rev:3;)

В данном конкретном случае это не принесет вам многого (потому что вы находитесь только в одном каталоге), но более глубоко вложенный каталог быстро станет нечитаемым со всеми экранированными символами /.

person Barton Chittenden    schedule 09.06.2015
comment
Хм ... Я новичок в регулярных выражениях с Perl. И просто синтаксический анализ правила был триумфом, но правило по-прежнему не запускает никаких событий. :( - person Babar; 09.06.2015