觉得写的不错,故转载:https://mp.weixin.qq.com/s/idoKIGK7-z3SOjMKCflJlg
一,定义
CC(ChallengeCollapsar,挑战黑洞)攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求。CC根据其工具命名,攻击者使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。
CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,可以归为DDoS攻击的一种,两者之间的原理都是一样的,即发送大量的请求数据来导致服务器拒绝·服务,是一种连接攻击。CC攻击又可分为代理CC攻击和肉鸡CC攻击。代理CC攻击是黑客借助代理服务器生成指向受害主机的合法网页请求,实现DDoS和伪装就叫Challenge Collapsar。而肉鸡CC攻击是黑客使用CC攻击软件,控制大量肉鸡,发动攻击,相比来后者比前者更难防御。因为肉鸡可以模拟正常用户访问网站的请求伪造成合法数据包。
二,如何判断是否被CC攻击
CC攻击主要工作原理是耗资源,这就需要看是哪种攻击方式,看抓包分析是否是通过多IP刷新页面。如果你的网站被CC攻击导致无法访问,那么指定会有一种资源(CPU/内存/IO/带宽)耗尽。
(1)消耗CPU资源
黑客使用大量肉鸡来刷新网站动态页面,CPU占用100%时CPU资源将被耗尽
(2)耗内存资源
黑客不断刷新动态页面,搜索数据库的内容,只要搜索量变大后内存占满。网站直接打不开或者是非常卡。
(3)耗I/o资源
黑客找到上传文件,或者是下载文件的页面,不停的上传与下载,磁盘资源点满
(4)耗带宽资源
根据宽带速度看流量占用多少,如果流量占满了,服务器直接丢包掉线或者网站一点都打不开。
随着CC攻击的成本越来越低,对网站的CC攻击成为常态。我们可以对自己的网站进行CC攻击压力测试,以便进行更好的防护。(仅在小范围对自己的网站进行压力测试,请勿用于非法用途)。
三、CC压力测试步骤
1、在线测试平台
https://www.idddos.com/是一个线上CC压力测试平台,可以付费使用来对自己的网站进行测试。
2、手动搭建环境进行CC攻击测试
(1)设置http代理
这里就不多说了,网上有很多可用的免费http代理。也可以自己架设http代理服务器来做压力测试。
选择软件验证代理地址,这里用的是花刺代理验证
然后使用相关压力测试工具进行测试即可
四、CC攻击的变种——慢速攻击
基本原理如下:对任何一个开放了HTTP访问的服务器HTTP服务器,先建立了一个连接,指定一个比较大的content-length,然后以非常低的速度发包,比如1-10s发一个字节,然后维持住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。
和CC攻击一样,只要Web服务器开放了Web服务,那么它就可以是一个靶子,HTTP协议在接收到request之前是不对请求内容作校验的,所以即使你的Web应用没有可用的form表单,这个攻击一样有效。
在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常的低廉。slowhttptest是一款对服务器进行慢攻击的测试软件,包含了几种攻击方式,像Slowloris、SlowHTTP POST、Slow Read attack等。
1、Slowhttptest:源代码地址:https://github.com/shekyan/slowhttptest
下载下来首先编译安装
./configure
然后make && make install
slowhttptest -h
2、Slowhttptest攻击模式
(1) slowloris模式:
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://host.example.com/index.html -x 24 -p 3
HTTP协议规定,HTTP Request以 (0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求。
(2)Slowloris的变种–Slow HTTP POST,也称为Slow body。
slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://host.example.com/loginform.html -x 10 -p 3
在POST提交方式中,允许在HTTP的头中声明content-length,也就是POST内容的长度。在提交了头以后,将后面的body部分卡住不发送,这时服务器在接受了POST长度以后,就会等待客户端发送POST的内容,攻击者保持连接并且以10S-100S一个字节的速度去发送,就达到了消耗资源的效果,因此不断地增加这样的链接,就会使得服务器的资源被消耗,最后可能宕机。
(3)Slow Read attack
slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://host.example.com/resources/index.html -p 3
采用调整TCP协议中的滑动窗口大小,来对服务器单次发送的数据大小进行控制,使得服务器需要对一个回应分成很多个包来发送。要使这种攻击效果更加明显,请求的资源要尽量大。
总而言之,该工具的原理就是设法让服务器等待,当服务器在保持连接等待时,就消耗了资源。
3、哪些服务器易被慢速攻击
慢速攻击主要利用的是thread-based架构的服务器的特性,这种服务器会为每个新连接打开一个线程,它会等待接收完整个HTTP头部才会释放连接。比如Apache会有一个超时时间来等待这种不完全连接(默认是300s),但是一旦接收到客户端发来的数据,这个超时时间会被重置。正是因为这样,攻击者可以很容易保持住一个连接,因为攻击者只需要在即将超时之前发送一个字符,便可以延长超时时间。而客户端只需要很少的资源,便可以打开多个连接,进而占用服务器很多的资源。
经验证,Apache、httpd采用thread-based架构,很容易遭受慢速攻击。而另外一种event-based架构的服务器,比如nginx和lighttpd则不容易遭受慢速攻击。
五、CC攻击的防御
对于 CC 攻击,其防御必须采用多种方法
1. 服务器垂直扩展和水平扩容
资金允许的情况下,这是最简单的一种方法,本质上讲,这个方法并不是针对 CC 攻击的,而是提升服务本身处理并发的能力,但确实提升了对 CC 攻击的承载能力。
垂直扩展:是指增加每台服务器的硬件能力,如升级 CPU,增加内存,升级 SSD 固态硬盘等。
水平扩容:是指通过增加提供服务的服务器来提升承载力。
2. 对于服务中具备高度共性,多用户可重用,或单用户多次可重用的数据,一旦从数据库中检索出,或通过计算得出后,最好将其放在缓存中,后续请求均可直接从缓存中取得数据,减轻数据库的检索压力和应用服务器的计算压力,并且能够快速返回结果并释放进程,从而也能缓解服务器的内存压力。
3. 页面静态化
与数据缓存一样,页面数据本质上也属于数据,常见的手段是生成静态化的 html 页面文件,利用客户端浏览器的缓存功能或者服务端的缓存服务,以及 CDN 节点的缓冲服务,均可以降低服务器端的数据检索和计算压力,快速相应结果并释放连接进程。
4. 不管服务是有登陆态还是没登陆态,基于 session 等方式都可以为客户端分配唯一的识别 ID(后称作 SID),服务端可以将 SID 存到缓存中。当客户端请求服务时,如果没有带 SID(cookie 中或请求参数中等),则由服务端快速分配一个并返回。可以的话,本次请求可以不返回数据,或者将分配 SID 独立出业务服务。当客户端请求时带了合法 SID(即 SID 能在服务端缓存中匹配到),便可以依据 SID 对客户端进行频率限制。而对于 SID 非法的请求,则直接拒绝服务。
5. 最后,IP 限制依然可以结合上述规则一起使用,但是可以将其前置到外层的防火墙或负载均衡器上去做,并且可以调大限制的阈值(结合历史统计数量,预测一个极端的访问量阈值,在服务器可承受的范围内,尽量避免误伤),防止恶意访问穿透到应用服务器上,造成应用服务器压力。
参考资料:
如何提升防御 CC 攻击的能力 | Laravel China 社区
https://learnku.com/articles/4593/how-to-enhance-the-ability-to-defend-against-cc-attacks
慢速连接攻击和处理方式 – 君子笑而不语 – 博客园
https://www.cnblogs.com/xiaoliu66007/p/10174672.html
CC攻击 – 简书
https://www.jianshu.com/p/dff5a0d537d8
转载地址:https://mp.weixin.qq.com/s/idoKIGK7-z3SOjMKCflJlg