应用层拒绝服务攻击

DDOS又称为分布式拒绝服务,全称是 Distributed Denial of Service,DDOS本是利用合理的请求造成资源过载,导致服务不可用。常见的DDOS攻击有SYN flood,UDP flood,ICMP flood等。

SYN flood是一种最为经典的DDOS攻击。在SYN flood 攻击时,首先伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此时服务器会返回SYN/ACK包,因为源地址是伪造的,所以伪造的IP并不会应答,服务器端没有收到伪造IP的回应,会重试3~5次并且等待一个SYN Time(一般为30秒至2分钟),如果超时则丢弃这个链接。攻击者大量发送这种伪造源地址的SYN请求,服务器端将会消耗非常多的资源(CPU和内存)来处理这种半连接,同时还要不断地对这些IP进行SYN+ACK重试。最后的结果是服务器无暇理睬正常的连接请求,导致拒绝服务。

对抗SYN flood的主要措施有SYN Cookie/SYN Proxy、safereset等算法。SYN Cookie的主要思想是为每一个IP地址分配一个“Cookie”,并统计每个IP地址的访问频率。如果在短时间内收到大量的来自同一个IP地址的数据包,则认为收到攻击,之后来自这个IP地址的包将被丢弃。

 

应用层DDOS

应用层DDOS,不同于网络层DDOS,由于发生在TCP三次握手已经完成,连接已经建立,所以发起攻击的IP地址都是真实的。但应用层DDOS有时比网络层更为可怕,因为今天几乎所有的商业Anti-DDOS设备,只在对抗网络层DDOS时效果好,而对应用层DDOS攻击却缺乏有效的对抗手段。

CC攻击(Challenge Collapasar)

CC攻击的原理非常简单,就是对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务器资源的目的。在Web应用中,查询数据库、 读/写硬盘文件等操作,相对都会消耗比较多的资源。

Slowloris攻击

Slowloris是在2009年由著名的Web安全专家RSnake提出的一种攻击方法,其原理是以极低的速度往服务器发送HTTP请求。由于Web Server对于并发的连接数都有一定的上限,因此若是恶意地占用住这些连接不释放,那么Web Server的所有连接都将被恶意连接占用,从而无法接受新的请求,导致拒绝服务。

要保持住这个连接,RSnake构造了一个畸形的HTTP请求,准确地说,是一个不完整的HTTP请求。在正常的HTTP包头中,是以两个CLRF表示HTTP Headers部分结束的。由于Web Server只收到了一个\r\n,因此认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意HTTP头,保持住连接即可。

HTTP POST DOS

在2010年的OWASP大会上,Wong Onn Chee 和 Tom Brennen演示了一种类似于Slowloris效果的攻击方法,称之为HTTP POST DOS。其原理是在发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速度发包,比如8s~10s发一个字节,保持住这个连接不断开。当客户端连接数多了以后,占用住了Web Server的所有可用连接,从而导致DOS。

以上两种攻击的本质也是针对Apache 的MaxClients限制。

Server Limit DOS

Cookie也能造成一种拒绝服务,称之为Server Limit DOS。Web Server对HTTP包头都有长度限制,以Apache举例,默认是8192字节。也就是说,Apache所能接受的最大HTTP包头大小为8192字节。如果客户端发送的HTTP包头超过这个大小,服务器就会返回一个4xx错误。

假如攻击者通过XSS攻击,恶意地往客户端写入了一个超长的Cookie,则该客户端再清空Cookie之前,将无法再访问Cookie所在域的任何页面。这是因为Cookie也是放在HTTP包头里面发送的,而Web Server默认会认为这是一个超长的非正常请求,从而导致客户端的拒绝服务。

要解决此问题,需要调整Apache配置参数LimitRequestFieldSize,这个参数设置为0时,对HTTP包头的大小没有限制。

 

防御应用层DDOS

应用层DDOS攻击并非一个无法解决的难题,我们可以从以下几个方面着手:

  1. 最常见的针对应用层DDOS攻击的防御措施,是在应用中针对每个“客户端”做一个请求频率的限制。
  2. 应用层DDOS攻击是针对服务器性能的一种攻击,那么许多优化服务器性能的方法,都或多或少地能缓解此种攻击。合理地使用memcache就是一个很好的优化方案,将数据库的压力尽可能转移到内存中。此外还需要及时地释放资源,比如及时关闭数据库连接,减少空连接等消耗。
  3. 在网络架构上做好优化。善于利用负载均衡分流,避免用户流量集中在单台服务器上,同时可以充分利用好CDN和镜像站点的分流作用,缓解主站的压力。

 

验证码

验证码是互联网中常用的技术之一,它的英文简称是CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart, 全自动区分计算机和人类的图灵测试)。很多时候,如果可以忽略用户体验的影响,那么引入验证码这一手段能够有效地阻止自动化的重放行为。

有验证码,就会有验证码破解技术。除了直接利用图像相关算法识别验证码外,还可以利用Web实现上可能存在的漏洞破解验证码。(有兴趣可以查看:https://www.cnblogs.com/newstart/archive/2012/11/09/2762796.html

User-Agent

在一般情况下,服务器端应用可以通过判断HTTP头中的User-Agent字段来识别客户端。但从安全性来看这种方法并不可靠,因为HTTP头中的User-Agent是可以被客户端篡改的,所以不能信任。

解析JavasScript

一种比较可靠的方法是让客户端解析一段JavaScript,并给出正确的运行结果。因为大部分的自动化脚本都是直接构造HTTP包完成的,并非在一个浏览器环境中发起的请求。因此一段需要计算的JavaScript,可以判断出客户端到底是不是浏览器。类似的,发起一个flash让客户端解析,也可以起到同样的作用。但是需要注意的是,这种方法不是万能的,有的自动化脚本是内嵌在浏览器中的“内挂”,就无法检测出来了。

Web Server防御

还可以在Web Server这一层做好一些防御,其好处是请求尚未到达后端的应用程序里,因此可以起到一个保护的作用。

在Apache的配置文件中,有一些参数可以缓解DDOS攻击。比如调小Timeout、KeepAliveTimeout值,增加MaxClients值。

Apache中的“mod_qos" Module, 可以帮助缓解应用层DDOS攻击。mod_qos从思路上是限制单个IP地址的访问频率,因此在面对单个IP地址或IP地址较少的情况下,比较有用。但是如果攻击者使用了代理服务器、傀儡机进行攻击,就很难防御。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值