目录
1、DDOS简介
DDOS又称分布式拒绝服务(Distributed Denial of Service)。DDOS本是利用合理的请求造成资源过载,导致服务不可用。
分布式拒绝服务攻击,将正常请求放大了若干倍,通过若干个网络节点同时发起攻击,以达成规模效应。这些网络节点往往是黑客们所控制的“肉鸡”,数量达到一定规模后,就形成了一个僵尸网络。
常见的DDOS攻击有SYN flood、UDP flood、ICMP flood等。具体的攻击过程可以看我之前的博客,下附链接:
2、应用层DDOS
2.1 CC攻击
CC攻击的前身是一个叫fatboy的攻击程序,当时黑客为了挑战绿盟的一款反DDOS设备而开发了它。绿盟是中国著名的安全公司之一,它有一款叫“黑洞”的反DDOS设备能够有效清洗SYN Flood等有害流量,而黑客则挑衅似的将fatboy所实现的攻击方式命名为:Challenge Collapasar(简称CC),意在黑洞的防御下,仍然能有效完成拒绝服务攻击。
CC攻击的原理:对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。
应用层DDOS攻击还可以通过以下方式完成:在黑客入侵了一个流量很大的网站后,通过篡改页面,将巨大的流量分流到目标网站。
比如,在大流量网站上插入一段代码:
<iframe src="http://target" height=0 width=0 ></iframe>
那么所有访问该页面的用户,都将对此target发起一次HTTP GET请求,从而导致target拒绝服务。
2.2 限制请求频率
最常见的针对应用层的DDOS攻击的防御措施,就是在应用中针对每一个“客户端”做一个请求频率的限制。
例如:通过IP地址和Cookie定位一个客户端,如果客户端的请求在一段时间内过于频繁,则对之后来自该客户端的所有请求都重定向到一个出错界面。
2.3 道高一尺,魔高一丈
但是上述的防御方法并不完美。如果用户的IP地址发生改变,Cookie又被清空,则无法再定位到同一个客户端。
如何让IP地址发生变化?使用“代理服务器”是一个常见的做法。在实际的攻击中,大量使用代理服务器或傀儡机来隐藏攻击者的真实IP地址,攻击者可以利用这些方法不断变换IP地址,就可以绕过服务器对单个IP地址请求频率的限制了。
AccessDiver已经自动化地实现了这种变换IP地址的攻击,它可以批量导入代理服务器地址,然后通过代理服务器在线暴力破解用户名和密码。
如何解决?
- 应用代码做好性能优化。合理地使用memcache就是一个很好的优化方案,将数据库的压力尽可能转移到内存中,此外还要及时地释放资源,比如及时关闭数据库连接,减少空连接等消耗。
- 在网络架构上做好优化。善于利用负载均衡分流,避免用户流量集中在单台服务器上,同时可以充分利用好CDN和镜像站点的分流作用,缓解主站的压力。
- 实现一些对抗手段,如限制每个IP地址的请求频率。
3、验证码 CAPTCHA
验证码能有效阻止自动化的重放行为,因为脚本通常无法自动识别出验证码。
随着技术发展,破解验证码的方法变得越来越成熟。通过彩虹表、图像处理技术,都可以破解验证码。
4、防御应用层DDOS
在一般情况下,服务器端应用可以通过判断HTTP头中的User-Agent字段来识别客户端,但User-Agent字段是可以被客户端篡改的,所以也不可靠。
一种比较可靠的方法是让客户端解析一段JavaScript并给出正确的运行结果。因为大部分的自动化脚本都是直接构造HTTP包完成的,并非在一个浏览器环境中发起的请求。因此一段需要计算的JavaScript,可以判断出客户端是不是浏览器,同样发送一个flash让客户端解析也可以起到同样的作用,但这不是万能的。
除了人机识别外,还可以在Web Server这一层做防御,其好处是请求尚未到达后端的应用程序里,可以起到一个保护作用。
在Apache的配置文件中,有一些参数可以缓解DDOS攻击,比如调小Timeout、KeepAliveTimeout值、增加MaxClient值,但这些参数可能会影响到正常应用,因此需要根据实际情况而定。
"mod_qos"是Apache的一个Module,它可以帮助缓解应用层DDOS攻击。
mod_qos从思路上仍然是限制单个IP地址的访问频率,但如果攻击者使用了代理或傀儡机怎么办呢?
因为发起应用层DDOS攻击的IP地址都是真实的,所以在实际情况中,攻击者的IP地址其实也不可能无限制增长。假设攻击者有1000个IP地址发起攻击,如果请求了10000次,则平均每个IP地址请求同一页面达到10次,攻击如果持续下去,单个IP地址的请求也将变多,但无论怎么变,都是在这1000个IP地址的范围内做轮询。
为此Yahoo设计了一套算法,根据IP地址和Cookie等信息,可以计算客户端的请求频率并进行拦截。
5、资源耗尽攻击
5.1 Slowloris攻击
Slow Loris是2009年由著名的Web安全专家RSnake提出的一种攻击方法,其原理是以极低的速度往服务器发送HTTP请求。由于Web Server对于并发的连接数都有一定的上限,因此若是恶意占用住这些连接不释放,那么Web Server的所有连接都将被恶意连接占用,无法接受新的请求,导致拒绝服务。
为了保持住这个连接,RSnake构造了一个畸形的HTTP请求:
在正常的HTTP包头中,是以两个CLRF表示HTTP Headers部分结束的。
由于Web Server只收到了一个\r\n,因此会认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求,此时客户端再发送任意HTTP头,保持住连接即可。
当构造多个连接之后,服务器的连接数就会达到上限。
5.2 HTTP POST DOS
其原理是在发送HTTP POST包时,指定一个非常大的 Content-Length值,然后以很低的速度发包,比如10~100s发一个字节,保持住这个连接不断开。当客户端连接数多了以后,占用住了Web Server的所有可用连接,从而导致DOS。
成功实施攻击后会留下错误日志(Apache)
5.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会认为这是一个超长的非正常请求,从而导致客户端的拒绝服务。
6、正则引发的血案:ReDOS
正则表达式是基于NFA的,它是一个状态机,每个状态和输入符号都可能有许多不同的下一个状态。正则解析引擎将遍历所有可能的路径直到最后。由于每个状态都有若干个“下一个状态”,因此决策算法会逐个尝试每个“下一个状态”,直到找到一个匹配的。
例如:
^(a+)+$
当输入只有4个a时
aaaaX
其执行过程如下:
它只有16条可能的路径,很快就能被遍历完。
当输入:
aaaaaaaaaaaaaaaaX
就变成65536条可能的路径,这极大地增加了正则引擎解析数时的消耗。当用户恶意构造输入时,这些有缺陷的正则表达式会消耗大量的系统资源(比如CPU和内存),从而导致整台服务器的性能下降,系统速度变慢甚至失去响应。
如果再增加数量n,则消耗的时间也会翻倍。
下面是一些存在ReDOS的正则表达式:
转载:https://blog.csdn.net/m0_51683653/article/details/128458364