0

在 modsecurity 默认脚本中:

base_rules/modsecurity_crs_20_protocol_violations.conf

有一条规则,960011:

SecRule REQUEST_METHOD "^(?:GET|HEAD)$" \
  "msg:'GET or HEAD Request with Body Content.',\
  severity:'2',\
  id:'960011',\
  ver:'OWASP_CRS/2.2.9',\
  rev:'1',\
  maturity:'9',\
  accuracy:'9',\
  phase:1,\
  block,\
  logdata:'%{matched_var}',\
  t:none,\
  tag:'OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ',\
  tag:'CAPEC-272',\
  chain"
    SecRule REQUEST_HEADERS:Content-Length "!^0?$"\
      "t:none,\
      setvar:'tx.msg=%{rule.msg}',\
      setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},\
      setvar:'tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ-%{matched_var_name}=%{matched_var}'"

我只想禁用此规则的日志记录(它给出了太多误报),因此添加我自己的脚本

base_rules/z99_logging_suppress.conf

删除默认规则并创建一个新的相同规则 - 仅不记录

SecRuleRemoveById 960011

SecRule REQUEST_METHOD "^(?:GET|HEAD)$" \
  "msg:'GET or HEAD Request with Body Content.',\
  severity:'2',\
  id:'9960011',\
  ver:'OWASP_CRS/2.2.9',\
  rev:'1',\
  maturity:'9',\
  accuracy:'9',\
  phase:1,\
  block,nolog,\
  logdata:'%{matched_var}',\
  t:none,\
  tag:'OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ',\
  tag:'CAPEC-272',\
  chain"
    SecRule REQUEST_HEADERS:Content-Length "!^0?$"\
      "t:none,\
      setvar:'tx.msg=%{rule.msg}',\
      setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},\
      setvar:'tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ-%{matched_var_name}=%{matched_var}'"

与原始规则的唯一区别是新的 id 9960011nolog添加:

  ...
  id:'9960011',\
  ...
  block,nolog,\
  ...

但是当我用这个附加规则重新启动 httpd 时,我得到了错误:

AH00526: Syntax error on line 18 of /path/base_rules/z99_logging_suppress.conf:
ModSecurity: Execution phases can only be specified by chain starter rules.

同样的策略 --- SecRuleRemoveById + 然后用新的 id 重新创建它 --- 适用于我尝试过的所有其他默认规则,但不适用于这个。

谁能告诉我这是为什么?

4

1 回答 1

2

它基本上说该phase命令只能在链中的第一条规则中,而不能在构成链一部分的后续规则中。

您编写的规则没有任何问题,阶段仅在第一个SecRule. 事实上,我已经在我的实例上尝试过它并且它有效。因此,两件事中的任何一件都出了问题:

  1. 您已将其错误地复制并粘贴到此问题中。
  2. 上面您定义的规则,其中有链,因此留下了一个开放链,您的规则 9960011 然后有效地尝试继续。

或者发生了其他奇怪的事情!但我现在选择 1 或 2 :-)

于 2017-04-27T18:00:45.940 回答