SYN 攻击原理以及防范技术据统计,在所有黑客攻击事件中,信很多人还记得 2000 年 YAHOOSYN 攻击,有些网络蠕虫病毒配合原理、工具及检测方法,并全面探讨SYN 攻击是最常见又最容易被利用的一种攻击手法相网站遭受的攻击事例, 当时黑客利用的就是简单而有效的SYN 攻击造成更大的破坏本文介绍 SYN 攻击的基本SYN 攻击防范技术一、 TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接第一次握手: 建立连接时, 客户端发送syn包 (syn=j)到服务器, 并进入SYN_SEND状态,等待服务器确认;一个第二次握手:服务器收到SYN 包( syn=k ),即syn 包,必须确认客户的 SYN ( ack=j+1 ),同时自己也发送SYN+ACK 包,此时服务器进入 SYN_RECV 状态;第三次握手:客户端收到服务器的此包发送完毕,客户端和服务器进入SYN + ACK 包,向服务器发送确认包ESTABLISHED 状态,完成三次握手ACK(ack=k+1),完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:未连接队列: 在三次握手协议中, 服务器维护一个未连接队列, 该队列为每个客户端的SYN 包( syn=j )开设一个条目,该条目表明服务器已收到 SYN 包,并向客户发出确认,正在等待客户的确认包。
这些条目所标识的连接在服务器处于 Syn_RECV 状态,当服务器收到客户的确认包时,删除该条目,服务器进入 ESTABLISHED 状态Backlog 参数:表示未连接队列的最大容纳数目SYN-ACK 重传次数 服务器发送完 SYN -ACK 包,如果未收到客户确认包,服务器进行首次重传, 等待一段时间仍未收到客户确认包, 进行第二次重传, 如果重传次数超过系统规定的最大重传次数, 系统将该连接信息从半连接队列中删除 注意, 每次重传等待的时间不一定相同半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到确认这个报文无效的最长时间, 该时间值是所有重传请求包的最长等待时间总和也称半连接存活时间为 Timeout 时间、 SYN_RECV 存活时间SYN 包到有时我们二、 SYN 攻击原理SYN 攻击属于 DOS 攻击的一种, 它利用 TCP 协议缺陷, 通过发送大量的半连接请求,耗费 CPU 和内存资源 SYN 攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上 SYN 攻击并不管目标是什么系统, 只要这些系统打开 TCP 服务就可以实施 从上图可看到,服务器接收到连接请求( syn=j ),将此信息加入未连接队列,并发送请求包给客户( syn=k,ack=j+1 ),此时进入 SYN_RECV 状态。
当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除配合 IP 欺骗, SYN 攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 syn 包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的 SYN 包将长时间占用未连接队列,正常的 SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪三、 SYN攻击工具SYN攻击实现起来非常的简单,互联网上有大量现成的SYN攻击工具1、 windows系统下的SYN工具以 synkill.exe 为例,运行工具,选择随机的源地址和源端囗,并填写目标机器地址和 TCP 端囗,激活运行,很快就会发现目标系统运行缓慢如果攻击效果不明显,可能是目标机器并未开启所填写的 TCP 端囗或者防火墙拒绝访问该端囗,此时可选择允许访问的TCP 端囗,通常, windows 系统开放 tcp139 端囗, UNIX 系统开放 tcp7 、 21、 23 等端囗四、检测 SYN攻击检测 SYN攻击非常的方便, 当你在服务器上看到大量的半连接状态时,特别是源 IP 地址是随机的,基本上可以断定这是一次SYN 攻击。
我们使用系统自带的netstat 工具来检测 SYN 攻击:# netstat -n -p TCPtcp00 10.11.11.11:23124.173.152.8:25882SYN_RECV-tcp00 10.11.11.11:23236.15.133.204:2577SYN_RECV-tcp00 10.11.11.11:23127.160.6.129:51748SYN_RECV-tcp00 10.11.11.11:23222.220.13.25:47393SYN_RECV-tcp00 10.11.11.11:23212.200.204.182:60427 SYN_RECV-tcp00 10.11.11.11:23232.115.18.38:278SYN_RECV-tcp00 10.11.11.11:23239.116.95.96:5122SYN_RECV-tcp00 10.11.11.11:23236.219.139.207:49162 SYN_RECV-...上面是在 LINUX 系统中看到的, 很多连接处于 SYN_RECV 状态(在 WINDOWS系统中是 SYN_RECEIVED 状态),源 IP 地址都是随机的,表明这是一种带有IP 欺骗的 SYN攻击。
我们也可以通过下面的命令直接查看在LINUX 环境下某个端囗的未连接队列的条目数:# netstat -n -p TCP | grep SYN_RECV | grep :22 | wc -l 324显示 TCP 端囗 22 的未连接数有 324 个,虽然还远达不到系统极限,但应该引起管理员的注意五、 SYN 攻击防范技术关于 SYN 攻击防范技术,人们研究得比较早归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP 协议栈防范 .但必须清楚的是,SYN 攻击不能完全被阻止,我们所做的是尽可能的减轻SYN 攻击的危害,除非将 TCP 协议重新设计1、过滤网关防护这里,过滤网关主要指明防火墙, 当然路由器也能成为过滤网关防火墙部署在不同网络之间, 防范外来非法攻击和防止保密信息外泄,它处于客户端和服务器之间,利用它来防护 SYN 攻击能起到很好的效果过滤网关防护主要包括超时设置,SYN 网关和 SYN 代理三种■网关超时设置:防火墙设置SYN 转发超时参数(状态检测的防火墙可在状态表里面设置),该参数远小于服务器的timeout 时间。
当客户端发送完SYN 包,服务端发送确认包后( SYN + ACK ),防火墙如果在计数器到期时还未收到客户端的确认包(ACK ),则往服务器发送 RST 包,以使服务器从队列中删去该半连接值得注意的是,网关超时参数设置不宜过小也不宜过大, 超时参数设置过小会影响正常的通讯,设置太大, 又会影响防范SYN 攻击的效果,必须根据所处的网络应用环境来设置此参数■SYN 网关: SYN 网关收到客户端的 SYN 包时,直接转发给服务器; SYN 网关收到服务器的 SYN/ACK 包后,将该包转发给客户端,同时以客户端的名义给服务器发ACK 确认包此时服务器由半连接状态进入连接状态当客户端确认包到达时,如果有数据则转发,否则丢弃事实上,服务器除了维持半连接队列外,还要有一个连接队列,如果发生SYN攻击时,将使连接队列数目增加,但一般服务器所能承受的连接数量比半连接数量大得多,所以这种方法能有效地减轻对服务器的攻击■ SYN 代理:当客户端 SYN 包到达过滤网关时, SYN 代理并不转发 SYN 包,而是以服务器的名义主动回复 SYN/ACK 包给客户, 如果收到客户的 ACK 包,表明这是正常的访问,此时防火墙向服务器发送 ACK 包并完成三次握手。
SYN 代理事实上代替了服务器去处理攻击,此时要求过滤网关自身具有很强的防范 SYN 攻击能力 2、加固 tcp/ip 协议栈 SYN防范 SYN 攻击的另一项主要技术是调整tcp/ip 协议栈,修改 tcp 协议实现主要方法有 SynAttackProtect 保护机制、 SYN cookies 技术、增加最大半连接和缩短超时时间等tcp/ip 协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作■SynAttackProtect机制为防范 SYN 攻击, win2000 系统的 tcp/ipWin2003 系统也采用此机制 SynAttackProtect外的连接指示和减少超时时间,使系统能处理更多的目的默认情况下, Win2000 操作系统并不支持表以下位置增加 SynAttackProtect 键值:协议栈内嵌了 SynAttackProtect 机制,机制是通过关闭某些 socket 选项,增加额SYN 连接,以达到防范 SYN 攻击的SynAttackProtect 保护机制,需要在注册HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters当 SynAttackProtect值(如无特别说明,本文提到的注册表键值都为十六进制)为0或不设置时,系统不受SynAttackProtect 保护。
当 SynAttackProtect 值为 1 时,系统通过减少重传次数和延迟未连接时路由缓冲项( route cache。