防止恶意请求-DOS攻击

本文关键字:-DOS 攻击 请求 恶意 | 更新日期: 2023-09-27 17:57:48

我正在开发一个asp.net MVC web应用程序,客户要求我们尽最大努力使其尽可能抵御拒绝服务攻击。他们担心该网站可能会收到恶意的高容量请求,意图减缓/关闭该网站。

我已经和产品所有者讨论过这一点,认为这确实超出了实际web应用程序的权限。我认为主机/网络团队有责任监控流量并响应恶意请求。

然而,他们坚持认为应用程序应该内置一些预防措施。不过,他们不想实现CAPTCHA。

有人建议我们限制在给定时间范围内可以对会话发出的请求数量。我想做这样的事在ASP.NET MVC中实现请求节流的最佳方式?但是使用会话id而不是客户端IP,因为这会给来自公司防火墙后面的用户带来问题——他们的IP都是一样的。

他们还建议增加关闭网站某些区域的功能,这表明管理员用户可以关闭数据库密集型区域。。。。。然而,这将通过UI进行控制,当然,如果它受到DOS攻击,管理员用户无论如何都无法访问它。

我的问题是,这样做真的值得吗?一个真正的DOS攻击肯定会更高级吗?

你还有其他建议吗?

防止恶意请求-DOS攻击

拒绝服务攻击几乎可以是任何会影响您为他人提供服务的稳定性的攻击。在这种情况下,您谈论的是网络DoS,如前所述,这通常不会发生在您的应用程序级别。

理想情况下,这种攻击将在网络级别得到缓解。有专门为此构建的防火墙,如Cisco ASA 5500系列,它从基本保护一直到高吞吐量缓解。它们是非常聪明的盒子,我可以保证它们在阻止此类攻击方面的有效性,只要使用了正确的吞吐量模型。

当然,如果无法访问为您提供这方面服务的硬件防火墙,您可以采取一些临时措施来帮助防御这些类型的攻击请注意,这些都不会像专用防火墙那样有效。

一个这样的例子是IIS模块动态IP限制,它允许您定义最大并发请求的限制。然而,在实践中,这有一个缺点,即它可能会开始阻止来自具有高并发请求吞吐量的浏览器的合法请求,以下载脚本和图像等。

最后,你可以做的是真的粗糙,但也真正有效,就像我之前写的一样。基本上,它是一个小型工具,用于监视日志文件中来自同一IP的重复请求。假设1.2.3.4在2秒内向/Home发出10个请求。如果检测到这一点,将添加一个防火墙规则(在Windows高级防火墙中,使用shell命令添加)来阻止来自该IP的请求,然后该规则可以在30分钟后删除。

就像我说的,这是非常粗糙的,但如果你必须在服务器级别进行,你就没有太多明智的选择,因为这不是应该进行的。你完全正确,因为责任在某种程度上在于托管提供商。

最后,你对CAPTCHA的看法也是正确的。如果有什么不同的话,它可以通过一次又一次地执行映像生成(这可能是资源密集型的)来帮助DoS,从而使您的资源更加匮乏。CAPTCHA有效的时间是,如果你的网站被自动注册机器人发送垃圾邮件,但我相信你已经知道了。

如果你真的想在应用程序级别做一些事情来取悦当权者,那么在你的应用程序中实施基于IP的请求限制是可行的,尽管90%无效(因为你仍然需要处理请求)。

如果你必须熬夜,你可以在云中实现该解决方案并扩展服务器,但它可能会变得昂贵。。。

另一个想法是记录注册用户的ip地址。在DOS的情况下,将所有流量限制为"好"用户的请求。

在应用程序级别防止真正的DoS攻击实际上是不可行的,因为由于您的应用程序与应用程序池相关联,该应用程序池的并发请求数最多,因此请求很可能会在Web服务器杀死应用程序之前杀死您的Web服务器。

这篇有趣的文章http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45声明windows 7、windows Vista和windows 8最多有10个并发请求。它进一步指出,"您将需要一个Windows服务器操作系统来了解高负载下异步方法的好处"。

您可以增加与应用程序关联的应用程序池的HTTP.sys队列限制,以增加排队的请求量(以便在线程准备就绪时进行稍后的计算),这将阻止HTTP协议堆栈(HTTP.sys)当超过限制并且没有工作进程可用于处理进一步的请求时,阻止返回Http错误503。

您提到客户要求您"尽最大努力使其尽可能抵御拒绝服务攻击"。我的建议在您的情况下可能不适用,但您可以考虑实现本文中提到的基于任务的异步模式(TAP),以满足客户的需求。

这种模式将在执行长期操作时释放线程,并使线程可用于进一步的请求(从而使HTTP.sys队列保持较低),同时在执行对第三方服务的多个请求或多个密集型IO计算时,也为应用程序提供了提高整体性能的好处。

此措施不会使您的应用程序对DoS攻击具有弹性,但会使应用程序对其所服务的硬件尽可能负责。