http的慢速攻击

http的慢速攻击:

  利用http的合法规则,不断与目标服务器建立连接。每个连接建立后,一直尽可能的不释放,直到服务器的http连接资源占满,而不能相应正常的请求,从而达到攻击http服务器的效果。

 

服务器支持的http连接数非常多,为何还会出现服务器的http资源消耗过多,出现相应慢或者拒绝服务的现象:

  客户端和服务器端建立http连接,是通过5元组来完成,分别是{协议,localIP,localPort,remoteIP,remotePort}。协议是固定的TCP;服务器提供的服务也是固定的,即remoteIP和remotePort是固定的(服务器通过IP来定位,服务器上具体的服务通过port标定),那么服务器上能够接收的http连接数就和服务器的端口数65535(1~1024系统自留了)无关了。但是65535和localPort有关,即和客户端有关,同一个client每次和服务器建立一个连接,就需要使用一个port,则在做client压测时,就会出现连接最大不超过65535的现象。

  虽然服务器的http连接上限和端口数量无关,可以达到万、百万级,但也不是无限制的。原因是:1、内存限制,每个请求都要内存来保存请求的状态和缓存的收发数;2、服务器的带宽限制;3、服务器的句柄限制,每个tcp连接都会使用socket句柄,每个socket句柄是一个文件句柄,操作系统对打开的文件句柄数量是有限制的。

 

常见的几种满攻击方法:

  slow headers:由于http的头部对服务器来说可能含有非常重要的信息,所有服务器在处理http请求之前都会接收完全部的http头部。http的头部和数据部分通过2个连续的\r\n来区分,攻击者就利用这个特征,发起一个http连接,一直不停的发生http头(不发送2个连续的\r\n),从而消耗服务器的连接和内存资源。

  slow post:攻击者使用post方式向服务器提交数据,将报文的长度设置的非常大,但是在后续的数据发生中,每次只发送很小的一点数,会导致服务器一直等待post提交的数据发送完毕,从而消耗掉服务器的连接和内存资源。

  slow red:攻击者与服务器建立连接,获得response后,一直和服务器保持连接,但是以很低的速率来读取数据,比如很长一段时间不读取,通过发送zero window给服务器,使服务器认为读取方一直很忙(并会向读取方发送zero window probe询问是否可以接受数据),直到连接快超时了,才读取几个字节。从而消耗服务器的连接和内存资源。

 

解决方案:

  慢攻击风险监测识别:

    检查服务器每秒钟的http并发连接数,如果超过设定的阈值,然后检查http报文。如下慢攻击规则:

    1、连续多个的http post报文总长很大,但是http载荷长度都很小;

    2、连续多个http报文头都没有结束标识;

  

  防范策略:

    1、设定http头的最大传输时间,例如最大许可传输时间为5秒;

    2、统计每个tcp连接的时长,并计算单位时长通过的报文量。太多和太少都有问题,把有问题的IP加入黑名单并断开连接,或者给手动验证的机会;

    

    

 

参考文档:https://blog.csdn.net/realmardrid/article/details/110943433

posted @ 2021-08-08 00:52  修心而结网  阅读(1231)  评论(0编辑  收藏  举报