如何将 ModSecurity 引擎配置为对单一攻击类型为 ON,对所有其他攻击类型为 DetectionOnly?

How do I configure the ModSecurity engine to be ON for a single attack type and DetectionOnly for all others?

我需要逐步实施 ModSecurity。它必须配置为仅阻止单一攻击类型(例如 SQLi)的攻击,但记录来自其他攻击类型的所有其他攻击。

为便于升级owasp规则,建议避免修改原有的owasp规则。理想情况下,我正在寻找一个将遵循此指南并且不需要修改原始 owasp 规则的解决方案。

目前我的测试配置只完成了一部分。通过这个 Debian 安装的 ModSecurity,我从配置的 /usr/share/modsecurity-crs/rules/*.conf 中删除了单个规则文件。这允许我启用 modSecurity 和 engine=on 并且仅针对配置中加载的特定攻击类型的规则集,但它不记录其他攻击类型的事件。

您有几个选择:

1) 使用异常评分和 OWASP CRS 为 SQLi 规则设置的 sql_injection_score 值。

  • 将您的模式设置为 DetectionOnly。
  • 中将您的异常评分值设置得非常高
  • 添加一个新规则,如果 sql_injection_score 超过一定数量就会阻止。

这可以通过这样的额外规则来实现:

 SecRule tx.sql_injection_score "@gt 1” 
    "id:9999,\
    phase:5,\
    ctl:ruleEngine=on \
    block"

”@gt 1” 设置为适当的阈值。

OWASP CRS 也为其他类别设置了类似的变量。

2) 单独加载规则和前后规则以打开和关闭规则引擎。

在一个阶段内,规则按照指定的顺序执行。您可以使用它来进行如下配置:

SecRuleEngine DetectionOnly
Include rules/other_rules_1.conf
Include rules/other_rules_2.conf
SecAction “id:9000, phase:2, ctl: ctl:ruleEngine=on”
Include rules/sqli_rules.conf
SecAction “id:9001, phase:2, ctl: ctl:ruleEngine=off”
Include rules/other_rules_3.conf
Include rules/other_rules_4.conf

但是,如果一个类别包含多个阶段,那么您将需要添加多个 SecActions - 每个使用的阶段一个。

3) 通过更改操作以包括打开规则引擎来激活您想要的规则。

这可能有点脆弱,因为它取决于对特定规则 ID 的了解,并且还需要检查每个规则的操作或假设它们都是相同的。老实说,只编辑 CRS 文件可能更好。

如果您只想启用一组规则而不是整个类别,这可能是最好的选择。

4) 编辑文件,直接和上面一样做。

如果您知道这将是一个短期选项并且最终您希望启用所有规则,那么这不是一个坏选项。准备就绪后还原文件。

或者保留原始规则并复制规则,给它们新的 ID,并添加 ctl:ruleEngine=on 操作。