GNS3/VirtualBox 实验室 VLAN 配置与安全探索

本文详细介绍了如何在GNS3和VirtualBox集成环境中配置VLAN,包括VLAN数据库创建、接口分配、访问端口与中继端口的区别,以及通过中继端口进行VLAN跳转的技术实现和潜在安全风险。

为GNS3/VirtualBox实验室添加VLAN

2013年9月11日 星期三

欢迎来到我学习第二层及其漏洞系列的第二部分。本文将基于第一部分「集成GNS3和VirtualBox」中搭建的实验室进行扩展,如果你想跟着操作,请先完成基础实验室的搭建。

本文将向设置中添加VLAN,并在它们之间进行一些简单的交换。

计划

作为提醒,以下是已有的设置:

[图示:现有网络拓扑]

在本文中,我们将添加以下VLAN:

机器 路由器接口 IP地址 VLAN
Unsec1 f1/0 192.168.1.1 10
Unsec2 f1/1 192.168.1.2 10
Sec1 f1/2 192.168.5.1 50
Vbox1 f1/3 192.168.1.100 10

配置完成后,我将展示如何在VLAN之间移动机器,并证明VLAN按设计隔离流量。我还将介绍访问端口和中继端口的区别,并展示如果能够连接到中继端口,如何访问任意VLAN。

设置

首先,我们需要告诉交换机我们要使用的VLAN,具体方法因设备类型而异。在我的设备上,我执行以下操作:

1
2
3
R1#vlan database
R1(vlan)#vlan 10
R1(vlan)#vlan 50

可以通过运行以下命令检查是否添加成功:

1
R1(vlan)#show

在使用exit命令退出此菜单部分之前,所有这些都不会保存。如果尝试退出时出现以下错误消息:

1
2
3
4
5
R1(vlan)#exit
% not enough space on flash to store vlan database. trying squeeze...First create squeeze log by erasing the entire device
% error squeezing flash - (Missing or corrupted log)
Error on database apply 40: NV storage failure
Use 'abort' command to exit

你需要中止并运行以下命令:

1
R1#erase flash:

系统将提示你确认是否继续,选择是。现在需要返回VLAN数据库并重新运行上述命令,这次退出时应该可以正常保存。

接下来进入各个接口并将它们分配到相应的VLAN:

1
2
3
4
R1#configure terminal
R1(config)#interface fastEthernet 1/0
R1(config-if)#switchport mode access
R1(config-if)#switchport access vlan 10

根据上表对每个接口重复此操作,记住f1/2(Sec1)属于VLAN 50,其余属于VLAN 10。完成后,可以返回到enable提示符并运行以下命令检查是否正确完成:

1
R1#show interfaces status

你应该看到类似下面的内容,关键是要检查接口是否分配到了上表中描述的正确VLAN。

[图示:接口状态显示]

给路由器一分钟时间自行整理并重新启动所有内容,现在开始进行ping测试。首先,192.168.1.0/24子网(VLAN 10)上的所有设备能否相互通信?

[图示:VLAN 10内ping测试成功]

现在我们需要测试,简单地将VirtualBox机器的eth0放入192.168.5.0/24网络是否允许通信:

[图示:跨VLAN ping测试失败]

没有,完全没有通信,这很完美,VLAN设置阻止了流量从一个子网进入另一个子网。

在继续之前,这是对实验室进行快照的绝佳时机。思科设备仅将其配置保存在内存中,除非被告知将其写入磁盘(旧金山市政府对此深有体会,感谢Terry Childs)。这意味着即使你保存了GNS3项目,一旦路由器关闭,它也会忘记你设置的所有内容,你需要重新配置。要从enable提示符运行以下命令来存储配置:

1
R1#copy running-config startup-config

我发现,如果你不保存GNS3项目,重启后保存的值仍然会丢失,这可能只是巧合或我的设置有些奇怪,因此除了在设备中保存配置外,还要在GNS3中进行保存。

现在完成这些后,让我们证明如果将Vbox1(f1/3)从VLAN 10移动到VLAN 50,它就能够看到Sec1。

1
2
3
4
5
6
R1#configure terminal
R1(config)#interface fastEthernet 1/3
R1(config-if)#switchport mode access
R1(config-if)#switchport access vlan 50
R1(config-if)#exit
R1(config)#exit

更改生效需要几秒钟时间,但一旦生效,Vbox1现在就可以与其子网上的Sec1通信。

[图示:VLAN切换后ping测试成功]

访问端口和中继端口

到目前为止,网络上的每个端点都将其端口设置为访问模式而不是中继模式。有关差异的完整说明,请参阅思科的详细文章,但该网站的一段内容如下:

以太网接口可以配置为访问端口或中继端口,如下所示:

  • 访问端口只能在接口上配置一个VLAN;它只能承载一个VLAN的流量。
  • 中继端口可以在接口上配置两个或更多VLAN;它可以同时承载多个VLAN的流量。

基本上,这意味着访问端口上的设备不知道VLAN,因为交换机为其处理所有事情,设备自动放入分配给它的VLAN,并且交换机将忽略任何尝试使用不同VLAN ID的行为。另一方面,中继端口将处理VLAN的所有控制权交给连接到它的设备,这意味着进入该端口的任何流量都应该已经被标记并准备好传递到它应该去的地方。访问端口设计用于终端设备,如PC、打印机等,中继端口设计用于连接到其他网络基础设施,如交换机。

作为攻击者,如果你在访问端口上,由于内置限制,你在VLAN方面能做的事情相当有限,但如果你能将自己放到中继端口上,那么限制就会被解除,你可以做任何你想做的事情。为了证明这一点,让我们将Vbox1移动到中继端口上,看看我们能做什么。

从访问端口更改为中继端口很简单:

1
2
3
4
5
R1#configure terminal
R1(config)#interface fastEthernet 1/3
R1(config-if)#switchport mode trunk
R1(config-if)#exit
R1(config)#exit

现在让我们切换到Vbox1,看看我们能访问什么:

[图示:初始中继端口ping测试失败]

我们无法ping通任何东西,这不好,我说我们应该能够访问一切。问题是我们正在向交换机发送流量,但没有告诉它流量属于哪个VLAN,因此交换机使用所谓的本征VLAN(Native VLAN),这是一个默认VLAN,所有未标记的流量都会发送到那里。我稍后会讨论其安全性,但现在让我们添加一些VLAN标签并让流量流动起来。

如果自安装vlan包以来尚未重启Vbox1,首先需要加载8021q内核模块:

1
modprobe 8021q

现在让我们将自己放在一些VLAN上。在Linux中,这样做的方法是创建一个附加到主连接的新虚拟接口,所有流量在出口时都被标记。将VLAN 10添加到eth0后,新接口将称为eth0.10。

1
2
vconfig add eth0 10
ifconfig eth0.10

新接口还需要一个正确子网中的IP,但要注意,如果eth0本身也在该子网上,事情会变得混乱并且无法工作,因此请确保首先从eth0中删除IP。注意,你不能只是关闭eth0,因为这样做也会关闭它的所有虚拟接口。

1
2
ifconfig eth0 0.0.0.0
ifconfig eth0.10 192.168.1.100 up

最后,检查连通性:

1
ping 192.168.1.1

[图示:VLAN 10 ping测试成功]

它工作了,Linux网络堆栈正在向数据包添加正确的802.1Q标记,并且它们按预期流动。

根据上面的描述,中继端口可以处理多个VLAN,因此让我们启动第二个,以便Vbox1也可以与Sec1通信。

[图示:多VLAN通信成功]

这就是在中继端口上的力量,我们基本上可以访问我们想要的任何VLAN,因为我们标记流量,而交换机只是信任我们。

这个问题的最后一点是如何知道有哪些VLAN可以被滥用。这很简单,网络会告诉你,只需监视广播流量,你就会看到标记的流量在你周围流动。最基本的方法是使用tcpdump:

1
tcpdump -nei eth0

这里有两个重要的事情,-e开关添加了第二层头部:

-e 在每个转储行上打印链路层头部。

以及你在eth0上转储,而不是eth0.10或任何其他已经标记的接口。

[图示:tcpdump输出显示VLAN ID]

从这里你可以看到网络上存在的两个VLAN ID,然后可以跳转到它们并像监视普通网络一样监视它们以识别IP范围。

总结

实验室现在有两个VLAN,已被证明工作正常,我们可以通过修改端口标记以合法方式在它们之间移动,如果意外允许访问中继端口,我们可以滥用它们。在第三部分中,我将研究用于设置VLAN和端口的不同协议,并查看它们是否可以被滥用以修改端口以利于我们。

致谢

我在第一部分结束时忘记感谢两位提供帮助的人,Joshua和Des,你们的鼓励和建议非常受欢迎。

链接

最后列出我在整合所有这些内容时发现有用的链接。在构建这个实验室的过程中,我从所有这些中汲取了一些内容。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计