TCP/IP原理和Syn攻击防范

时间:2022-06-12 06:27:04

摘要:简述TCP的三次握手的原理,分析其原理本质,介绍和说明目前主流的TCP/IP的攻击方法,旨在帮助读者在生产环境的网络系统,检测和预防Syn攻击。

关键词:TCP握手;Syn攻击

中图分类号:TP393.08 文献标识码:A文章编号:1007-9599 (2011) 20-0000-01

TCP/IP Principles and Syn Attack Protection

Zhu Da

(China Telecom Corporation Limited Shanghai Branch,Shanghai200021,China)

Abstract:The principle of the TCP three-way handshake,analysis of the nature of its principles,introduction and description of the current mainstream of TCP/IP method of attack,designed to help the reader in a production environment network system to detect and prevent Syn attacks.

Keywords:TCP handshake;Syn attack

一、TCP协议三次握手的原理

TCP/IP是一个协议集,是由多个不同的协议组成,TCP用户数据报表协议(也称作TCP传输控制协议,英文全称Transport Control Protocol,属于OSI网络的第四层)。TCP是一种可靠的面向连接的传送服务[1]。它在传送数据时是分段进行的,交换数据必须建立一个会话,主机和服务器交换数据的过程可以分为三个阶段:1.建立会话;2.数据交换;3结束会话。这里所说的三次握手实在建立会话的时候产生。所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

第一次握手:

从客户端发起,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:

服务器收到客户端发来的syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手.

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

二、攻击方法

根据TCP的握手原理,在三次握手过程中,服务端发送SYN+ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务端的半连接处于Syn_RECV状态.只有当收到客户端的ACK后,服务器转入ESTABLISHED状态.

Syn攻击就是客户端在短时间内伪造大量IP地址,向服务器不断地发送syn包,服务器回复ACK包进入SYN_RECV状态,并等待客户的确认。由于源地址是伪造的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用半连接队列,导致队列堵塞而后续正常的SYN请求被丢弃,服务系统表现运行缓慢,严重者引起系统出错瘫痪拒绝服务。

三、检测和预防攻击措施

Syn攻击是一个典型的DDOS攻击(全称拒绝服务攻击)。其实检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击:netstat-n-p TCP|grep SYN_RECV[2]。

SYN攻击防范方法主要有两种,一类是通过网关防护,另一类是通过加固服务端TCP/IP协议栈防范,即设置服务端的TCP/IP参数.但需要说明的是,SYN攻击不能完全被预防或者阻止,我们所做的是尽可能的减轻SYN攻击的危害,这是由协议的规范导致的。

(一)过滤网关防护

这里的过滤网关主要指明防火墙,当然路由器也能成为过滤网关。防火墙部署在不同网络之间,防范外来非法攻击和防止保密信息外泄,它处于客户端和服务器之间,利用它来防护SYN攻击能起到很好的效果。过滤网关防护主要包括超时设置,SYN网关两种:

网关超时设置:防火墙设置SYN转发超时参数,该参数远小于服务器的timeout时间。

SYN网关:SYN网关收到客户端的SYN包时,直接转发给服务器;SYN网关收到服务器的SYN+ACK包后,将该包转发给客户端,同时以客户端的名义给服务器发ACK确认包。此时服务器由半连接状态进入连接状态。当客户端确认包到达时,如果有数据则转发,否则丢弃。事实上,服务器除了维持半连接队列外,还要有一个连接队列,如果发生SYN攻击时,将使连接队列数目增加,但一般服务器所能承受的连接数量比半连接数量大得多,所以这种方法能有效地减轻对服务器的攻击[2]。

(二)服务端设置

增加最大半连接数队列长度,大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。当然backlog队列需要占用大量的内存资源,不能被无限的扩大。net.ipv4.tcp_max_syn_backlog(windows),tcp_conn_req_max_q0(Sun Solaris),tcp_syn_rcvd_max(HPunix)

缩短超时时间,是指半连接在队列里存储的时间总和,包括重传的时间,服务端并没有直接的参数设置该值,可以通过重传时间和重传次数减小超时时间。即SYN+ACK达到重传时间进行一次重传直至达到最大次数后,此半连接会从队列中删除。

参考文献:

[1]W.Richard Stevens.TCP/IP详解[J].机械工业出版社,2000,4:1

[2]韩松,邓迎春.卫星TCP/IP数据传输技术[J].现代电信科技,2000,2

上一篇:对多维时间序列应用于在线监测数据处理的探讨 下一篇:计算机软件安全检测存在问题及方法探讨