Ataki na VLANy oraz STP opracowali
Transkrypt
Ataki na VLANy oraz STP opracowali
Ataki na VLANy oraz STP opracowali inż. Krzysztof Szewczyk inż. Mateusz Witke inż. Damian Tykałowski inż. Mariusz Zalewski INSTRUKCJA DLA NAUCZYCIELA Ataki na VLANy - instrukcja dla nauczyciela Przygotowując laboratorium trzeba mieć przede wszystkim na względzie to, że nie na wszystkich przełącznikach można przeprowadzić dane ataki na machanizmy VLAN. To, że przełączniki muszą być zarządzalne wydaje się oczywiste, ponieważ mamy tu doczynienia z VLANami - musimy wprowadzić dane do przełącznika. Nie tak oczywistą kwestią jest rodzaj użytego oprogramowania na przełącznikach. W zależności od producenta i od wersji oprogramowania na przełączniku przeprowadzenie ataku może się udać lub nie. Aby przeprowadzić laboratorium trzeba wybrać odpowiednie przełączniki, które mają właśnie te luki/feature-y. Do przeprowadzenia ataku typu double tagging najlepiej wybrać starsze przełączniki (np. Crossfire 8711 Fast Ethernet Switch) ponieważ użyty w nich system pozwala na przeprowadzenie ataku. Niestety atak ten prawdopodobnie nie powiedzie się na nowszych urządzeniach firmy CISCO i innych producentów, ponieważ ich inżynierowie zabezpieczyli system przed tego typu atakiem. W przypadku przełączników Olicom wykorzystana jest tutaj luka w systemie operacyjnym, który pozwala na przyjmowanie podwójnie otagowanych ramek. Niektóre ataki natomiast uda się wykonanać tylko na sprzęcie typu CISCO, ponieważ tylko urządzenia firmy CISCO wykorzystują protokół DTP (Dynamic Trunk Protocol) - jest to ich własnościowy protokół stosowany tylko na ich urządzeniach. Także dobór sprzętu i oprogramowania sprzątu pełni kluczową rolę w przygotowaniu laboratorium. Gdy już dokonamy wyboru odpowiedniego sprzętu pozostaje nam odpowiednio skonfigurować sprzęt zgodnie z poniższym rysunkiem. W zależności przełącznika i znajdującego się na nim oprogramowania konfiguracja może się różnić, więc przedstawiony zostanie jedynie schemat ideowy i konfiguracja na konkretnym sprzęcie. Jeżeli prowadzący będzie miał trudności w skonfigurowaniu VLANów powinien zapoznać się z dokumentacją sprzętu. Konfiguracja środowiska pracy - schemat ideowy: W celu konfiguracji przełączników musimy zainstalować terminal dzięki któremy będzimy mogli dostać się na przełącznik. Najpopularniejszym terminalem jest minicom. Aby zainstalowac minicoma wydajemy polecenie: sudo apt-get update (w celu uaktualnienia źródeł) sudo apt-get install minicom UWAGA : W używanej przez nas dystrybucji Kali Linux, jest już on zainstalowany, dotyczy to jedynie starszej wersji BackTrack. Jeszcze jedna ważna uwaga (dotyczy Kali Linux), należy podlinkować urządzenie /dev/ttyX do /dev/modem poleceniem: ln s /dev/modem /dev/ttySX (X to numer portu szeregowego, znajdziemy go za pomocą komendy: dmesg | grep tty) Uruchamiamy minicoma wydając polecenie minicom & Wywołujemy menu kombinacją klawiszy Ctrl-A-Z Przechodzimy do okna konfiguracji naciskając kombinację klawiszy Ctrl-A-O. Ustawiamy opcję A - Serial Device na /dev/modem (w BackTracku 5 jest to wartość ttyS4 lub ttyS5, w zależności gdzie do komputera podłączona jest przedłużka RS232) i opcję E - Bps/Par/Bits na 9600 8N1. Konfiguracja przełączników a) Olicom ---------------------------------------------------------aby wyświetlić dostępne polecenia należy wpisać “?” pokazą nam się dostępne polecenia na danym poziomie np: >? Possible: system System commands snmp SNMP parameters console Console commands port Port commands crosslink Crosslink commands mirror Mirror commands vlan VLAN commands spanning tree Spanning Tree commands ip IP commands close Quit current CLI session -------------------advanced Set advanced mode Można wchodzić po kolei w każdy poziom oraz sprawdzać poprzez “?” jakie komendy są możliwe w kolejnym poziomie, ale jak zna sie już poddrzewo danej komendy to dużo łatwiej z poziomu top od razu wpisywać całe polecenia w dodatku moża używać w tracie wpisywania TAB który podpowiada możliwe komendy bez przerywania wpisywanej komnedy i bez wchodzenia w drzewo. > vlan all show configuration pokaż konfiguracje wszystkich vlanów zamiast > vlan vlan> all vlan all> show vlan all show> configuration VLAN ID 1 Vlan name : VLAN-0001 MAC address : 00-00-24-34-32-00 IGMP snooping : disabled Ports : 1..24 > > > > vlan vlan vlan vlan 1 1 2 2 create (może wyskoczyć błąd ponieważ vlan 1 jest już domyślnie stworzony) set name smerfy create set name gumisie Konfigurujemy interface’y w switchach: używamy + aby dodać, - aby odjąć natomiast bez znaku nadpisujemy porty jeżeli jakieś wcześniej były ustawione vlan 1 set port 1,3 nadpisanie vlan 2 set port +2,+3 dodanie na wszystkich portach należy wyłączyć tagowanie oprócz portu 3 w vlan-ie 2 vlan 1 port 3 set 802.1q tagging off vlan 1 port 1 set 802.1q tagging off vlan 2 port 2 set 802.1q tagging off vlan 2 port 3 set 802.1q tagging on ---------------------------------------------------------- b) Cisco Konfigurujemy switche w następujący sposób (obydwa tak samo): Konfigurujemy VLANy w switchach: switch> enable - wchodzimy do trybu uprzywilejowanego switch# configure terminal - przechodzimy do trybu konfiguracji switch(config)# vlan 1 switch(config-vlan)# name smerfy switch(config-vlan)# exit switch(config)# vlan 2 switch(config-vlan)# name gumisie switch(config-vlan)# exit Konfigurujemy interface’y w switchach: switch(config)#interface fastEthernet 0/1 switch(config-if)#switchport mode access switch(config-if)#switchport access vlan 1 switch(config-if)#exit switch(config)#interface fastEthernet 0/2 switch(config-if)#switchport mode access switch(config-if)#switchport access vlan 3 switch(config-if)#exit switch(config)#interface fastEthernet 0/3 switch(config-if)#switchport trunk encapsulation dot1q switch(config-if)#switchport mode trunk switch(config-if)#exit Aby wyjść z trybów konfiguracyjnych należy wpisać exit. Zawsze cofamy się o jeden poziom wyżej. Więc, żeby wrócić do początkowego znaku zachęty switch> należy kilkukrotnie wpisać exit. Gdy przeszliśmy do trybu normalnego “switch>” możemy podglądnąć wyniki naszych prac komendą: switch>show vlan Konfiguracja powinna wyglądać tak: Port Fa0/1 powinien znajdować się w VLANie 1 Port Fa0/2 powinien znajdować się w VLANie 2 Port Fa0/3 nie powinien znajdować się w żadnym VLANie ponieważ jest on portem typu trunk - tranzytuje ruch wszystkich VLANów Konfiguracja stacji roboczych zgodnie ze schematem ideowym. Na początku trzeba zorientować się, któremu interfejsowi przypisujemy adres IP. Listujemy wszystkie interfejsy sieciowe poleceniem: root@bt #: ip a eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 4a:e1:4e:31:e4:4a brd ff:ff:ff:ff:ff:ff inet 0.0.0.0/0 brd 0.0.0.0 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::48e1:4eff:fe31:e44a/64 scope link valid_lft forever preferred_lft forever … W zależności ile interfejsów podepniemy, tyle będzie aktywnych, w laboratorium do komputerów zazwyczaj są wpięte czarne kable, które pozwalają na wyjście na świat z sieci laboratoryjnej, drugi kabel wpięliśmy do switcha. Po wylistowaniu interfejsów pojawi się nam jedna pozycja z adresem przypisanym z DHCP (czyli czarny kabel z wyjściem na świat) oraz interfejs który jest <BROADCAST,MULTICAST,UP,LOWER_UP>(pozostałe nie będą posiadać połączenia <BROADCAST,MULTICAST,NOCARRIER,LOWER_UP>). To właśnie ten interfejs konfigurujemy. KALI LINUX Klikamy prawym przyciskiem na ikonę Network Manager’a w prawym górnym rogu, stamtąd przechodzimy do konfiguracji (Configuration), następnie na liście wybieramy interesujący nas interfejs, ustawiamy tryb na Manual, nadajemy odpowiedni adres IP (10.0.0.X) oraz maskę 24, zaznaczamy “Connect automatically” i klikamy OK. DOTYCZY BACKTRACK 5 Konfigurujemy interfejs na stacji roboczej lokalnie wydając komende: ip addr add 10.0.0.(numer_komputera)/24 dev nazwa_interfejsu przykładowo dla komputera piątego wydajemy polecenie: ip addr add 10.0.0.5/24 dev eth0 Sprawdzamy czy aby napewno przypisaliśmy właściwy adres IP dla interfejsu: root@bt #: ip a eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 4a:e1:4e:31:e4:4a brd ff:ff:ff:ff:ff:ff inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::48e1:4eff:fe31:e44a/64 scope link valid_lft forever preferred_lft forever Konfiguracja sprzętu dobiegła końca. Pora na instrukcję w której są opisane odpowiedzi na pytania, które prowadzący może zadać studentom. ROZSZERZONA INSTRUKCJA LABORATORYJNA - INSTRUKCJA DLA NAUCZYCIELA Wprowadzanie VLANnów do przełacznika 1. Sprawdź konfigurację swojej stacji roboczej - powinna ona mieć przypisany następujący adres IP: 10.0.0.X na jednym z interfejsów eth (najczęściej eth0), gdzie X to numer komputera przy którym siedzisz, przykład: root@bt #: ip a eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 4a:e1:4e:31:e4:4a brd ff:ff:ff:ff:ff:ff inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::48e1:4eff:fe31:e44a/64 scope link valid_lft forever preferred_lft forever 2. Każdy z komputerów znajduje się w pewnym VLANie: ● stacje 1, 3, 5, 7 - VLAN 1 “smerfy” ● stacje 2, 4, 6, 8 - VLAN 2 “gumisie” Spróbuj spingować swoją sąsiadkę/swojego sąsiada po jej/jego adresie IP, a następnie spróbuj spingować kogoś kto znajduje się w tym samym VLANie, pokaż wyniki prowadzącemu. 3. Otwórz okno frameworka “yersinia” za pomocą komendy root@bt #: yersinia G & Przełącznik -G oznacza pracę w trybie GUI, następnie kliknij “Edit interfaces” z menu u góry i wybierz odpowiedni interfejs (czyli ten, który został ustalony w punkcie pierwszym), nie zaznaczaj innych interfejsów i kliknij OK. 4. Ataki na STP 4.1 Rozsyłanie pakietów BPDU - configuration (Student/ka przy stanowisku parzystym) ● Uruchom Wireshark’a na odpowiednim interfejsie ● Kliknij “Launch attack” w menu u góry (obok “Edit interfaces”) a następnie wybierz zakładkę STP i opcję “sending conf BPDUs” a następnie OK: ● Atak się rozpocznie a w oknie Wiresharka powinniśmy zobaczyć pakiety conf: ● Po zakończeniu demonstracji należy przerwać atak, należy kliknąć opcję “List attacks” u góry w menu i kliknąć “Cancel all attacks” (Student/ka przy stanowisku nieparzystym) ● Upewnij się, że posiadasz połączenie szeregowe do switcha (czy przejściówka RS232 jest wpięta do wtyczki z numerem Twojego komputera np. K5) ● Zaloguj się do switcha, przy użyciu programu minicom (brak hasła, poprostu należy naciskać Enter) ● root@bt #: minicom ● Obserwuj zachowanie switcha, czy dzieje się z nim coś niedobrego? Przedstaw swoje odkrycia prowadzącemu Switch powinien się po czasie nie mniejszym niż 15s zresetować, ponieważ taki jest ustawiony doyślny czas co który switch może zmieniać konfiguracje. Ciągła rekonfiguracja sieci sprawia wzmożoną pracę switcha, przepełnieni tablic i następuje restart. 4.2 Rozsyłanie pakietów BPDU - topology change ● zmiana ról, tym razem numery parzyste logują się do switcha, a numery nieparzyste uruchamiają yersinię oraz Wiresharka (Student/ka przy stanowisku nieparzystym) ● analogicznie jak w poprzednim ćwiczeniu, klikamy w menu “Launch attack” a następnie zakładka STP oraz opcja “sending tcn BPDUs”, klikamy “OK” ● obserwujemy pakiety w Wireshark’u ● po zakończeniu demonstracji prowadzącemu, nie zapomnij wyłączyć ataku! - ikona “List attacks” oraz nastepnie “Cancel all attacks” (Student/ka przy stanowisku parzystym) ● przełączamy połączenie szeregowe do naszego komputera ● podobnie jak wcześniej, logujemy się do switcha przy użyciu komendy “minicom”, obserwujemy zachowanie switcha przy ataku i demonstrujemy wyniki prowadzącemu Switch powinien się po czasie nie mniejszym niż 15s zresetować, ponieważ taki jest ustawiony doyślny czas co który switch może zmieniać konfiguracje. Ciągła rekonfiguracja sieci sprawia wzmożoną pracę switcha, przepełnieni tablic i następuje restart. 4.3 Claiming Root Role ● Tym razem numery nieparzyste uruchamiają Wiresharka i obserwują ruch ● Numery parzyste przechodzą do zakładki STP, gdzie zobaczymy obecny ruch w Sieci ● można stąd odczytać obecny RootId który panuje w Sieci, należy go wskazać prowadzącemu ● wybieramy opcję “Launch attack” a następnie zakładka STP, “Claiming Root Role” i naciskamy OK ● zobaczymy w oknie pakiety z nowym RootId (niższym) w Sieci ● zadaniem naszego kolegi/koleżanki jest pokazanie różnicy między starym a nowym RootId w WireSharku, trzeba znaleźć odpowiednie pakiety które pokażą stan przed atakiem jak i po ataku jak poniżej. Po demonstracji, zastopuj atak: “List attacks” -> “Cancel all attacks” przed ● ● po Najpoważniejszą konsekwencją takiego ataku jest niestabilność sieci. Trzeba pamiętać, że wszyscy uczestnicy sieci wysyłają pakiety TCN do nadrzędnego urządzenia po wykryciu zmiany. Tylko wtedy nadrzędne urządzenie wysyła pakiet Confguration BPDU z bitem zmiany ustawionym na 1 (pole Flags), aby nakazać wszystkim uczestnikom przeliczenie tras. Jeśli atak się powiedzie, nowe, fałszywe urządzenie nadrzędne unieważnia pakiety TCN wysyłane przez switche, toteż żaden z nich nie przelicza swoich tras. W efekcie niszczona jest struktura sieci. 5. Ataki na VLANy 5.1 Double Tagging UWAGA: Ćwiczenie jest wykonywane w czwórkach, dlatego należy zaczekać na sąsiadów, jeżeli nie ukończyli jeszcze poprzednich ćwiczeń. (Student/ka przy stanowisku nieparzystym) ● w yersinii w głównym oknie, otwieramy zakładkę 802.1Q ● wchodzimy w “Edit mode” klikając odpowiednią ikonę w menu ● ustawiamy odpowiednie parametry ○ VLAN: 1 ○ VLAN2: 2 ○ Src IP: nasze IP ○ Dst IP: 255.255.255.255 ○ payload: naszę imię ● ● ● ● wychodzimy z “Edit mode” klikając ponownie na ikonę “notatnika” (UWAGA: pojawi się kilka komunikatów o brakujących parametrach, należy poprostu kilkać OK na kolejnych komunikatach) klikamy “Lauch attack” a następnie przechodzimy do zakładki 802.1Q, wybieramy opcję “sending 802.1Q packet” klikamy OK sprawdzamy czy nasz sąsiad/ka z drugiej grupy przy komputerze parzystym był/a w stanie coś zauważyć Nasz sąsiad/sąsiadka z drugiej grupy nie powinien nic zauważyć. Ten krok ma na celu uświadomienie jak działa atak typu double tagging. ● w yersinii uruchamiamy tym razem atak “sending 802.1Q double enc. packet” ● ● ponownie konsultujemy się z sąsiadem/sąsiadką przedstaw efekty prowadzącemu, jesteś w stanie wyjaśnić różnicę między pierwszym a drugim atakiem? Dlaczego osoba przy stanowisku parzystym w drugiej podgrupie otrzymała takie pakiety a nie inne? (pytanie na aktywność - WARTO prześledzić dokładnie nagłówki pakietów w Wiresharku) Aby wytłumaczyć zainstniałą sytuację posłużmy się obrazkiem: Atak może zostać przeprowadzony tylko z natywnego VLANu - najczęścieniej switcha domyślnie mają skonfigurowany VLAN 1 jako natywny. Czyli atak przeprowadzić mogą tylko komputery PC1 i PC3. Gdy komputer PC1 wyśle podwójnie otagowaną ramkę VLAN1|VLAN2|Payload wtedy switch do którego trafiła ramka zorientuje się, że on nie widzi odbiorcy - tag VLAN1 wskazuje ze ramkę powinien odebrać komputer należący do VLANu1. Switch nie jest połączony z żadnym komputerem z VLANu1 oprócz źródłowego więc wyśle ramkę na port 3 - łącze tranzytowe. VLANem natywnym w sieci jest VLAN1 i na łaczach trunkowych otagowanie natywnej sieci jest sciągne - robione jest to przez switch który wysyła ramkę. Ramkę, którą odbierze switch po drugiej stronie będzie ramka VLAN2|Payload (bez otagowania VLAN1). Switch drugi będzie sądził, że ramka ta pochodzi z VLANu 2 i przekarze ją użytkownikowi, który znajduje się w VLANie2, czyli PC4. Mamy tutaj doczynienia z atakiem, dzięki któremy ramka z jednego VLANu trafiła do innego VLANu, co w normalnej pracy sieci jest niemożliwe. Podobnie sytuacja będzie wyglądać jeżeli podwójnie otagowaną ramkę wyślemy z komputera z PC3. Taka ramka trafi do komputera PC2. ● A co z naszym sąsiadem/sąsiadką, czy byli oni w stanie zauważyć nasze pakiety, dlaczego? Nie ponieważ switch zanim wyśle ramkę łączem tranzytowym sprawdza czy odbiorca nie jest podłączony do switcha. Żaden komputer z VLANu1 oprócz komputera źródłowego nie jest podłączony, więc podejmie decyzję że ramka zostasnie przesłana na łącze tranzytowe. I tam dopiero sciągane jest otagowanie. Dopiero wtedy ramka bez tagu VLAN1 zostanie wysłana łączem tranzytowym. (Student/ka przy stanowisku parzystym) ● uruchamiamy Wireshark’a ● obserwujemy przychodzące pakiety 5.2 Atak przy użyciu ramki DTP Atak jest wykonywany na switchach Cisco, a więc należy najpierw przełączyć swoje kable do switcha Cisco, który stoi przy każdym stanowisku, należy zachować taką samą kolejność portów czyli komputer nieparzysty do portu pierwszego, parzysty do drugiego i łącze trunk w porcie trzecim (Student/ka przy stanowisku parzystym) ● w yersinii wybieramy “Launch attack” a następnie w zakładce DTP, wybieramy “sending DTP packet” i klikamy “OK” ● ● ● ● ● ● ● ● przechodzimy do zakładki 802.1Q w głównym oknie wchodzimy w “Edit mode” tak jak poprzednio ustawiamy VLAN (nie VLAN2!) na wartośc 1 (czyli docelowy VLAN) oraz resztę parametrów podobnie jak poprzednio, czyli ○ Src IP = nasze IP ○ Dst IP = 255.255.255.255 ○ payload = nasze imię wychodzimy z “Edit mode” (klikamy ikonę “notatnika”) następnie ponownie wybieramy “Launch attack”, zakładka 802.1Q oraz “sending 802.1Q packet” skonsultuj się z osobą obok w sprawie uzyskanych rezultatów a teraz przepnij swój kabel do innego dowolnego portu np. 16 wykonaj jeszcze raz wykonane powyżej czynności czyli wysłanie pakietu DTP oraz ramki 802.1Q (Student/ka przy stanowisku nieparzystym) ● uruchamiamy Wireshark’a i obserwujemy przychodzące pakiety Czy potraficie wyjaśnić uzyskany rezultat? Oczekiwana odpowiedź: Przed przepięciem portu ramka u sąsiada/sąsiadki nie pojawiła się, ponieważ port skonfigurowany był manualnie. Takiego portu nie da rady skonfigurować za pomocą protokołu DTP i przełączyć w tryb trunk. Jeżeli przepiliśmy kabel i wysłaliśmy ramkę DTP port dało radę przełączyć w tryb trunk i wysłać ramkę z jednego VLANu do drugiego VLANu. 6. Ataki na GVRP i RSTP Tutaj miałaby się znajdować treść ćwiczeń dotyczących ataków na te dwa protokoły, jednak nie udało nam się znaleźć odpowiednich materiałów, na podstawie których moglibyśmy dokładniej przygotować owe ćwiczenia (zwłaszcza RSTP), prawdopodobnie wymagałoby to kolejnych spędzonych godzin w laboratorium, jest to jedynie zarys: 6.1 Atak na GVRP z wykorzystaniem spreparowanej ramki PDU Protokół GVRP (Generic VLAN Registration Protocol) opiera się na formacie protokołu GARP (Generic Attribute Registration Protocol) i polega na wykorzystaniu tychże ramek (PDU Protocol Data Unit) w celu autokonfiguracji VLANów w Sieci. Osoba która jest wpięta do nieskonfigurowanego portu mogłaby sama sobie nadać VLAN przez co miałaby dostęp do pakietów, które nie powinny do niej trafić. ● należałoby skorzystać z narzędzia, które potrafiłoby wygenerować taki pakiet ● można wypróbować takie narzędzia jak scapy, packETH, nemsis ● przestudiowując ramkę, należałoby ustalić jakie pole należałoby zmodyfikować w celu wykonania ataku - ramka GVRP w tym przypadku składa się z Attribute Length (1 bajt) / Attribute Event (2 bajty) - to pole nas interesuje najbardziej, jest to typ wiadomości jaka jest rozsyłana po Sieci, nasz atak opierałby się na typie JoinIn (wartość 2) / Attribute Value - w naszym wypadku jest to VLAN ID, do którego chcemy dołączyć, załóżmy że to VLAN sąsiada ● na podstawie powyższych informacji, student preparuje ramkę, którą następnie wysyła na interfejs którym jest podłączony do switcha do nieskonfigurowanego portu ● następnie próbuje skomunikować się z sąsiadem - powinien mieć z nim łączność 6.2 Atak na RSTP - niestety brak 7. Koniec laboratarium - dziękujemy za obecność ;-)