我只是在阅读并试验 modsecurity,希望有人可以稍微解释一下这种疯狂背后的方法。
我通常对任何防火墙采取的方法是将我希望发生的事件列入白名单,同时阻止所有其他事件。我读过的有关 modsecurity 的文章似乎都没有采用这种方法,重点似乎完全基于与已知威胁相匹配的规则,排除则基于禁用相应的 ID。我觉得这很令人费解,所以我肯定我误解了威胁或程序的性质。
当然,最严密的 modsecurity 设置将是匹配所有预期的请求,而(.*?)
其他一切都不匹配?
答案1
您想要的方法可以通过 ModSecurity 来实现。但是,如果您的应用程序 100% 安全,那么您就不需要像 ModSecurity 这样的 WAF(既然您可以在应用程序中做到这一点,为什么还要费心在 ModSecurity 中将您想要允许的 POST 请求列入白名单?)。
通用 ModSecurity 规则集(如 OWASP 规则集)旨在识别通用威胁,而不是阻止或允许对您的 URL 进行特定访问。它们不会为您的应用程序和特定设置而设计。可以在它们之上添加特定规则。通用规则集仍然具有很大的价值,因为它们包含大量累积知识。您说您的请求“已正确转义”,但这并不像这个简单的陈述那样容易。有多种方法可以绕过转义(URL 编码、反斜杠、双反斜杠……等),每种方法都不同,具体取决于您环境中的所有部分。例如,OWASP 规则集中的 SQL 注入检查经过多年的建立并由其周围的社区完善。此外,仅仅因为您对应用程序的某些区域进行了良好的转义检查并不意味着开发人员已经记得对每个参数/字段进行检查。或者 Web 或应用服务器在到达您的应用程序之前没有漏洞。
通常来说,ModSecurity 是一个额外的由于网络服务器本质上必须是开放的,因此需要一层保护。由于网络的开放性和差异性,以及两个类似的请求(无论好坏)可能因发送者不同而完全不同,因此您无法仅将好的请求列入白名单而将坏的请求列入黑名单。您几乎有要允许 HTTP/HTTPS 连接,您有要允许参数和 cookies 等参数,您有虽然允许 GET 请求可以将 POST 请求限制到特定的 URL,正如您所说。
ModSecurity 允许您进行一般检查,允许您进行特定检查(尽管我个人倾向于尽可能将它们放在 Web 应用程序中,除非在 ModSecurity 中更容易实现),并且还具有允许您随着情况的变化快速实施新测试和检查的额外优势(例如零日漏洞、特定攻击和您通过日志记录发现的错误),让您有时间稍后进行适当的修补/修复。
想想看,如果它能改善攻击面。主防火墙限制到端口 80/443,您的网络服务器和 ModSecurity 会进一步删除“不良请求”,然后应用程序会进行检查,最后您就可以执行应用程序的预期用途了。
是的,理想情况下我们只会将允许的请求列入白名单,但现实是说起来容易做起来难......