Przechodzimy do pierwszego urządzenia.
Urządzenie od którego zaczynamy odkrywać konfigurację\topologię naszej sieci to router R_1 i na nim wydajemy polecenie show cdp neighbors, które ujawni sąsiadów routera R_1.
Jak widać sąsiadami routera R_1 jest:
-
-
- router R_2 - połączony poprzez interfejs Fastethernet 0/1 routera R_1 oraz interfejs Ethernet 0/1/0 routera R_2,
- switch S_1 – połączony poprzez interfejs Fastethernet 0/0 routera R_1 oraz interfejs Fastethernet 0/1 switcha S_1,
- switch Switch0 - połączony poprzez interfejs Ethernet 0/1/0 routera R_1 oraz interfejs Fastethernet 0/2 switcha Switch0.
-
Czyli jak na razie nasz topologia wygląda następująco:
Wydając polecenie show cdp neighbors detail, poznamy kolejne szczegóły konfiguracji, a mianowicie:
- adres IP interfejsu Ethernet 0/1/0 routera R_2 – 192.168.0.1,
- szczegóły platform sąsiadów routera R_1,
- format rozgłoszeń,
- rodzaj połączenia.
Adresy IP interfejsów routera R_1 oraz ich stan poznamy po wydaniu polecenia show ip interface brief.
Polecenie nie zdradzi nam użytych masek sieciowych więc by uzyskać tę informację możemy posłużyć się np. poleceniem – show ip interface <nazwa interfejsu> (choć są również inne polecenia).
Tak więc nasz topologia wzbogaci się o kolejne informacje.
Urządzenie |
Interfejs |
Adres IP |
Router R_1 |
Fa0/0 |
172.16.0.1/24 |
Router R_1 |
Eth0/1/0 |
10.10.10.1/24 |
Router R_1 |
Fa0/1 |
192.168.0.2/30 |
Router R_2 |
Eth0/1/0 |
192.168.0.1 |
Przechodzimy na switch S_1.
Analiza otrzymanych informacji nie wnosi nic do topologii, potwierdza tylko część informacji uzyskanych na routerze R_1.
Kolejnym badanym urządzeniem będzie switch Switch0.
Wydanie polecenia show cdp neighbors na Switch0 ujawnia istnienie kolejnego urządzenia a mianowicie routera R_3.
Router R_3 za pomocą interfejsu Fastethernet 0/1 jest podłączony do łącza Fastethernet 0/1 switcha Switch0. Adres IP interfejsu Fastethernet 0/1 routera R_3 to 10.10.10.2
Nasza topologia przyjmie postać:
Urządzenie |
Interfejs |
Adres IP |
Router R_1 |
Fa0/0 |
172.16.0.1/24 |
Router R_1 |
Eth0/1/0 |
10.10.10.1/24 |
Router R_1 |
Fa0/1 |
192.168.0.2/30 |
Router R_2 |
Eth0/1/0 |
192.168.0.1 |
Router R_3 |
Fa0/1 |
10.10.10.2 |
Zobaczmy co zdradzi nam router R_2.
Wydajemy polecenia protokołu CDP.
Protokół CDP odkrywa nam istnienie kolejnego urządzenia – switcha S_2 podłączonego z routerem R_2. Od strony routera R_2 jest to interfejs Fastethernet 0/0 natomiast od strony switcha S_2 jest to interfejs Fastethernet 0/1.
Dowiadujemy się również, że routery R_2 i R_3 są ze sobą połączone, poprzez interfejs Fastethernet 0/1 (router R_2) oraz interfejs Ethernet 0/1/0 (router R_3). Adres IP interfejsu Ethernet 0/1/0 routera R_3 to 192.168.1.2
Sprawdźmy jeszcze adresy IP interfejsów routera R_2.
Tak więc po analizie otrzymanych danych otrzymujemy:
Urządzenie |
Interfejs |
Adres IP |
Router R_1 |
Fa0/0 |
172.16.0.1/24 |
Router R_1 |
Eth0/1/0 |
10.10.10.1/24 |
Router R_1 |
Fa0/1 |
192.168.0.2/30 |
Router R_2 |
Fa0/1 |
192.168.1.1/30 |
Router R_2 |
Eth0/1/0 |
192.168.0.1/30 |
Router R_2 |
Fa0/0 |
10.0.0.1/24 |
Router R_3 |
Fa0/1 |
10.10.10.2 |
Router R_3 |
Eth0/1/0 |
192.168.1.2 |
Nie pozostało nam nic innego jak sprawdzić jakie tajemnice kryje router R_3.
Protokół CDP odkrył przed nami 2 nowe urządzenia a mianowicie switch S_3 i router R_4. Switch S_3 jest podłączony interfejsem Fastethernet 0/1 do interfejsu Fastethernet 0/0 routera R_3 natomiast router R_4 jest podłączony interfejsem Serial0/0/0 do interfejsu Serial 0/0/0 routera R_3.
By uzupełnić nasze adresy IP o maski sieci sprawdźmy interfejsy router R_3.
Tak więc nasza konfiguracja sieci przyjmie teraz postać:
Urządzenie |
Interfejs |
Adres IP |
Router R_1 |
Fa0/0 |
172.16.0.1/24 |
Router R_1 |
Eth0/1/0 |
10.10.10.1/24 |
Router R_1 |
Fa0/1 |
192.168.0.2/30 |
Router R_2 |
Fa0/1 |
192.168.1.1/30 |
Router R_2 |
Eth0/1/0 |
192.168.0.1/30 |
Router R_2 |
Fa0/0 |
10.0.0.1/24 |
Router R_3 |
Fa0/0 |
172.16.1.1/24 |
Router R_3 |
Fa0/1 |
10.10.10.2/24 |
Router R_3 |
Serial0/0/0 |
172.16.2.1/24 |
Router R_3 |
Eth0/1/0 |
192.168.1.2/30 |
Kolejnym urządzeniem, które będziemy badać będzie switch S_3.
Protokół CDP potwierdza tylko wcześniejsze ustalenia.
Przechodzimy do routera R_4.
Jak widać powyżej do całej topologii dochodzą dwa nowe switche S_4 i S_5, które są odpowiednio podpięte do interfejsu FastEthernet0/0 (switch S_4) oraz interfejsu FastEthernet0/1 (switch S_5) routera R_4.
Zdobądźmy jeszcze informację o adresach IP interfejsów oraz maskach.
Tak więc otrzymujemy:
Urządzenie |
Interfejs |
Adres IP |
Router R_1 |
Fa0/0 |
172.16.0.1/24 |
Router R_1 |
Eth0/1/0 |
10.10.10.1/24 |
Router R_1 |
Fa0/1 |
192.168.0.2/30 |
Router R_2 |
Fa0/1 |
192.168.1.1/30 |
Router R_2 |
Eth0/1/0 |
192.168.0.1/30 |
Router R_2 |
Fa0/0 |
10.0.0.1/24 |
Router R_3 |
Fa0/0 |
172.16.1.1/24 |
Router R_3 |
Fa0/1 |
10.10.10.2/24 |
Router R_3 |
Serial0/0/0 |
172.16.2.1/24 |
Router R_3 |
Eth0/1/0 |
192.168.1.2/30 |
Router R_4 |
Fa0/0 |
10.0.1.1/24 |
Router R_4 |
Fa0/1 |
10.0.2.1/24 |
Router R_4 |
Serial0/0/0 |
172.16.2.2/24 |
Idziemy dalej i sprawdźmy czy switch S_4 ma jeszcze innych sąsiadów niż router R_4.
Jak widać powyżej jedynym sąsiadem switcha S_4 jest router R_4.
Przechodzimy do switcha S_5.
Tutaj również okazuje się że switch S_5 nie ma więcej sąsiadów. Tak więc znamy całą topologię sieci. Oczywiście należy cały czas pamiętać, że protokół CDP działa tylko na urządzeniach Cisco a urządzenia innych producentów nie będą „widziane” przez ten protokół.
Znamy urządzenia, użyte adresy IP, maski i interfejsy - jak sam widzisz czytelniku można poznać te wszystkie informacje nie ruszając się z miejsca (choć ruch w pracy informatyka jak najbardziej jest zalecany). Dzięki protokołowi CDP logując się na każde z urządzeń (nieważnie czy lokalnie czy zdalnie) możemy wykonać mapę naszej sieci i niewątpliwie jest to wielką zaletą tego rozwiązania. Choć obok zalet są również wady. Postawmy o to takie pytanie - Czy użycie protokołu CDP może narazić nas na niebezpieczeństwo? Na tak zadane pytanie trzeba odpowiedzieć niestety twierdząco. Pomimo wszystkich swoich korzyści (co zostało pokazane powyżej) nie zalecane jest by protokół ten był włączony. Dzieje się tak, ponieważ protokół CDP jest protokołem warstwy drugiej modelu ISO/OSI i protokół ten (zresztą jak parę innych protokołów łącza danych – STP, VTP, DTP) nie zapewnia żadnego uwierzytelnienia i bezpieczeństwa przetwarzanych danych. Tak naprawdę każdy host w sieci może wysłać ramki CDP a analiza przechwyconych ramek daje atakującemu obraz naszej sieci (topologia, adresacja). By zobrazować, że jest to możliwe wykonajmy proste doświadczenie (poniższy przykład nie jest związany z ćwiczeniem wykonanym powyżej).
Na routerze R3 uruchamiamy debugowanie pakietów CDP. Jak widać wysyłane są pakiety poprzez interfejs Ethernet0/0.
Router R3 nie wykrywa żadnych sąsiadów.
Przechwycona ramka dostarcza nam następujących informacji:
- protokół CDP korzysta z adresu multicast 01-00-0c-cc-cc-cc,
- nazwę urządzenia,
- wersja oprogramowania IOS,
- platforma urządzenia,
- adres IP interfejsu,
- interfejs.
Czyli jak widać atakujący na wstępie zdobywa wiele użytecznych informacji o naszej sieci.
Zasymulujemy atak typu flooding (ang. flood - potop, powódź) czyli wyślemy wielokrotnie spreparowane ramki CDP. Intensywność wysyłania ramek jest tak duża, że powoduje niestabilność działania urządzenia a w pewnych wypadkach (wersja IOS) do odzyskania sprawności działania switcha bądź routera może być wymagane zrestartowanie urządzenia.
Do wywołania ataku użyjemy narzędzia Yersinia, dostępnego w systemie Linux. Program możemy obsługiwać w trybie graficznym jak i z linii poleceń (notabene uruchomienie programu z CLI włącza pseudo tryb graficzny). Jak widać poniżej oprócz możliwości ataku program również działa jako sniffer (w tym przypadku program rejestruje pakiety CDP).
Aby uruchomić atak wybieramy Launch attack, przechodzimy do zakładki CDP i wybieramy flooding CDP table.
Po kliknięci na OK zostanie uruchomiony atak, który zaleje urządzenie setkami/tysiącami pakietów (wszystko zależy od długości trwania ataku) CDP symulującymi nowe urządzenia.
Włączony proces debugowania również uwidacznia atak.
Włączony Wireshark (sniffer plików) potwierdza tylko fakt przeprowadzenia ataku.
Wydanie na urządzeniu polecenia show cdp neighbors ukarze nam listę wszystkich fikcyjnych urządzeń.
Więcej szczegółów o fikcyjnych urządzeniach dowiemy się jeśli wydamy polecenie show cdp neighbors detail.
Innym narzędziem, które możemy użyć do wysłania fałszywych ramek CDP jest oprogramowanie IRPAS czyli Internetwork Routing Protocol Attack Suite. Oprogramowanie podobnie zresztą jak Yersinia może przeprowadzać wiele ataków z wykorzystaniem różnych protokołów.
Wysłanie spreparowanych ramek CDP sprowadza się do wydania jednego polecenia np.
cdp –i eth1 –n 100 (choć możliwości jest znacznie więcej). Wywołanie komendy spowoduje wysłanie 100 fałszywych ramek CDP poprzez interfejs eth1.
Jak widać poniżej proces debugowania uwidacznia fakt odebrania przez urządzenie ramek CDP.
Tak samo informacja o wszystkich fałszywych urządzeniach będzie dostępna po wydaniu polecenia show cdp neighbors czy show cdp neighbors detail
Fałszywe ramki również możemy podejrzeć w sniferze plików.
Jak widać spowodowanie zamieszania w sieci z wykorzystaniem protokołu CDP wcale nie jest trudne, atak tego typu na pewno będzie miał negatywny wpływ na działanie naszej sieci.
A więc automatycznie nasuwa się pytanie - Jak się ustrzec przed tego typu atakiem? Odpowiedź jest prosta - wyłączyć protokół CDP.
Wyłączenie protokołu CDP możemy wykonać odgórnie za pomocą polecenia no cdp run, które wydajemy w trybie konfiguracji globalnej. Polecenie całkowicie wyłącza użycie protokołu CDP na danym urządzeniu.
Drugim sposobem wyłączenia użycia CDP jest wyłączenie protokołu na danym interfejsie:
-
-
- no cdp enable - wyłącza CDP na konkretnym interfejsie
- cdp enable - włącza CDP na konkretnym interfejsie
-
Polecenia clear (tryb uprzywilejowany):
-
-
- clear cdp counters - zeruje liczniki pakietów CDP
- clear cdp table - usuwa informacje o sąsiadach CDP
-
Możemy również modyfikować czas wysyłania ramek CDP (domyślnie 60 sekund) jak i czas po jakim dane urządzenie zostaje usunięte z tablicy sąsiadów CDP (domyślnie 180 sekund). Polecenia wydajemy w trybie konfiguracji globalnej.
-
-
- cdp timer <czas sekundy> - czas wysyłania
- cdp holdtime <czas sekundy> - licznik usunięcia
-
Domyślnie na urządzeniach Cisco we wszystkich systemach IOS od wersji 12.0(3)T (włącznie) protokół CDP jest uruchamiany w wersji 2. Jeśli istnieje potrzeba uruchomienia wersji pierwszej tego protokołu należy wydać polecenie - no cdp advertise-v2
Do rozwiązywania problemów z protokołem CDP, możemy użyć poleń show:
show cdp interface - ustawienia interfejsu, na rysunku poniżej brak jest interfejsu Ethernet0/1 ponieważ na interfejsie tym został wyłączony protokół CDP.
show cdp traffic –polecenie pokazuje informacje o ramkach CDP
show cdp - ogólne informacje
show cdp entry <nazwa sąsiada> - szczegółowe informacje o sąsiedzie CDP
Informacje o protokole CDP możemy również zdobywać w procesie debugowania.
debug cdp adjacency - wyświetla informacje CDP o urządzeniach sąsiednich
debug cdp events - wyświetla zdarzenia CDP
debug cdp ip - wyświetla informacje CDP IP
debug cdp packets - wyświetla informacje o pakietach CDP
Bibliografia:
http://www.cisco.com/en/US/docs/ios/12_2/configfun/command/reference/frf015.html
http://www.phenoelit.org/irpas/
http://www.cisco.com/en/US/docs/ios-xml/ios/cdp/command/cdp-cr-a1.html