首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OWASP corerulet警告连接方法触发的“无效http请求行”

OWASP corerulet警告连接方法触发的“无效http请求行”
EN

Stack Overflow用户
提问于 2021-10-04 09:32:08
回答 1查看 630关注 0票数 0

摘要:

我已经建立了一个基本的WAF与mod-安全和OWASP语料库 3.3.2.在使用WAF时,我在modsec_audit.log中看到了许多关于连接方法的警告,这会触发crs规则920100:

信息:警告。匹配"rx ^(?i:(?:a-z{3,10}\s+(?:\w{3,7}?://\w-./(?::\d+)?)?/^?#(?:\?^#\s)?(?:#\S)?|connect (?:\d{1,3}.){3}\d{1,3}?(?::\d+)?x_{options_)\s+\w./+取回/^?#(?:\?^# )(?:#\S_)$$,反对"REQUEST_LINE“的要求。文件"/etc/httpd/modsecurity.d/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf“id "920100”数据连接oneofmy.longer.hostname.here.abcde.com:443 HTTP/1.1“ver”OWASP_CRS/3.3.2标记“语言-多”标签攻击-协议标签"OWASP_CRS“

有关安装的详细信息:--我用mod_security 2.9.2和httpd设置了WAF。我使用了crs提供的crs-setup.conf.example,只修改了关于阈值和允许连接http方法的这两个设置。(我们的设置中使用了CONNECT方法,用于代理目的)。

代码语言:javascript
复制
SecAction \
 "id:900110,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.inbound_anomaly_score_threshold=5,\
  setvar:tx.outbound_anomaly_score_threshold=4"

SecAction \
 "id:900200,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:'tx.allowed_methods=GET HEAD POST OPTIONS CONNECT'"

到目前为止我尝试过的:

  • 谷歌有很多关于crs和国防部安全规则的信息。根据我目前的理解,无可否认,有限的mod-security/crs理解,规则920100的正则表达式与请求行CONNECT oneofmy.longer.hostname.here.abcde.com:443 HTTP/1.1不匹配。
  • 试图找到更多的细节,920100的正则表达式是如何构造的。
  • 查找连接字符串的请求行是如何在RFC中定义的。在我看来,根据RFC,请求行看起来很好。
  • 尝试使用像regex101和my request行这样的站点调试regexp。我没有成功地调试。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-05 20:02:47

查看规则920100的正则表达式中处理CONNECT方法的部分:

代码语言:javascript
复制
connect (?:\d{1,3}\.){3}\d{1,3}\.?(?::\d+)?

我们可以看到它正在寻找一个IPv4地址。例如,它将匹配(因此不会对请求行发出警报),如下所示:

代码语言:javascript
复制
CONNECT 1.2.3.4:80 HTTP/1.1

正如您所说的,RFC似乎允许将域名与CONNECT方法一起使用,但是,规则920100目前并不允许这样做。这似乎是你的问题的原因。

随着进一步的调查和测试,该规则可能会在未来的CRS版本中扩展,以允许在CONNECT请求中使用域名。

你现在能在这里做什么?

要立即解决这个问题,可以在Apache配置中添加规则排除。有两种方法可以做到这一点:

  1. 完全删除违规规则,在配置时将其排除在外,如下所示:
代码语言:javascript
复制
#
# -- CRS Rule Exclusion: 920100 - Invalid HTTP Request Line
#
# Turn off rule due to issues with CONNECT requests
#
SecRuleRemoveById 920100

作为配置时间规则排除,这应该放在Apache配置中包含核心规则集之后(因为要删除的规则必须首先添加/包含,然后才能删除它!)

  1. 有条件地删除违规规则,只对连接请求使用,方法是在运行时排除它,如下所示:
代码语言:javascript
复制
#
# -- CRS Rule Exclusion: 920100 - Invalid HTTP Request Line
#
# Turn off rule for CONNECT requests, which cause issues
#
SecRule REQUEST_METHOD "@streq CONNECT" \
    "id:1000,\
    phase:1,\
    pass,\
    nolog,\
    ctl:ruleRemoveById=920100"

作为运行时时间规则排除,这应该放在包含在Apache配置中的CRS之前(因为正在修改的规则必须在执行期间启动之前进行修改)。

小小的警告

我找不到任何其他人以这种方式使用ModSecurity和CRS,即处理CONNECT请求。CRS规则的编写并不是为了适应在请求行中有一个域名,因此您可能会发现结果会遇到更多的误报。您需要以类似于上面描述的方式来处理这些问题。

(您可以在这里找到关于编写规则排除主题的优秀教程:handling-false-positives-modsecurity-core-rule-set/)。

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69434637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档