W momencie, gdy w jakimś informatycznym akronimie pojawia się litera V, prawdopodobnie oznacza to słowo virtual (wirtualny): VM - virtual machine, VPN - virtual private network. Nie inaczej jest w przypadku VLAN, czyli virtual local area network (wirtualna sieć lokalna, nie mylić z VPN!). Tam gdzie pojawia się wirtualizacja pojawiają się nowe możliwości. Sieci VLAN pomagają m. in. zmniejszyć koszty związane ze sprzętem, ale nieostrożnie skonfigurowane mogą powodować luki bezpieczeństwa.

Wstęp: sieci VLAN w skrócie

Sieci VLAN bazują na logicznych połączeniach zamiast na fizycznym rozmieszczeniu urządzeń. Komputery mogą być rozmieszczone na różnych piętrach budynku, podpięte do wielu przełączników, ale należeć do tej samej sieci lokalnej. Tak samo urządzenia podłączone do jednego przełącznika mogą być w różnych sieciach IP i mieć możliwość komunikowania się ze sobą tylko poprzez router, ponieważ przełącznik będzie przekazywał ramki tylko do portów przypisanych do tej samej sieci VLAN co porty, z których dane ramki odebrał. Powoduje to izolację urządzeń oraz zmniejsza domeny rozgłoszeniowe w sieci.

przykład vlan
Grafika utworzona za pomocą narzędzia  Canva

Z perspektywy użytkownika końcowego i aplikacji sieci VLAN nie różnią się niczym od klasycznych sieci lokalnych. Ich wdrożenie odbywa się na poziomie portów przełączników, tzn. na każdym porcie możemy określić, do jakiej sieci VLAN ma być przyporządkowany.

Sieci VLAN to tak obszerny temat, że można by poświęcić im osobny artykuł, dlatego w celu ich dobrego zrozumienia odsyłam do zewnętrznych źródeł. Pomocny powinien być ten kurs na YouTube.

VLAN Hopping - przeskakiwanie między sieciami VLAN

W normalnym, pożądanym scenariuszu nie ma możliwości wysyłania żadnych danych do innych sieci VLAN niż ta, do której jesteśmy połączeni bez zatrudnienia do tego routera. Jednak takie ograniczenie można próbować obejść nadużywając mechanizmy kontroli przesyłu ramek z różnych sieci VLAN między przełącznikami.

Wstęp: połączenia trunk

Infrastruktura z wieloma sieciami VLAN najczęściej składa się też z wielu przełączników, połączonych nie tylko z hostami i routerami, ale także z innymi przełącznikami. Łącza między przełącznikami to tzw. łącza trunk. Porty trunk to porty przełącznika, które nie należą do żadnej określonej sieci VLAN i służą do przesyłania ruchu z wielu wirtualnych sieci lokalnych między przełącznikami.

Ale skąd switch, który na porcie trunk odbierze ramkę, ma wiedzieć do jakiej sieci VLAN ona należy?

Odpowiedzi na to pytanie dostarcza standard IEEE 802.1Q, zgodnie z którym do ramki Ethernet dodawany jest znacznik sieci VLAN zawierający numer sieci VLAN, do której należy urządzenie wysyłające ramkę.

Istnieje jednak typ sieci VLAN nazywany natywnym, który służy do przekazywania ruchu nieoznakowanego, czyli pozbawionego znacznika 802.1Q.

Atak z podwójnym znakowaniem VLAN

Jeśli atakujący podłączy urządzenie do portu przełącznika należącego do sieci VLAN, która jest siecią VLAN natywną, może wykorzystać podwójne znakowanie VLAN (VLAN double tagging), aby wysłać pakiet do innej sieci VLAN niż ta, w której się znajduje.

W tym celu tworzy ramkę która zawiera dwa znaczniki VLAN:

  • zewnętrzny ze znacznikiem VLAN natywnego, do którego należy urządzenie intruza
  • wewnętrzny ze znacznikiem VLAN, do którego należy urządzenie docelowe

Gdy taka ramka dociera do portu przełącznika, ten widzi, że jest przeznaczona dla VLAN natywnego, więc usuwa znacznik (zewnętrzny) VLAN, ponieważ natywny VLAN jest przeznaczony dla ruchu nieoznakowanego i przekazuje ramkę dalej. Kolejny przełącznik nie ma pojęcia, że odebrana ramka była przeznaczona dla VLAN natywnego, więc odczytuje znacznik (wewnętrzny) VLAN i wysyła ramkę do tej sieci VLAN. W końcu ramka trafia do urządzenia docelowego, do którego nigdy nie powinna trafić nie pokonując routera.

vlan double tagging
Grafika utworzona za pomocą narzędzia  Canva

Polecam obejrzeć ten film autorstwa Davida Bombala, w którym prezentowane jest działanie tego ataku na faktycznym sprzęcie z użyciem bardzo prostego skryptu w języku Python.

Podszywanie się pod przełącznik

Port przełącznika Cisco może działać w jednym z czterech trybów: access, trunk, dynamic auto oraz dynamic desirable. Dwa ostatnie korzystają z mechanizmu negocjacji połączenia trunk oferowanego przez protokół DTP (Dynamic Trunking Protocol). Domyślnie, porty są skonfigurowane aby działały w trybie dynamic auto, czyli pasywnej negocjacji - jeśli podłączymy do nich urządzenia końcowe, nie będą portami trunk i będą zachowywać się jak porty dostępowe. Mogą się jednak automatycznie przestawić na trunking, jeśli podłączone do nich urządzenia zaczną z nimi negocjacje dotyczące utworzenia łącza trunk. To zachowanie można wykorzystać na niekorzyść sieci.

Jeśli port przełącznika, do którego podłączył się intruz, jest skonfigurowany w trybie dynamic auto lub dynamic desirable, atakujący może utworzyć z tym portem łącze trunk podszywając się tym samym pod przełącznik. W ten sposób będzie w stanie wysyłać, a nawet odbierać ruch z różnych sieci VLAN.

dtp abuse
Grafika utworzona za pomocą narzędzia  Canva

Istnieje narzędzie dostępne na systemie Kali Linux o nazwie Yersinia. Służy do przeprowadzania ataków w warstwie drugiej modelu OSI i można je wykorzystać do imitowania przełącznika. Program uruchamiamy wpisując w terminalu poniższe polecenie:

$ sudo yersinia -G
yersinia gui
Zrzut ekranu z programu Yersinia

Naszym oczom powinien ukazać się interfejs graficzny narzędzia Yersinia. Najpierw należy się upewnić, że będziemy korzystać z właściwego interfejsu sieciowego. Wybieramy Edit interfaces i zaznaczamy ten, który nas interesuje. Żeby rozpocząć ustanawianie łącza trunk z przełącznikiem klikamy Launch attack. Następnie wybieramy zakładkę DTP, zaznaczamy enabling trunking i wciskamy OK.

yersinia DTP enabling trunking
Zrzut ekranu z programu Yersinia

Przetestowałem owy atak na przełączniku Cisco Catalyst 2960, a jego rezultat przedstawia zdjęcie poniżej:

yersinia gui
Zrzut ekranu z terminala; interfejs wiersza poleceń  Cisco IOS

Port Fa0/25 był przeze mnie ręcznie ustawiony jako trunk bez wykorzystania protokołu DTP, ponieważ był połączony z innym przełącznikiem. Jednak port Fa0/15 był połączony z laptopem i korzystał z DTP (w trybie dynamic auto) - jak widać, udało się włączyć na nim trunking, co oznacza uzyskanie dostępu do wielu (jeśli nie wszystkich) sieci VLAN.

Nie każdy posiada w swoim domu przełącznik, dlatego osobom zainteresowanym polecam obejrzeć ten film prezentujący nadużywanie protokołu DTP.

Zapobieganie

Luki związane z sieciami VLAN polegają na nadużywaniu mechanizmów, na których się one opierają. Łatanie tych luk na szczęście jest proste i nie wymaga dodatkowego oprogramowania ani sprzętu, a jedynie przemyślanej konfiguracji. Wystarczy przestrzegać kliku prostych zasad:

  • Domyślnie natywną siecią VLAN jest VLAN 1. Warto zmienić natywny VLAN na inny i nie przyporządkowywać do niego żadnych portów dostępowych, jeśli nie ma na to wyraźnej potrzeby.
  • Na portach, do których mają być podłączane urządzenia końcowe należy wyłączyć protokół DTP. Powinny być ustawione ręcznie jako dostępowe (access) i być przypisane do odpowiednich sieci VLAN.
  • Na portach przeznaczonych do działania jako trunk także można wyłączyć protokół DTP i ustawić je jako trunk ręcznie.

Dla większej ochrony warto również włączyć bezpieczeństwo portu (port security)

Podsumowanie

Sieci VLAN są wygodne i powszechnie stosowane. Uniezależniają logiczną warstwę sieci od fizycznej infrastruktury i rozmieszczenia urządzeń redukując tym koszty związane z ich utrzymaniem - chcąc utworzyć dwie sieci lokalne wystarczy tylko jeden przełącznik. Sieci te będą odizolowane pod warunkiem, że zadbamy o dobre praktyki konfiguracyjne, aby nie było możliwe obejście izolacji. Na routerze mogą zostać skonfigurowane listy kontroli dostępu, jednak na nic się one nie zdadzą, jeśli do innej podsieci da się dotrzeć trasą, na której nie znajduje się router. Do osób podłączających się do sieci należy mieć ograniczone zaufanie i dbać o to, aby intruzi nie mogli nam w niej namieszać.

Źródła

Strony, którymi się wspierałem:

  • https://www.vmware.com/topics/glossary/content/virtual-machine.html
  • https://www.cisco.com/c/en/us/products/security/vpn-endpoint-security-clients/what-is-vpn.html
  • https://www.practicalnetworking.net/stand-alone/vlans/
  • https://www.ibm.com/topics/virtualization
  • https://www.solarwinds.com/resources/it-glossary/vlan
  • https://www.cloudflare.com/learning/network-layer/what-is-a-network-switch/
  • https://www.section.io/engineering-education/inter-vlan-routing/
  • https://www.tutorialspoint.com/the-data-link-layer-frame-and-frame-fields
  • https://networklessons.com/switching/how-to-configure-vlans-on-cisco-catalyst-switch
  • https://www.firewall.cx/networking-topics/vlan-networks/218-vlan-access-trunk-links.html
  • https://study-ccna.com/ieee-802-1q/
  • https://en.wikipedia.org/wiki/IEEE_802.1Q
  • https://en.wikipedia.org/wiki/Ethernet
  • https://github.com/davidbombal/scapy/blob/main/vlan-hopping.py
  • https://www.youtube.com/watch?v=SiFyhipl57A
  • https://github.com/davidbombal/scapy/blob/main/dtp-form-a-trunk.py
  • https://study-ccna.com/port-security/
  • https://www.nastykusieci.pl/acl-podstawy/
  • https://en.wikipedia.org/wiki/OSI_model
  • https://www.kali.org/tools/yersinia/