【问题标题】:Updating Apache Mod Security Core Rule OWASP Rule 950120 to allow URLs in one specific input更新 Apache Mod 安全核心规则 OWASP 规则 950120 以允许在一个特定输入中使用 URL
【发布时间】:2015-09-28 09:04:52
【问题描述】:

我的表单中有一个输入字段,用户可以在其中输入 url 地址。我知道如何更新目标规则以防止误报:

SecRuleRemoveById 950120 !ARGS:urlField

但这不适用于规则950120:Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link。该错误没有指出违反规则的论点。它只是给出信息:

Message: Access denied with code 403 (phase 2). 
Match of "beginsWith %{request_headers.host}" against "TX:1" required. 
[file "/etc/httpd/crs-tecmint/owasp-modsecurity-crs/base_rules/modsecurity_crs_40_generic_attacks.conf"] 
[line "163"] [id "950120"] [rev "3"] 
[msg "Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link"] 
[data "Matched Data: http://asite.com.hk/live found within TX:1: asite.com.hk/live"] 
[severity "CRITICAL"] [ver "OWASP_CRS/2.2.9"] 
[maturity "9"] [accuracy "9"] 
[tag "OWASP_CRS/WEB_ATTACK/RFI"]
Action: Intercepted (phase 2)

如果消息中没有违规参数,这是否意味着SecRuleRemoveById 不适用于此规则?如何在不完全删除此规则的情况下更新它?

【问题讨论】:

    标签: apache mod-rewrite owasp mod-security


    【解决方案1】:

    规则可以在这里看到: https://raw.githubusercontent.com/SpiderLabs/owasp-modsecurity-crs/master/base_rules/modsecurity_crs_40_generic_attacks.conf 我也复制到了下面:

    SecRule ARGS "^(?:ht|f)tps?://(.*)$" \
        "chain,phase:2,rev:'3',ver:'OWASP_CRS/2.2.9',maturity:'9',accuracy:'9',t:none,capture,ctl:auditLogParts=+E,block,msg:'Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',id:'950120',severity:'2',tag:'OWASP_CRS/WEB_ATTACK/RFI'"
       SecRule TX:1 "!@beginsWith %{request_headers.host}" "setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/RFI-%{matched_var_name}=%{tx.1}"
    

    所以这是一个由两部分组成的链式规则。第一条规则检查参数是否以 http:// 或 https:// 或 ftp:// 或 ftps:// 开头。由于它在正则表达式模式匹配中使用括号,它还设置了 TX 变量。 TX:0 设置为 ht 或 ft,TX:1 设置为协议后的地址。

    链中的下一条规则,检查 TX:1 是否不以请求标头中给出的主机(应该是该服务器的主机)开头。如果是这样,它是一个异地 URL,它会被阻止。

    所以你的解决方法:

    SecRuleRemoveById 950120 !ARGS:urlField
    

    不能作为 1) 如果您认为您打算更新规则而不是删除它,因此您有错误的命令,并且 2) urlField 可能是 ARG_NAME 而不是 ARG 值。所以尝试以下方法:

    SecRuleUpdateTargetByID 950120 !ARG_NAMES:urlField
    

    或者您可以选择性地删除此规则,使用另一个规则,例如仅关闭您的 /post/location URL 的规则,请使用以下命令:

    SecRule REQUEST_URI /post/location/ "id:1000,phase:2,log,ctrl:ruleRemoveByID=950120"
    

    现在,老实说,我认为规则 950120 有点限制性,并且对于大多数网站来说过于矫枉过正,并且可能会导致大量误报,因此您可以完全关闭它:

    SecRuleRemoveById 950120
    

    【讨论】:

      【解决方案2】:

      你的回答有一个小错误,巴里。行:

      SecRule REQUEST_URI /post/location/ "id:1000,phase:2,log,ctrl:ruleRemoveByID=950120"
      

      产生以下内容:错误解析操作:未知操作:ctrl

      正确的行是

      SecRule REQUEST_URI /post/location/ "id:1000,phase:2,log,ctl:ruleRemoveByID=950120"
      

      除此之外:太好了,谢谢!帮了我很多。我会发表评论,但没有足够的声誉。我想给你发消息,但你似乎不接受消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-28
        • 1970-01-01
        • 2021-07-14
        • 2021-07-08
        • 2019-08-15
        • 2014-07-11
        • 2018-04-24
        • 2020-06-19
        相关资源
        最近更新 更多