DDOS简介
DDOS,分布式拒绝服务攻击,攻击者通过若干个网络节点同时发起攻击,已达成规模效应。这些网络节点往往是黑客们所控制的“肉鸡”,数量达到一定规模后,就形成了一个“僵尸网络”。大规模的僵尸网络发起DDOS攻击,会导致服务器资源过载,从而导致服务不可用。
DDOS攻击一般分为网络层的DDOS攻击和应用层的DDOS攻击。

网络层DDOS攻击
常见的网络层DDOS攻击有SYN flood、UDP flood、ICMP flood等。这种类型的攻击主要是利用了TCP协议设计中的缺陷,而TCP/IP协议是整个互联网的基础,所以几乎不可能修复这些缺陷。其中SYN flood是一种最为经典的DDOS攻击。因此这里详细介绍下SYN flood。
在了解SYN flood之前,先温习一下TCP的三次握手。
1)客户端向服务器发送一个SYN报文;
2)服务器收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受;
3)客户端接收到服务器的SYN+ACK报文后向服务器发送ACK报文进行确认,ACK报文发送完毕,三次握手建立成功。
SYN flood攻击正是利用了TCP三次握手这种机制。攻击者首先伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此是服务器端会返回SYN/ACK包,因为源地址是伪造的,所以伪造的IP并不会应答,服务器端没有收到伪造IP的回应,会重试3-5次并等待一个SYN Time(一般为30秒至2分钟),如果超时则丢弃这个连接。攻击着大量发送这种伪造源地址的SYN请求,服务器的资源会被这些半连接耗尽,导致无法回应正常的请求。
对于SYN flood的防御,可以使用防火墙的TCP源探测。TCP源探测是指防火墙部署在客户端和服务器中间,当客户端向服务器发送的SYN报文经过防火墙时,防火墙代替服务器与客户端建立TCP三次握手。
首先,防火墙先对SYN报文进行统计,如果发现连续一段时间内去往同一目的地址的SYN报文超过预先设置的阈值,则启动TCP源探测。
启动TCP源探测后,防火墙收到SYN报文,将会回应一个带有错误确认号的SYN+ACK报文,接下来如果防火墙没有收到客户端回应的RST报文,则判定此SYN报文为非正常报文,客户端为虚假源。如果防火墙收到了客户端回应的RST报文,则判定此SYN报文为正常报文,客户端为真实源。防火墙将该客户端的IP地址加入白名单,在白名单老化前,这个客户端发出的报文都被认为是合法的报文。

应用层的DDOS攻击
应用层DDOS,不同于网络层的DDOS,由于发生在应用层,因此TCP三次握手已经完成,连接已经建立,所以发起攻击的IP地址也都是真实的。但应用层DDOS有时甚至比网络层DDOS攻击更为可怕。因为今天几乎所有的商业Anti-DDOS设备,只在对抗网络层DDOS时效果较好,而对应用层DDOS攻击却缺乏有效的对抗手段。
应用层DDOS攻击主要有CC攻击、Slowloris攻击和HTTP POST DOS攻击等。最后介绍一种特殊的攻击:ReDOS攻击。

CC攻击
攻击
CC攻击的原理非常简单,就是对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务器端资源的目的。在Web应用中,查询数据库、读写硬盘文件等操作,相对都会消耗比较多的资源。攻击者除了可以通过操控“肉鸡”来发送请求外,还可以入侵一个流量很大的网站,然后通过篡改页面,将巨大的用流量分流到目标网站。
如,在大流量网站A网站上插入一段代码:

那么所有访问该页面的A网站用户,都会对目标网站发起一次http get请求,从而可能直接导致目标网站拒绝服务。
防御
针对应用层DDOS攻击有许多优化服务器性能的方法。
1.使用memcache
在服务器端将使用频率高的数据放在memcache中,相对于查询数据库所消耗资源来说,查询memcache所消耗的资源可以忽略不计。
缺点:当memcache查询没有命中时,服务器必然会查询数据库,从而增大服务器资源的消耗,攻击者只要找到这样的页面即可。同时攻击者出了触发“读”数据操作外,还可以触发“写”数据操作,“写”数据的行为一般都会导致服务器操作数据库。
2.限制请求频率
服务器可以在应用中针对每个“客户端”做一个请求频率的限制。如,通过IP地址与Cookie定位一个客户端,或者判断HTTP头中的User-Agent字段来识别客户端,如果客户端的请求在一定时间内过于频繁,则对之后来自该客户端的所有请求都重定向到一个错误页面。
缺点:在客户端的判断依据上并不是永远可靠的,因为攻击者可以改变IP和cookie,cookie可以被清空,而IP可以使用代理服务器来改变。在实际的攻击中,大量使用代理服务器或傀儡机来隐藏攻击者的真实IP,已经是一种成熟的攻击模式。攻击者使用这些方法可以不断变换IP,来绕过服务器对单个IP地址请求频率的限制。
3.让客户端解析一段Javascript
让客户端解析有段Javascript,并给出正确的运行结果。因为大部分的自动化脚本都是直接构造HTTP包完成的,并非在一个浏览器环境中发起的请求。因此一段需要计算的Javascript,可以判断出客户端是否为浏览器。
缺点:有的自动化脚本是内嵌在浏览器中的“内挂”,就无法检测出来了。
4.Yahoo的实现算法
实际情况中,攻击者的IP地址不可能无限制的增长,假设攻击者有1000个IP地址发起攻击,如果请求了10000次请求,则平均每个IP地址请求同一个页面达到10次,攻击如果持续下去,单个的IP地址的请求也将变多。但无论如何变,都在这1000个IP地址内做轮询。为此Yahoo实现了一套算法,根据IP地址和Cookie等信息,可以计算客户端的请求频率并进行拦截。

Slowloris攻击
Slowloris攻击是利用Web Server的设计缺陷进行的攻击。原理是以极低的速度往服务器发送HTTP请求。由于Web Server对于并发的连接数都有一定的上限,因此若是恶意的占用住这些连接不释放,那么Web Server的所有连接将都被恶意连接占用,从而无法接受新的请求,导致拒绝服务。
攻击
在正常的HTTP Headers中,是以两个\r\n\r\n表示HTTP Headers部分结束的。根据这个,攻击者构造一个畸形的HTTP请求,即结尾只有一个\r\n。由于Web Server只收到一个\r\n,因此将认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意HTTP头,保持住连接即可。当构造多个连接后,服务器的连接数很快就到达了上限。
与传统的DoS攻击不同的地方在于只用单一的服务器加上少许的带宽就可以瘫痪HTTP服务器。
但Apache官方否认Slowloris的攻击方式是一个漏洞,他们认为这是Web Server的一种特性,通过调整参数能够缓解此类问题,这使得Slowloris攻击今天仍然很有效。
防御
1)统计每个TCP连接的时长并计算单位时间内通过的报文数量即可做精确识别。一个TCP连接中,HTTP报文太少和报文太多都是不正常的,过少可能是慢速连接攻击,过多可能是使用HTTP 1.1协议进行的HTTP Flood攻击,在一个TCP连接中发送多个HTTP请求。
2)限制HTTP头部传输的最大许可时间。通过server.xml内定义的连接器的keepAliveTimeout属性,配置一个合适的超时时间。超过指定时间HTTP Header还没有传输完成,直接判定源IP地址为慢速连接攻击,中断连接并加入黑名单。

HTTP POST DOS攻击
攻击
这种攻击原理是发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速度发包,比如10~100s发一个字节,保持住这个连接不断开。这样当客户端连接数多了以后,占住了Web Server的所有可用连接,导致了DOS。

ReDOS
当正则表达式写的不好时,就有可能被恶意输入利用,消耗大量资源,从而造成DOS,这种攻击被称为ReDOS。
我们平时用的正则表达式都是基于NFA引擎。NFA 引擎是回溯引擎,基于该引擎的正则表达式可以相当快速地确定肯定匹配(即,输入字符串与给定正则表达式匹配),但确定否定匹配(输入字符串与正则表达式不匹配)所需的时间更长。因此,对于不合理的表达式,导致系统资源(CUP和内存)的大量消耗,从而导致整台服务器的性能下降,表现的结果是系统速度很慢,有的进程或服务失去响应,与拒绝服务的后果是一样的。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code