每当有人访问类似
的网址时,我想在snort中生成一个事件site/year2015.pdf
site/year2014.pdf
:
:
site/year2000.pdf
由于多年来会添加更多的URL,而不是编写多个snort规则,我想到了使用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;)
我在上面的规则中尝试了许多不同的方法来插入正则表达式,但总是无法解析它。正则表达式做得很好,我想做它here。整个事情开始失败,因为它没有启动规则未被解析的原因。
收到的错误是
Error: /etc/snort/rules/assignment.rules Line 3 => unable to parse pcre regex "(/.*site\/year\d\d\d\d\.pdf)/i"
Fatal Error Quitting..
答案 0 :(得分:6)
(稍微疯狂)的语法是pcre:"/regex/flags"
。无论如何,你想要放在那里的括号是多余的。您还需要转义任何斜杠,它是实际正则表达式like in the example的一部分。
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
标志使匹配不区分大小写吗?
答案 1 :(得分:1)
正如三人提到的那样,你的括号错了......但我也认为值得一提的是,因为这些是 Perl 正则表达式,所以你在使用的分隔符中有一定的灵活性正则表达式:
语法
pcre:[!]"(/<regex>/|m<delim><regex><delim>)[ismxAEGRUBPHMCOIDKYS]";
表示不使用传统的/
分隔符,而是使用m
运算符('匹配'的缩写),后跟备用分隔符...我正在使用{{1}在这种情况下}和[
:
]
在这种特殊情况下,这并没有给你带来多少好处(因为你只有一个目录很深),但是一个更深层次嵌套的目录很快就会被所有转义的msg:"PDF is being downloaded"; pcre:"m[site/year\d{4}\.pdf$]i"; sid: 100003; rev:3;)
字符无法读取。