一、CC攻击简介
CC攻击,全称为challenge collapsar攻击,是DDoS的一种,属于应用层的DDoS攻击。
攻击者一般通过发送恶意的HTTP请求,以达到耗尽服务器资源,导致其无法正常服务的目的。
常见的CC攻击包括:通过海量请求耗费服务端CPU资源的攻击、慢速攻击、特定漏洞的CC攻击。
二、CC攻击常见类型及具体表现
常规CC攻击
通过大量请求比较耗费资源的接口,比如:全盘搜索等需要大量数据库操作、需要大量CPU时间的的接口。导致服务端CPU占用100%,无法处理正常的业务请求。
一般用一个压测软件就可以做到大量并发,专业的攻击团队可以利用僵尸网络,同时发送海量请求,造成服务器性能瞬间飙升,直至卡死,无法进行正常服务。
HTTP慢速攻击
HTTP慢速攻击利用了应用层HTTP协议的“缺陷”,可以完美绕过安全设备对4层DDoS的防御方法,因为很难通过其发送的TCP或UDP请求来区分恶意和正常的请求。相对于传统四层DDoS的攻击,应用层的DDoS攻击需要更少的连接,而且杀伤力更大。
Slow headers by \r\n
Web应用在处理HTTP请求之前都要先接受完所有的HTTP头部,因为HTTP头部中包含了一些Web应用中可能用到的重要信息。攻击者利用这一点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。
攻击者想服务器发送请求数据包,每30s发送一个HTTP头部,而Web服务器在没有接收到两个连续的\r\n时,会认为客户端没有发送完头部,而持续的等待客户端发送数据。
利用工具:Popularized in 2009 by Rsnake with the free tool, Slowloris.
python3 slowloris.py -ua -p 28666 xx.xx.xx6.89 -s 3500
向xx.xx.xx6.89的28666端口发送http请求,链接数3500.
攻击端:
![dfaa80a1459dc229f5bbba3dab36d743.png]
对应服务器上的,来自攻击端端连接数:1370个
![a7e95b577c827db050f39d1d5ada3a25.png]
Slow headers by Get
该攻击方式最先由 Michal Zalewski and Adrian llarison Ciobanu于2007年提出。
利用方法:
- fingerprint the timeout on serverside (测出server端超时时间设置)
- dig the sitemap from target (测试目标网站的sitemap)
- build a list of browsers to advertise to server during request (创建一组浏览器UA以给目标网站发送请求)
- buy proxies from black market (从黑市上购买代理)
- start requests thru proxies to target (通过代理开始请求目标网站)
使用随机的请求头,请求网站各个网址。发送几个字节,等到server端快超时了再发送接下来的几个字节,但是不要主动完成请求。
使用2k个代理,每个代理发送3到4个请求,就可以生成6k到8k个请求。如果服务器端是Apache,就会等待请求完成。可以发送几个字节使服务器端的Apache继续等待,在其超时之前,继续发送几个字节,这时Apache会把这个请求的计时进行重置。
假设服务器端设置的超时时间为 300s,请求头有512字节的数据,每次超时前发送rand(5,10)字节,这样一个请求就会保持300*50s。
针对这个问题:Apache Foundation不认为是漏洞,也并不计划去修复。AF认为等待HTTP请求头完成发送是web服务的基本要求。
微软IIS添加了一个HTTP 请求头timeout的参数,任何超过该时间设置的请求都会被关闭。
这样GET类型慢速发送请求头的攻击就失效了。
防御:对HTTP请求头设置超时,微软IIS支持。也可以使用负载均衡、反向代理或者特定的Apache模块(mod_antiloris)进行防御。
Slow body
HTTP Post慢速DoS攻击第一次在技术社区被正式披露是2010年的OWASP大会上,由Wong Onn Chee 和 Tom Brennan共同演示了使用这一技术攻击的威力。
和Slow header方法不同的是,这里利用的是POST方法,而不是GET。POST请求可以发送一个body。
“A POST request includes a message body in addition to a URL used to specify information for the action being performed. This body can use any encoding, but when webpages send POST requests from an HTML form element the Internet media type is “application/x-www-form- urlencoded”. (source: Wikipedia - “POST (HTTP)”)”
该攻击的基本原理为:
攻击者对Web服务器建立大量的连接,每个链接都包含一个Content-length头,并设置为很大的数值,(比如:Content-Length: 10000000)。这样Web服务器就会期望从这些链接接收10000000 byte的信息。
然后攻击者并不立刻发送这些数据,而是一个字节一个字节的发送,并且持续很长时间(比如:每10-100s发送一个字节)。
Web服务器就必须长时间的保持链接的开启,直到它接收到所有的数据。这样Web服务器的链接可能会被耗尽,导致正常服务的请求链接无法建立。
这种在客户端以单线程方式建立较大数量的无用连接,并且持续发包的代价非常低廉。实际实验一台普通PC可以建立的连接在3000个以上。结合肉鸡进行分布式DoS攻击,其杀伤力更大。
而且在HTTP/1.1协议中,没有了”Content-Length“的请求头,这种攻击的危害就被放大了。因为服务器端甚至不知道POST请求数据包有多大。
可能的应对方法:
Apache(mod_reqtimeout)LimitRequestBody
限制请求数据包的大小。
确定正常业务请求的速度范围。
Slow read
客户端与服务器建立连接并发送了一个HTTP请求,客户端发送完整的请求给服务器端,然后一直保持这个连接,以很低的速度读取Response,比如很长一段时间客户端不读取任何数据,通过发送Zero Window到服务器,让服务器误以为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。
可以利用:Slowhttptest进行攻击
容易被攻击的服务器
慢速攻击主要利用的是thread-based
架构的服务器的特性,这种服务器会为每个新连接打开一个线程,它会等待接收完整个HTTP头部才会释放连接。比如Apache会有一个超时时间来等待这种不完全连接(默认是300s),但是一旦接收到客户端发来的数据,这个超时时间会被重置。正是因为这样,攻击者可以很容易保持住一个连接,因为攻击者只需要在即将超时之前发送一个字符,便可以延长超时时间。而客户端只需要很少的资源,便可以打开多个连接,进而占用服务器很多的资源。
经验证,Apache
、httpd
采用thread-based
架构,很容易遭受慢速攻击。而另外一种event-based
架构的服务器,比如nginx和lighttpd则不容易遭受慢速攻击。
参考自:CC攻击的变异品种 慢速攻击
攻击工具
slowhttptest
mac安装方法:brew update && brew install slowhttptest
利用特定漏洞造成的CC攻击
fastjson拒绝服务攻击等
fastjson < 1.2.60版本的拒绝服务攻击。
Fastjson 1.2.60版本以下存在字符串解析异常,当字符串中包含\x转义字符时可能引发OOM。该漏洞可导致CPU/RAM过载,造成服务器宕机。
后端程序有问题导致的CC攻击(比较少见)
后端程序有问题时也会导致资源被耗尽,比如低效率的代码或错误的逻辑等。(自己DOS自己,狠起来连自己都打)
比如某xxxxx业务,上线新的代码后,CPU利用率飙升,导致后端大量报500错误。
三、CC攻击防御方法
- 紧急情况下,可以将域名解析到127.0.0.1,不过这样鱼死网破了,自己的服务彻底没法用了。
WAF层
- 限制单一源IP的高频访问(可以获取WAF上访问出现高频、长时间的请求,然后再去日志平台自动获取对应IP访问域名、url、status分部情况等。)
业务代码层
- 尽量将网站做成静态页面。动静分离。
- 先进行简单的验证:先进行简单的验证,后进行资源消耗类型的验证。
- 避免高CPU使用的操作。
- 异常处理。
- 限制用户上传文件的大小和后缀。
- 限制请求的大小。
- 优雅的进行降级处理。
防御思路
1.应对当前系统了如指掌,如系统最高负载、最高数据处理能力,以及系统防御体系的强项与弱点。
2.历史日志的保存、分析。
3.对当前系统进行严格安全审计。
4.上报公安相关部分,努力追溯攻击者。
5.网站,能静态,就一定不要动态,可采取定时从主数据库生成静态页面的方式,对需要访问主数据库的服务使用验证机制。
6.防御者应能从全局的角度,迅速及时地发现系统正在处于什么程度的攻击、何种攻击,在平时,应该建立起攻击应急策略,规范化操作,免得在急中犯下低级错误。
对历史日志的分析这时将会非常重要,数据可视化与统计学的方法将会很有益处:
1.分析每个页面的平均访问频率。
2.对访问频率异常的页面进行详细分析 分析得到ip-页面访问频率。
3.得到对访问异常页面的访问异常ip列表。
4.对日志分析得到忠实用户IP白名单。
5.一般一个页面会关联多个资源,一次对于这样的页面访问往往会同时增加多个资源的访问数,而攻击程序一般不会加载这些它不感兴趣的资源,所以,这也是一个非常好的分析突破点。
具体防御方法
1.对低级的大频率CC攻击,可以直接根据UA特征、或IP进行访问限制。
2.中级,可以为请求定义token放到Cookie中。必须得带有正确的Token才能访问后端访问。当用户第一次访问时,cookie中没有这个Token,返回一个302重定向,同时添加set cookie字段,目标地址为当前页面。如果客户端是一个正常的浏览器,就会执行set cookie和302重定向命令。如果是简单的CC攻击软件,一般不会执行这些指令。
3.高级,返回一个网页,页面中嵌入JavaScript来设置Cookies并跳转。这样被伪造的可能性更小。
Token生成算法
每个IP地址的token不同 & 无法伪造 & 相同的客户端每次生成的Token相同。
Token = Hash( UserAgent + client_ip + key )
参考资料:
Layer_7_DDOS-H…..t…..t….p….p….o….s….t (Wong Onn Chee and Tom Brennan OWASP演讲)
HTTP Post Denial Of Service: more dangerous than initially thought(HTTP POST慢速攻击)