VLAN Hopping攻擊技術與緩解措施
關於VLAN
VLAN,即虛擬區域網,用於物理網路的共享,通過建立虛擬的網段從而實現特定組的劃分。舉例來說,在同一個物理區域網上,VLAN
1的所有主機與VLAN
2的所有主機相分隔,如果要在VLAN之間傳送任何資料包,都必須經過路由器或其他第3層(網路層)裝置。這樣的特點保證了網路的安全性,由此VLAN也被眾多網路管理員應用到實際配置中。然而,通過“VLAN
Hopping”的攻擊方式,攻擊者可以繞過上述這些安全實現。如果各位讀者想了解更多關於網路分段和VLAN的知識,建議閱讀: ofollow,noindex">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的成員。其拓撲圖如下:
交換機的部分配置如下:
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的圖形介面截圖:
現在,藉助該工具,我們可以通過以下步驟來發送DTP訊息:
1、點選“Launch attack”(發起攻擊);
2、單擊“DTP”選項卡;
3、點選“Enable Trunking”(啟動中繼);
4、點選“OK”。
Yersinia將會發送DTP訊息,並在幾秒內建立一箇中繼鏈路。在我們的場景中,攻擊者可以訪問流經VLAN 2的所有流量,並且在無需藉助任何第3層(網路層)裝置的情況下可以直接實現攻擊。
漏洞利用2:雙重標記攻擊
在該漏洞利用場景中,存在攻擊者、2個交換機和目標伺服器。攻擊者連線到交換機1,而交換機1與交換機2相連線,我們攻擊的目標就是最終成功連線到交換機2上。其拓撲圖如下:
在熟悉拓撲圖後,我們看到交換機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封裝的資料包。下圖展現了交換機是如何對此幀進行管理的:
從圖中我們可以看出,交換機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是不同的。
總結
通過本文所介紹的攻擊技術和緩解方式,可以讓大家理解——交換機不是為了安全而構建的。因此,在每一層都採取正確的安全配置,並注意進行相應安全防護就顯得尤為重要。如果你需要對網路進行隔離,請一定確保正確並安全地進行,配置網路的過程需要慎重。