SYN flood攻击检测技术综述
2011-05-14石利平
石利平
(广东女子职业技术学院 应用技术系,广东 广州510450)
SYN flood攻击是一种当前流行的DoS与DDoS的方式之一,主要是利用TCP协议的三次握手的缺陷,造成服务器上TCP连接表溢出[1],而攻击服务器响应TCP连接请求的能力。TCP是TCP/IP体系中的运输层协议,是面向连接的,其三次握手过程数据包都通过IP协议传输。而IP协议是一种不可靠、尽力而为的网络协议,缺乏认证和保密措施,因此为否认、拒绝等欺瞒行为开了方便之门[2]。目前,DDos攻击中约有90%是SYN flood攻击[3],研究 SYN flood攻击检测技术对网络安全意义重大。
1 SYN flood原理
TCP连接的建立是通过三次握手来初始化[4]。三次握手建立TCP连接如图1所示。
在TCP连接的三次握手中,若用户向服务器发送了SYN报文后突然死机或掉线,则服务器在发出SYN+ACK应答报文后将无法收到客户端的ACK报文,导致第三次握手无法完成。这时,服务器端的TCP/IP栈中会保留这个半连接状态,然后再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接。这段时间称为 SYN Timeout(一般约为 30 s~2 min)[4]。 但如有攻击者大量模拟这种情况,产生大量的半连接,服务器将为维护这些半连接而消耗大量的资源,进而导致服务器的TCP/IP堆栈溢出,使服务器无法响应正常用户的请求。SYN flood攻击就是利用这种行为发动攻击。
正常情况下,连接超时后,服务器会清理出TCP连接表中已超时连接的相关信息。但攻击者不断给服务器发送大量的欺骗的TCP连接请求,使TCP连接表一直处于被填满状态,导致服务器无法响应大多数合法的连接请求。
根据攻击源的IP地址,SYN flood攻击可分为以下三种:(1)使用本机的 IP发送 SYN欺骗包;(2)假冒本网段中未在线的多台主机IP发送SYN欺骗包;(3)随机产生伪造的IP地址发送SYN欺骗包。为增加攻击的力度、隐蔽性和效率,使用随机源地址进行SYN flood攻击是攻击者常使用的方法[5]。
2 SYN flood攻击的检测技术
根据检测的位置SYN flood攻击检测主要分为4种:被攻击的服务器端、攻击源端、攻击源和被攻击服务器间以及正常的主机端。最受关注的是服务器端的检测和防护[6];
2.1 基于TCP协议SYN-FIN(RST)行为对特征的检测
这种方法检测的是连接终端主机的路由器端,是基于 TCP协议 SYN-FIN(RST)包对特征和连续变化点的检测[6]。首先收集IP数据包,然后分类数据包。根据IP访问包的TCP头部来识别TCP SYN、FIN和RST。关键是找出IP数据包片偏移中TCP数据位,计算依据公式为IPoffset=Hdr_LengthIP+TCPoffset。接着利用非参数的CUSUM(Cumulative Sum)算法分析 SYN-FIN(RST)行为对。CUSUM算法公式如下:
xn为一个随机序列模型。如果测试统计yn大于攻击门限N,则表示有SYN flood攻击发生,否则网络正常运作。该检测方法的优点是准确性高,在线检测速度较快,消耗系统资源少;其缺点是检测在攻击发生后才起作用,攻击对系统已造成一定的危害,且易产生误报警。但作为较早的SYN flood攻击检测方法,其检测思路还是值得借鉴的。
2.2 基于TCP半连接的检测
此检测是在服务器端[7],主要思路是检测TCP半开连接数是否正常,如异常,则检查半开连接数是否超过服务器容纳最大的半开连接数目,如超出则发出报警。该检测方法的主要步骤为:(1)分析因正常网络拥塞和因DDoS攻击造成的半连接的区别。这种区别是第2步中DARB(延迟探测)算法的基础。(2)利用DARB估计客户端与服务器之间的延迟时长。DARB算法类似于Traceroute技术,是在 IP层发送带有 TTL(time-to-live)字段的数据包到目标网站,测得客户端和服务器之间的延迟时长。算法中有两个重要量:far-hop是探测到最远的路由的TTL值;near_hop是探测到最近的路由的TTL值。(3)概率估计。首先计算一个T时间段内平均延迟x=其中xi是DARB中第i个半连接的延迟时间,S是时间T内在服务器上收集的半连接样本;然后再用函数f(x)来估算检测的延迟概率。
2.3 基于Patricia树的检测
基于Patricia树的检测是基于SYN flood攻击的最为本质的两点特征[8]:(1)短时期内一个服务(一组 IP、端口号)接收到大量的SYN包。(2)这些SYN包发起的连接处于半开状态。以Patricia树作为流量统计手段,利用Patricia树记录所有的半开连接及其数量,每个叶节点对应一个发起连接的IP源地址。Patricia树是一棵满二叉树,Patricia树的每一个节点的关键字是二进制字符串。算法主要是维护服务器Patricia树的半开连接表,周期性地进行检查和刷新。如果有攻击产生,Patricia树中将会明显地显示出发动攻击的主机IP地址。此方法的优点是消耗系统资源少,检效率高,但是一种被动检测。
2.4 基于源端网络的双粒度的检测
该检测方法的主要思想是以出入网络的TCP业务量的平衡性为判断依据来检测攻击[9]。此检测分两步:(1)用粗粒度检测引擎对出/入网络的TCP业务进行监控,发现异常就预报警,预警启动细粒度检测引擎、关闭粗粒度引擎。(2)由细粒度检测引擎监控终端网络向外发送的SYN包和接收的SYN/ACK包的数量差,当两种包的数量差迅速增大时,认为有SYN flood攻击,报警启动边界路由器中的过滤引擎,封锁攻击源发送的包。细粒度检测算法主要计算公式为:
其中:Δn为第n个抽样间隔内终端网络向外发送的SYN包与接收到的SYN/ACK包的数量差。随机序列{Δn,n=0,1}的均值依赖于网络的规模,并随抽样时刻变化;k是抽样间隔内 SYN/ACK包数量的平均值,可进行实时估计和周期性更新,k的递归估计定义如下:
此检测方法与参考文献[6]的检测思想类似,都是以TCP协议的SYN/ACK包数量为检测基础,均需对IP数据包进行分类。优点是两个粒度检测引擎采用不同的检测机制,检测高效、高速、虚警率低。其缺点主要有:检测效果会随着攻击组规模的增大而衰减。当网络中攻击流与网络正常业务相差不大时,也不易检测出来。
2.5 基于重尾特性的检测
基于重尾特性的检测方法是基于网络流量的检测[10]。主要思想是将统计阈值(以SYN/TCP的值为参数)和流量的重尾特性相结合。研究表明,当SYN/TCP的值β≤0.05时,网络正常;当β≥0.15时,网络存在SYN flood攻击;当 β∈(0.05,0.15)时,可能是正常流量,也可能是 SYN flood攻击。这时对网络流量进行重尾特征检测,当参数a≤2时,认为网络流量为正常流量;当a>2时,认为网络发生了SYN洪流攻击。a可从重重尾分布中计算得到。一般正常网络流量呈重尾分布特性,若将浏览器描述成on/off信息源,则其生成的数据刚好符合Pareto分布。
Pareto分布的概率密度函数(PDF)为:
它的和余累积分布函数(CDF)为:
其中,X是一个随机变量,常数k表示随机变量最小的取值。
此检测方法的优点是在网络有强SYN洪流时检测效率高,但在发生弱SYN Flood攻击时,其漏报率稍高,约为9%。
2.6 基于边界路由器的检测
表1 映射表结构
表2 存储表结构
这种检测方法是在路由器边缘检测SYN flood攻击,是基于正常的网络流量下路由器实际转发的 SYN、SYN/ACK和 ACK报文的数量进行检测[11]。主要包括两部分:存储模块和检查模块。(1)存储部有两个表:映射表和存储表。表结构如表1和表2所示。存储表记录SYN包源和目的地址,通过构建的HASH函数(HASHa=hash(i),a 表示地址)计算映射,为了防止哈希冲突,为连续的哈希函数分配不同的权重 wi。(2)检查模块检测和处理两个模块组成。在检测模块通过检查映射表是否有异常情况,方法是选择数据库中的源地址作为嗅探数据包的目的地地址,选择边界路由器的IP地址为嗅探包的源地址。然后这个嗅探数据包被发送到目标主机。如果有应答包返回,则说明无SYN flood攻击,否则说明有SYN flood攻击。通过检测结果,如推断有一个无辜的主机,处理模块发送RST包使受害者服务器释放受攻击产生的半开连接。此检测方法的优点是存储保证数据的持久性和容错性。如系统出现任何故障,当再次进入系统时,数据仍然存在,可以直接恢复正常连接。检查过程是主动的,不依赖于其他网络设备。不仅能检测SYN flood攻击,还有一定的消除SYN flood攻击的功能。
3 现有技术比较
表3对上面介绍的SYN flood攻击检测的防御所采用的方法进行简单总结。通过分析和比较已有的SYN flood攻击检测和防御方法发现,对于SYN flood攻击检测和防御目前还没有完美的解决方案。常规的SYN flood防御方法因实现容易,已得到广泛应用,但防御力度不强,不能从根本上避免SYN flood攻击的发生。SYN-cookie技术已得到厂商的支持,已在一些防火墙中使用。输入过滤器在理论上可以彻底避免SYN flood攻击的发生,但因其会使路由器处理数据量加大,影响路由器的性能,实施难度较大,还需进一步研究。
表3 SYN flood攻击检测方法比较
本文分析了TCP的三次握手协议,并针对SYN flood攻击的原理,对其检测方法进行了探讨。未来的检测和防御,应趋向于如何综合应用上述几种检测方法,取长补短,以达到互相补充和弥补,提高检测精度和效率。
[1]黄发文,徐济仁,陈家松.计算机网络安全技术初探[J].计算机应用研究,2002,19(5):46-48.
[2]贾春福,刘春波,高敏芬,等.计算机安全原理与实践[M].北京:机械工业出版社,2008.7.
[3]李海伟,张大方,刘俊,等.一种基于主动探测机制的SYNFlood 攻击检测方 法[J].计 算 机科学,2010,37(3):117-120.
[4]SYN Flood 攻 击 的 基本原理 及 防 御[EB/OL].http∶//www.bitscn.com/network/hack/200705/102673.html,2007.
[5]谢希仁.计算机网络[M].北京:电子工业出版社,2003.
[6]WANG H,ZHANG D,SHIN K G.Detecting SYN flood attacks[J/OL].Proceedings of the Annual Joint Conference of the IEEE Computer Society and Communications Society(INFOCOM),New York,NY,USA,2002,3:1530-1539.
[7]Xiao Bin,Chen Wei,He Yanxiang,et al.An active detecting method against SYN flood attack[J/OL].The 11th International Conference on Parallel and Distributed Systems(ICPADS′05),Volume I,709-715,Fukuoka,Japan,2005.07.
[8]陈杰,薛质,单蓉胜.一种基于Patricia树的检测SynFlood 攻击的方法[J].计算机工程,2004,30(13):26-28.
[9]林白,李鸥,赵桦.基于源端网络的 SYN Flood攻击双粒度检测[J].计算机工程,2005,31(10):132-134.
[10]许晓东,杨海量,朱士瑞.基于重尾特性的 SYN洪流检浏方法[J].计算机工程,2008,34(22):179-181.
[11]Ling Yun,Gu Ye,Wei Guiyi.Detect SYN flood attack in edge routers[J].International Journal of Security and its Applications,2009,3(1):32-45.