SIECI KOMPUTEROWE LABORATORIUM ĆWICZENIE 5 Analiza ruchu sieciowego z wykorzystaniem programu WIRESHARK Cz. I podstawy Opracował: dr inż. Piotr Czyżewski Warszawa 2009
WSTĘP Wireshark jest darmowym analizatorem pakietów (packet snifferem). Do przechwytywania pakietów wykorzystuje bibliotekę PCap. Początkowo (do roku 2006) był znany pod nazwą Ethereal. W chwili obecnej można go pobrać ze strony www.wireshark.org. W sieci dostępna jest cały szereg opisów prezentujących możliwości programu łącznie z przewodnikami wideo umieszczonymi w serwisie youtube. Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami pakietu. Po zakończeniu ćwiczenia student powinien umieć: uruchomić przechwytywanie ruchu dla wybranego interfejsu sieciowego, stworzyć prosty filtr przechwytywania, stworzyć prosty filtr wyświetlania.
Uruchomienie programu Po uruchomieniu programu wireshark (ikona znajduje się na pulpicie) widoczne jest okno początkowe programu. Wybierają z menu opcję capture możemy rozpocząć przechwytywanie pakietów. W tym celu z okna przedstawiającego listę interfejsów sieciowych wybieramy odpowiedni i klikamy przycisk start. W oknie Wireshark: Capture Interfaces przy każdej dostępnej karcie sieciowej dostępne są trzy przyciski: Start, Options, Details.
Przycisk Start powoduje uruchomienie przechwytywanie pakietów. Przycisk Details powoduje wyświetlenie szczegółów odnośnie wybranej karty sieciowej. Przycisk Options pozwala na zdefiniowanie różnych opcji dotyczących sposobu przechwytywania pakietów. Domyślnie w opcjach zaznaczone są pola Display Options i Name Resolution. Dodatkowo zaznaczona jest opcja Capture packet in promiscuous mode (jeżeli jest inaczej należy ją zaznaczyć). Opcja ta pozwala na przechwytywanie jedynie pakietów adresowanych do danej kart sieciowej a nie wszystkich trafiających do komputera. Najważniejszym polem jest pole Capture Filter. W polu tym można wpisywać reguły które powodują przechwytywanie tylko wybranych pakietów. Klikając przycisk Capture Filter mamy do dyspozycji listę predefiniowanych filtrów przechwytywania pakietów. Przykładowe okno przedstawia rysunek poniżej. W oknie tym możemy także definiować nowe filtry które będą trwale zapisane w opcjach programu. Można także modyfikować istniejące filtry. Zasady tworzenia własnych filtrów przechwytywania. Filtr przechwytywania musi być zdefiniowany i wybrany przed rozpoczęciem przechwytywania pakietów. Inaczej jest w przypadku filtrów wyświetlania które mogą być definiowane i wybierane w trakcie przechwytywania pakietów. Generalnie zasady tworzenia filtrów są takie same jak w przypadku pakietu TCPDump (opis na stronie http://www.ethereal.com/docs/man-pages/tcpdump.8.html ).
Ogólna zasada definiowania filtra przechwytywania: Składnia: Protocol Direction Host(s) Value Logical Operations Other expression Przykład: tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128 Protocol(Protokół): Wartości: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. Jeśli nic nie zostanie zdefiniowane, użyte zostaną wszystkie występujące. Definicja protokołu dla którego mają zostać przechwycone pakiety. Direction (Kierunek): Wartości: src, dst, src and dst, src or dst Jeśli nie zdefiniowane jest źródło lub przeznaczenie, zostanie zastosowane "src or dst". Np.: "host 10.2.2.2" jest tożsame z "src or dst host 10.2.2.2". Określenie które pakiety mają zostac przechwycone: src pochodzące ze źródla IP. Dst pakiety kierowane do celu IP Host(s) (Maszyna główna): Numer IP komutera (interfejsu sieciowego) lub innego urządzenia dla którego mają być przechwytywane pakiety Logical Operations (Operacje logiczne): Wartości: not, and, or. Negacja [Logiczne "nie"] ("not") ma najwyższą wartość. Następstwo [Logiczne "lub"] ("or") oraz powiązanie [logiczne "i"] ("and") są równe sobie i łączą się z lewej do prawej. Np.: "not tcp port 3128 and tcp port 23" jest
tożsame z "(not tcp port 3128) and tcp port 23". "not tcp port 3128 and tcp port 23" jest różne od "not (tcp port 3128 and tcp port 23)". Przykłady: tcp dst port 3128 Wyświetla pakiety przesyłane do portu TCP 3128. ip src host 10.1.1.1 Wyświetla pakiety z źródłowego adresu IP 10.1.1.1. host 10.1.2.3 wyświetla pakiety z źródłowego lub docelowego adresu IP 10.1.2.3. src portrange 2000-2500 Wyświetla pakiety z źródłowych portów UDP lub TCP o zakresie 2000-2500. not imcp Wyświetla wszystko za wyjątkiem pakietów icmp (icmp jest typowo używany przez polecenie 'ping') src host 10.7.2.12 and not dst net 10.200.0.0/16 Wyświetla pakiety ze źródłowego adresu IP 10.7.2.12, które nie są przeznaczone dla sieci IP 10.200.0.0/16. (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 Wyświetla adresu ze źródłowego adresu IP 10.4.1.12 lub sieci 10.6.0.0/16, koncentrując się na pakietach przeznaczonych dla portów TCP 200 do 10000 i docelowej sieci IP 10.0.0.0/8. Uwagi: Znak "\" jest używany jeśli słowo kluczowe użyte jest jako wartość. "ether proto \ip" (jest tożsame z "ip"). To będzie celem protokołów IP. "ip proto \icmp" (jest tożsame z "icmp"). To będzie celem dla pakietów icmp używanych przez ping. Wartość "multicast" i "broadcast" mogą być używane po "ip" lub "ether". "no broadcast" jest przydatne wówczas gdy chcemy wykluczyć zapytania broadcastowe. Więcej informacji i przykładów można znaleźć na stronie: http://wiki.wireshark.org/capturefilters
Zasady tworzenia filtrów wyświetlania Filtry wyświetlania służą do wyszukiwania danych wewnątrz zrzuconych z pomocą filtrów przechwytywania pakietów. Możliwości tych filtrów są znacznie rozszerzone niż wcześniejszych. Definiując je nie musimy uruchamiać ponownie przechwytywania. Filtry wyświetlania wpisujemy na pasku Filter: w menu głównym programu. Klikając przycisk Filter mamy dostęp do filtrów predefiniowanych filtrów. Dodatkowo klikając przycisk Expression mamy dostęp do całego mnóstwa predefiniowanych wyrażeń definiujących bardziej złożone filtry wyświetlania. Szczegółowy opis predefiniowanych wyrażeń dostępny jest na stronie: http://www.wireshark.org/docs/dfref/. Składania filtra Składnia: Protocol. String. String Comparison Logical Other Value 1 2 operator Operations expression Przykład: ftp passive ip = = 10.2.3.4 xor icmp.type Protocol (Protokół): Dostępna jest duża liczba protokołów zlokalizowana jest pomiędzy warstwami 2 i 7 modelu OSI. Widoczne są one jeśli wybierzemy przycisk "Expression..." w oknie głównym. Przykładami są: IP,TCP,DNS,SSH String1, String2 (Ustawienia opcjonalne): Kategorie podprotokołów wewnątrz protokołu. Comparison operators (Porównanie operatorów): : Dostępne jest porównanie sześciu: Format angielski: Format w stylu C: Znaczenie: eq == Jest równe (equal) ne!= Nie jest równe (Not Equal) gt > Większe od (Greater than) lt < Mniejsze od (Less than) ge >= Większe lib równe (Greater or equal) le <= Mniejsze lub równe (Less or equal) Logical expressions (Wyrażenia logiczne): Format angielski: Format w stylu C: Znaczenie: and && Logical AND (Logiczne "I") or Logical OR (Logiczne "LUB") xor ^^ Logical XOR (Logiczne "XOR") not! Logical NOT (Logiczne zaprzeczenie)
Logiczne "XOR", dobrze znane programistom. Użyte pomiędzy dwoma warunkami filtra daje wynik tylko wtedy gdy jeden z dwóch warunków jest spełniony ale nie dwa jak wyrażenie "LUB". Przykład zastosowania filtra wyświetlania: "tcp.dstport 80 xor tcp.dstport 1025" Tylko pakiety TCP docelowe na port 80 lub TCP źródłowy port 1025 (ale nie obydwa!) będą wyświetlane na ekranie jako wynik. Przykłady: snmp dns icmp Wyświetla ruch SNMP lub DNS lub ICMP. ip.addr == 10.1.1.1 Wyświetla pakiety pasujące do adresu źródłowego lub docelowego równego 10.1.1.1. ip.src!= 10.1.2.3 or ip.dst!= 10.4.5.6 Wyświetla pakiety o adresie źródłowym IP różnym od 10.1.2.3 lub adresie docelowym IP różnym od 10.4.5.6. Innymi słowy - wyświetlone pakiety posiadają: Adres źródłowy: wszystko ale 10.1.2.3, docelowy adres: wszystko i Adres źródłowy: wszystko, adres docelowy: wszystko ale 10.4.5.6 ip.src!= 10.1.2.3 and ip.dst!= 10.4.5.6 Wyświetla pakiety z adresem żródłowym różnym od 10.1.2.3 i w tym samym czasie z adresem docelowym różnym od 10.4.5.6 Innymi słowy - wyświetlone pakiety posiadają: Adres źródłowy: wszystko ale 10.1.2.3 i adres docelowy: wszystko ale 10.4.5.6 tcp.port == 25 Wyświetla pakiety docierające lub wychodzące z portu 25. tcp.dstport == 25 Wyświetla pakiety TCP z portem docelowym 25. tcp.flags Wyświetla pakiety zawierające flagę TCP. tcp.flags.syn == 0x02 Wyświetla pakiety z flagą TCP SYN. Jeśli skladni filtra jest poprawna, będzie ona podświetlona na zielono, w przeciwnym razie, jeśli będzie błędna, będzie podświetlona na czerwono. Prawidłowa składnia Błędna składnia Więcej informacji można znaleźć na stronie: http://wiki.wireshark.org/displayfilters.