计算机网络实验lab,现代计算机网络lab02-实验报告

环境(详细说明实验运行的操作系统,网络平台,机器的配置)

操作系统:Windows 10 64bit Pro 1909

处理器:Intel® Xeon® CPU E3-1505M v6 \@ 3.00GHz

内存:DDR4 2666MHZ 24GB ECC

网络平台:GNS3 2.2.3

虚拟机软件:Oracle VM VirtualBox 6.0.14

虚拟机:Ubuntu 16.04 32bit

实验目的学会利用GNS3网络平台搭建网络拓扑结构并配置主机的IP和路由。

掌握SYN flood攻击的基本原理,利用虚拟机实现SYN flood攻击。

掌握SYN cookie的原理,并通过实验证明SYN cookie机制的有效性。

了解Linux内核TCP SYN Cookie机制,掌握查看与修改方法。

实验步骤(包括主要流程和说明)

搭建实验环境

(2)在VirtualBox中新建虚拟机,名称为SEEDUbuntu,类型为Linux,版本选择Ubuntu(32-bit),其他使用默认配置,虚拟硬盘使用下载下来的“SEEDUbuntu-16.04-32bit.vmdk”,

点击创建进行虚拟机的创建,如下图所示。

7e0d87e53524dd9a11427d628cdcdd19.png

c0783072c939567e1e1e3dc487b053f8.png

ee910636364125a9d2e95e1e0fc35e5e.png

图1:新建SEED虚拟机

(3)采用完全复制的方式复制上一步创建的虚拟机,并将其命名为SEEDUbuntuTarget,复制完成后结果如下。

b8d7b4e642e903b6d3dd716e4e5a19e2.png

ae4c600cd28f5a1bf63ae6eb5563afa4.png

5ba8f9df320ea20ced72c90fa00972e2.png

图2:复制虚拟机副本SEEDUbuntuTarget

771b76a315dfd8911bf308106109b835.png

d6495b5abf9e2f966bf1b10a7e6d2eaa.png

(4)打开GNS3,新建一个名为lab02的工程。通过Edit->Preferences->VirtualBox

VMs,将上一步创建的两个虚拟机新建为VM

templates,并通过Edit按钮修改网卡(网卡驱动需设置为通用驱动)数量为3,勾选“Allow

GNS3 to use any configured VirtualBox

adapter”选框,这样就创建好了两个虚拟机模板。

f7ccd1c5f532b7f896103097e850adb9.png

图3:新建虚拟机模板

(5)将两台虚拟机连成如下拓扑结构。

2743b32836f35c45a67d4c19627e0d72.png

图4:网络和拓扑结构

(6)分别启动两台虚拟机(注意要在GNS3中启动,在VirtualBox中启动的无法连接上),重设两台虚拟机的网卡名称,并设置IP地址和路由。详细步骤如下:重设虚拟机网卡名称

sudo vim /etc/default/grub

找到GRUB_CMDLINE_LINUX=””

改为GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0”

之后在terminal中键入sudo grub-mkconfig -o /boot/grub/grub.cfg

重启后,网卡名称变成了eth0。

049880d7343e5927dc6921ec2423cf71.png

2d42f5a860fe60bfa679daffda7be237.png

0035df70e05e20e9ca259748e0859484.png

图5:修改网卡名称设置ip地址以及默认路由:

将攻击机的eth0 ipv4更改为192.168.1.1 ip address add 192.168.1.1/24 dev eth0

设置路由ip route add 192.168.1.0/24 dev eth0

设置默认路由ip route add default via 192.168.1.1

将靶机的eth0 ipv4更改为192.168.1.2 ip address add 192.168.1.2/24 dev eth0

并设置默认路由ip route add 192.168.1.0/24 dev eth0

设置默认路由ip route add default via 192.168.1.2

37d2009f21a3b0454b546abb058d2e37.png

e1270c483496c5f4405e3c33fd39ea26.png

fab74b98f1e7b4052259997b3fd36869.png

75a1bb5319246230e320fa7267e1e12a.png

图6:设置IP地址和默认路由

(7)检查SEEDUbuntu和SEEDUbuntuTarget能否互相ping通。

ba59e3d03cbe976ca1173c771003fcc3.png

5af38d673235c8665c357b24bb74c12f.png

图7:检查能否ping通

(8)在SEEDUbuntuTarget上启动telnet服务。

0ce57587731c50b898576f73b3ccdbfd.png

图8:启动telnet服务并查看服务状态

(9)SEEDUbuntu连接SEEDUbuntuTarget,在SEEDUbuntuTarget上用wireshark观察建立连接的过程。

73b245a937a8cf133552b0df8076fa5d.png

图9:telnet建立连接

a7121b239467711238dff27736437ff0.png

图10:wireshark观察连接过程

(10)在SEEDUbuntuTarget上执行“netstat -n

–tcp”查看TCP连接状态,连接建立成功则已经配置好了SYN

Flooding攻击实验的实验环境,下面可以进行实验。

0e88f7f95cc1bf833650d5beb1f68ce6.png

图11:查看TCP连接状态

SYN Flooding Attack实验

(1)首先通过“cat /proc/sys/net/ipv4/tcp_syncookies”和“cat

/proc/sys/net/tcp_syn_max_backlog”命令查看当前SEEDUbuntuTarget的tcp_syncookies和tcp_max_syn_backlog的状态。

(2)设置SEEDUbuntuTarget的“tcp_syncookies=0”和“tcp_max_syn_backlog=10”,即关闭tcp

syn cookies参数和设置保存在队列中的最大连接数为10。

68bd2470454228132cc6254444a5a4b6.png

844cda48ea313258b30fbd421571d261.png

图12:配置内核参数

(3)在SEEDUbuntu上使用命令“netwox 76 -i 192.168.1.2 –dst-port

23”,对SEEDUbuntuTarget进行SYN

Flood攻击,同时观察SEEDUbuntuTarget的连接状态和wireshark获取的流量包。

可以看出SEEDUbuntuTarget收到了大量的建立TCP连接的包,并向多个IP地址发出了响应包,这些IP地址并非SEEDUbuntu,都是虚假的。

d86bb57028d696f025c494a30b5f68cf.png

图13:wireshark捕获的包

观察SEEDUbuntuTarget的连接状态,可以看到当前队列已满共有10个连接,且都为SYN_RECV状态。

36c71a2b77bc6f0bae9cd1c8f196e9e5.png

图14:SEEDUbuntuTarget连接状态

(4)在SEEDUbuntu上使用“telnet

192.168.1.2”命令尝试建立telnet连接,发现连接超时,无法建立连接。

9f3dd546940223d7ed281d1adbe876d2.png

图15:建立Telnet连接失败

(5)设置SeedUbuntuTarget的tcp_syn_cookies参数为1,开启tcp_cookies,此时再尝试用SEEDUbuntu进行Telnet连接,发现连接成功。

f7b10d2381007e9ae60109a286bede72.png

02920fb7c00402f660a8351471073c6d.png

图16:Telnet连接成功

此时再观察SEEDUbuntuTarget的TCP连接状态,可以看到在众多的SYN_RECV状态中有一个ESTABLISHED状态,来自192.168.1.1的52074端口。

00a099a94f92c8460397b20a6b7fe303.png

图17:SEEDUbuntuTarget的TCP连接状态关闭SYN Flooding攻击,结束本次实验。

实验结果和分析

实验结果

本次实验使用Virtualbox虚拟平台,配合GNS建立网络拓扑,使用Wiresdhark观察网络中数据包传输情况

,成功对靶机实施了SYN Flood攻击。

本次实验中需要的是需要设置靶机的默认路由。否则在被攻击时,因为靶机路由表中没有这些伪造地址的路由,所以靶机不会回复TCP连接请求,也不会为其预留资源,在这种情况下,即使攻击成功也会被telnet成功连接。

实验中,主要改变了SYN cookies和tcp_max_syn_backlog的值,在均使用攻击机进行SYN

flood攻击模拟的情况下,见表4.1。

表4.1 SYN Cookies ValueSYN Cookies Value描述0即关闭了SYN cookies防范机制,此时表现为靶机无法防范SYN flood攻击,在被攻击时无法被其他机器通过telnet登陆。且TCP连接队列大小固定为backlog的值,虽然队列内在不断刷新,本可以给新来的telnet连接以机会,但是攻击报文快速涌入,导致telnet连接的三次握手无法完成,最终使靶机表现为无法连接。

1即开启了SYN cookies防范机制,此时表现为靶机可以防范SYN flood攻击,在被攻击时可以被其他机器通过telnet登陆。但TCP连接队列大小不固定为backlog的值,推测此时连接队列的大小受到多个参数的制约。

结果分析

SYN flood与TCP三次握手

SYN

flood攻击的原理是利用了TCP协议中的三次握手过程。对于三次握手过程,TCP协议中规定,当一台主机A想向另一台主机B发起TCP连接时,A需要先发送TCP

SYN 包给B,B收到后发送一个TCP SYN+ACK包回复至A,A此时再发送TCP

ACK包回给B,此时三次握手才结束,连接建立成功,对于B,连接的过程有“SYN_RECV”-“TIME_WAIT”-“ESTABLISHED”。

其中B在“SYN_RECV”状态,即半开连接状态下,在等待TCP

SYN+ACK包发送回来前,系统要先分配好一个数据区专门服务于这个即将形成的TCP连接。

SYN

flood攻击则是利用在短时间内伪造大量的源地址,向被攻击主机发送大量的SYN包,以让靶机为每一个SYN包分配一个数据区,以建立预期的TCP连接,这样就会导致大量资源消耗,系统也不能对后面正常的TCP连接进行响应。

SYN cookie抵御SYN Flood攻击的原理

SYN cookies是对TCP服务器端的三次握手做一些修改,专门用来防范SYN

Flood攻击的一种手段。它的原理是,在TCP服务器接收到TCP SYN包并返回TCP SYN +

ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。这个cookie作为将要返回的SYN

ACK包的初始序列号。当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号(初始序列号

+

1)进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。这样就不需要等待客户的响应,防止其占用资源。

实现的关键在于cookie的计算,cookie的计算应该包含本次连接的状态信息,使攻击者不能伪造。cookie的计算过程为,服务器收到一个SYN包,计算一个消息摘要mac

= MAC(A,

k);其中MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。在Linux中,MAC函数为SHA1。A的计算方式如下:

A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t || MSSIND

k为服务器独有的密钥,实际上是一组随机数。t为系统启动时间,每60秒加1,MSSIND为MSS对应的索引。

通过计算并验证cookie,SEEDUbuntu避免了守候半开放连接,从而能够有足够的资源响应SEEDUbuntu的SYN连接请求,因此当开启syn_cookies时,能够正常建立连接。

被攻击端不开启SYN Cookie,当遭受SYN

Flood攻击时,正常的TCP连接无法进行连接到被攻击。

SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN

Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP

SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP

ACK包时,TCP服务器在根据那个cookie值检查这个TCP

ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

开启和不开启SYN Cookie的连接步骤如下图所示。

0f04baa5fd7273e1396d0716bec344b3.png

可以很容易的知道开启SYN Cookie 时可以很好的防范SYN Flood 攻击。

配置参数

SYN cookie

SYN Cookie的原理是靶机在收到TCP

SYN包后,保持在半开连接状态下时,不再为每一个SYN包分配一个专门的数据区,而是根据加密算法计算出一个cookie值,并与TCP

SYN+ACK包一同发送。在后面收到返回的TCP

ACK包时再进行校验,根据返回的cookie值来检查这个TCP

ACK包的合法性。如果合法,再分配专门的数据区以建立未来的TCP连接,此时即有效地防范了SYN

flood攻击。

tcp_max_syn_backlog

tcp_max_syn_backlog的值应可以简单理解为TCP连接队列的大小,实验中,在SYN

cookie设置关闭时,主机的TCP连接队列的最大值即严格按照backlog的值;而在SYN

cookie设置打开时,变化backlog的值对TCP连接队列的最大值并无明显影响,推测是由于此时连接队列的最大值受到多个参数的制约。而不论SYN

cookie是否打开,在接受攻击时主机的TCP连接队列都在不断刷新,即应会在连接数增加到最大值时关闭旧连接。由此推测在SYN

cookie关闭时,调小backlog的值可以减少系统在等待TCP连接完成时的资源的消耗,但新连接很有可能在完成三次握手之前就被关闭;相反,如果增大backlog的值,有机会会使新连接在被攻击报文淹没之前完成三次握手,但相对会增大系统的资源消耗。

因而,相对来说不开启SYN cookie机制,调节backlog的值会可能会对SYN

flood攻击有一些效果,但相对于开启SYN cookie机制仍不够有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值