异常敏感的Mod安全规则给出403禁止的错误



我刚刚在Centos5服务器上删除了Mod Security,现在我们在error_log中得到了以下内容:

[Thu Nov 12 16:20:19 2015] [error] [client 88.15.76.8] ModSecurity: Access denied with code 403 (phase 2). Pattern match "([\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\+\\=\\{\\}\\[\\]\\|\\:\\;\"\\'\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*){8,}" at REQUEST_COOKIES:_eventqueue. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "169"] [id "981172"] [rev "2.2.5"] [msg "Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded"] [data "}"] [hostname "www.mydomain.com"] [uri "/company/geodis-uk-limited/general-maintenance-assistant-1485.html"] [unique_id "UbGaGB-esj8AAAa98bEAAAAn"]

阻止这种情况发生的最好方法是什么?

ModSecurity规则需要针对特定站点进行调整和调优,才能发挥作用。您安装的OWASP核心规则集非常有用,但显示误报,并阻止除最简单站点外的所有站点的合法流量。

因此,首先,在打开完全阻塞之前,您应该在DetectionOnly模式下运行几个月。在此期间,你应该定期检查你的警报,并微调规则以解决任何误报。DetectionOnly模式是通过在配置中使用以下命令启用的(目前可能设置为On而不是DetectionOnly):

SecRuleEngine DetectionOnly

现在来看看你的具体失败。这是由于规则981172阻止了任何具有8个或更多"特殊字符"的请求,因为它们通常是SQL注入攻击的经典示例(或者更具体地说,试图掩盖SQL注入攻击)。

此规则已在cookie事件队列上阻止。所以第一个问题是:你能认出那个饼干吗?它是否经常连续有8个以上的特殊字符?某些字段和cookie会违反此规则,即使是合法流量。例如,当前规则不包括检查任何以__utm或_pk_ref(分析软件使用)开头的cookie,因为它们通常标记不正确。

假设这是合法的流量,最简单的选择是通过添加以下配置来关闭该字段的此规则:

SecRuleUpdateTargetById 981172 !ARGS:'_eventqueue'

请注意,此配置必须在禁用规则之后的配置中。在定义规则之前,可能需要其他方式来表达此规则。因此,我通常会添加一个"0_exceptions_before.conf"文件和一个9999_exceptions_after.conf"文件,并将异常填充到这些文件中。

添加这样的异常比在modsecuritycrs_41_sql_inject_attacks.conf文件中编辑实际规则本身要好得多,因为这样可以让您轻松地将规则升级到最新版本,同时仍然保留您的异常。

谈到升级,我注意到你使用的是核心规则集的2.2.5版本,v2系列的最新版本是2.2.9,所以如果重新开始,你可能应该升级到最新版本。CRS的第3版现在是首选版本,但它更改了很多内容(包括规则ID),因此需要一点时间才能升级到它。你应该转到它,但可能会先习惯2.2.9,因为你已经开始使用它了。

ModSecurity可能会非常复杂,让你的头脑在一开始就清醒过来。我可以强烈推荐ModSecurity的原作者撰写的ModSecurity手册。它有点过时了,但刚刚出版了第二版,使它再次更新。它有助于解释程序以及如何以及为什么需要调整它。如果你想试用,第一章(关于安装)是免费的。这本书还包含参考手册,该手册也可以在网上免费获得。最后,mod安全用户电子邮件组和owasp-modsecurity核心规则集电子邮件组也是获得帮助的好地方,因为StackOverflow上没有太多关于这个主题的内容。

最新更新