Wordpress / Elementor 误报的 modsecurity 规则的正确语法

Correct syntax for modsecurity rules for Wordpress / Elementor false positives

我被使用 OWASP3 规则的 WHM ModSecurity 绊倒了。

我想在主页>安全中心>ModSecurity 工具>规则列表中为规则列表创建一个自定义规则,遵循这些排除项:

    <locationmatch "/wp-admin/admin-ajax.php">
    SecRuleRemoveById 300013
    SecRuleRemoveById 300015
    SecRuleRemoveById 300016
    SecRuleRemoveById 300017
    SecRuleRemoveById 949110
    SecRuleRemoveById 980130
</locationmatch>

<locationmatch "/wp-admin/page.php">
    SecRuleRemoveById 300013
    SecRuleRemoveById 300015
    SecRuleRemoveById 300016
    SecRuleRemoveById 300017
    SecRuleRemoveById 949110
    SecRuleRemoveById 980130
</locationmatch>

<locationmatch "/wp-admin/post.php">
    SecRuleRemoveById 300013
    SecRuleRemoveById 300015
    SecRuleRemoveById 300016
    SecRuleRemoveById 300017
    SecRuleRemoveById 949110
    SecRuleRemoveById 980130
</locationmatch>

我不确定如何使用 modsec 规则语法构建它 'SecRule / phase, etc'

欢迎任何建议。

*** 更新 以下是 ModSecurity HitList

中的触发项

921110:HTTP 请求走私攻击 请求:POST /wp-admin/post.php 动作描述:警告。 理由:模式匹配“(?:get|post|head|options|connect|put|delete|trace|track|patch|propfind|propatch|mkcol|copy|move|lock|unlock)\s+(? :\/|\w)[^\s]*(?:\s+http\/\d|[\r\n])" 在 ARGS:content.

941100:通过 libinjection 检测到 XSS 攻击 请求:POST /wp-admin/post.php 动作描述:警告。 理由:使用 libinjection 检测到 XSS。

941160:NoScript XSS InjectionChecker:HTML 注入 要求:POST /wp-admin/admin-ajax.php 动作描述:警告。 理由:模式匹配 "(?i:(?:<\w[\s\S]*[\s\/]|'"?)(?:on(?:d(?:e(?:vice (?:(?:orienta|mo)tion|proximity|found|light)|livery(?:success|error)|activate)|r(?:ag(?:e(?:n(?:ter|d) )|xit)|(?:gestur|leav)e|start|drop|over)|op)|i(?:s(?:c(?:hargingtimechange ..." at ARGS:actions.

核心规则集 Dev on Duty 在这里。由于您提供的排除列表来自其他人的博客 post,因此最好忽略它们。他们禁用核心规则集的一些关键功能(您使用的 9xxxxx 规则是 OWASP 核心规则集)所以最好不要应用这些规则排除,除非您确定您知道自己在做什么以及为什么这些排除是必需的。

您引用的“HitList”中的三个条目:您确定那些是已知良好流量的结果吗?那些 definitely 是在您尝试更新页面时出现 403 错误吗?如果您确定这些是真正的误报(而不是攻击),那么让我们继续……

误报 #1

  • 导致误报的规则: 921110
  • 有问题的位置: /wp-admin/post.php
  • 导致误报的变量: ARGS:content

应用规则排除意味着在 WAF 的安全性中戳一个洞。我们想尽可能具体,这样我们只需要制作最小的孔。我们 只是 想让被错误阻止的交易通过,仅此而已。我们不想打开一个大洞并为攻击者提供机会。

考虑到这一点,让我们尝试采用以下方法:让我们排除 only 有问题的变量 (ARGS:content) 并排除它 only 来自导致问题的规则 (921110) 和 我们看到问题发生在 (/wp-admin/post.php) 的位置.

将所有这些放在一起看起来像这样:

SecRule REQUEST_URI "@beginsWith /wp-admin/post.php" \
    "id:1000,\
    phase:1,\
    pass,\
    nolog,\
    ctl:ruleRemoveTargetById=921110;ARGS:content"

误报 #2

  • 导致误报的规则: 941100
  • 有问题的位置: /wp-admin/post.php
  • 导致误报的变量: 未知

我们不知道是什么变量导致了这里的问题。

可以 完全禁用位置 /wp-admin/post.php 的规则 941100,但这可能有点矫枉过正(记住我们可能的最小漏洞)重新尝试制作?)

您可能想再次检查您的日志以找出是哪个变量导致了规则 941100 的问题。

误报 #3

  • 导致误报的规则: 941160
  • 相关位置: /wp-admin/admin-ajax.php
  • 导致误报的变量: ARGS:actions

遵循与之前相同的食谱:

SecRule REQUEST_URI "@beginsWith /wp-admin/admin-ajax.php" \
    "id:1010,\
    phase:1,\
    pass,\
    nolog,\
    ctl:ruleRemoveTargetById=941160;ARGS:actions"

更多信息

有关规则排除的更多信息以及您可以自己使用和改编的大量示例,请在此处查看我们出色的文档:https://coreruleset.org/docs/configuring/false_positives_tuning/