解决 modsecurity 误报的问题?

解决 modsecurity 误报的问题?

我将“drwxr-xr-x. 2 root root 6 Sep 24 04:35 images”粘贴到 dokuwiki 页面中,这触发了 modsecurity,并出现了 HTTP 错误。如何修改此规则以避免此类误报?

这发生在 Dreamhost 上,支持人员告诉我这条规则成功阻止了攻击。它试图阻止哪种攻击?如果有人想查看文件权限,恶意代码可以简单地重新格式化响应(例如显示 774)以绕过正则表达式匹配,而不是显示原始输出。

ModSecurity:访问被拒绝,代码为 418(阶段 4)。模式匹配“(?:[^<]*?(?:\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\b|\.::(?:news remote php shell injection::\.| rhtools\b)|ph(?:p(?:(?: commander|-terminal)\b|remoteview)| ...”在 RESPONSE_BODY。[文件“/dh/apache2/template/etc/mod_sec2/modsecurity_crs_45_trojans.conf”] [行“34”] [id“950922”] [消息“后门访问”] [严重性“CRITICAL”] [标签“MALICIOUS_SOFTWARE/TROJAN”]

答案1

完全规则这是:

SecRule RESPONSE_BODY "(?:<title>[^<]*?(?:\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\b|\.::(?:news remote php shell injection::\.| rhtools\b)|ph(?:p(?:(?: commander|-terminal)\b|remoteview)|vayv)|myshell)|\b(?:(?:(?:microsoft windows\b.{0,10}?\bversion\b.{0,20}?\(c\) copyright 1985-.{0,10}?\bmicrosoft corp|ntdaddy v1\.9 - obzerve \| fux0r inc)\.|(?:www\.sanalteror\.org - indexer and read|haxplor)er|php(?:konsole| shell)|c99shell)\b|aventgrup\.<br>|drwxr))" \
    "phase:4,rev:'2',ver:'OWASP_CRS/2.2.9',maturity:'8',accuracy:'8',t:none,ctl:auditLogParts=+E,block,msg:'Backdoor access',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',capture,id:'950922',tag:'OWASP_CRS/MALICIOUS_SOFTWARE/TROJAN',tag:'WASCTC/WASC-01',tag:'OWASP_TOP_10/A7',tag:'PCI/5.1.1',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.trojan_score=+1,setvar:tx.anomaly_score=+%{tx.error_anomaly_score},setvar:tx.%{rule.id}-OWASP_CRS/MALICIOUS_SOFTWARE/TROJAN-%{matched_var_name}=%{matched_var}"

由于最后一个测试,这确实与上面的匹配:drwxr。我不确定为什么要将其添加到此规则中,因为评论中没有解释,而且这是最初提交给 GitHub 的 2.6 版本。

无论如何,您有几种选择:

您可以编辑规则以删除最后一项检查。不建议这样做,因为将来升级规则时会恢复该检查。

您可以通过将以下内容添加到您的配置中来关闭该规则(从 /dh/apache2/template/etc/mod_sec2/modsecurity_crs_45_trojans.conf 加载规则之后)

 SecRuleRemoveById 950922

您还可以关闭响应主体解析:

SecResponseBodyAccess Off

扫描响应主体会影响性能,因此无论如何您都应该考虑这一点。请求通常很小(例如 GET /index.html),但响应将包含更多数据。

理论上,您应该知道您的响应中有什么(假设您有针对 SQL 注入和 XSS 等的保护),因此扫描出站响应可能没有意义。

反对意见认为,响应主体检查有助于防止信息泄露(例如,用于从数据库泄露信息的 SQL 注入攻击)。但是,如果您允许 SQL 注入,即使没有泄露信息,您也会陷入困境。

就我个人而言,除了在特定用例中,扫描响应主体没有什么用,因此默认情况下将其关闭,并针对某些 URL 将其打开。

相关内容