IIS 上的 OWASP ModSecurity 2.9 导致 403 禁止

问题描述 投票:0回答:1

我有一个托管在 IIS 上的 ASP.NET Core 3.2 Web 应用程序。我的网站托管在使用 Plesk 的共享环境中。当我查看 Web 应用程序防火墙页面时,它显示核心规则集为“在 IIS (ModSecurity 2.9) 上运行的 OWASP(免费)”。

我的一些客户在访问该网站时收到了很多 403 Forbidden 错误。对于 iOS 用户来说,这种情况似乎比 Android 或桌面用户更常见。用户经常不得不删除 iPhone 的 Safari 网络数据(包括 cookie),403 很快又回来了。

查看 ModSecurity 审核日志文件后,我可以看到很多条目,其中大多数似乎是误报。例如,访问经常被触发规则 #942440 拒绝,该规则认为这是 SQL 注入攻击。此规则检测 REQUEST_COOKIES 中找到的 SQL 注释字符序列。我不知道为什么 cookie 包含这些字符。我正在使用 AspNetCore 身份验证和身份。

我在网上对 ModSecurity 和核心规则集进行了一些研究,看来 CRS 3 的误报率减少了 90% 以上。我的托管的 Plesk 控制台显示版本 2.9,这尤其令人沮丧,因为当我尝试从托管提供商获得支持时,我得到的一行答案并不是特别有帮助。例如,我询问有关更新到 CRS 3 的问题,得到的答复是“我认为 WAF 的更新都是由 Plesk 管理的。”

我也不知道偏执级别设置为多少,因为它没有在 Plesk Web 应用程序防火墙页面上显示。我唯一的模式选项是关闭、打开或仅检测/记录。

在详细查看审核日志文件的内容后,我发现另一个规则(#942450)“SQL Hex Encoding Identified”似乎也引起了悲伤。此规则查找带有两个附加十六进制数字的模式“0x”的字符串。这是一种十六进制编码,可以指向正在使用的漏洞,但这种编码的问题是会话 cookie 有时可能包含此模式。

忽略名称与特定模式匹配的 cookie 不是 ModSecurity 允许您执行的操作,因此我认为唯一可行的方法是让此规则忽略所有 cookie。至少这样,规则对于 post 和查询字符串参数仍然是完整的,但它不会再在 cookie 上触发。我也不知道如何做到这一点,因为我不知道如何限制两个参数(ModSecurity 集合)的排除,而使规则的其余部分保持不变。在 Plesk 页面上,我只能通过指定 ID 来停用安全规则。

任何人都可以建议我在这种情况下可以做什么吗?我觉得我应该考虑将我的托管提供商更改为能够提供更好的服务/支持并让我能够更好地控制 WAF 的托管提供商。我的网站不是那么大(不到 1GB)。在某些时候我还需要考虑将其从 Core 3.2 更新到 .NET 6 或 7。我的位置是澳大利亚。

asp.net-core iis session-cookies owasp mod-security
1个回答
0
投票

值班计划。

不幸的是,最大的问题是:

我唯一的模式选项是关闭、打开或仅检测/记录。

但是让我们看看提到的规则。

例如,访问经常被触发规则#942440拒绝,该规则认为这是SQL注入攻击。此规则检测 REQUEST_COOKIES 中找到的 SQL 注释字符序列。我不知道为什么 cookie 包含这些字符。

规则942440在PL2上激活,这意味着您的WAF至少在PL2上。但此规则还检查

REQUEST_COOKIES_NAMES
(例如“PHPSESSID”)、
ARGS_NAMES
(例如“用户”)和
ARGS
(例如
user
变量的值)。

规则942450也检查相同的目标。如果没有详细信息(例如交易的audit.log的完整内容),很难找出问题所在。

但请考虑您可以定位问题。正如您所写,此问题通常发生在客户端使用 iOS 时,并且客户端触发上述一个或多个规则。

只有排除才能解决问题。但是,如果您的可能性只是打开/关闭/检测,那么您将无法添加任何排除项 - 正如您在此处所写的:

在 Plesk 页面上,我只能通过指定其 ID 来停用安全规则。

是的,这是一个大麻烦。

任何人都可以建议我在这种情况下可以做什么吗?

如果我是你,在这种情况下,我会寻找另一个提供商,或者如果它太复杂,请关闭这些规则并检查你的应用程序两次,它不允许输入看起来像这些规则过滤器的输入。

© www.soinside.com 2019 - 2024. All rights reserved.