《TCP SYN Flood网络攻击技术及防御毕业论文》由会员分享,可在线阅读,更多相关《TCP SYN Flood网络攻击技术及防御毕业论文(7页珍藏版)》请在金锄头文库上搜索。
1、TCP SYN Flood网络攻击技术及防御内容摘要拒绝服务攻击(Denial of Service,DoS)是目前比较有效而又非常难于防御的一种网络攻击方式,它的目的就是使服务器不能够为正常访问的用户提供服务。而SYN Flood是最为有效和流行的一种DoS攻击形式。它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的资源,从而不能够为正常向连接是指网络在进行一次正常的TCP 传输之前首先需要在TCP 客户端和TCP 服务端建立特定的虚电路连接,该连接过程通常被称为TCP 的“三次握手”。在TCP 三进入SYN_RECV状态;第三次握手:客户端收到服
2、务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。如下图所示(本文中图形皆由visio 2010作出) 图正常情况下TCP建立连接的过程在上述过程中,当服务器收到SYN报文后,在发送SYN/ACK回应客户端之前,需要分配一个数据区记录这个未完成的TCP连接,这个数据区通常称为TCB资源,此时的TCP连接也称为半开连接。这种半开连接仅在收到客户端响应报文或连接超时后才断开,而客户端在收到SYN/ACK报文之后才会分配TCB资源,因此这种不对称的资源分配模式会被攻击者所利用形成SYNFlood攻击。 1.2
3、TCP三次握手的缺陷 在通常情况下,每一种操作系统都会使用一块限定的内存来处理TCP 连接请求。这块内存被称为TCP 缓存。当TCP 缓存未满时,每当客户端发送一个包含有SYN 标志置位的连接数据包到服务端时,服务端都会分配一块内存用于处理该连接请求。一般来说,TCP 缓存的容量是不大的,因为正常的情况下,TCP 能够很好地处理连接请求,即使有时TCP 缓存已经满了,客户端只要重新发送连接请求,服务器端有时间清空缓存队列以响应新的连接请求,而且一般情况下,同一时间连接某台服务器的相应端口以请求相应服务的数量是不会太多的。服务器提供服务时,一般服务器在提供服务的相应端口监听、接收客户端的连接请求
4、和数据包。服务端接收到数据包时一般首先在TCP 层对数据包进行分解,分解出TCP 数据包内容和IP 报头,并将这些信息存贮到内存中,然后检查TCP 校验和,如果检验失败,不返回确认ACK,该分段丢弃,并等待客户端进行重传。如果检验和通过,将查找与该连接相关联的协议控制块,如果此时没有找到与该连接相关联的协议控制块,TCP 将该分段丢弃并返回RESET,如果找到了与该连接相关联的协议控制块,但状态为关闭,这时该数据包被丢弃,但不返回RESET 信息,客户端会尝试重新建立连接请求。但如果上述状态正常,服务端将会建立新的Socket,同时把该调用过程放入TCP 缓存队列中,如果此时缓存队列已填满整个
5、缓存时,TCP 认为有错误发生,所有的后续连接请求会被拒绝。 所以我们假设在TCP 连接的三次握手中,有一个用户向服务器发送了SYN 报文后突然死机或掉线,那么服务器在发出SYN + ACK 应答报文后是无法收到客户端的ACK 报文(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN + ACK给客户端)并等待一段时间后丢弃这个未完成的连接;但如果有一个恶意的攻击者利用IP 欺骗技术,向服务器大量发送经过IP 伪装以后的连接数据包,由于这些数据中的源地址都是经过黑客精心挑选的虚假的IP 地址,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源数以万计的半连接。如果此时服
6、务器的TCP / IP 栈不够强,或者说缓存不够大时,最后的结果往往是由于服务器维持的半连接太多而导致堆栈溢出崩溃,或者是服务器端忙于处理攻击者伪造的TCP 连接请求而无法处理客户的正常请求,这时候我们就认为:服务器端受到了SYNFlood 攻击。 1.3 SYN Flood攻击的机制 客户端通过发送在TCP报头中SYN标志置位的数据分段到服务端来请求建立连接。通常情况下,服务端会按照IP报头中的来源地址来返回SYN/ACK置位的数据包给客户端,客户端再返回ACK到服务端来完成一个完整的连接。在攻击发生时,客户端的来源IP地址是经过伪造的(spoofed),现行的IP路由机制仅检查目的IP地址
7、并进行转发,该IP包到达目的主机后返回路径无法通过路由达到的,于是目的主机无法通过TCP三次握手建立连接。在此期间因为TCP缓存队列已经填满,而拒绝新的连接请求。目的主机一直尝试直至超时(大约75秒)。这就是该攻击类型的基本机制。发动攻击的主机只要发送较少的,来源地址经过伪装而且无法通过路由达到的SYN连接请求至目标主机提供TCP服务的端口,将目的主机的TCP缓存队列填满,就可以实施一次成功的攻击。实际情况下,发动攻击时往往是持续且高速的。下图为SYN Flood攻击过程示意图: 图 这里需要使用经过伪装且无法通过路由达到的来源IP地址,因为攻击者不希望有任何第三方主机可以收到来自目的系统返回
8、的SYN/ACK,第三方主机会返回一个RST(主机无法判断该如何处理连接情况时,会通过RST重置连接),从而妨碍攻击进行。如下图所示: 由此可以看到,这种攻击方式利用了现有TCP/IP协议本身的薄弱环节,而且攻击者可以通过IP伪装有效的隐蔽自己。但对于目的主机来说,由于无法判断攻击的真正来源。而不能采取有效的防御措施。 根据以上内容,我们大致可以推断出SYN Flood攻击具有如下特点: TCP SYN FIOOd 攻击只是让服务器不能接受客户端的请求,不能建立新的TCP 连接,它不会对服务端的文件、数据等造成损害; 黑客主要是利用了TCP 连接中的三次握手的缺陷而进行TCP SYN FIOO
9、d 攻击的; TCP SYN FIOOd 攻击时,攻击方只要发送少量的很小的攻击数据包,服务器端就有可能因攻击而停止服务; TCP SYN FIOOd 攻击时,攻击方的来源IP 的判断是很困难的; 服务端受到TCP SYN FIOOd 攻击时,因为无法区分哪些数据包是合法的,哪些是非法的,因而想要对TCP SYN FIOOd 攻击采取合适的防范措施是很困难的。 1. 防御SYN Flood的方法 SYN Flood攻击给互联网造成重大影响后针对如何防御SYN Flood攻击出现了几种比较有效的技术以下两种技术是目前所有的防御SYN Hood攻击的最为成熟和可行的技术. 2.1 SYN-cook
10、ie技术 SYN-cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时不分配一个专门的数据区而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时。TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法。再分配专门的数据区进行处理未来的TCP连接。 该技术的巧妙之点在于避免了在连接信息未完全到达前进行资源分配,使SYN Flood攻击的资源消耗失效。实现的关键之处在于cookie的计算。cookie的计算应该做到包含本次连接的状
11、态信息,使攻击者不能伪造cookie。 由于这部分内容与密码学交叉幅度较大,这里不做细致讨论。正如我之前说的,下面我将重点阐述地址状态监控技术。 2.2 地址状态监控 地址状态监控是利用监控工具对网络中的有关TCP连接的数据包进行监控。并对监听到的数据包进行处理。处理的主要依据是连接请求的源地址。每个源地址都有一个状态与之对应,总共有四种状态: 初态:任何源地址刚开始的状态; NEW状态:第一次出现或出现多次也不能断定存在的源地址的状态; GOOD状态:断定存在的源地址所处的状态; BAD状态:源地址不存在或不可达时所处的状态。 具体的动作和状态转换根据代P头中的位码值决定: 1)监听到SYN
12、包如果源地址是第一次出现。则置该源地址的状态为NEW状态;如果是NEW状态或BAD状态;则将该包被直接丢弃如果是G00D状态不作任何处理。 2)监听到ACK或RST包如果源地址的状态为NEW状态。则转为GOOD状态;如果是GOOD状态则不变;如果是BAD状态则转为NEW状态。 3)监听到从服务器来的SYN ACK报文(目的地址为addr),表明服务器已经为从addr发来的连接请求建立了一个半连接。为防止建立的半连接过多j向服务器发送一个ACK包,建立连接,同时,开始计时,如果超时,还未收到ACK报文证明addr不可达,如果此时addr的状态为GOOD则转为NEW状态;如果addr的状态为NEW
13、状态则转为BAD状态:如果为addr的状态为BAD状态则不变。状态转换图如下: 接下来分析一下基于地址状态监控的方法如何能够防御SYN Flood攻击。 1)对于一个伪造源地址的SYN报文。若源地址第一次出现,则源地址的状态为NEW状态。当监听到服务器的SYN+ACK报文表明服务器已经为该源地址的连接请求建立了半连接。此时。监控程序代源地址发送一个ACK报文完成连接。这样,半连接队列中的半连接数不是很多。计时器开始计时,由于源地址是伪造的,所以不会收到ACK报文。超时后监控程序发送RST数据包。服务器释放该连接该源地址的状态转为BAD状态。之后,对于每一个来自该源地址的SYN报文。监控程序都会
14、主动发送一个RST报文。2)对于一个合法的SYN报文。若源地址第一次出现。则源地址的状态为NEW状态服务器响应请求发送SYN+ACK报文。监控程序发送ACK报文,连接建立完毕。之后。来自客户端的ACK很快会到达。该源地址的状态转为GOOD状态。服务器可以很好的处理重复到达的ACK包。 从以上分析可以看出基于地址状态监控的方法可以很好的防御SYN Flood攻击,实现起来也相对容易一些。 3.小结 本文从TCP 三次握手的基本原理入手,详细讨论了TCP 三次握手的缺陷和黑客利用TCP 三次握手的缺陷进行TCP SYN FIood 攻击的基本原理,然后详细描述了一种比较有效和方便实施的防御方法:基
15、于监控的源地址状态技术(地址状态监控)。该措施对每一个连接服务器的口地址的状态进行监控。主动采取措施避免SYN Flood攻击的影响。学习完网络安全与保密,我对互联网技术以及现实存在的有关网络安全的事件有了更深层次的理解,这促使我有充足的动力探究相关问题的解决方案,使我对未来自己的职业发展方向也有了初步的认识。参考文献1 谢廷俊.SYN 拒绝服务攻击的检测及其防范研究J.电脑知识与技术,2008,1(6).2 王毅,冯永祥.TCP SYN flood网络攻击原理及其防御实现J.福建电脑,2008,(2).3 陈波.SYN Flood攻击的原理、实现与防范J.计算机应用与研究, 2003(12).4 颜学雄,王清贤,李梅林.SYN Flood攻击原理与预防方法J.计算机应用 2000(8).5 胡建伟,马建峰.网络安全与保密M.西安:西安电子科技大学出版社,2003.11.- 6 -