导语:VLAN,即虚拟局域网,用于物理网络的共享,通过创建虚拟的网段从而实现特定组的划分。

关于VLAN

VLAN,即虚拟局域网,用于物理网络的共享,通过创建虚拟的网段从而实现特定组的划分。举例来说,在同一个物理局域网上,VLAN
1的所有主机与VLAN
2的所有主机相分隔,如果要在VLAN之间发送任何数据包,都必须经过路由器或其他第3层(网络层)设备。这样的特点保证了网络的安全性,由此VLAN也被众多网络管理员应用到实际配置中。然而,通过“VLAN
Hopping”的攻击方式,攻击者可以绕过上述这些安全实现。如果各位读者想了解更多关于网络分段和VLAN的知识,建议阅读: https://www.alienvault.com/blogs/security-essentials/demystifying-network-isolation-and-micro-segmentation

VLAN Hopping攻击技术

VLAN

Hopping漏洞允许攻击者绕过为划分主机而构建的任何第2层(数据链路层)限制。如果网络管理员对交换机端口进行了正确配置,那么攻击者必须通过路由器或其他第3层设备才能访问其目标。然而,在许多网络中都没有合理的进行VLAN规划,或者对VLAN进行了错误配置,这样一来攻击者就能够进行该漏洞利用。在本文中,我将主要介绍VLAN
Hopping的两种方法,分别是“交换欺骗”(Switched Spoofing)和“双重标记”(Double
Tagging)。在最后,我将介绍针对此类攻击的缓解措施。

交换网络

如果我们想要发现并利用漏洞,首先要了解交换机的运行方式。我们在这里并不是对设备存在的漏洞进行利用,而是针对于协议和配置存在的漏洞。

在交换机上,端口可以配置为Access(访问)或Trunking(中继)。通常,将主机连接到交换机时,使用的是Access端口。通过VLAN,每个Access端口仅分配给一个VLAN。如果要将两个交换机或交换机与路由器连接在一起,那么需要使用到Trunking端口。Trunking端口允许接收来自多个VLAN的流量。针对Trunking端口,我们可以手动配置,也可以使用动态中继协议(Dynamic
Trunking Protocol,DTP)动态创建中继端口。

DTP是Cisco的专有协议,其用途之一就是动态建立两个交换机之间的中继链路。

攻击技术1:交换欺骗

攻击者伪装成交换机,从而欺骗合法交换机在二者之间创建中继链路。如前所述,中继链路允许来自任何VLAN的数据包通过。一旦建立了中继链路,那么攻击者就可以从任何VLAN中访问到流量数据。这种攻击技术仅在合法的交换机配置为“经协商的中继模式”(Negotiate
a Trunk)时才会成功。具体而言,就是接口配置为“动态可取”(Dynamic Desirable)、“动态自动”(Dynamic
Auto)或“中继”(Trunk)模式。如果目标交换机配置为其中的某一种模式,那么攻击者可以从其计算机上生成DTP消息,并且可以成功产生中继链路。

攻击技术2:双重标记

攻击者在以太网帧上添加或修改标记,从而允许通过任何VLAN发送数据包,这种方法就叫做双重标记。这种攻击方式利用了大部分交换机在处理标记时存在的一个问题,大多数交换机仅会删除外部标记,然后将帧转发到所有本地VLAN端口。尽管如此,但实际上只有当攻击者位于中继链路的本地VLAN时,其漏洞利用才会成功。另外,这种攻击方式只能单向进行,因此无法对返回的数据包进行封装。

漏洞利用1:交换欺骗攻击

在该漏洞利用场景中,存在攻击者、交换机和目标服务器。首先,攻击者连接到交换机上的FastEthernet 0/12接口,目标服务器连接到FastEthernet 0/11接口并且作为VLAN 2的成员。其拓扑图如下:

1.png

交换机的部分配置如下:

interface FastEthernet0/11
switchport mode access
switchport mode nonegotiate
switchport access vlan 2
!
interface FastEthernet0/12
switchport mode dynamic auto

我们可以发现fa0/12端口存在配置问题。这一端口被设置为接受传入协商,从而确定该端口被用于访问(Access)还是中继(Trunking)。这也就意味着,攻击者可以进行交换欺骗攻击。一旦攻击者连接到该端口,便可以发送DTP消息,并建立中继链路。

攻击者可以使用Yersinia工具来制作和发送DTP消息。Yersinia是一个涉农图测试框架,可以用于攻击位于第2层(数据链路层)的许多协议。该框架上预装了Kali Linux,并且有易于使用的图形化界面(GUI)。

Yersina的官方主页是:http://www.yersinia.net/

要执行Yersina,只需运行命令:

yersinia –G

以下是Yersina的图形界面截图:

2.png

现在,借助该工具,我们可以通过以下步骤来发送DTP消息:

1、点击“Launch attack”(发起攻击);

2、单击“DTP”选项卡;

3、点击“Enable Trunking”(启动中继);

4、点击“OK”。

3.png

Yersinia将会发送DTP消息,并在几秒内建立一个中继链路。在我们的场景中,攻击者可以访问流经VLAN 2的所有流量,并且在无需借助任何第3层(网络层)设备的情况下可以直接实现攻击。

4.png

漏洞利用2:双重标记攻击

在该漏洞利用场景中,存在攻击者、2个交换机和目标服务器。攻击者连接到交换机1,而交换机1与交换机2相连接,我们攻击的目标就是最终成功连接到交换机2上。其拓扑图如下:

5.png

在熟悉拓扑图后,我们看到交换机1的部分配置如下:

interface FastEthernet0/12
 switchport mode access
 switchport nonegotiate
 switchport access vlan 1
!
interface FastEthernet0/11
 switchport trunk encapsulation dot1q
 switchport mode trunk
 switchport nonegotiate
 switchport trunk native vlan 1

通过上述配置,我们可以看到,攻击者现在无法进行交换欺骗攻击。但是,攻击者目前位于Trunk端口的本地VLAN中,这也就意味着可以执行双重标记攻击。

攻击者可以使用Scapy工具,创建此攻击所需的特制帧。Scapy是一个用来对数据包进行修改的Python程序。

Scapy的官方主页:https://scapy.net/

Scapy的官方文档:http://scapy.readthedocs.io/en/latest/usage.html

要启动Scapy,可以使用以下命令:

sudo ./scapy

攻击者通过sendp()函数来制作数据包:

>>>sendp(Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=2)/IP(dst='<destination IP', src='<source IP>')/ICMP())

执行此命令后,将会为VLAN 2上的目标生成经两次802.1q封装的数据包。下图展现了交换机是如何对此帧进行管理的:

6.png

从图中我们可以看出,交换机1只会读取并删除外部标记。它会检查主机是否为对应VLAN的成员,并将数据包转发到所有本地VLAN端口(VLAN
1)。然后,交换机2会接收到只剩下一个头部的数据包,它会根据其中的标记,认为此帧属于VLAN 2,随后将其转发到配置为VLAN
2的所有端口上。这样一来,目标就可以接收到攻击者所发送的数据包。

考虑到上述攻击的性质,从严格意义来说,这些都属于攻击方式。另外需要注意的是,这些攻击方式可能不适用于新型交换机,具体列表参见: http://packetlife.net/blog/2010/feb/22/experimenting-vlan-hopping/

VLAN Hopping缓解措施

交换欺骗

要缓解交换欺骗攻击,我们应该采取以下步骤:

1、不要使用“动态可取”(Dynamic Desirable)、“动态自动”(Dynamic Auto)或“中继”(Trunk)模式配置任何接入点;

2、手动配置访问端口,并在所有访问端口上禁用DTP;

switchport mode access
switchport mode nonegotiate

3、手动配置所有中继端口,并在所有中继端口上禁用DTP;

switchport mode trunk
switchport mode nonegotiate

4、关闭所有当前不使用的接口。

双重标记

要防止双重标记攻击,需要保证所有中继端口的本地VLAN与用户VLAN是不同的。

总结

通过本文所介绍的攻击技术和缓解方式,可以让大家理解——交换机不是为了安全而构建的。因此,在每一层都采取正确的安全配置,并注意进行相应安全防护就显得尤为重要。如果你需要对网络进行隔离,请一定确保正确并安全地进行,配置网络的过程需要慎重。

源链接

Hacking more

...