📜  HTTP能以多慢的速度关闭服务器?

📅  最后修改于: 2021-04-17 04:14:27             🧑  作者: Mango

慢速HTTP是应用程序层拒绝服务(DoS)攻击,可能会导致资源有限的服务器瘫痪。由于攻击的性质(速度慢,音量低),它们很难被检测到,并且可能与高音量的DDoS造成同等的破坏。在这篇文章中,我将分享我对这些攻击的经验介绍如WiKi中所述,缓慢的HTTP攻击依赖于这样的事实,即HTTP协议在设计上要求在处理请求之前,服务器必须完全接收请求。如果HTTP请求未完成,或者传输速率很低,则服务器将使其资源保持繁忙,以等待其余数据。如果服务器使过多的资源繁忙,则会导致拒绝服务。 [来源:https://github.com/shekyan/slowhttptest/wiki]

慢速HTTP攻击主要分为三种类型。

  1. 慢标头(又名Slowloris)
    该攻击通过打开与Web服务器的大量连接并通过减慢发送永不结束的标头来保持它们的活动而起作用。由于请求未完成,服务器不会关闭连接,并且最终将耗尽服务器上的所有资源,从而阻止合法请求。
  2. 慢的身体(又名RU-Dead-Yet)
    RU-Dead-Yet的工作方式与Slowloris一样,但是它没有发送永不结束的标头,而是发送了永不结束的POST正文,从而迫使服务器保持连接打开。当服务器的所有资源都被占用时,它无法满足合法请求。
  3. 读慢
    上述攻击通过发送缓慢的请求来利用Web服务器,但是,缓慢的读取利用是基于非常缓慢地从服务器读取响应的基础。它的工作原理是宣传一个非常小的客户端接收缓冲区大小,触发服务器的巨大响应,并花费多达几分钟的时间来读取单个响应。同时创建多个这样的连接时,它可能消耗所有服务器资源并导致DoS。在这篇文章中,没有比这个攻击的作者本人更好的解释了。

    Nginx架构
    img2
    Nginx有一个主进程和许多辅助进程(包括辅助进程)。主进程管理所有特权操作,而辅助进程负责实际工作并处理连接。 Nginx的体系结构与Apache的体系结构根本不同。 Apache为每个新连接生成一个阻塞线程,而Nginx基于非阻塞事件驱动的体系结构。
    下图总结了该流程:
    img3

    由于在IO上未阻止工作进程,因此该体系结构在某种程度上提供了对Slow HTTP攻击的先天防范。它可以继续满足其他要求。但是,它不是完全证明,还取决于Nginx配置选项。

    Nginx提供的一些常见配置选项可以防止此类攻击:

    1)limit_req –限制来自一个IP的请求速率
    2)limit_conn –限制来自一个IP的连接数
    3)client_body_timeout –用慢速主体关闭连接
    4)client_header_timeout –用慢速报头关闭连接
    5)send_timeout –如果客户端在这段时间内没有收到任何消息,则连接被关闭。

结论
如果处理不当,慢速HTTP攻击可能与DDoS体积攻击一样恶毒。此外,Nginx配置中有很多活动部件,在进行随机复制/粘贴更改之前,我们需要正确理解它们。

通过拒绝非常小的客户端接收缓冲区窗口大小,我还看到了针对此问题的另一种解决方法,但是我还没有探索这一路径。

参考
1)SlowHTTPTest
2)您准备好慢读了吗
3)在Nginx内部
4)Nginx参考
5)Nginx DDOS缓解