HTTP可以降低服务器的速度有多慢?
添加时间:2019-05-14 16:44:36
来源:
慢速HTTP是应用程序层拒绝服务(DoS)攻击,并且有可能在资源有限的情况下击倒服务器。由于攻击的性质(低速和低音量),它们很难被发现并且可能导致与高容量DDoS相同的损害。在这篇文章中,我将分享我对这些攻击的经验
简介
如WiKi所述,慢速HTTP攻击依赖于这样一个事实,即HTTP协议在设计之前要求服务器在处理之前完全接收请求。如果HTTP请求未完成,或者传输速率非常低,则服务器会使其资源忙于等待其余数据。如果服务器保持太多资源忙,则会产生拒绝服务。[资源 :https://github.com/shekyan/slowhttptest/wiki ]
慢速HTTP攻击主要有三种类型。
慢速标题(又名Slowloris)
此攻击通过打开与Web服务器的大量连接并通过减慢发送永不结束的标题来保持它们的活动。由于请求未完成,服务器不会关闭连接,最终会耗尽服务器上的所有资源,阻止合法请求。
慢身体(又名RU-Dead-Yet)
RU-Dead-Yet就像Slowloris一样,但它不会发送永不结束的标题,而是发送永不结束的POST主体,迫使服务器保持连接打开。当服务器的所有资源都被占用时,它无法提供合法请求。
慢速读取
上述攻击通过发送慢速请求来利用Web服务器,但是,慢速读取漏洞基于从服务器读取响应非常缓慢。它的工作原理是通过广告一个非常低的客户端接收缓冲区大小,触发服务器的大响应,并花费几分钟来读取单个响应。当同时创建多个此类连接时,它可能会占用所有服务器资源并导致DoS。在这篇文章中,它无法比这次攻击的作者更好地解释。
Nginx架构 Nginx有一个主进程和一些辅助进程(包括工作进程)。主进程管理所有特权操作,而工作进程执行实际工作并处理连接。Nginx的架构与Apache的架构有根本的不同。Apache为每个新连接产生一个阻塞线程,而Nginx则基于非阻塞事件驱动架构。
由于IO上没有阻止工作进程,因此该体系结构在某种程度上提供了对慢速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配置中有很多移动部件,我们需要在进行随机复制/粘贴更改之前正确理解它们。
通过拒绝非常低的客户端接收缓冲区窗口大小,我还看到了另一个解决此问题的方法,但我还没有探索这条路径。