【问题标题】:Snort rules regex matchingSnort 规则正则表达式匹配
【发布时间】:2015-06-09 01:06:04
【问题描述】:

每当有人访问类似结构的 URL 时,我想在 snort 中生成一个事件

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

我考虑使用 PERC,而不是编写多个 snort 规则,因为多年来将添加更多 URL。规则写成。

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..

【问题讨论】:

  • 什么错误,代码在哪里?
  • 您要匹配的实际字符串是什么?

标签: regex pcre snort


【解决方案1】:

(有点疯狂)语法是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 标志使匹配不区分大小写吗?

【讨论】:

    【解决方案2】:

    正如 Tripleee 所提到的,你的括号放错了位置......但我也认为值得一提的是,由于这些是 Perl 正则表达式,你在使用的分隔符上有一定的灵活性正则表达式:

    语法

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

    表示您可以使用m 运算符(“匹配”的缩写),而不是使用传统的/ 分隔符,后跟备用分隔符...我在使用[]本例:

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

    在这种特殊情况下,这不会给您带来太多好处(因为您只有一个目录深),但是嵌套更深的目录很快就会因为所有转义的 / 字符而变得不可读。

    【讨论】:

    • 嗯...我是 Perl 正则表达式的新手。只是规则解析是胜利,但规则仍然没有触发任何事件。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2022-12-11
    相关资源
    最近更新 更多