【问题标题】:ModSecurity: How to 'exec' based on 'severity' level?ModSecurity:如何根据“严重性”级别“执行”?
【发布时间】:2012-02-21 14:14:07
【问题描述】:

我正在使用 mod_security 2.6.3,我希望能够根据规则严重性级别执行 shell 脚本。我正在使用核心规则集 (CRS),它在检测到攻击时将严重性级别设置为 2(表示“严重”)。

我想在严重性足够高时执行我的脚本。

我尝试使用SecDefaultAction设置,如:

SecDefaultAction "phase:2,log,deny,status:403,exec:/path/to/my/script"

但由于“执行”操作是“非破坏性”操作,因此无论触发关键规则还是非关键规则,它总是会被执行。

我可以浏览每个重要的 SecRule 并在其旁边添加“exec”,但这会很乏味(而且重复,而且丑陋)。

我想我可以这样做:

SecRule ENV:SEVERITY "@lt 4" "exec:/path/to/my/script"

但不知何故,它永远不会被执行,可能是因为关键规则有一个阻止或拒绝语句来停止规则处理(因为被认为是破坏性的)。

我也尝试过使用 CRS 异常评分功能,如下所示:

SecRule TX:ANOMALY_SCORE "@ge 4" "exec:/path/to/my/script"

但它仍然没有得到处理。 知道我该怎么做吗?

【问题讨论】:

    标签: mod-security mod-security2


    【解决方案1】:

    您可以使用HIGHEST_SEVERITY 变量来测试它,例如:

    SecRule HIGHEST_SEVERITY "@le 5" "nolog,pass,exec:/path/to/your/script"
    

    注意nolog,pass 附加参数,这些参数将保留来自更改严重级别的规则的原始日志消息。

    另外,我建议您将此条件放在 .conf 文件的早期(例如,就在您的 SecDefaultAction 行之后),以确保它包含在所有上下文中。

    另一种方法是在您的 SecDefaultAction 中使用自定义 HTTP 响应状态代码(例如,418 “我是茶壶”)并在日志记录阶段根据它触发您的条件(一旦默认操作已处理):

    # On error, log then deny request with "418 I'm a teapot":
    SecDefaultAction "phase:2,log,deny,status:418"
    
    # On HTTP response status code 418, execute your script:
    SecRule RESPONSE_STATUS "^418$" "phase:5,nolog,pass,exec:/path/to/your/script"
    

    【讨论】:

    • 当我尝试您的代码时,收到此错误:ModSecurity: No action id present within the rule。编辑:使用此代码:SecRule HIGHEST_SEVERITY "@le 5" "id:'290090',nolog,pass,exec:/usr/bin/pngquant".. 刚刚添加了一个 id
    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多