ModSecurity:如何根据'严重性'级别'执行'?

时间:2012-02-20 03:16:55

标签: mod-security mod-security2

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

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

我尝试使用SecDefaultAction设置,例如:

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

但是,由于'exec'动作是一种“非破坏性”动作,它总是会被执行,无论是关键规则还是非关键规则都是如此。

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

我以为我可以做类似的事情:

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

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

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

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

但它仍然没有得到处理。 我对如何做到这一点有任何想法?

1 个答案:

答案 0 :(得分:5)

您可以使用HIGHEST_SEVERITY变量对其进行测试,例如:

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

请注意nolog,pass其他参数,这些参数将保留更改严重性级别的规则中的原始日志消息。

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

另一种方法是在SecDefaultAction中使用自定义HTTP响应状态代码(例如,418"我' ma茶壶")并根据它触发您的状况,在记录阶段(一旦处理了默认动作):

# 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"
相关问题