网络安全 频道

知己知彼 用VLAN技术防御黑客攻击

 为什么要用VLAN呢?VLAN的实施是从逻辑上对用户进行了划分,使不同VLAN之中的用户无法直接通信。这种技术方便实施,节约资金。然而随着VLAN的应用范围越来越广,而同VLAN相关的安全管理问题也越来越严重。

  VLAN技术的应用为网络的安全防范提供了一种基于管理方式上的策略方法,我们可以根据企业网络管理的特点有针对性地选择不同的VLAN划分手段。虽然网络安全在某种程度上得到了一定的保障,但安全往往与危险并存,面对这些花样翻新的攻击手段,如何采取有效的防范措施?在本文中,将针对应用VLAN技术管理的网络,介绍黑客的攻击手段和我们可以采取的防御手段。

  一.常见的VLAN攻击

  目前常见的VLAN的攻击有以下几种:

  1.802.1Q 和 ISL 标记攻击

  标记攻击属于恶意攻击,利用它,一个 VLAN 上的用户可以非法访问另一个 VLAN 。例如,如果将交换机端口配置成 DTP(DYNAMIC TRUNK PROTCOL) auto ,用于接收伪造 DTP(DYNAMIC TRUNK PROTCOL) 分组,那么,它将成为干道端口,并有可能接收通往任何 VLAN 的流量。由此,恶意用户可以通过受控制的端口与其它 VLAN 通信。 有时即便只是接收普通分组,交换机端口也可能违背自己的初衷,像全能干道端口那样操作(例如,从本地以外的其它 VLAN 接收分组),这种现象通常称为“VLAN 渗漏”。

  对于这种攻击,只需将所有不可信端口(不符合信任条件)上的 DTP(DYNAMIC TRUNK PROTCOL) 设置为“关”,即可预防这种攻击的侵袭。 Cisco Catalyst 2950 、 Catalyst 3550 、 Catalyst 4000 和 Catalyst 6000 系列交换机上运行的软件和硬件还能够在所有端口上实施适当的流量分类和隔离。

  2.双封装 802.1Q/ 嵌套式 VLAN 攻击

  在交换机内部, VLAN 数字和标识用特殊扩展格式表示,目的是让转发路径保持端到端 VLAN 独立,而且不会损失任何信息。在交换机外部,标记规则由 ISL 或 802.1Q 等标准规定。

  ISL 属于思科专有技术,是设备中使用的扩展分组报头的紧凑形式,每个分组总会获得一个标记,没有标识丢失风险,因而可以提高安全性。

  另一方面,制订了 802.1Q 的 IEEE 委员会决定,为实现向下兼容性,最好支持本征 VLAN ,即支持与 802.1Q 链路上任何标记显式不相关的 VLAN 。这种 VLAN 以隐含方式被用于接收802.1Q端口上的所有无标记流量。

  这种功能是用户所希望的,因为利用这个功能,802.1Q端口可以通过收发无标记流量直接与老 802.3 端口对话。但是,在所有其他情况下,这种功能可能会非常有害,因为通过 802.1Q 链路传输时,与本地 VLAN 相关的分组将丢失其标记,例如丢失其服务等级( 802.1p 位)。

  但是基于这些原因——丢失识别途径和丢失分类信息,就应避免使用本征 VLAN ,更不要说还有其它原因,如图1所示。

                                                  图 1 双封装攻击

  先剥离,再送回攻击者 802.1q 帧 ,VLAN A、 VLAN B 数据包含本征VLAN A 的干道 VLAN B 数据

  注意: 只有干道所处的本征 VLAN 与攻击者相同,才会发生作用。

  当双封装 802.1Q 分组恰巧从 VLAN与干道的本征 VLAN 相同的设备进入网络时,这些分组的 VLAN 标识将无法端到端保留,因为 802.1Q 干道总会对分组进行修改,即剥离掉其外部标记。删除外部标记之后,内部标记将成为分组的惟一 VLAN 标识符。因此,如果用两个不同的标记对分组进行双封装,流量就可以在不同 VLAN 之间跳转。

  这种情况将被视为误配置,因为 802.1Q 标准并不逼迫用户在这些情况下使用本征 VLAN 。事实上,应一贯使用的适当配置是从所有 802.1Q 干道清除本地 VLAN (将其设置为 802.1q-all-tagged 模式能够达到完全相同的效果)。在无法清除本地 VLAN 时, 应选择未使用的 VLAN 作为所有干道的本地 VLAN ,而且不能将该 VLAN 用于任何其它目的 。 STP、DTP(DYNAMIC TRUNK PROTCOL)和UDLD等协议应为本地 VLAN 的唯一合法用户,而且其流量应该与所有数据分组完全隔离开。

  3.VLAN跳跃攻击

  虚拟局域网(VLAN)是对广播域进行分段的方法。VLAN还经常用于为网络提供额外的安全,因为一个VLAN上的计算机无法与没有明确访问权的另一个VLAN上的用户进行对话。不过VLAN本身不足以保护环境的安全,恶意黑客通过VLAN跳跃攻击,即使未经授权,也可以从一个VLAN跳到另一个VLAN。

  VLAN跳跃攻击(VLAN hopping)依靠的是动态中继协议(DTP(DYNAMIC TRUNK PROTCOL))。如果有两个相互连接的交换机,DTP(DYNAMIC TRUNK PROTCOL)就能够对两者进行协商,确定它们要不要成为802.1Q中继,洽商过程是通过检查端口的配置状态来完成的。

  VLAN跳跃攻击充分利用了DTP(DYNAMIC TRUNK PROTCOL),在VLAN跳跃攻击中,黑客可以欺骗计算机,冒充成另一个交换机发送虚假的DTP(DYNAMIC TRUNK PROTCOL)协商消息,宣布它想成为中继; 真实的交换机收到这个DTP(DYNAMIC TRUNK PROTCOL)消息后,以为它应当启用802.1Q中继功能,而一旦中继功能被启用,通过所有VLAN的信息流就会发送到黑客的计算机上。

  中继建立起来后,黑客可以继续探测信息流,也可以通过给帧添加802.1Q信息,指定想把攻击流量发送给哪个VLAN。

  4.VTP攻击

  VLAN中继协议(VTP,VLAN Trunk Protocol)是一种管理协议,它可以减少交换环境中的配置数量。就VTP而言,交换机可以是VTP服务器、VTP客户端或者VTP透明交换机,这里着重讨论VTP服务器和VTP客户端。用户每次对工作于VTP服务器模式下的交换机进行配置改动时,无论是添加、修改还是移除VLAN,VTP配置版本号都会增加1,VTP客户端看到配置版本号大于目前的版本号后,就自动与VTP服务器进行同步。

  恶意黑客可以让VTP为己所用,移除网络上的所有VLAN(除了默认的VLAN外),这样他就可以进入其他每个用户所在的同一个VLAN上。不过,用户可能仍在不同的网段,所以恶意黑客就需要改动他的IP地址,才能进入他想要攻击的主机所在的同一个网段。

  恶意黑客只要连接到交换机,并在自己的计算机和交换机之间建立一条中继,就可以充分利用VTP。黑客可以发送VTP消息到配置版本号高于当前的VTP服务器,这会导致所有交换机都与恶意黑客的计算机进行同步,从而把所有非默认的VLAN从VLAN数据库中移除出去。

  这么多种攻击,可见我们实施的VLAN是多么的脆弱,不过我们值得庆幸的是:如果交换机的配置不正确或不适当,才有可能引发意外行为或发生安全问题。所以我们在下面会告诉大家配置交换机时必须注意的关键点。

二.TRUNK接口的安全性

  交换机的端口有两种工作状态:一是Access状态,也就是我们用户主机接入时所需要的端口状态;二是Trunk状态,主要用于跨交换的相同VLAN_id之间的VLAN通讯。、

  Access状态一般被我们称之为正常状态,是主机的正常接入接口,这种接口的状态能引起安全的问题很小,我们不在这里详细的描述了。

  干道技术(Trunking)是通过两个设备之间点对点的连接来承载多个VLAN数据的一种方法。以下两种方法可以实现以太网干道连接ISL(交换机间链路,Cisco私有协议) 802.1Q(IEEE组织制度,国际标准)。

  前文提到的802.1Q 和 ISL 标记攻击,就是利用的Trunk的原理来实现的。那么我们在进行Trunk的操作中,怎样做才能更有效的避免这个安全隐患呢?

  我们已经知道,在实施Trunk时,我们可以不进行任何的命令操作,也可以完成在跨交换的相同VLAN-ID之间的通讯。这是因为我们有DTP(DYNAMIC TRUNK PROTCOL)。我们所有的接口上缺省使用了下面这条命令:

  Switch(config-if)#switchport mode dynamic desirable

  这条命令使我们所有的接口都处于了自适应的状态,会根据对方的接口状态来发生自适应的变化,对方是Access,就设置自己为Access;对方是Trunk,就设置自己为Trunk。除了desirable这个参数以外,还有一个和它功能比较相似的参数:Auto。这两个参数其实都有自适应的功能,稍微的一点不同在于是否是主动的发出DTP(DYNAMIC TRUNK PROTCOL)的包,有就是说是否主动的和对方进行端口状态的协商。Desirable能主动的发送和接收DTP包,去积极和对方进行端口的商讨,不会去考虑对方的接口是否是有效的工作接口,而Auto只能被动的接收DTP包,如果对方不能发送DTP消息,则永远不会完成数据通信。说到这,大家肯定认为Auto这个参数安全系数要比Desirable参数,其实这两个参数的实施所产生的安全隐患是一样的。大家想想,VLAN跳跃攻击往往是对方将自己的接口设为主动自适应状态,那么我们不管用哪个参数,其结果是完全一样的。

  这样的两个参数本意是给我们减轻工作负担,加快VLAN的配置而产生的。但随着网络的不断发展,针对这个特性而引发的安全隐患(比如:VLAN的跳跃攻击就是利用了这个特性),越来越引起我们的关注。

  想要解决这个安全隐患,只需进行以下操作。

  步骤1:我们首先将交换机上所有接口上,输入这个命令:

  Switch(config-if)# switchport mode access

  我们将交换机的所有接口都强制设为Access状态,这样做的目的是当攻击者设定自己的接口为Desirable状态时,怎么协商所得到的结果都是Accsee状态。使攻击者没法利用交换机上的空闲端口,伪装成Trunk端口,进行局域网攻击。

  再在Trunk接口上输入:

  Switch(config-if)# switchport mode trunk

  这条命令的功能,就是强制使端口的状态成为Trunk。不会去考虑对方接口状态,也就是说不管对方的接口是什么状态,我的接口都是Trunk。大家注意:这条命令仅仅在Trunk的真实接口上输入,这样使我们的接口在状态上是唯一的,可控性明显的增强了。

  其次我们可以在Trunk的接口上再输入下面这条命令:

  Switch(config-if)#switchport trunk allowed vlan 10,20,30

  这条命令定义了在这个Trunk的接口只允许VLAN10,20,30的数据从此通过.如果还有其他VLAN存在,他们的数据将不能通过这个Trunk接口通过。这样允许那些VLAN通过,那些不能通过,就很容易实施。我们就通过这种简单控制数据的流向而达到安全的目的。

  在完成了上述提升我们的VLAN安全三条命令后,我们的这些接口已经具备了较高的安全性。但读者肯定还有个疑问,那就是使用了这些命令后,DTP这些协议是否还在工作?回答是肯定的,DTP协议依旧在工作。

  所以我们最后还有一条强烈建议大家在配制VLAN时,必加的命令:

  Switch(config-if)#switchport nonegotiate

  大家一看到这条命令,就知道它的功能了。Nonegotiate的意思就是不协商。所以上面这条命令就是帮助我们彻底的将发送和接收DTP包的功能完全关闭。在关闭的DTP协议后,该接口的状态将永远稳定成Trunk,使接口的状态达到了最大的稳定性,最大化避免了攻击者的各种试探努力。

  另外,在802.1Q的Trunk中还有一个相关的安全问题,那就是Native VLAN。众所周知,在Cisco的Catalyst系列的交换机中,有几个缺省的VLAN。对于以太网用户而言,我们需要了解其中最重要的一个,那就是VLAN 1。缺省情况下,交换机的所有以太网接口都属于VLAN 1。而且我们在配置二层交换机上配置IP地址时,也是在VLAN 1这个接口下完成的。

  在802.1Q的干道协议中,每个802.1Q封装的接口都被作为干道使用,这种接口都有一个Native VLAN并被分配Native VLAN ID(缺省是VLAN 1),802.1Q不会标记属于Native VLAN的数据帧,而所有未被标记VLAN号的数据帧都被视为Native VLAN的数据。那么VLAN 1作为缺省的Native VLAN,在所有的交换机上都是相同。因此由Native VLAN引起的安全问题,在局域网中必须引起我们的重视。这个安全隐患的解决办法就是更改缺省Native VLAN,我们可以用一条命令

  Switch(config-if)# switchport trunk native vlan 99

  这条命令需要在一个封装了801.1Q的接口下输入,这条命令将缺省的Native VLAN更改为VLAN 99。执行这条命令后,Native VLAN不相同的交换机将无法通讯。增加了交换机在划分VLAN后的安全性。

三.VTP协议的安全性

  VTP(VLAN Trunking Protocol)是一个用于传播和同步关于整个交换网络的VLAN信息的协议,工作在OSI参考模型的第二层。VTP使我们在扩展交换网络规模时减少人工配置的工作量,并通过统一地管理交换网络中VLAN的增加、删除和名称变更,以维持整个网络VLAN配置的一致性,最大限度地减少可能带来问题的错配和配置不一致情况(如VLAN名称重复使用或错误的VLAN类型说明)。

  一个VTP域由一个或多个共享相同VTP环境的互连交换机组成,一个交换机只能配置到一个VTP域中。缺省地,Catalyst交换机置于无管理域的状态(不属于任何VTP域),直到它通过干道链路收到关于某个VTP域的通告或人工将其配置到某VTP域中。对单个VTP服务器的VLAN配置,会通过干道链路传播给所有连接到该VTP域的交换机。VTP信息只在干道链路上传送出去。

  我们在实际的工作中,往往需要一次性的配置多台Cisco的交换机,这时VTP协议给我们很大的帮助,使我们迅速的完成VLAN的部署。但VTP这个协议在应用过程中和DTP协议具有相同的问题。在前文中提到过在VLAN中有一种VTP攻击就是利用VTP的缺点实施攻击的。在解释如何防范VTP攻击前,我们有必要简单的回顾一下VTP的原理

  交换机在VTP域中以三种模式之一来工作:服务器模式、客户模式、透明模式。默认为服务器模式,但只有当一个管理域名被指定或获知后,其VLAN信息才会被通告出去。VTP通告被泛洪到整个VTP域,通常每隔5分钟或VLAN配置发生改变时,都会产生VTP通告。VTP通告通过厂家默认的VLAN(VLAN l)使用组播帧传送,包含在VTP通告中的VLAN配置版本号起着关键的作用,高版本号表明所通告的VLAN信息比原来储存的信息更新。

  在同步VLAN信息之前,接收VTP通告的设备必须检查各种参数:首先检查VTP域名、域密码是否与本地交换机所配置的相匹配,接着检查配置版本号是否比现在保存版本号更高,如果是这样的话交换机就同步通告的VLAN信息,这种信息同步是采用覆盖(overwrite)的方式。如果要复位当前的配置版本号,用命令delete vtp。

  VTP服务器每次调整VLAN信息时,就会让配置版本号递增1,并用新的配置版本号发出VTP通告。在VTP的透明模式下,配置版本号总是为0。

  VTP裁剪(Pruning)用VLAN通告来决定什么时候在干道连接上泛洪是不必要的。缺省地,在VTP域中干道连接承载所有VLAN的数据,在企业网络中往往不是每个交换机上都有接口划分到所有VLAN,VIP修剪功能通过限制泛洪数据传到那些不必要的主干链路来增加可用的带宽。修剪功能只能在VTP服务器上启用。

  在回顾了VTP的基本原理后,我们在来看看,在Cisco的交换机上,缺省的VTP配置:

  VTP的缺省配置取决于交换机型号和软件版本

  VTP模式:缺省地设置为VTP服务器模式

  VTP裁剪: 2950,3550等关闭

  VTP版本:VTP协议有版本1和版本2

  VTP域名:可以直接指定或从通过干道链路学来。缺省地交换机没有VTP域名。

  VTP密码:无

  大家可以看到,如果我们要去实施VTP,是非常容易的,往往只需要2-3条命令就可以完成。但VTP实施以后,随之而来的VTP安全和稳定问题就出现了。

  VTP的模式缺省是VTP的服务器模式,这种模式下可以任意的删除,添加,更改VLAN的信息,所以这种模式下的安全性非常重要。攻击者通过VTP攻击获取权限后,对我们的局域网的架构可以任意更改了,造成网络的严重混乱。所以我们建议大家在进行VTP协议实施时,不管一个域中有多少台交换机,只保留一台是VTP的服务器模式,其他都是VTP的客户模式。

  另外,为了保证VTP域的安全,VTP域可以设置密码,域中所有交换机必须设置成一样的密码。在VTP域中的交换机配置了同样的密码后,VTP才能正常工作。而不知道密码或密码错误的交换机讲无法获知VLAN的消息。不过有些遗憾的是VTP的域密码是明文在网络中传递的。

  下面是一个VTP安全实施的实例,要求创建一个名为RT的VTP域,在两台交换机上配置VTP域模式,一台为Server,一台为Client,开启VTP裁剪,设置VTP版本为2,在VTP域为Server的交换机上创建VLAN10,20,30三个VLAN,在这个实例中将接口加入VLAN的部分我们将在VLAN配置实例中描述。重点注意两台VTP工作的域模式和域密码。在完成这样的操作后,最大程度保证VTP的正常工作。拓扑如图2所示

                                                     图2 VTP配置

  Sw-vtpserver配置如下:

      Sw-vtpserver (config)# vtp mode server
  Sw-vtpserver (config)# vtp domain rt
  Sw-vtpserver (config)#vtp pruning
  Sw-vtpserver (config)#vtp version 2
  Sw-vtpserver (config)#vtp password cisco
  Sw-vtpserver (config)#vlan 10
  Sw-vtpserver (config)#vlan 20
  Sw-vtpserver (config)#vlan 30

  Sw-vtpclient配置如下:

      Sw-vtpclient (config)#vtp domain rt
  Sw-vtpclient (config)#vtp password cisco
  Sw-vtpclient (config)#vtp pruning
  Sw-vtpclient (config)#vtp version 2
  Sw-vtpclient (config)#vtp mode client

  配置完成的结果如图3:

                                             图3 VTP配置完成

 四.VLAN安全配置案例

  这是一个完整的VLAN和802.1Q配置案例,在这个案例中我们将前文讲过的所有命令都应用在这个VLAN的配置中,是我们的VLAN能够安全的为我们提供俯卧。拓扑图如图4所示。

                                      图4 VLAN与802.1Q配置拓扑图

  实施要求:在Switch-1和Switch-2完成VLAN10,20的创建,完成PC1和PC3、PC2和PC4的跨交换的通讯,使用VTP协议的创建。VTP域名RT,设Switch-1的VTP模式为Server,Switch-2的VTP模式为Client,使用VTP密码方式保护VTP安全,Switch-1的F0/2在VLAN20,和PC1相接,F0/1在VLAN10,和PC2相接,F0/24和Switch-2的F0/24连接,将Switch-1的F0/24和Switch-2的F0/24手动配置成Trunk,要保证Trunk线路的安全,关闭Trunk的DTP协议。Switch-2的F0/2在VLAN20,和PC3相接,F0/1在VLAN10,和PC4相接。更改两台交换机上的Native vlan为99。

      Switch-1 (config)# vtp mode server
  Switch-1 (config)# vtp domain rt
  Switch-1 (config)#vtp pruning
  Switch-1 (config)#vtp version 2
  Switch-1 (config)#vtp password cisco
  Switch-1(config)# vlan 99
  Switch-1(config)# vlan 10
  Switch-1(config-vlan)# name yanfa
  Switch-1(config)#interface fastethernet 0/1
  Switch-1(config-if)# switchport mode access
  Switch-1(config-if)# switchport access vlan 10
  Switch-1(config)# vlan 20
  Switch-1(config-vlan)# name renshi
  Switch-1(config)#interface fastethernet 0/2
  Switch-1(config-if)# switchport mode access
  Switch-1(config-if)# switchport access vlan 20
  Switch-1(config)#interface fastethernet 0/24
  Switch-1(config-if)#shutdown
  Switch-1(config-if)#switchport trunk encapsulation dot1q
  Switch-1(config-if)#switchport trunk allowed vlan 99,10,20
  Switch-1(config-if)#switchport mode trunk
  Switch-1(config-if)#switchport trunk native vlan 99
  Switch-1(config-if)#switchport nonegotiate
  Switch-1(config-if)#no shutdown

  Switch-2配置如下:

      Switch-2 (config)#vtp domain rt
  Switch-2 (config)#vtp password cisco
  Switch-2 (config)#vtp pruning
  Switch-2 (config)#vtp version 2
  Switch-2 (config)#vtp mode client
  Switch-2(config)#interface fastethernet 0/1
  Switch-2 (config-if)# switchport mode access
  Switch-2 (config-if)# switchport access vlan 10
  Switch-2(config)#interface fastethernet 0/2
  Switch-2 (config-if)# switchport mode access
  Switch-2 (config-if)# switchport access vlan 20
  Switch-2(config)#interface fastethernet 0/24
  Switch-2(config-if)#shutdown
  Switch-2(config-if)#switchport trunk encapsulation dot1q
  Switch-2(config-if)#switchport trunk allowed vlan 99,10,20
  Switch-2(config-if)#switchport mode trunk
  Switch-2(config-if)#switchport trunk native vlan 99
  Switch-2(config-if)#switchport nonegotiate
  Switch-2(config-if)#no shutdown

  下面是ISL封装时的做法,和801.1Q相同的部分我们就省略了。重点给大家演示Trunk链路的配置。其它vlan的创建,接口的加入和802.1Q完全相同。

      Switch1(config)#interface fastethernet 0/24
  Switch1(config-if)#shutdown
  Switch1(config-if)#switchport trunk encapsulation isl
  Switch1(config-if)#switchport trunk allowed vlan 1-5,1002-1005
  Switch1(config-if)#switchport mode trunk
  Switch1(config-if)#switchport nonegotiate
  Switch1(config-if)#no shutdown

0
相关文章