2021年11月

0x00 基础Acess 和 Trunk概念

Access端口用于连接网络设备,如计算机、IP电话、服务器等,以与交换机进行通讯。Access端口收到帧时,如果是没有标签的,那么就会打上与该端口相关联的PVID(Port VLAN ID)标签;如果是有标签的,那么就会将其与该端口相关联的PVID 进行比较,如果相同,则视为合法帧,进入到对应的VLAN中并进行处理,否则就会被丢弃。在发出帧时,Access端口会将其从接收到的帧中去除标签,并发送给主机。

Trunk端口用于跨交换机的数据通信,允许多个VLAN在链路上传输并互相通信。Trunk端口在接收到帧时,如果是一个有标签的帧,那么就不会改变其标签信息;如果是一个没有标签的帧,那么就会为其打上默认的PVID 标签。在发送帧时,Trunk端口会根据帧的标签情况进行处理:如果帧上的VLAN与Trunk端口的PVID标签不同,那么就直接发送该帧;如果帧上的VLAN与Trunk端口的PVID标签相同,那么就会将其标签区域去掉后再进行发送。在Trunk链路上传输的帧只有两种情况:一种是有标签的,另一种是没有标签的,但是这个帧的标签ID一定不是PVID。

双标签跳跃攻击指的是攻击者利用Access端口默认打上PVID 标签的机制以及Trunk端口的处理机制,对VLAN进行攻击。攻击者在默认VLAN的主机中创建一条假的带有两个标签(一个外层标签和一个内层标签)的报文,其中外层标签设置为PVID,内层标签设置为要攻击的VLAN的VID。当Access端口收到此类帧时,由于其与该端口相关联的PVID一致,所以该帧将被视为合法帧而通过验证,进入到默认VLAN并进行处理。在经过路由之后,该帧会到达Trunk端口。由于该帧的外层标签是PVID,因此Trunk端口会去掉该标签。这样,在Trunk链路上传输的帧就是发给另一个 VLAN 的帧了,从而达到攻击的目的。

简单来说,进帧时会查看PVID,包括收到的和发送的帧,出帧时则是看VLAN List来决定是否打上标签来转发。

0x01 Tag以及Untag

在VLAN中,为了实现不同VLAN之间的数据通信,需要对帧进行标记(tagging)。根据对帧进行标记的方式,可以将帧分为Tagged帧和Untagged帧。当一个端口上的帧被发送到另一个端口时,会根据其类型进行处理,下面我们来具体了解一下它们的区别:

Untagged帧:该类型的帧不包含任何标记,被发送到另一个端口时,交换机会根据接收端口的属性,自动加入PVID作为客户 VLAN ID,从而在该VLAN中进行广播,而与其它VLAN隔离。

Tagged帧:该类型的帧包含一个VLAN标记,用于在多个VLAN之间传输。在进行Tagged帧的传输时,交换机要根据接收端口的属性判断是否允许报文进入端口。如果是Access端口,则要验证报文的VLAN ID是否与PVID一致,否则就会将报文丢弃;如果是Trunk/Hybrid端口,则会根据其VLAN List,判断报文是否可通过,不允许的话则将其丢弃。

在报文出方向上,交换机的主要任务就是在转发出端口时,根据出端口属性来决定帧是否需要打标记。具体的处理方法如下:

Access端口:打上PVID标签并发送。

Trunk端口:若报文所在VLAN和PVID相同,则不打标签;否则打上标签并发送。

Hybrid端口:当报文所在VLAN配置tag,且帧头中没有tag时,打上VLAN标签;当报文所在VLAN未配置Tag,则不打标签。

0X02 Access、Hybrid和Trunk三种模式的理解

VLAN中的三种类型端口分别是Access、Hybrid和Trunk。Access端口只能属于一个VLAN,通常用于连接计算机、IP电话等设备的端口。Trunk端口可以允许多个VLAN通过,用于连接不同交换机之间的端口。而Hybrid端口不仅可以允许多个VLAN通过,还可以连接不同交换机和用户计算机之间的端口。

Access端口在收到数据时会将其打上PVID标签,而在发送数据时会将标签去除;Trunk和Hybrid类型的端口在接收数据时,处理方式是一致的,都会保留帧头中的标签信息,而在发送数据时,Trunk端口只有在报文所在VLAN与PVID不同时才会打标签,而Hybrid端口可以根据报文所在VLAN的配置来进行选择是否打标签。

总的来说,要正确理解和使用VLAN,需要对Access和Trunk概念、Tag和Untag等基本概念有清晰的认识,同时对不同类型端口的特点和使用场景有详细的了解。