SYN攻击原理以及防范技术(2)
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 TCP
tcp 0 0 10.11.11.11:23 124.173.152.8:25882 SYN_RECV -
tcp 0 0 10.11.11.11:23 236.15.133.204:2577 SYN_RECV -
tcp 0 0 10.11.11.11:23 127.160.6.129:51748 SYN_RECV -
tcp 0 0 10.11.11.11:23 222.220.13.25:47393 SYN_RECV -
tcp 0 0 10.11.11.11:23 212.200.204.182:60427 SYN_RECV -
tcp 0 0 10.11.11.11:23 232.115.18.38:278 SYN_RECV -
tcp 0 0 10.11.11.11:23 239.116.95.96:5122 SYN_RECV -
tcp 0 0 10.11.11.11:23 236.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个,虽然还远达不到系统极限,但应该引起管理员的注意。