摘要:
我已经建立了一个基本的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方法,用于代理目的)。
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'"到目前为止我尝试过的:
发布于 2021-10-05 20:02:47
查看规则920100的正则表达式中处理CONNECT方法的部分:
connect (?:\d{1,3}\.){3}\d{1,3}\.?(?::\d+)?我们可以看到它正在寻找一个IPv4地址。例如,它将匹配(因此不会对请求行发出警报),如下所示:
CONNECT 1.2.3.4:80 HTTP/1.1正如您所说的,RFC似乎允许将域名与CONNECT方法一起使用,但是,规则920100目前并不允许这样做。这似乎是你的问题的原因。
随着进一步的调查和测试,该规则可能会在未来的CRS版本中扩展,以允许在CONNECT请求中使用域名。
你现在能在这里做什么?
要立即解决这个问题,可以在Apache配置中添加规则排除。有两种方法可以做到这一点:
#
# -- CRS Rule Exclusion: 920100 - Invalid HTTP Request Line
#
# Turn off rule due to issues with CONNECT requests
#
SecRuleRemoveById 920100作为配置时间规则排除,这应该放在Apache配置中包含核心规则集之后(因为要删除的规则必须首先添加/包含,然后才能删除它!)
#
# -- 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/)。
希望这能帮上忙。
https://stackoverflow.com/questions/69434637
复制相似问题