1、 Windows Server 2003 下 SYN Flood 攻击防御的一种方法SYN FLD 攻击是目前比较常见的攻击方式之一。该文介绍了 SYN FLD 攻击的基本原理,通过对 inds Server 2003 操作系统系统注册表修改策略提高 TPIP 通信安全来有效防止来自络内外部 SYN FLD 攻击。 关键词:SYN Fld;DS;三次握手;注册表;络安全 中图分类号:TP393 文献标识码:A 编号:1009-3044(2011)18-4304-02 ne f the Defense ethds against SYN FLD Attaks under ind Server 2
2、003 perating Syste HEN Yng (llage f Fundaental Eduatin, Sihuan Nral University, hengdu 610068, hina) Abstrat: SYN FLD Attak is ne f the ppular attaks n Internet. This paper intrdues the basi priniples f SYN FLD Attak. Thrugh difying the perating syste registry f ind Server 2003, e an iprve TP/IP uni
3、atin seurity fr effetively preventing the netrk fr internal and external SYNFLD Attaks. Key rds: SYN Fld; DS; three-ay handshake; registry; netrk seurity TP/IP(Transissin ntrl Prtl/Internet Prtl) 协议是目前使用最广泛的络互连协议,但是由于 TP 三次握手中存在不安全隐患,极易被攻击者利用,对络安全带来隐患。而 SYN Fld是当前最流行的 DS(拒绝服务攻击)与 DdS(分布式拒绝服务攻击)的方式之一
4、,它正是利用 TP 协议缺陷,发送大量伪造的 TP 连接请求,从而使得被攻击方资源耗尽(PU 满负荷或内存不足)的攻击方式。由于攻击简单、破坏力强、易于实现、难于防止和追查,越来越成为黑客常用的攻击方式,给络的安全性构成了极大的威胁。本文通过对 SYN fld 攻击原理分析,介绍在 inds Sever 2003 操作系统下通过修改注册表项来防御 SYN fld 攻击的一种方法,具有较强的实用性。 1 SYN Fld 攻击原理 一个正常的 TP 连接三次握手过程要经过以下几个步骤(如图 1 所示):首先客户端向服务器发送带有初始化信息的 SYN 数据包且等待服务器的回应;当服务器接收到 SYN
5、 数据包后返回给请求的客户端一个 SYN+AK 的应答包,以确认客户端的服务请求被接受;最后客户端再向服务器端发送 AK 进行确认,在完成正常的三次握手过程之后,客户端和服务器就可以传送数据了。 在上述过程中,服务器会建立起一个未完成连接的队列,为每一客户端发送的 SYN 包建立一个条目,该条目表明服务器接受到客户端的连接请求,并发出了等待客户端的确认包,此时的服务器处于 SYN_REV 状态。只有服务器收到确认包以后,此条目将被删除,而服务器也将进入Established 状态。通常在服务器发送完 SYN/AK 分组后处于 SYN_REV 状态,等待请求连接客户端的返回一个 AK 分组,此时
6、服务器已经为建立此次连接分配相应的资源。如果攻击者,使用了伪造的 IP 地址,那么服务器将始终处于等待的“半连接”状态,直到超时而在连接队列里删除。SYN Fld 攻击正是利用 TP 协议三次握手过程中的这一缺陷,在短时间内,使用大量伪造 IP 地址向服务器发送大量的 SYN 分组请求而导致服务器耗尽资源而无法接受新的连接请求,处于拒绝服务请求的状态。 2 SYN Fld 攻击的防御方法 当前 SYN Fld 攻击防御方法有很多,比如缩短 SYN Tieut 的时间,改进 SYN kie 算法,或使用专用防火墙等等。如今借助一些专业防护产品可以即时发现攻击,如图 2。 当 Afee 防火墙检查
7、到攻击时,可以直接屏蔽攻击 IP 地址或暂时限制访问,但攻击来自使用代理服务的内部络时,采用屏蔽的方式将把正常的访问者一同拒绝。况且,攻击者使用大量伪造地址,使得正常访问者也被误杀。与屏蔽攻击 IP 地址的方法相比,通过对 TP/IP 协议通信规则作出一些改变,从而达到防御 SYN Fld 攻击的目的方法更具可行性。 具体实现方法如下:首先运行“regedit.exe”进入注册表,在 HKEY_LAL_AHINE SYSTEurrentntrlSetServiesTpipParaeters做以下更改(所涉及的值全为十六进制): 2.1 启用 SYN 攻击保护 新建一个名为SynAttakPrt
8、et 的数值,数值类型为 REG_DRD。将值设置为:1。 该参数可使 TP 调整 SYN-AKS 的重新传输,当 SynAttakPrtet 默认值为 0(即不采取任何保护措施), 设置为 1 时, 可更有效地抵御 SYN 攻击此时,如果系统检测到存在 SYN 攻击,连接响应的超时时间将更短。 2.2 设置 SYN 保护阀值 1) 新建一个名为 TpaxPrtsExhausted 的数值,数值类型为REG_DRD ,将值设为 5。 该参数指定触发 SYN 洪水攻击保护所必须超过的 TP 连接请求数的阈值,有效值为 0 65535。 2) 新建一个名为 TPaxHalfpen 的数值,数值类型
9、为REG_DRD ,将值设为 500。 TPaxHalfpen 的数值有效值为 100 65535,在启用 SynAttakPrtet 后,该值指定处于 SYN_RVD 状态的 TP 连接数的阈值。在超过 SynAttakPrtet 后,将触发 SYN 洪水攻击保护。 3) 新建一个名为 TPaxHalfpenRetried 的数值,数值类型为 REG_DRD ,将值设为 400。 TPaxHalfpenRetried 数值有效值为 80 65535,在启用 SynAttakPrtet 后,该值指定处于至少已发送一次重传的 SYN_RVD 状态中的 TP 连接数的阈值。在超过 SynAttak
10、Prtet 后,将触发 SYN 洪水攻击保护。 2.3 其它参数设置 1) 新建一个名为 EnableDeadGDetet 的数值,数值类型为 REG_DRD ,将值设为0 (即 False 状态) EnableDeadGDetet 数值有效值为:0 或 1(即 False 或 True).当值为1 时,将允许 TP 执行失效关检测,启用失效关检测时,如果多个连接出现困难,TP 可能会要求 Internet 协议 (IP) 切换到备份关,攻击者可以利用此状态可能会强制服务器切换关,而切换到的新关可能并不是您打算使用的关。所以将值设为 0 可以避免上述现象的发生。2) 新建一个名为 Enable
11、PTUDisvery 的数值,数值类型为 REG_DRD ,将值设为 0 (即False 状态) 。 EnablePTUDisvery 的有效值为:0 或 1(即 False 或 True) 。设置为 1 时,TP 将尝试发现经由远程主机的路径传输的最大传输单位 (TU) 或最大数据包大小。通过发现路径的 TU 并将 TP 段限制到这一大小, TP 可以沿着连接具有不同 TU 的络的路径删除路由器上的碎片,消除碎片对络带来的负担。但是,同时攻击者也可以利用强制将 TU 值设置非常小来的办法,使得堆栈的负荷过大。设置为 0 是比较好选择。实际上,这样的设置是用降低 TP/IP 性能和吞吐量来换取
12、堆栈的安全。 3) 建一个名为 KeepAliveTie 的数值,数值类型为 REG_DRD ,默认值:7,200,000(两个小时) ,将值设为 300,000。 KeepAliveTie 的有效范围 1-0xFFFFFFFF(单位为毫秒) 。该值控制 TP 通过发送“保持活动”的数据包来验证空闲连接仍然完好无损的频率。如果仍能连接到远程计算机,该计算机就会对“保持活动”的数据包作出应答。默认情况下,不发送“保持活动”的数据包。这里我们将其设置为 300,000 (即 5 分钟) 。 4) 建一个名为 NNaeReleasenDeand 的数值,数值类型为 REG_DRD ,默认值: 0,将值设为 1。 NNaeReleasenDeand 有效值为 0 或 1(即False 或 True) 。该值确定计算机在收到名称释放请求时是否释放其 NetBIS 名称。添加该值的目的是让服务器