SYN攻击原理与防御 1

据统计,在所
  TCP握手协议
  SYN攻击原理
  SYN攻击工具
  检测SYN攻击
  SYN攻击防范技术
有黑客攻击事件中, SYN 攻击是最常见又最容易被利用的一种攻击手法。相信很多人还记得 2000 YAHOO 网站遭受的攻击事例,当时黑客利用的就是简单而有效的 SYN 攻击,有些网络蠕虫病毒配合 SYN 攻击造成更大的破坏。本文介绍 SYN 攻击的基本原理、工具及检测方法,并全面探讨 SYN 攻击防范技术。
   一、 TCP 握手协议
  在 TCP/IP 协议中, TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
  第一次握手:建立连接时,客户端发送 syn (syn=j) 到服务器,并进入 SYN_SEND 状态,等待服务器确认;
  第二次握手:服务器收到 syn 包,必须确认客户的 SYN ack=j+1 ),同时自己也发送一个 SYN 包( syn=k ),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
  第三次握手:客户端收到服务器的 SYN ACK 包,向服务器发送确认包 ACK(ack=k+1) ,此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
  完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
  未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的 SYN 包( syn=j )开设一个条目,该条目表明服务器已收到 SYN 包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 Syn_RECV 状态,当服务器收到客户的确认包时,删除该条目,服务器进入 ESTABLISHED 状态。
Backlog
参数:表示未连接队列的最大容纳数目。
   SYN-ACK 重传次数 服务器发送完 SYN ACK 包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
  半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到 SYN 包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为 Timeout 时间、 SYN_RECV 存活时间。
二、 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 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 个,虽然还远达不到系统极限,但应该引起管理员的注意。
 

你可能感兴趣的:(职场,安全,syn,休闲)