2

我正在创建我的自定义 mod-security 规则,并且我有一个关于规则 ID 是否会影响规则执行顺序的问题。

我目前的设置是:

我的规则是:

<IfModule mod_security2.c>
# block all GET requests - learning purposes only
SecRule REQUEST_METHOD "^(GET)$" \ 
    "phase:1,t:none,auditlog,block,id:1001,rev:2,tag:HARDENING"
</IfModule>

免责声明这是一个简单的规则,可能不是最优的,因为我还在学习。欢迎提出建议

所以,在我分析了调试文件(激活了 9 级)之后,我的问题出现了:

[...]
[4] Recipe: Invoking rule 7f157a85da30; [file "/etc/apache2/conf.d/modsecurity-activated-rules.conf"] [line "11"] [id "1001"] [rev "2"].
[5] Rule 7f157a85da30: SecRule "REQUEST_METHOD" "@rx ^(GET)$" "phase:1,log,t:none,auditlog,block,id:1001,rev:2,tag:HARDENING"
[4] Transformation completed in 4 usec.
[4] Executing operator "rx" with param "^(GET)$" against REQUEST_METHOD.
[9] Target value: "GET"
[6] Ignoring regex captures since "capture" action is not enabled.
[4] Operator completed in 36 usec.
[2] Warning. Pattern match "^(GET)$" at REQUEST_METHOD. [file "/etc/apache2/conf.d/modsecurity-activated-rules.conf"] [line "11"] [id "1001"] [rev "2"] [tag "HARDENING"]
[4] Rule returned 1.[04/Sep/2012:09:30:27 +0000] [107.21.159.51/sid#7f157a854510][rid#7f1573fcf0a0][/poll/13456492248275482/vote/yes][9] Match -> mode NEXT_RULE.
[4] Recipe: Invoking rule 7f157a85e648; [file "/etc/apache2/conf.d/modsecurity.conf"] [line "24"] [id "200000"].
[5] Rule 7f157a85e648: SecRule "REQUEST_HEADERS:Content-Type" "@rx text/xml" "phase:1,auditlog,id:200000,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML"
[4] Rule returned 0.
[9] No match, not chained -> mode NEXT_RULE.
[...]

正如调试行所示,我的规则 (id:1001) 在规则 (id:200000) 之前首先执行,即使我的规则是在 20000x 之后读取的。

我认为 ID 在规则执行的顺序上并不重要,因为 OWASP ModSecurity 核心规则集https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project的规则 ID 介于 950000 和 990000 之间,并且没有有关特定攻击的规则 ID 范围的信息:SQLi、XSS 等。

综上所述,我的问题是:

  1. 规则执行是否由 ID 号决定(最小的号先执行)?
  2. 是否有任何文档定义应将哪些规则 ID 范围用于自定义规则?我正在寻找类似的东西:
    • Mod-security 主要规则:200.000 - 200.xxx
    • OWASP ModSecurity 核心规则集:950.000 - 999.xxx
    • 自定义规则:1.000.000 - 9.xxx.xxx

谢谢你的时间。

4

3 回答 3

1

正确的答案ModSecurity按照 Apache 配置中定义的顺序执行规则。

唯一ModSecurity适用的排序是阶段:排序,它确保规则将按阶段执行。

例子:

  1. 首先执行阶段:1 中的所有规则(按照它们在配置中写入的顺序)
  2. 接下来执行阶段:2 中的所有规则(按照它们在配置中写入的顺序)
  3. ETC...
于 2018-12-12T13:48:12.597 回答
0
  1. 一条规则可以没有id。但是如果有一个,在同一阶段,就像你的问题一样

    最小的数字首先被执行

    只在同一阶段!

  2. 也许商业规则定义了 throse id。https://ssl.trustwave.com/web-application-firewall

于 2012-09-11T08:32:33.910 回答
0

ModSecurity 支持两种类型的规则模型,即正安全模型和负安全模型。负安全模型支持基于签名的检测和规则排序,当您想使用skip、skipafter关键字跳过规则以避免资源密集型基于正则表达式的模式修补时,规则的排序很重要。其次,基于规则 ID 的规则顺序不是绝对的,可以通过规则更改动态引擎,即第 1 阶段的规则将始终首先执行。我推荐阅读 ModSecurity 手册作为初学者的良好开端。第二种类型的规则是积极的安全模型,其中的顺序无关紧要,因为会维护计数器以检测异常,如果超过阈值则会触发规则。

于 2012-12-17T10:46:13.663 回答