实战经验:电商平台遭遇CC攻击,我们是如何应对的?( 二 )


CC攻击是DDOS(分布式拒绝服务)的一种 , 是一种常见的网站攻击方法 , 攻击者通过代理服务器或者肉鸡向受害主机不停访问 , 造成服务器的内存或CPU等资源耗尽或带宽资源耗尽 , 直到网站无法访问 。
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
因为CC攻击的访问流量来自成千上万 , 几十万 , 甚至数百万的电脑 , 手机 , 云主机等客户端 。 几乎和正常的用户访问没区别 , 这些攻击请求不具备明显的特征 , 很难和正常访问区分开来 , 防御难度也很大 。 尤其是利用肉鸡组成的僵尸网络发起攻击 , 动辄是数以万计的机器(其中很多机器可能都是普通用户使用的电脑手机等) , 这种攻击请求和正常用户请求非常相似 , 防御难度就更大了 。
慢速攻击--CC攻击的变异品种慢速攻击的基本原理如下:对任何一个开放了HTTP访问的HTTP服务器 , 先建立了一个连接 , 指定一个比较大的Content-length , 然后以非常低的速度发表 , 比如1-10s发一个字节 , 然后维持住这个连接不断开 。 如果客户端持续建立这样的连接 , 那么服务器上可用的连接将一点一点被占满 , 从而导致拒绝服务 。
HTTP协议在接收到request之前是不对请求内容作校验的 , 所以即使你的Web应用没有可用的form表单 , 这个攻击一样有效 。
在客户端建立较大数量的无用连接 , 并保持持续发包的代价非常的低廉 。 实际试验中一台普通PC可以建立的连接在3000个以上 。 这对一台普通的Web服务器 , 将是致命的打击 。 更不用说结合肉鸡群做分布式攻击了 。
正因为其简单易用 , 成本低廉 , 效果明显的特性 , 慢速攻击成为众多攻击者的研究和利用对象 。
发展到今天 , 慢速攻击也演变成了多种 , 典型的主要包括如下几类:
Slow headers:Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部 , 因为HTTP头部中包含了一些Web应用可能用到的重要的信息 。 攻击者利用这点 , 发起一个HTTP请求 , 一直不停的发送HTTP头部 , 消耗服务器的连接和内存资源 。 攻击客户端与服务器建立TCP连接后 , 每10秒才向服务器发送一个HTTP头部 , 而Web服务器在没接收到2个连续的\r\n时 , 会认为客户端没有发送完头部 , 而持续的等待客户端发送数据 。
下面是使用 slowhttptest 工具发起的 slow header 攻击:
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
Slowhttptest 所发送的请求
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
服务端连接数变化
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
Slow body:攻击者发送一个HTTP POST请求 , 该请求的Content-Length头部值很大 , 使得Web服务器或代理认为客户端要发送很大的数据 。 服务器会保持连接准备接收数据 , 但攻击客户端每次只发送很少量的数据 , 使该连接一直保持存活 , 消耗服务器的连接和内存资源 。 攻击客户端与服务器建立TCP连接后 , 发送了完整的HTTP头部 , POST方法带有较大的Content-Length , 然后每10s发送一次随机的参数 。 服务器因为没有接收到相应Content-Length的body , 而持续的等待客户端发送数据 。
Slow read:客户端与服务器建立连接并发送HTTP请求 , 客户端发送完整的请求给服务器端 , 然后一直保持这个连接 , 以很低的速度读取Response , 比如很长一段时间客户端不读取任何数据 , 通过发送Zero Window到服务器 , 让服务器误以为客户端很忙 , 直到连接快超时前才读取一个字节 , 以消耗服务器的连接和内存资源 。
注:TCP通过滑动窗口(Window)的概念来进行流量控制 。 设想在发送端发送数据的速度很快而接收端接收速度却很慢的情况下 , 为了保证数据不丢失 , 显然需要进行流量控制 ,协调好通信双方的工作节奏 。 所谓滑动窗口 , 可以理解成接收端所能提供的缓冲区大小 。 顾名思义 , Zero Window , 零窗口 , 即当发送方的发送速度大于接收方的处理速度 , 接收方的缓冲塞满后 , 就会告诉发送方当前窗口size=0 , 发送方此时会立即停止发送数据 。


推荐阅读