提问人:Ross Kelly 提问时间:10/20/2023 更新时间:10/21/2023 访问量:69
IIS 上的 OWASP ModSecurity 2.9 导致 403 禁止访问
OWASP ModSecurity 2.9 on IIS Causing 403 Forbidden
问:
我有一个托管在 IIS 上的 ASP.NET Core 3.2 Web 应用。我的网站使用 Plesk 托管在共享环境中。当我查看 Web 应用程序防火墙页面时,它显示核心规则集为“在 IIS 上运行的 OWASP(免费)(ModSecurity 2.9)”。
我的一些客户在访问该网站时收到了很多 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。我的位置是澳大利亚。
答:
值班计划。
不幸的是,最大的问题是:
我唯一的模式选项是关闭、打开或仅检测/记录。
但是,让我们看看上述规则。
例如,触发的规则 #942440 通常会拒绝访问,该规则认为这是 SQL 注入攻击。此规则检测在 REQUEST_COOKIES 中找到的 SQL 注释字符序列。我不知道为什么cookie包含这些字符。
规则 942440 在 PL2 上激活,这意味着您的 WAF 至少在 PL2 上。但此规则也检查了(例如。“PHPSESSID”)、(例如。“user”)和(例如。 变量的值)。REQUEST_COOKIES_NAMES
ARGS_NAMES
ARGS
user
规则 942450 也检查相同的目标。如果没有详细信息(例如,事务的 audit.log 的全部内容),就很难找出问题所在。
但考虑到您可以定位问题。正如您所写的,当客户端使用 iOS 并且客户端触发上述一个或多个规则时,通常会发生此问题。
您只能通过排除来解决问题。但是,如果您的可能性只是打开/关闭/检测,那么您将无法添加任何排除项 - 正如您在此处所写的:
在 Plesk 页面上,它只允许我通过指定其 ID 来停用安全规则。
是的,这是一个大麻烦。
谁能建议我在这种情况下能做什么?
如果我是你在这种情况下,我会寻找另一个提供程序,或者如果它太复杂,请关闭这些规则并检查你的应用程序两次,它不允许看起来像这些规则过滤器的输入。
评论