DDOS简介
分布式拒绝服务攻击英文缩写即”Ddos”,指以分散攻击源来黑进指定网站的黑客方式。DdoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。DdoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的”消化能力”加强了不少。 这时候分布式的拒绝服务攻击手段(DDoS)就应运而生了。DDoS就是利用更多的傀儡机(肉鸡)来发起进攻,以比从前更大的规模来进攻受害者。
应用层DDOS不同于网络层DDOS,由于发生在应用层,因此TCP三次握手已经完成,连接已经建立,所以发起攻击的IP地址也都是真实的。但应用层DDOS有时甚至比网络层DDOS攻击更为可怕,因为今天几乎所有的商业Anti-DDOS设备,只在对抗网络层DDOS时效果较好,而对应用层DDOS攻击却缺乏有效的对抗手段。
1、CC攻击 CC攻击的前身是一个叫fatboy的攻击程序,当时黑客为了挑战绿盟的一款反DDOS设备开发了它。挑衅叫Challenge Collapasar。 CC攻击的原理非常简单,就是对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务器端资源的目的。 在互联网中充斥着各种搜索引擎、信息收集等系统的爬虫(spider),爬虫把小网站直接爬死的情况时有发生,这与应用层DDOS攻击的结果很像。由此看来,应用层DDOS攻击与正常业务的界限比较模糊。 应用层DDOS攻击还可以通过以下方式完成:在黑客入侵了一个流浪很大的网站后,通过纂改页面,将巨大的用户流量分流到目标网站。 比如,在大流浪网站SiteA上插入一段代码: <iframe src=”http://target” height=0 width=0 ></iframe>
2、限制请求频率 最常见的针对DDOS的防御措施就是针对每个“客户端”做一个请求频率的限制。
3、道高一尺,魔高一丈 上面介绍的方案用:IP地址或者Cookie来定位一个客户端。但用户的IP地址可能会发生改变,而Cookie有可能会被清空。
例如利用不同的代理服务器变换IP地址。批量导入代理服务器地址,然后暴利破解用户名和密码。 所以: 1)应用代码要做好性能优化:合理利用memcache 2)在网络架构上要做好优化:善于利用负载均衡分流。 3) 实现一些对抗手段:比如限制每个IP地址的请求频率。
三、验证码那些事儿 1)验证码消耗掉后SessionID未更新,导致使用原有的SessionID可以一直重复提交同一个验证码。 2)
四、防御应用层DDOS 除了验证码,还有 1)检查HTTP头的User-Agent,但是这是可以纂改的。 2)让客户端解析一段Javascript,因为大部分的自动化脚本都是直接构造HTTP包完成的,并非在一个浏览器环境中发起的请求。因此一段需要计算的Javascript,可以判断出客户端到底是不是浏览器。类似的,发送一个flash让客户端解析,也可以。但注意,这种方法不是万能的,有的自动化脚本是内嵌在浏览器中的“外挂”,就无法检测出来了。 3)配置Web Server的 Timout、KeepAliveTimeout等
五、资源耗尽攻击 1、Slowloris攻击:原理是以较低的速度往服务器发送HTTP请求。由于WebServer对于并发的连接数有一定的上限,因此若是恶意地占用住这些连接不释放,那么Web Server的所有连接都被恶意连接占用,从而无法接受新的请求,导致拒绝服务。 在正常的HTTP包头中,是以两个CLRF表示HTTP Headers部分结束的。 由于Web Server只收到了一个\r\n,因此将认为HTTP Headers没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意的HTTP头,保持住连接即可。 当构造多个连接后,服务器的连接数很快就会达到上限。
此类拒绝服务攻击的本质,实际上是对有限资源的无限制滥用。
2、HTTP POST DOS 原理是在发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速度发包,比如10-100s发一个字节,保持住这个连接不断开。这样当客户端连接数多了以后,占用住了Web Server的所有可用连接,从而导致DOS。
要解决此类问题,可以使用Web应用防火墙,或者一个定制的Web Server安全模块。
3、Server Limit DOS Cookie也能造成一种拒绝服务。 Web Server对HTTP包头都有长度限制,以Apache为例,默认是8192个字节。也就是说,Apache所能接受的最大HTTP包头大小为8192字节(这里指的是Request Header,如果是Request Body,则默认的大小限制是2GB)。如果客户端发送的HTTP包头超过这个大小,服务器就会返回一个4xx错误。 加入攻击者通过XSS攻击,恶意地往客户端写入了一个超长的Cookie,则该客户端在清空Cookie之前,将无法再访问该Cookie所在域的任何页面。这是因为Cookie也是放在HTTP包头发送的,而Web Server默认会认为这是一个超长的非正常请求,从而导致“客户端”的拒绝服务。
要解决此类问题,需要调整Apache配置参数 LimitRequestFieldSize,这个参数设置为0时,对HTTP包头的大小没有限制。
六、一个正则引发的血案:ReDOS 与前面不同,ReDOS是一种代码缺陷。 正则表达式写的不好时,攻击者恶意构造输入时,这些有缺陷的正则表达式就会消耗大量的系统资源(比如CPU和内存),从而导致整台服务器的性能下降,表现的结果是系统速度很慢,有的进程或服务失去响应,与拒绝服务的后果是一样的。 ReDOS是一个埋藏在系统中的炸弹。 |