我正在创建我的自定义 mod-security 规则,并且我有一个关于规则 ID 是否会影响规则执行顺序的问题。
我目前的设置是:
- 我正在使用 mod-security 版本:2.6.3-1ubuntu0.2
- 我的 mod-security 配置基于http://mod-security.svn.sourceforge.net/viewvc/mod-security/m2/trunk/modsecurity.conf-recommended(它有 5 个 SecRule 指令 - ids:200000 - 200005)
- 我的规则在一个单独的文件/etc/apache2/conf.d/modsecurity-activated-rules.conf中,它们是在 modsecurity 配置/etc/apache2/conf.d/modsecurity.conf之后加载的
我的规则是:
<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 等。
综上所述,我的问题是:
- 规则执行是否由 ID 号决定(最小的号先执行)?
- 是否有任何文档定义应将哪些规则 ID 范围用于自定义规则?我正在寻找类似的东西:
- Mod-security 主要规则:200.000 - 200.xxx
- OWASP ModSecurity 核心规则集:950.000 - 999.xxx
- 自定义规则:1.000.000 - 9.xxx.xxx
谢谢你的时间。