什么是SYN包?SYN包是什么意思?
TCP连接的第一个包,非常小的一种数据包。SYN攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。
当两台计算机在TCP连接上进行会话时,连接一定会首先被初始化。完成这项任务的包叫作SYN。一个SYN包简单的表明另一台计算机已经做好了会话的准备。只有发出服务请求的计算机才发送SYN包。所以如果你仅拒绝进来的SYN包,它将终止其它计算机打开你计算机上的服务,但是不会终止你使用其它计算机上的服务,如果它没有拒绝你发送的SYN包的话。
SYN攻击
最近对
SYN Flood
特别感兴趣,看到一个关于
SYN cookie firewall
的文章,在
google
搜了一下,没中文的,翻译他一下
本文介绍了4个概念
一:介绍
SYN
二:什么是
SYN
洪水攻击
三:什么是
SYN cookie
四:什么是
SYN cookie
防火墙
C=client(
客户器
) S=Server(
服务器
) FW=Firewall(
防火墙
)
一:介绍
SYN SYN cookie
是一个防止
SYN
洪水攻击技术。他由
D. J. Bernstein
和
Eric Schenk
发明。现在
SYN COOKIE
已经是
linux
内核的一部分了(我插一句
,默认的
stat
是
no
)
,
但是在
linux
系统的执行过程中它只保护
linux
系统。我们这里只是说创建一个
linux
防火墙,他可以为整个网络和所有的网
络操作系统提供
SYN COOKIE
保护你可以用这个防火墙来阻断半开放式
tcp
连接,所以这个受保护的系统不会进入半开放状态
(TCP_SYN_RECV)
。当
连接完全建立的时候,客户机到服务器的连接要通过防火墙来中转完成。
二:什么是
SYN
洪水攻击?(来自
CERT
的警告)
当一个系统(我们叫他客户端)尝试和一个提供了服务的系统(服务器)建立
TCP
连接,
C
和服务端会交换一系列报文。
这种连接技术广泛的应用在各种
TCP
连接中,例如
telnet,Web,email,
等等。
首先是
C
发送一个
SYN
报文给服务端,然后这个服务端发送一个
SYN-ACK
包以回应
C
,接着,
C
就返回一个
ACK
包来实现一次完
整的
TCP
连接。就这样,
C
到服务端的连接就建立了,这时
C
和服务端就可以互相交换数据了。下面是上文的图片说明:)
Client Server ------ ------ SYN--------------------> <--------------------SYN-ACK ACK--------------------> Client and server can now send service-specific data
在
S
返回一个确认的
SYN-ACK
包的时候有个潜在的弊端,他可能不会接到
C
回应的
ACK
包。这个也就是所谓的半开放连接,
S
需要
耗费一定的数量的系统内存来等待这个未决的连接,虽然这个数量是受限的,但是恶意者可以通过创建很多的半开放式连接来发动
SYN
洪水攻击
。
通过
ip
欺骗可以很容易的实现半开放连接。攻击者发送
SYN
包给受害者系统,这个看起来是合法的,但事实上所谓的
C
根本不会回应这个
。
SYN-ACK
报文,这意味着受害者将永远不会接到
ACK
报文。
而此时,半开放连接将最终耗用受害者所有的系统资源,受害者将不能再接收任何其他的请求。通常等待
ACK
返回包有超时限制,所以半开放
。
连接将最终超时,而受害者系统也会自动修复。虽然这样,但是在受害者系统修复之前,攻击者可以很容易的一直发送虚假的
SYN
请求包来持续
攻击。
在大多数情况下,受害者几乎不能接受任何其他的请求,但是这种攻击不会影响到已经存在的进站或者是出站连接。虽然这样,受害者系统
还是可能耗尽系统资源,以导致其他种种问题。
攻击系统的位置几乎是不可确认的,因为
SYN
包中的源地址多数都是虚假的。当
SYN
包到达受害者系统的时候,没有办法找到他的真实地址
,因为在基于源地址的数据包传输中,源
ip
过滤是唯一可以验证数据包源的方法。
三:什么是
SYN cookie
?
SYN cookie
就是用一个
cookie
来响应
TCP SYN
请求的
TCP
实现,根据上面的描述,在正常的
TCP
实现中,当
S
接收到一个
SYN
数据包,他返回
一个
SYN-ACK
包来应答,然后进入
TCP-SYN-RECV
(半开放连接)状态来等待最后返回的
ACK
包。
S
用一个数据空间来描述所有未决的连接,
然而这个数据空间的大小是有限的,所以攻击者将塞满这个空间。
在
TCP SYN COOKIE
的执行过程中,当
S
接收到一个
SYN
包的时候,他返回一个
SYN-ACK
包,这个数据包的
ACK
序列号是经过加密的,也就
是说,它由源地址,端口源次序,目标地址,目标端口和一个加密种子计算得出。然后
S
释放所有的状态。如果一个
ACK
包从
C
返回,
S
将重新计算它来判断它是不是上个
SYN-ACK
的返回包。如果这样,
S
就可以直接进入
TCP
连接状态并打开连接。这样,
S
就可以
避免守侯半开放连接了。
以上只是
SYN COOKIE
的基本思路,它在应用过程中仍然有许多技巧。请在前几年的
kernel
邮件列表查看
archive of discussions
的相关详细
内容。
4
,什么是
SYN COOKIE
防火墙
SYN COOKIE
防火墙是
SYN cookie
的一个扩展,
SYN cookie
是建立在
TCP
堆栈上的,他为
linux
操作系统提供保护。
SYN cookie
防火墙是
linux
的
一大特色,你可以使用一个防火墙来保护你的网络以避免遭受
SYN
洪水攻击。
下面是
SYN cookie
防火墙的原理
client firewall server ------ ---------- ------ 1. SYN----------- - - - - - - - - - -> 2. <------------SYN-ACK(cookie) 3. ACK----------- - - - - - - - - - -> 4. - - - - - - -SYN---------------> 5. <- - - - - - - - - ------------SYN-ACK 6. - - - - - - -ACK---------------> 7. -----------> relay the -------> <----------- connection <------- 1:
一个
SYN
包从
C
发送到
S 2
:防火墙在这里扮演了
S
的角色来回应一个带
SYN cookie
的
SYN-ACK
包给
C 3
:
C
发送
ACK
包,接着防火墙和
C
的连接就建立了。
4
:防火墙这个时候扮演
C
的角色发送一个
SYN
给
S 5
:
S
返回一个
SYN
给
C 6
:防火墙扮演
C
发送一个
ACK
确认包给
S
,这个时候防火墙和
S
的连接也就建立了
7
:防火墙转发
C
和
S
间的数据
如果系统遭受
SYN Flood
,那么第三步就不会有,而且无论在防火墙还是
S
都不会收到相应在第一步的
SYN
包,所以我们就击退了这次
SYN
洪水攻
击。