SYN Flood的发起、现象、防御方式介绍

SYN Flood攻击介绍

首先需要了解TCP建立连接的过程:客户端向服务器发送SYN报文,服务器收到之后会回复一个SYN-ACK报文,并且记录与该源IP的TCP连接状态为SYN_RECEIVED,当客户端收到SYN-ACK报文之后,正常情况下会回复ACK报文,服务器收到后则改变TCP连接状态为ESTABLISHED。如果服务器一直收不到客户端回复的ACK报文,则会重新请求3-5次,每次等待一个SYN timeout(等待超时时间)。对于Windows NT,第一次SYN timeout默认为3s,之后每次等待超时一次,下一次等待时间翻倍,如果重新请求五次,该条TCP连接占用资源总时长为三分钟左右,直到最后一次等待超时才会释放掉。而上述过程就是SYN Flood攻击的原理,之后的TCP连接过程不做详述,TCP总的交互过程可见下图:
在这里插入图片描述
可以在终端通过netstat -n -p tcp来查看服务器的TCP连接情况。在TCP正常握手的情况下,SYN_RECEIVED状态的条目应该没有或者很少,但是如果发现大量的SYN_RECEIVED条目,则表明该服务器很可能被SYN Flood攻击了,因为SYN Flood攻击一般使用随机源IP,对于服务器回应的SYN-ACK报文都不会回应,导致服务器会使用大量内存去处理这些TCP连接,最终可能导致瘫痪。

实验1:SYN Flood发起与现象

topology:
在这里插入图片描述
步骤:

  1. 关闭靶机防火墙

  2. 通过netstat-n -p tcp命令查看目标主机当前TCP连接情况,同时开启设备管理器,查看CPU性能占用
    在这里插入图片描述
    在这里插入图片描述

  3. KALI上使用hping3 -q -n --rand-source -S -s 53 -k-p 445 -flood -d 1400 DIP命令对DIP发起SYN Flood攻击,其中:
    -q:安静模式,-n:象征性输出主机地址, --rand-source:随机源IP,-S:SYN flag,-s:源端口(默认随机),53 -k:设置源端口为53且保持不变, -p:目的端口(默认0),-flood:flood攻击,-d 1400:发送数据为1400字符的数据报(默认0)
    【flood发包大概是每秒30000个,由于是实验,为了防止wireshark卡死,建议不要发起攻击或者抓包太长时间】
    在这里插入图片描述

    3.1. CPU使用率大幅增加
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/5a34ac8a06464f0599e3cf0ca5b2a180.png
    3.2. 出现大量SYN_RECEIVED状态条目
    在这里插入图片描述
    3.3. 抓到大量SYN报文,且目标主义也回复了大量SYN-ACK报文
    在这里插入图片描述
    在这里插入图片描述

实验2:使用防火墙进行DDoS防护

topology:
在这里插入图片描述

步骤:

  1. 靶机打开与防火墙对接的网口,并配置IP。在KALI上配置到靶机网口的路由,确保可以ping通。
    在这里插入图片描述
    在这里插入图片描述

  2. KALI上使用hping3 -q -n --rand-source -S -s 53 -k-p 445 -flood -d 1400 7.7.7.2 命令对靶机发起SYN Flood攻击
    在这里插入图片描述

  3. 防火墙配置DDoS防护模板(实验使用的防火墙为公司产品,暂不放出截图),配置SYN Flood出发阈值为10pps

  4. 重复步骤2
    预期:目标主机上抓包为10pps,CPU使用率没有明显增加,防火墙Flood日志正常记录
    实际:符合预期
    在这里插入图片描述

分析与总结

本次SYN flood实验使用虚拟靶机的运行内存为16G,且攻击方式不属于DDoS而是DoS,但只要发送数据字段为1400的flood攻击就能够占用50%以上的内存,如果有多台肉鸡同时发起flood攻击,那么很快会造成设备瘫痪。对于防火墙而言,也有几种防止TCP Flood的方式:

①基本源认证(reset认证),即上述实验2步骤3中第一张图的err_syn_ack动作,当检测到到达某目标服务器的SYN报文超过阈值之后,Anti-DDoS启动源认证机制,Anti-DDoS将代替目标服务器向客户端发送错误确认序号的SYN_ACK报文,具体如下:当防火墙收到SYN报文后,回复错误SYN_ACK报文,如果攻击发起端收到之后肯定不会回应,而正常客户端则会回复RST报文,要求重新连接并重新发送SYN报文,而防火墙收到RST报文后则会把该报文源IP加入白名单,下次SYN报文命中白名单后直接通过。但是基本源认证存在一定局限性,如果有些网络设备或者客户端本身会直接丢弃错误的SYN_ACK报文,那么基本源认证就失去作用了。
在这里插入图片描述

②高级源认证(cookie认证),与基本源认证不同的一点就是,针对SYN报文都会回复正确确认号(记为cookie)的SYN_ACK报文,如果攻击发起端收到之后,依然不会回应,但是正常客户端会回应一个ACK报文,当防火墙收到客户端回应的ACK报文之后则会将源IP记录白名单,同时发送RST报文回去,希望客户端重新发起握手。
在这里插入图片描述

③TCP首包丢弃,这是一种比较直接且节省资源的方式,因为对于上述两种应对方式,每收到1个攻击报文,就会回复一个攻击报文,因此受攻击影响的带宽比攻击流量占据的带宽要更多,如果攻击流量足够多,Anti-DDoS达到性能瓶颈后,攻击流量依然会透传到目标服务器,因此Anti-DDoS利用首包丢弃机制来解决这一问题 。首包丢弃顾名思义是丢弃第一个SYN包,由于一般的SYN flood攻击发出的数据都是变源的,因此对于Anti-DDoS系统来说都算是首包,但是由于TCP的超时重传机制,正常客户端会在自己第一个SYN包被丢弃之后一段时间内重新发起SYN报文,此时Anti-DDoS系统再次进行源认证。之后形成会话,命中会话的流量则会放行。但是首包丢弃不适用于ACK flood攻击,具体原因以后有机会发布ACK flood知识再解释。
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值