Syn Flood 攻击实例及安全防范

时间:2022-10-26 02:02:28

Syn Flood 攻击实例及安全防范

摘要:随着网络技术的发展,网络安全问题也日趋严重,作为典型的DDOS攻击方式,SYN Flood攻击因为其隐蔽性和高效性颇受攻击者青睐,更为严重的是,现在尚无完全令人满意的防护手段,单一的防范手段往往达不到安全防范的效果;文章以典型攻击为案例,在系统分析现有的常规防御技术手段的基础上,结合相关安全管理策略,设计了一套涉及预防、监控/识别、安全加固调整和恢复等关键环节的综合安全解决方案;实际运行表明,按照本方案防护的系统在攻击实施时仍然能够提供正常的服务。

关键词:分布式拒绝服务;SYN Flood;退让策略;防火墙;负载均衡

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)09-11588-03

1 引言

由于使用复杂的欺骗技术和基本协议,而不是采用可被阻断的非基本协议或高端口协议,分布式拒绝服务(Distributed Denial of Service,DDoS)攻击非常难识别和防御,而在拒绝服务攻击里,又以SYN Flood攻击最为有名,俗称洪水攻击。SYN Flood利用TCP协议缺陷,发送了大量伪造的TCP连接请求,使得被攻击方资源耗尽,无法及时回应或处理正常的服务请求。一个正常的TCP连接需要三次握手,首先客户端发送一个包含SYN标志的数据包,其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受,最后客户端再返回一个确认包ACK,这样才完成TCP连接。在服务器端发送应答包后,如果客户端不发出确认,服务器会等待到超时,期间这些半连接状态都保存在一个空间有限的缓存队列中;如果大量的SYN包发到服务器端后没有应答,就会使服务器端的TCP资源迅速耗尽,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。SYN Flood由于其攻击效果好,防御手段还不够完善,迄今为止,还没有什么好方法能够从根本上预防拒绝服务攻击行为的发生,因此需要制定完善的应急措施,对已发生的拒绝服务攻击行为进行发现、告警、识别、消除影响以及追踪攻击来源。此外,现在的DDoS防御系统普遍“重技术,轻管理”,大多仍局限于单一的技术手段,缺乏系统综合防御的思想,对安全管理和流程层面关注不够。

2 攻击实例

2006年8月某市政府外网Web服务器连续多次遭到DDoS攻击。第一次,网络维护人员发现访问速度很慢,检查发现外网防火墙丢包现象非常严重,在防火墙上抓包分析,发现有大量的随机IP地址对该主机发送了大量协议为255,长度固定的攻击包。防火墙在1分钟时间收到了110万个包,造成外网口堵塞,以致于用户对网站的正常访问受到极大影响。同时,其它需要通过防火墙的业务也受到了影响。由于大量攻击包到达了防火墙的外网口,只能在骨干路由器上对主要IP进行了封堵。封堵以后,网络状况暂恢复正常。同样的情况出现了多次,维护人员采取都是通过在骨干网设备上进行地址限制来恢复。

攻击数据包传输路径如图1所示,Web服务是1台PC服务器,操作系统为LINUX。在服务器上通过netstat工具可以看到:

# netstat -n -p TCP

tcp0 0 10.0.3.10:23224.103. 52.8:25833 SYN_RECV -

tcp0 0 10.0.3.10:23226.150.133.204:2588 SYN_RECV-

tcp0 0 10.0.3.10:23127.160.60.129:51008 SYN_RECV-

tcp0 0 10.0.3.10:23222.220.13.25:37396 SYN_RECV-

tcp0 0 10.0.3.10:23212.20.205.18:8427 SYN_RECV-

tcp0 0 10.0.3.10:23232.105.18.38:228 SYN_RECV-

tcp0 0 10.0.3.10:23239.111.65.116:5122 SYN_RECV-

tcp0 0 10.0.3.10:23236.20.138.202:4916 SYN_RECV-

……

在服务器上看到大量的SYN_RECV半连接状态,而且大量源IP地址是随机的,表明这是一种典型的带有IP欺骗的Syn flood攻击。其中SYN_RCVD表示当前未完成的TCP SYN队列,统计一下,发现共有10265个Syn的半连接存储在内存中。这时候被攻击的WEB服务器已经不能响应新的服务请求了,系统运行非常慢,也无法ping通,此时在骨干网设备上单纯的进行地址限制,已经无法起到攻击防范的作用,最终这几次攻击导致了网站服务的中止,通过该案例可见Syn flood攻击的危害性。

3 Syn flood攻击原理分析

SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。从上图可看到,服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

4 Syn flood安全防范

4.1 总体思路

关于SYN攻击防范技术,人们研究得比较早。归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范.但必须清楚的是,SYN攻击不能完全被阻止,我们所做的是尽可能的减轻SYN攻击的危害,除非将TCP协议重新设计。因此必须采用系统防范手段,主要在于如下几个方面。

4.2 防火墙

防火墙通常用于保护内部网络不受外部网络的非授权访问,它位于客户端和服务器之间,因此利用防火墙来阻止DoS攻击能有效地保护内部的服务器。针对SYN Flood,防火墙通常有三种防护方式:SYN网关、被动式SYN网关和SYN中继。

SYN网关防火墙收到客户端的SYN包时,直接转发给服务器;防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名 义给服务器回送一个ACK包,完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。由于服务器能承受连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的攻击。

被动式SYN网关 设置防火墙的SYN请求超时参数,让它远小于服务器的超时期限。防火墙负责转发客户端发往服务器的SYN包,服务器发往客户端的SYN/ACK包、以及客 户端发往服务器的ACK包。这样,如果客户端在防火墙计时器到期时还没发送ACK包,防火墙则往服务器发送RST包,以使服务器从队列中删去该半连接。由 于防火墙的超时参数远小于服务器的超时期限,因此这样能有效防止SYN Flood攻击。

SYN中继防火墙在收到客户端的SYN包后,并不向服务器转发而是记录该状态信息然 后主动给客户端回送SYN/ACK包,如果收到客户端的ACK包,表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙做为来 实现客户端和服务器端的连接,可以完全过滤不可用连接发往服务器。

4.3 SYN-cookie技术

一般情况下,当服务器收到一个TCP SYN报文后,马上为该连接请求分配缓冲区,然后返回一个SYN+ACK报文,这时形成一个半连接。SYN Flood正是利用了这一点,发送大量的伪造源地址的SYN连接请求,而不完成连接。这样就大量的消耗的服务器的资源。

SYN-cookie技术针对标准TCP连接建立过程资源分配上的这一缺陷,改变了资源分配的策略。当服务器收到一个SYN报文后,不立即分配 缓冲区,而是利用连接的信息生成一个cookie,并将这个cookie作为将要返回的SYN+ACK报文的初始序列号。当客户端返回一个ACK报文时, 根据包头信息计算cookie,与返回的确认序列号(初始的序列号+1)的前24位进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。

该技术的巧妙之点在于避免了在连接信息未完全到达前进行资源分配,使SYN Flood攻击的资源消耗失效。实现的关键之处在于cookie的计算。cookie的计算应该做到包含本次连接的状态信息,使攻击者不能伪造cookie。cookie的计算过程如下:

(1)服务器收到一个SYN包后,计算一个消息摘要mac:

mac=MAC(A,k);

MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。

A为客户和服务器双方的IP地址和端口号以及参数t的串联组合:

A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t

K为服务器独有的密钥;

时间参数t为32比特长的时间计数器,每64秒加1;

(2)生成cookie:

cookie=mac(0:24):表示取mac值的第0到24比特位;

(3)设置将要返回的SYN+ACK报文的初始序列号,设置过程如下:

高24位用cookie代替;

接下来的3比特位用客户要求的最大报文长度MMS代替;

最后5比特位为t mod 32。

客户端收到来自服务器SYN+ACK报文后,返回一个ACK报文,这个ACK报文将带一个cookie(确认号为服务器发送过来的SYN ACK报文的初始序列号加1,所以不影响高24位),在服务器端重新计算cookie,与确认号的前24位比较,如果相同,则说明未被修改,连接合法,然后,服务器完成连接的建立过程。

SYN-cookie技术由于在连接建立过程中不需要在服务器端保存任何信息,实现了无状态的三次握手,从而有效的防御了SYN Flood攻击。但是该方法也存在一些弱点。由于cookie的计算只涉及了包头的部分信心,在连接建立过程中不在服务器端保存任何信息,所以失去了协议 的许多功能,比如,超时重传。此外,由于计算cookie有一定的运算量,增加了连接建立的延迟时间,因此,SYN-cookie技术不能作为高性能服务 器的防御手段。通常采用动态资源分配机制,当分配了一定的资源后再采用cookie技术,Linux就是这样实现的。还有一个问题是,当我们避免了SYN Flood攻击的同时,同时也提供了另一种拒绝服务攻击方式,攻击者发送大量的ACK报文,使服务器忙于计算验证。尽管如此,在预防SYN Flood攻击方面,SYN-cookie技术仍然是一种有效的技术。

4.4 地址状态监控技术

地址状态监控的解决方法是利用监控工具对网络中的有关TCP连接的数据包进行监控,并对监听到的数据包进行处理。处理的主要依据是连接请求的源地址。

每个源地址都有一个状态与之对应,总共有四种状态:

初态:任何源地址刚开始的状态;

NEW状态:第一次出现或出现多次也不能断定存在的源地址的状态;

GOOD状态:断定存在的源地址所处的状态;

BAD状态:源地址不存在或不可达时所处的状态;

具体的动作和状态转换根据TCP头中的位码值决定。

(1)监听到SYN包,如果源地址是第一次出现,则置该源地址的状态为NEW状态;如果是NEW状态或BAD状态;则将该包的RST位置1然后重新发出去,如果是GOOD状态不作任何处理。

(2)监听到ACK或RST包,如果源地址的状态为NEW状态,则转为GOOD状态;如果是GOOD状态则不变;如果是BAD状态则转为NEW状态;如果是BAD状态则转为NEW状态。

(3)监听到从服务器来的SYN ACK报文(目的地址为addr),表明服务器已经为从addr发来的连接请求建立了一个半连接,为防止建立的半连接过多,向服务器发送一个ACK包,建立连接,同时,开始计时,如果超时,还未收到ACK报文,证明addr不可达,如果此时addr的状态为GOOD则转为NEW状态;如果addr的状态为 NEW状态则转为BAD状态;如果为addr的状态为BAD状态则不变。

4.5 服务器防范手段

在服务器要防止SYN洪水攻击,还可以通过如下手段:

(1)防止SYN洪水攻击

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

SynAttackProtect REG_DWORD 0x2(默认值为0x0)

说明:SYN攻击保护包括减少SYN-ACK重新传输次数,以减少分配资源所保留的时间.路由缓存项资源分配延迟,直到建立连接为止。如果synattackprotect=2,则AFD的连接指示一直延迟到三路握手完成为止。注意,仅在TcpMaxHalfOpen和TcpMaxHalfOpenRetried设置超出范围时,保护机制才会采取措施。

(2)缩短SYN Timeout时间

缩短SYN Timeout时间:由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。

(3)负反馈策略

参考一些流行的操作系统,如Windows2000的SYN攻击保护机制:正常情况下,OS对TCP连接的一些重要参数有一个常规的设置: SYN Timeout时间、SYN-ACK的重试次数、SYN报文从路由器到系统再到Winsock的延时等等。这个常规设置针对系统优化,可以给用户提供方便快捷的服务;一旦服务器受 到攻击,SYN Half link 的数量超过系统中TCP活动 Half Connction最大连接数的设置,系统将会认为自己受到了SYN Flood攻击,并将根据攻击的判断情况作出反应:减短SYN Timeout时间、减少SYN-ACK的重试次数、自动对缓冲区中的报文进行延时等等措施,力图将攻击危害减到最低。如果攻击继续,超过了系统允许的最 大Half Connection 值,系统已经不能提供正常的服务了,为了保证系统不崩溃,可以将任何超出最大Half Connection 值范围的SYN报文随机丢弃,保证系统的稳定性。

4.6 退让策略

退让策略是基于SYN Flood攻击代码的一个缺陷,我们重新来分析一下SYN Flood攻击者的流程:SYN Flood程序有两种攻击方式,基于IP的和基于域名的,前者是攻击者自己进行域名解析并将IP地址传递给攻击程序,后者是攻击程序自动进行域名解析,但 是它们有一点是相同的,就是一旦攻击开始,将不会再进行域名解析,我们的切入点正是这里:假设一台服务器在 受到SYN Flood攻击后迅速更换自己的IP地址,那么攻击者仍在不断攻击的只是一个空的IP地址,并没有任何主机,而防御方只要将DNS解析更改到新的IP地址 就能在很短的时间内(取决于DNS的刷新时间)恢复用户通过域名进行的正常访问。为了迷惑攻击者,我们甚至可以放置一台“牺牲”服务器让攻击者满足于攻击的“效果”(由于DNS缓冲的原因,只要攻击者的浏览器不重起,他访问的仍然是原先的IP地址)。

4.7 分布式DNS负载均衡

在众多的负载均衡架构中,基于DNS解析的负载均衡本身就拥有对SYN Flood的免疫力,基于DNS解析的负载均衡能将用户的请求分配到不同IP的服务器主机上,攻击者攻击的永远只是其中一台服务器,一来这样增加了攻击者的成本,二来过多的DNS请求可以帮助我们追查攻击者的真正踪迹(DNS请求不同于SYN攻击,是需要返回数据的,所以很难进行IP伪装)。

5 结束语

本文针对典型的Syn flood型的DDOS攻击特点,从实际攻击案例入手,分析了现有常规防范技术的特点和不足,并在此基础上提出了以“预防为主、及时发现、快速响应、综合解决”为原则的系统防范策略。通过综合运用防火墙技术、SYN-cookie技术、地址状态监控、服务器防范技术、退让策略和负载均衡等技术手段,提出了系统的Syn flood攻击安全防范解决方案。以该方案为指导,在本项目的实际运行中,确保了业务的持续进行和完整性,取得了良好的效果。

参考文献:

[1] JINS,YEUNG DS.A covariance analysisModel for DDoS Attack Detection [A].IEEE International Conference on Communications[C].Paris,France,2004.

[2] J.Elliot,Distributed Denial of Service Attacks and the Zombie Ant Effect[J].IT Professional,Mar./Apr,2000,pp55-57.

[3] Submissions to the Paketstorm DDOS paper constest[EB/OL]./papers/contest/-visited 13.11.2000.

[4] 汤丹,匡晓红,蒋光和. 运营商抵御DDoS攻击的安全解决方案[J].计算机工程与设计,2006,(21).

上一篇:基于ARM的嵌入式系统的设计与实现 下一篇:FCM算法在图像目标提取中的应用