什么是SYN攻击以及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攻击工具。以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攻击原理

  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攻击工具。以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个,虽然还远达不到系统极限,但应该引起管理员的注意。

TCP“SYN”攻击也叫 SYN 淹没。它使用了大多数主机使用 TCP 三向握手机制中的漏洞。当主机 B 接收到 A 中的 SYN 请求时,它必须利用一个“监听队列”将该特别连接至少保持75秒。恶意的主机通过向其它主机发送多个 SYN 请求的方式来利用该监听队列,但从不响应其它主机发回的 SYN&ACK。这样一来,其它主机的监听队列很快被填满,然后就停止接受新的连接,直到队列中某个特别打开的连接完成或超时。这种使某台主机脱离网络至少达75秒的功能可用于服务拒绝攻击,或者它可以用于实施其它攻击的工具,如 IP 欺骗。 ?? ??
  TCP SYN 攻击是一种能够导致基于网络服务拒绝(DOS)或分布式服务拒绝(DDOS)的主要攻击方式。 ゾ舺???
  

TCP "SYN" 攻击防范 C 舟!峔%
  在网络的关键之处使用防火墙对来源不明的有害数据进行过滤可以有效减轻 TCP SYN 攻击(如果没有完全解决的话)。 徼(W痊?P?
  既然用户可以明确地使用访问列表来将入站访问限制到所选定的为数不多的 IP 地址,所以对于内部网络设备,在使用了防火墙之后就可以很容易地防范 SYN 攻击。然而对于面向 Internet 的公共网页服务器或邮件服务器,却无法确定哪些进入的 IP 源地址是友好的,而哪些又是不友好的。因此没有针对来自于随机 IP 地址攻击的防御方法。主机可选择如下的办法: dMA聈&タ q
提升连接队列(SYN ACK 队列)的大小。 D? 场 倪
减少三向握手的超时等待时间 ! 烓芽2ni?
采用开发商的检测或针对安全问题的软件补丁(如果提供的话)。 辞gl 司?
  用户应该取得与主机供应商的联系以确定他们是否已经开发了处理 TCP SYN ACK 攻击的特别补丁。

1.jpg

大小: 4.66 K
尺寸: 199 x 133
浏览: 7 次
点击打开新窗口浏览全图

 

TCP SYN 攻击或 SYN 淹没

利用TCP连接的三次握手机制,但发起攻击端只来一、两次的握手,而被攻击端就一直在试图完成TCP连接,造成资源不足,有时性能差的防火墙也挺不住,更不用说PC、服务器之类的

ACK是确认的意思。
在TCP/IP协议中有2组序列号和一些标志,可以参见IP报格式。

让我回忆一下典型的建立TCP连接的过程:
C: SYN(1000)
S: SYN(2000),ACK(1001)
C: ACK(2001)
以上就是TCP连接的“三握手”建立连接阶段,解释如下:
1,客户想与服务器建立连接,客户用的“序列号”是1000,表示我现在发送的是1000号分组。
2,服务器愿意建立连接,回答1001表示期望接收的下个组号是1001号分组信息。其SYN(2000)与第一步相似,表示服务器以2000为信息开始的分组号。
3,客户确认,表示愿意接收服务器以2001序列号标志的分组。

建立连接后就可以互相“同时”发送数据,
C: SYN(1001),ACK(2001) //设数据量为100(bytes)
S: ACK(1101)
C: SYN(1101),ACK(2001)
C: SYN(1201),ACK(2001)
S: NAK(1101) //接收错误,要求从1101号重发。
C: SYN(1101),ACK(2001)
C: ...
S: ...

Leave a comment

Your comment

Why not Login? Sign up now! »