应用层(application layer)是七层OSI模型的第七层。应用层直接和应用程序 对接并提供常见的网络应用服务,能够在实现多个系统应用进程相互通信的同
时,完成一系列业务处理所需的服务。位于应用层的协议有很多,常见的包括
HTTP 、FTP 、DNS 、DHCP等。其中应用层中的每一个协议都有可能被用来发起 拒绝服务攻击。不同于其他层,应用层拒绝服务攻击已经完成了TCP的三次握
手,建立起了连接,所以发起攻击的IP地址都是真实的。常见的应用层拒绝服务 攻击有CC(Challenge Collapasar)攻击、Slowloris攻击、Server Limit DOS等。下 面就这几种常见的攻击进行简单介绍:
·CC攻击:对一些资源消耗(查询数据库、读写硬盘文件等)较大的应用页 面不断发起正常的请求,以达到消耗服务资源的目的。
· Slowloris攻击:以极低的速度向服务器发送HTTP请求。由于Web Server对于 并发的连接数都有一定的上限,因此若恶意地占用这些连接不释放,那么Web
Server的所有连接都将被恶意连接占用,从而无法接受新的请求,导致拒绝服 务。
· Server Limit DoS:在发送HTTP POST包时,指定一个非常大的Content-
Length值,然后以很低的速度发包,这样当客户端连接数过多以后, 占用了Web Server的所有可用连接,从而导致DoS。
本节以Slowloris攻击为例进行详细介绍。Slowloris是在2009年由著名Web安 全专家RSnake提出的一种攻击方法,其原理是通过恶意占用有效连接,从而导致 无法接受新的请求,达到目标服务器拒绝服务的效果。
HTTP协议,HTTP Request以“\r\n\r\n” 结尾表示客户端发送结束,服务器端开 始处理。那么,如果永远不发送“\r\n\r\n”会如何?Slowloris就是利用这一点来做 DDoS攻击。攻击者在HTTP请求头中将Connection设置为Keep-Alive ,要求Web
Server保持TCP连接不断开,随后缓慢地每隔几分钟发送一个key-value格式的数据 包到服务器端,例如a :b\r\n ,导致服务器端认为HTTP头部没有接收完成而一直 等待。如果攻击者使用多线程或者僵尸主机来做同样的操作,服务器的Web容器 很快就被攻击者占满了TCP连接而不再接受新的请求。不过,Apache官方否认
Slowloris 的攻击方式是一个漏洞,他们认为这是Web Server的一种特性,通过调 整参数能够缓解此类问题,这使得Slowloris攻击今天仍然很有效。
Slowloris有现成的工具脚本,通过pip安装以后就能直接使用。但要在
Windows系统下使用slowloris命令时,注意要切换到当前Python环境的Scripts目 录,要么将该目录加入环境变量。在Linux系统则可直接使用。
安装之后可以直接输入slowloris-h命令查看帮助信息,效果如下所示: |
通过帮助信息也可以发现Slowloris工具使用起来也很简单,只需要执行如下 指令即可: |
>>> slowloris ip |
但是默认情况下Slowloris有150个连接,效果可能不明显。可以使用-s参数指 定连接数,如1500: |
>>> slowloris 10 .0 .2 .16 -s 1500 |
执行效果如下所示:
在Slowloris脚本执行结束后,通过Wireshark捕获流量信息,其捕获效果如图 9-20所示,源IP地址为10.0.2.15 , 目的IP地址为10.0.2.16。
图9-20 Wireshark流量捕获效果
如图9-21所示,通过Wireshark捕获到的流量可以发现,HTTP发送结尾的字 符为4026\r\n ,这样导致服务器端认为HTTP头部没有接收完成而一直等待。如果 多个僵尸主机一同这样操作,很容易就会使目标主机宕机。
图9-21 HTTP发送结尾字符
防御策略
怎么样可以确保在遭受拒绝服务攻击的情况下,让服务器系统正常运行呢? 或者如何减轻拒绝服务攻击的危害?下面列出了几个常见的防御策略:
· 关闭不需要的服务和端口,实现服务最小化,让服务器提供专门服务。
· 安装查杀病毒的软硬件产品,及时更新病毒库。尽量避免因为软件漏洞而引 起的拒绝服务,定期扫描现有的主机和网络节点,对安全漏洞和不规范的安全配 置进行及时整改,对先前的漏洞及时打补丁。
· 经常检测网络和主机的脆弱性,查看网上漏洞数据库,以减少或避免主机成 为“ 肉鸡” 的可能性。
· 建立多节点的负载均衡,配备高于业务需求的带宽,建立多个网络出口,提 高服务器的运算能力。