Modsecurity:过多的误报

时间:2015-11-29 23:13:00

标签: mod-security

我刚刚在服务器上设置了Apache modsecurity,原则上它运行良好,但我得到了很多误报。

我正在使用 OWASP ModSecurity核心规则集(CRS),基本上是“开箱即用”。

我在“自足”(传统)模式而不是协作(异常)模式下运行:

SecDefaultAction "phase:1,deny,log"
SecDefaultAction "phase:2,deny,log"

特别值得关注的是SQL注入集。双管(||)双尖括号(>>)和一大堆其他输入将触发规则并导致页面被阻止。其中许多很容易出现在合法的用户输入中。

是否有一种优雅的方式来选择性地允许不一定表示注入攻击的共同输入?我知道我现在已经开箱即用了,但是对于几乎每一个用例来说,确实阻塞双管和尖括号会非常严格吗?

3 个答案:

答案 0 :(得分:2)

要做的第一件事就是切换到异常评分而不是将默认操作设置为拒绝,这将真正减少你得到的假+ ves的数量。

其次,切换到DetectionOnly模式并让它运行几天,您将了解要解决的问题。 对于每个误报,请考虑:

  • 修改应用程序源
  • 禁用该特定规则
  • 禁用该参数,URL和& c的modsec。如果您知道应用程序代码中有保护。

Ivan Ristic ModSecurity的书现在有点了,但它是真正下来并为其背后的应用程序定制modsec的最佳资源,不幸的是它有一个垃圾索引所以我推荐一个你可以搜索的电子版本。 遗憾的是,在modsec中有许多隐藏的技巧,你必须逐个查找,通过查看源代码,查阅书中的一个小文本框或通过将调试级别调高到5并且看到modsec实际上在做什么。

答案 1 :(得分:2)

Kully有一些好处,我也绝对推荐ModSecurity Handbook。我想说切换到异常模式确实需要一些人习惯并在我看来需要额外的监控工作,所以我个人更喜欢在阻止模式下运行并关闭嘈杂的规则。

您确实需要在DetectionOnly模式下运行并在CRS规则变得有用之前对其进行调整,这确实需要时间。经过几个月的迭代之后,我才感到足够舒服,将其切换到阻塞模式。

特别是SQL注入规则很容易过度警告。

以下是您可能希望关闭或调整的一些常见规则 - 尤其是在传统警报模式下:

#Lots of browsers don't send accept header so disable rule 960015 which blocks that:
SecRuleRemoveById 960015

#ModSecurity does not handle gzip files and falsely alerts code leakage for such binary files so disable this rule
SecRuleRemoveById 970903

#Range header is set by some Android devices so ignore that rule
SecRuleRemoveById 958291

#We allow Google Tag Manager which uses small iframe so disable the rules that disallow small iframes:
SecRuleRemoveById 981000
SecRuleRemoveById 981001

#These produce many false positives as checking for things like lots of spaces and ' characters (valid in names and addresses). So disable.
SecRuleRemoveById 950109
SecRuleRemoveById 950901
SecRuleRemoveById 960024
SecRuleRemoveById 973338
SecRuleRemoveById 981172
SecRuleRemoveById 981173
SecRuleRemoveById 981231
SecRuleRemoveById 981242
SecRuleRemoveById 981243
SecRuleRemoveById 981245
SecRuleRemoveById 981246
SecRuleRemoveById 981248
SecRuleRemoveById 981257
SecRuleRemoveById 981260
SecRuleRemoveById 981318
SecRuleRemoveById 981319
SecRuleRemoveById 981320

#Allow Search argument (q) to include SQL words:
SecRuleUpdateTargetById 959071 !ARGS:'q'
SecRuleUpdateTargetById 959072 !ARGS:'q'
SecRuleUpdateTargetById 981247 !ARGS:'q'

#Passwords can (and arguable should!) contain special chars
SecRuleUpdateTargetById 950010 !ARGS:'/[pP](ass)?word/'
SecRuleUpdateTargetById 981240 !ARGS:'/[pP](ass)?word/'

#Email address can contain some SQL injection phrases
SecRuleUpdateTargetById 981241 !ARGS:'/[eE](-)?mail/'

#Remove checking of rules which checks for http calls in arguments will have URLs in them
SecRuleUpdateTargetById 950007 !ARGS:'utm_referrer'
SecRuleUpdateTargetById 950120 !ARGS:'utm_referrer'
SecRuleUpdateTargetById 973304 !ARGS:'utm_referrer'
SecRuleUpdateTargetById 981241 !ARGS:'utm_referrer'
SecRuleUpdateTargetById 981256 !ARGS:'utm_referrer'

当然完全关闭这些规则(就像我在上面的代码片段中所做的那样)会降低ModSecurity的效率,因此您需要确定这是否适合您的网站。

通常首选关闭特定参数的规则(就像我在上面代码片段的后半部分所做的那样),但是只有你可以决定这些参数是否不需要规则给出的保护。

答案 2 :(得分:0)

这是我们在下面(https://stackoverflow.com/a/34027786/1008215)使用的wordpress modsec配置。

SecRuleRemoveById 950109
SecRuleRemoveById 950120
SecRuleRemoveById 950901
SecRuleRemoveById 960008
SecRuleRemoveById 960015
SecRuleRemoveById 973338
SecRuleRemoveById 981242
SecRuleRemoveById 981243
SecRuleRemoveById 981245
SecRuleRemoveById 981246
SecRuleRemoveById 981248
SecRuleRemoveById 981257
SecRuleRemoveById 981319
SecRuleRemoveById 981320