1 引言
拒绝服务攻击(Deny of Service,DoS)曾经使得世界上几家著名电子商务提供商的站点(如雅虎、eBay、亚马逊等)陷入瘫痪长达数小时甚至数天,造成了巨大的经济损失。拒绝服务攻击非常容易发起,并不像其它攻击一样需要有一定技术基础。
拒绝服务攻击容易实施的根本原因是TCP/IP协议的脆弱性。TCP/IP协议是因特网的基石,它是按照在开放和彼此信任的群体中使用来设计的,在实现上力求效率,而没有考虑安全因素(如数据认证、完整性、保密性服务等)。例如,网络拥塞控制在TCP层实现,并且只能在终端结点实施控制,这就使得大量报文可以不受约束地到达终端结点;路由器可以只根据目的地址决定路由,用户可以任意改变源IP地址,造成地址欺骗攻击(IP Spoofing)容易实施,DoS攻击正是利用这个弱点,使得DoS攻击的真实源头难以追踪、DoS攻击报文的识别异常困难[1]。
传统的拒绝服务攻击从一个攻击源攻击一个目标,可以很容易地根据流量来识别[2]。但近年来,拒绝服务攻击已经演变为同时从多个攻击源攻击一个目标的形式,即分布式拒绝服务攻击(Distributed Deny of Service, DDoS)。DDoS呈现的特征与正常的网络访问高峰非常相似,特别是攻击者采用伪造、随机变化报文源IP地址、随机变化攻击报文内容等办法,使得DDoS的攻击特征难以提取,攻击源的位置难以确定。本文将介绍一种可以有效识别DDoS攻击的算法,这种算法通过计算新IP地址数量的变化情况,能较准确地检测出DDoS攻击。
2 拒绝服务攻击的原理及特征
基于漏洞的攻击就是利用软件中存在的漏洞(如操作系统、Web服务器中存在的缓冲区溢出漏洞),当存在漏洞的系统收到特定类型的数据包时,会立即崩溃或性能急剧下降。例如:Ping Of Death攻击利用一些系统不能处理超常IP包的漏洞,攻击者发送一个长度超过65535的Echo Request数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,导致TCP/IP协议栈的崩溃;而Teardrop攻击则利用早期某些操作系统中TCP/IP协议栈无法正确处理IP分片重叠的漏洞,如果攻击者发送定制的报文,强制它带有负的片断长度,Linux内核处理这类报文时,会导致系统挂起、崩溃或重启。尽管基于漏洞的DoS攻击也造成了一定的破坏,但是其破坏面不大,这类漏洞可以通过升级软件的办法修复或其它手段检测。
基于流量的攻击是攻击者在短时间内,通过向目标系统发送大量数据,消耗目标系统资源或网络带宽,使目标系统的处理能力短时间内达到饱和,停止对合法用户提供正常的网络服务。基于流量的攻击是本文的重点研究对象,为了简洁起见,本文内容所指的DoS攻击均表示基于流量的DoS攻击。
基于流量的DoS攻击又可分为单攻击源拒绝服务攻击和分布式拒绝服务攻击。
2.1 单攻击源拒绝服务攻击
单攻击源拒绝服务攻击即是传统的DoS攻击,就是攻击者从一个攻击源攻击一个目标,DoS攻击的特征是短时间内来自同一个源地址的数据包的流量迅速增加,检测DoS攻击的有效办法之一便是流量检测。常见的拒绝服务攻击有SYN flood、UDP flood、ICMP flood、Land、Smurf、fraggle等。
当攻击目标系统配置低、网络带宽小或其它性能指标不高时,DoS攻击效果明显。但是随着计算机处理能力的指数式增长,千兆级别网络的出现,攻击目标对恶意攻击包的消化能力在不断增强,DoS攻击的效果已经不是很明显,于是便出现了下面一类拒绝服务攻击形式。
2.2 分布式拒绝服务攻击
分布式拒绝服务攻击(DDoS)是在传统DoS攻击基础上演变而成的。分布式拒绝服务攻击将攻击源的个数从一个扩展为多个,采用多对一的方式,从多个攻击源同时发起攻击,攻击威力大大增强了。
图1示意了典型的分布式拒绝服务攻击的模式。