Okna.  Wirusy.  Notatniki.  Internet.  biuro.  Narzędzia.  Kierowcy


Autor: Riccardo Capecchi
Data publikacji: 22 marca 2011 r
Tłumaczenie: A.Panin
Data publikacji tłumaczenia: 29 listopada 2012 r

W tym artykule przyjrzymy się procesowi stosowania filtrów BPF w Wireshark w celu pokazania szczegółów funkcjonowania sesji HTTP, sesji e-mail, a także przyjrzymy się procesowi monitorowania odwiedzających wybraną witrynę z lokalna sieć. Na zakończenie przedstawię listę szczególnie przydatnych wyrażeń filtrujących do użycia w programie Wireshark.

Oprócz przykładu FTP opisanego w poprzedniej części artykułu, istnieje jeszcze jeden klasyczny przykład wykorzystania Wireshark – eksploracja sesji HTTP. Tak jak poprzednio uruchom Wireshark i zacznij przechwytywać ruch z interfejsu skierowany do sieci zewnętrznej. Obecnie większość ruchu HTTP jest kompresowana w celu zwiększenia szybkości wymiany informacji, więc domyślnie Wireshark dekompresuje ładunek pakietów HTTP. Możesz wybrać pozycje menu „Edycja->Preferencje->Protokoły->HTTP” i upewnić się, że wybrana jest opcja „Rozpakuj ciała encji”.

Podczas przechwytywania pakietów ustaw filtr tak, aby wyświetlał tylko ruch HTTP, wprowadzając http jako wyrażenie filtra. Każda strona internetowa odwiedzana przez dowolnego użytkownika w Twojej sieci będzie generować taki ruch, jakiego oczekujesz duża liczba Informacja. Być może jesteś zainteresowany określonym rodzajem informacji lub określonym użytkownikiem. Aby to zrobić, w głównym oknie, w którym prezentowane są wszystkie odebrane pakiety, wybierz żądanie http i użyj prawy przycisk myszy, wybierz pozycję menu „Podążaj za strumieniem TCP”. Wireshark otworzy nowe okno zawierające kompletną rekonstrukcję sesji HTTP w porządku chronologicznym.

Możesz także rozdzielić żądania do konkretnej witryny, np. Facebooka - aby zobaczyć, z jakich adresów IP pochodzą żądania, w polu filtru powinno być wyrażenie: http.request.uri zawiera facebook .

Załóżmy teraz, że chcesz zobaczyć cały ruch przychodzący i wychodzący dla jednego określonego komputera. Będziesz potrzebować filtra adresów MAC, aby upewnić się, że sondowany jest właściwy klient. Aby uzyskać adres MAC systemu docelowego po drugiej stronie połączenia, należy wysłać polecenie ping do nazwy hosta lub adresu URL w celu uzyskania adresu IP systemu. Następnie używane jest polecenie arp: ping target.com arp -a

Na liście wyświetlanej przez polecenie arp musisz znaleźć adres IP uzyskany w wyniku polecenia ping. Po uzyskaniu adresu MAC powiedz „AA:BB:CC:DD:EE:FF”, wprowadź wyrażenie w polu filtru: eth.addr == AA:BB:CC:DD:EE: FF

Jak alternatywny, możesz filtrować według adresu IP, ale w sieciach, które używają DHCP do przydzielania adresów IP, adres IP systemu docelowego może się zmienić w dowolnym momencie: ip.addr == 192.168.0.1

Kliknij „Zastosuj”, a zobaczysz tylko ruch przychodzący i wychodzący dla wybranego adresu IP lub MAC. Jeśli używany jest parametr „ ip ”, wyświetlany jest cały ruch związany z protokołem internetowym (Internet Protocol), co jest odpowiednie w 99% przypadków badań sieci.

Zamiast parametru filtru „ip.addr” można użyć parametru „host” w następujący sposób: host 192.168.0.1

Po ustawieniu takiego filtra Wireshark przechwytuje cały ruch do iz hosta pod adresem 192.168.0.1, niezależnie od typu.

Załóżmy teraz, że chcesz przechwycić cały ruch dla hosta generowany przez aplikacje używające określonych protokołów, takich jak pop3, ftp, http lub messenger. Wprowadź wyrażenie w polu filtru: ip.addr == 192.168.0.1 i (http lub ftp lub messenger lub pop)

To wyrażenie nakazuje wyświetlać tylko ruch pochodzący z lub kierowany do hosta o adresie IP 192.168.0.1 i wyświetlać tylko pakiety związane z protokołami ftp , pop lub messenger.

Możesz przechwycić cały taki ruch w sieci o zadanym adresie lub z grupy klientów: ip.addr == 192.168.0 oraz (http lub ftp lub messenger lub pop)

Najczęściej używane filtry dla Wireshark

Wśród filtrów, które rozważaliśmy, jest kilka najczęstszych. Jeśli chcesz zobaczyć listę wszystkich możliwych filtrów, zapoznaj się z oficjalnymi stronami podręcznika Wireshark na temat filtrów przechwytywania i wyświetlania.

  • ip.addr == 192.168.0.1 — Wyświetl ruch w stosunku do hosta 192.168.0.1 w obu kierunkach.
  • tcp.port == 80 — Wyświetl cały ruch z portem źródłowym lub docelowym 80.
  • ip.src == 192.168.0.1 i ip.dst == 10.100.1.1 — Wyświetla cały ruch generowany przez hosta 192.168.0.1 i kierowany do hosta 10.100.1.1
  • ftp — Wyświetl ruch związany z protokołem FTP
  • http — Wyświetl ruch związany z protokołem HTTP
  • dns — Wyświetl ruch związany z protokołem DNS
  • http.request.uri zawiera ciąg — wyświetla ruch HTTP, gdy adres URL zawiera ciąg „string”.

Technologia BPF sprawia, że ​​Wireshark jest potężnym i elastycznym narzędziem, ale w tym artykule wymieniono tylko niewielką część tego, co można z nim zrobić. Zajęłoby jeden lub więcej artykułów, aby opisać takie rzeczy, jak użycie Wireshark do testowania ataków typu „odmowa usługi” w sieci lub analiza jakości połączeń dla systemu VOIP opartego na protokole SIP.

Wireshark to potężny analizator sieci, którego można użyć do analizy ruchu przechodzącego przez interfejs sieciowy komputera. Może to być przydatne do wykrywania i rozwiązywania problemów z siecią, debugowania aplikacji internetowych, programów sieciowych lub witryn. Wireshark pozwala w pełni zobaczyć zawartość pakietu na wszystkich poziomach, dzięki czemu można lepiej zrozumieć, jak działa sieć na niskim poziomie.

Wszystkie pakiety są przechwytywane w czasie rzeczywistym i dostarczane w łatwym do odczytania formacie. Program obsługuje bardzo wydajny system filtrowania, podświetlanie kolorów i inne funkcje, które pomogą Ci znaleźć potrzebne pakiety. W tym samouczku przyjrzymy się, jak używać Wireshark do analizy ruchu. W ostatnim czasie twórcy przenieśli się do pracy nad drugą gałęzią programy Wiresharka 2.0 zawierała wiele zmian i ulepszeń, zwłaszcza w interfejsie. Właśnie tego będziemy używać w tym artykule.

Kluczowe cechy Wireshark

Przed przystąpieniem do rozważania metod analizy ruchu należy bardziej szczegółowo rozważyć, jakie funkcje program obsługuje, z jakimi protokołami może współpracować i co robić. Oto główne cechy programu:

  • Przechwytywanie pakietów w czasie rzeczywistym z przewodowych lub innych interfejsów sieciowych, a także odczytywanie z pliku;
  • Obsługiwane są następujące interfejsy przechwytywania: Ethernet, IEEE 802.11, PPP i lokalne interfejsy wirtualne;
  • Pakiety można filtrować według różnych parametrów za pomocą filtrów;
  • Wszystkie znane protokoły są podświetlone na liście różnymi kolorami, na przykład TCP, HTTP, FTP, DNS, ICMP itd.;
  • Wsparcie dla przechwytywania ruchu połączeń VoIP;
  • Odszyfrowywanie ruchu HTTPS jest obsługiwane za pomocą certyfikatu;
  • Deszyfrowanie ruchu WEP, WPA sieci bezprzewodowe w obecności klucza i uścisku dłoni;
  • Wyświetlanie statystyk obciążenia sieci;
  • Zobacz zawartość pakietów dla wszystkich warstw sieci;
  • Wyświetla czas wysyłania i odbierania paczek.

Program ma wiele innych funkcji, ale to były główne, które mogą Cię zainteresować.

Jak korzystać z Wiresharka

Zakładam, że masz już zainstalowany program, ale jeśli nie, możesz go zainstalować z oficjalnych repozytoriów. Aby to zrobić, wpisz polecenie w Ubuntu:

$ sudo apt zainstaluj wireshark

Po instalacji program można znaleźć w menu głównym dystrybucji. Musisz uruchomić Wireshark z uprawnieniami superużytkownika, ponieważ inaczej program nie będzie w stanie analizować pakietów sieciowych. Można to zrobić z menu głównego lub za pomocą terminala za pomocą polecenia dla KDE:

$ kdesu wireshark

A dla Gnome/Unity:

$ gksu wireshark

Główne okno programu podzielone jest na trzy części, pierwsza kolumna zawiera listę interfejsów sieciowych dostępnych do analizy, druga - opcje otwierania plików, a trzecia - pomoc.

Analiza ruchu sieciowego

Aby rozpocząć analizę, wybierz interfejs sieciowy, na przykład eth0 i kliknij przycisk początek.

Następnie otworzy się następne okno, już ze strumieniem pakietów przechodzących przez interfejs. Okno to również podzielone jest na kilka części:

  • Górna część- są to menu i panele z różnymi przyciskami;
  • Lista pakietów- dalej wyświetlany jest strumień pakietów sieciowych, które będziesz analizować;
  • Zawartość paczki- tuż pod spodem znajduje się zawartość wybranej paczki, podzielona na kategorie w zależności od poziomu transportu;
  • Prawdziwa wydajność- na samym dole zawartość paczki wyświetlana jest w postaci rzeczywistej, jak również w formie HEX.

Możesz kliknąć dowolny pakiet, aby przeanalizować jego zawartość:

Tutaj widzimy pakiet żądania DNS, aby uzyskać adres IP witryny, w samym żądaniu wysyłana jest domena, aw pakiecie odpowiedzi otrzymujemy nasze pytanie, a także odpowiedź.

Po więcej wygodne oglądanie Możesz otworzyć paczkę w nowym oknie, klikając dwukrotnie na wpis:

Filtry Wiresharka

Ręczne sortowanie pakietów w celu znalezienia właściwych jest bardzo niewygodne, zwłaszcza przy aktywnym strumieniu. Dlatego do takiego zadania lepiej jest użyć filtrów. Pod menu znajduje się specjalna linia do wprowadzania filtrów. Możesz nacisnąć Expression, aby otworzyć konstruktora filtrów, ale jest ich wiele, więc omówimy najbardziej podstawowe:

  • ip.dst- docelowy adres IP;
  • ip.src- adres ip nadawcy;
  • adres IP- ip nadawcy lub odbiorcy;
  • ip.proto- protokół;
  • tcp.dstport- Port przeznaczenia;
  • tcp.srcport- port nadawcy;
  • ip.ttl- filtruj według ttl, określa odległość sieci;
  • http.request_uri- żądany adres strony.

Do określenia relacji między polem a wartością w filtrze można użyć następujących operatorów:

  • == - równa się;
  • != - nie równe;
  • < - mniej;
  • > - więcej;
  • <= - mniejszy lub równy;
  • >= - więcej lub równo;
  • mecze- Wyrażenie regularne;
  • zawiera- zawiera.

Aby połączyć wiele wyrażeń, możesz użyć:

  • && - oba wyrażenia muszą być prawdziwe dla pakietu;
  • || - jedno z wyrażeń może być prawdziwe.

Przyjrzyjmy się teraz bliżej przykładom kilku filtrów i spróbujmy rozważyć wszystkie oznaki relacji.

Najpierw przefiltrujmy wszystkie pakiety wysyłane na adres 194.67.215.125 (losst.ru). Wpisz ciąg znaków w polu filtru i kliknij stosować. Dla wygody filtry wireshark można zapisać za pomocą przycisku Ratować:

ip.dst == 194.67.215.125

Aby odbierać nie tylko wysłane pakiety, ale także otrzymane w odpowiedzi z tego węzła, można połączyć dwa warunki:

ip.dst == 194.67.215.125 || ip.src == 194.67.215.125

Możemy również wybrać przesyłane duże pliki:

http.długość_treści > 5000

Filtrując Content-Type, możemy wybrać wszystkie przesłane obrazy, przeanalizować ruch Wireshark, pakiety zawierające obraz słowny:

http.content_type zawiera obraz

Aby wyczyścić filtr, możesz kliknąć przycisk Jasne. Zdarza się, że nie zawsze znasz wszystkie informacje niezbędne do filtrowania, ale po prostu chcesz przestudiować sieć. Możesz dodać dowolne pole pakietu jako kolumnę i przeglądać jego zawartość w oknie ogólnym dla każdego pakietu.

Na przykład chcę wyświetlić ttl (czas życia) pakietu jako kolumnę. Aby to zrobić, otwórz informacje o paczce, znajdź to pole w sekcji IP. Wtedy zadzwoń menu kontekstowe i wybierz opcję Zastosuj jako kolumnę:

Możesz także utworzyć filtr na podstawie dowolnego pożądanego pola. Wybierz wymagane pole i wywołaj menu kontekstowe, a następnie kliknij Zastosuj jako filtr Lub Przygotuj jako filtr, następnie wybierz Wybrany wyświetlić tylko wybrane wartości lub Nie zaznaczone aby je usunąć:

Określone pole i jego wartość zostaną zastosowane lub w drugim przypadku podstawione w polu filtru:

W ten sposób możesz dodać do filtra pole dowolnego pakietu lub kolumny. Ta opcja jest również dostępna w menu kontekstowym. Do filtrowania protokołów możesz użyć więcej proste warunki. Na przykład przeanalizujmy ruch Wireshark dla protokołów HTTP i DNS:

Kolejną interesującą funkcją programu jest wykorzystanie Wireshark do śledzenia określonej sesji między komputerem użytkownika a serwerem. Aby to zrobić, otwórz menu kontekstowe pakietu i wybierz Śledź strumień TCP.

Następnie otworzy się okno, w którym znajdziesz wszystkie dane przesyłane między serwerem a klientem:

Diagnozowanie problemów z Wireshark

Być może zastanawiasz się, jak używać Wireshark 2 do wykrywania problemów z siecią. Aby to zrobić, w lewym dolnym rogu okna znajduje się okrągły przycisk, po kliknięciu otwiera się okno Narzędzia eksperta. W nim Wireshark zbiera wszystkie komunikaty o błędach i awariach sieci:

Okno podzielone jest na zakładki takie jak Błędy, Ostrzeżenia, Powiadomienia, Czaty. Program może filtrować i znajdować wiele problemów z siecią, a tutaj możesz je bardzo szybko zobaczyć. Obsługiwane są również filtry Wireshark.

Analiza ruchu Wiresharka

Możesz bardzo łatwo zrozumieć, co dokładnie użytkownicy pobrali i jakie pliki oglądali, jeśli połączenie nie było szyfrowane. Program bardzo dobrze radzi sobie z wyodrębnianiem treści.

Aby to zrobić, musisz najpierw zatrzymać przechwytywanie ruchu za pomocą czerwonego kwadratu na panelu. Następnie otwórz menu plik -> Eksportuj obiekty -> HTTP:

Jest to bardzo potężne narzędzie, które ma wiele funkcji. Nie da się zmieścić całej jego funkcjonalności w jednym artykule, ale podane tu podstawowe informacje wystarczą, abyś sam nauczył się wszystkiego, czego potrzebujesz.

Aby zbadać zachowanie aplikacji i węzłów sieciowych, a także zidentyfikować problemy w sieci, często stosuje się analizatory pakietów sieciowych. Kluczowe cechy takie oprogramowanie to po pierwsze możliwości wszechstronnej analityki, a po drugie wielofunkcyjne filtrowanie pakietów, które pozwala wyłowić interesujące nas informacje z nieograniczonego strumienia ruchu sieciowego. Temu ostatniemu aspektowi poświęcony jest niniejszy artykuł.

Wstęp

Ze wszystkich metod uczenia się sieć komputerowa analiza ruchu jest chyba najbardziej żmudna i czasochłonna. Intensywne przepływy nowoczesnych sieci generują dużo „surowca”, w którym można znaleźć ziarna. przydatna informacja dalekie od prostoty. Podczas swojego istnienia stos TCP / IP zyskał wiele aplikacji i dodatków, których liczba idzie w setki i tysiące. Są to protokoły aplikacji i usług, protokoły uwierzytelniania, tunelowania, dostępu do sieci i tak dalej. Oprócz znajomości podstaw interakcji sieciowych, badacz ruchu (czyli ty) musi umieć swobodnie poruszać się w całej tej różnorodności protokołów i umieć pracować z określonymi narzędziami programowymi - snifferami lub, naukowo, analizatorami ruchu ( protokoły).

Funkcjonalność sniffera to nie tylko możliwość korzystania z trybu pracy „promiscuos”. karta sieciowa za przechwycenie. Takie oprogramowanie powinno być w stanie skutecznie filtrować ruch zarówno na etapie zbierania, jak i podczas badania poszczególnych jednostek transmisji (ramek, pakietów, segmentów, datagramów, komunikatów). Co więcej, im więcej protokołów „zna” sniffer, tym lepiej.

Nowoczesne analizatory protokołów potrafią wiele rzeczy: obliczać statystyki ruchu, rysować wykresy interakcji sieciowych, wyodrębniać dane protokołów aplikacji, eksportować wyniki pracy do różnych formatów… Dlatego dobór narzędzi do analizy ruchu sieciowego to temat na osobny temat dyskusja. Jeśli nie wiesz, co wybrać, lub nie chcesz wydawać pieniędzy na płatne oprogramowanie, skorzystaj prosta rada: Zainstaluj Wiresharka.

Zapoznanie się z filtrami

Wireshark obsługuje dwa rodzaje filtrów:

  • przechwytywanie ruchu (filtry przechwytywania);
  • wyświetlić filtry.

Pierwszy podsystem został odziedziczony przez Wireshark z biblioteki Pcap, która zapewnia niskopoziomowe API do pracy z interfejsami sieciowymi. Próbkowanie ruchu w locie podczas zapisów przechwytywania Baran i miejsca na dysku twardym. Filtr jest wyrażeniem składającym się z grupy prymitywów połączonych w razie potrzeby z funkcjami logicznymi (i, lub, nie). To wyrażenie jest zapisywane w polu „Filtr przechwytywania” w oknie dialogowym „Opcje przechwytywania”. Najczęściej używane filtry można zapisać w profilu do ponownego użycia (rys. 1).

Ryż. 1. Profil filtra przechwytującego

Filtry przechwycenia to standard językowy na świecie otwarte źródło i jest używany przez wiele produktów opartych na Pcap (na przykład narzędzie tcpdump lub system wykrywania/zapobiegania włamaniom Snort). Dlatego nie ma szczególnego sensu opisywanie tutaj składni, ponieważ najprawdopodobniej jest ci znana. A szczegóły można znaleźć w dokumentacji, na przykład w Linuksie na stronie przewodnik referencyjny filtr pcap(7).

Filtry wyświetlania działają z już przechwyconym ruchem i są natywne dla Wireshark. Różnice w stosunku do Pcap - w formacie zapisu (w szczególności kropka służy jako separator pól); dodano również notację angielską w operacjach porównywania i obsługę podciągów.

Możesz wprowadzić filtr wyświetlania bezpośrednio w odpowiednim polu (uwaga, rozwijana lista-podpowiedź działa) głównego okna programu po przycisku „Filtr” (nawiasem mówiąc, ten przycisk ukrywa profil dla często używanych wyrażeń). A jeśli klikniesz znajdujący się obok przycisk „Wyrażenie…”, otworzy się wielofunkcyjny konstruktor wyrażeń (rys. 2).


Po lewej stronie (Nazwa pola) znajduje się alfabetyczne drzewo pól komunikatów protokołów, które są znane Wireshark. Dla dane pole można określić operator logiczny (Relacja), wprowadzić wartość (Wartość), określić zakres (Zakres) lub wybrać wartość z listy (Wstępnie zdefiniowana wartość). Ogólnie rzecz biorąc, kompletna encyklopedia online w jednym oknie.

Tutaj operatory logiczne, używane w filtrach wyświetlania:

  • i i";
  • lub (||) - "LUB";
  • xor (^^) - wyłączne "LUB";
  • nie (!) - negacja;
  • [...] - wybór podłańcucha. # Filtrowanie według adresu MAC twojego adapter sieciowy, wyklucz cały ruch lokalny nie (eth.addr eq aa:bb:cc:22:33:44) # Usuń cały „szum usług”, aby skoncentrować się na ruchu, który nas interesuje! (arp lub icmp lub dns)

Jeśli chodzi o próbkowanie podciągów, tak naprawdę nie jest operacja logiczna, ale bardzo przydatna opcja. Pozwala uzyskać określoną część sekwencji. Na przykład w ten sposób można użyć pierwszego (pierwsza liczba w nawiasach kwadratowych to przesunięcie) trzech bajtów (liczba po dwukropku to długość podsekwencji) pola źródłowego adresu MAC w wyrażeniu:

Eth.źródło == 00:19:5b

W selekcjach z dwukropkiem jeden z parametrów można pominąć. Jeśli pominiesz przesunięcie, zliczanie próbek rozpocznie się od bajtu zerowego. Jeśli długość - to otrzymujemy wszystkie bajty od przesunięcia do końca pola.

Nawiasem mówiąc, wybór podciągu jest wygodny w użyciu do wykrywania złośliwego oprogramowania, jeśli znana jest sekwencja bajtów po nagłówku (na przykład „0x90, 0x90, 0x90, 0x04” w pakiecie UDP):

udp == 90:90:90:04

Operatory porównania używane w wyrażeniach logicznych:

  • eq (==) - równa się;
  • ne (!=) - nie równe;
  • gt (>) - więcej;
  • to (<) - меньше;
  • ge (>=) - większy lub równy;
  • le(<=) - меньше или равно.tcp.dstport ne 8080 && tcp.len gt 0 && data eq A0

Właściwie wystarczy teoria na początek. Następnie użyj zdrowego rozsądku i nawiasów w razie potrzeby i bez niego. Nie zapominaj również, że filtr jest zasadniczo wyrażeniem boolowskim: jeśli jest prawdziwe, pakiet zostanie wyświetlony na ekranie, jeśli jest fałszywy, nie będzie.

Filtr Pcap do wykrywania skanów portów Netbios

dst port 135 lub dst port 445 lub dst port 1433 i tcp & (tcp-syn) != 0 i tcp & (tcp-ack) = 0 i src net 192.168.56.0/24

Szukam porywacza IP

W segmencie sieci lokalnej występują (z tego czy innego powodu) dopasowania adresów IP dla dwóch lub więcej węzłów. Metoda „wyłapywania” (określania adresów MAC) konfliktujących systemów jest dobrze znana: uruchamiamy sniffera na trzecim komputerze, czyścimy pamięć podręczną ARP i stymulujemy żądanie rozwiązania MAC żądanego adresu IP, na przykład pingując go:

# arp -d 192.168.56.5 # ping -n -c 1 192.168.56.5

A potem patrzymy na przechwycony ruch, z którego MAC nadeszły odpowiedzi. Jeśli Wireshark przechwycił zbyt wiele pakietów, tworzymy filtr wyświetlania za pomocą konstruktora. W pierwszej części wyrażenia wybieramy odpowiedzi ARP, w drugiej - te wiadomości, w których źródłowy adres IP jest równy żądanemu. Łączymy prymitywy z operatorem &&, ponieważ oba warunki muszą być spełnione jednocześnie:

(arp.opcode == odpowiedź) && (arp.src.proto_ipv4 == 192.168.56.5)

Nawiasem mówiąc, w tym scenariuszu żadna sieć komputerowa nie została naruszona, ponieważ użyto dwóch maszyn wirtualnych Oracle VirtualBox i połączenia sieciowego typu „Virtual Host Adapter”.

Inspekcja warstwy sieciowej i transportowej

Do tej pory protokół ICMP pozostaje dość skutecznym sposobem diagnozowania stosu sieciowego. Z komunikatów tego protokołu można uzyskać cenne informacje o problemach w sieci.

Jak zapewne się domyślasz, filtrowanie ICMP w Wireshark jest bardzo łatwe. Wystarczy wpisać w wierszu filtru w głównym oknie programu: icmp. Oprócz icmp działa wiele innych słów kluczowych będących nazwami protokołów, takich jak arp, ip, tcp, udp, snmp, smb, http, ftp, ssh i inne.

Jeśli jest dużo ruchu ICMP, wówczas wyświetlacz może być szczegółowy, wykluczając na przykład żądania echa (typ 0) i odpowiedzi echa (typ 8):

Icmp i ((icmp.type ne 0) and (icmp.type ne 8))

na ryc. Rysunek 4 przedstawia przykład małej próbki komunikatów ICMP generowanych przez testowy router Linux. Komunikat „Port nieosiągalny” jest zwykle komunikatem domyślnym. Jest również generowany przez stos sieciowy, gdy datagram UDP jest odbierany na nieużywanym porcie. Aby wirtualny router oparty na Debianie zaczął wyświetlać komunikaty „Host nieosiągalny” i „Komunikacja odfiltrowana administracyjnie”, musiałem przy nim majstrować. Cisco domyślnie informuje o filtrowaniu administracyjnym. Komunikat „Przekroczono czas życia” wskazuje na obecność pętli w jakiejś części sieci (no cóż, takie pakiety też mogą się pojawić podczas śledzenia trasy).

Nawiasem mówiąc, o zaporach ogniowych. Możesz tworzyć reguły dla popularnych zapór ogniowych bezpośrednio w Wireshark za pomocą elementu „Reguły ACL zapory sieciowej” w menu „Narzędzia”. Najpierw musisz wybrać pakiet z listy, którego informacje zostaną użyte. Dostępne są standardowe i rozszerzone listy ACL Cisco, reguły podobne do systemu UNIX dla produktów IP Filter, IPFirewall (ipfw), Netfilter (iptables), Packet Filter (pf) i Windows Firewall (netsh).

A teraz krótko o podstawach filtrowania na poziomie sieci, które opiera się na polach nagłówka pakietu IP - adresu nadawcy (ip.src) oraz adresu odbiorcy (ip.dst):

(ip.src == 192.168.56.6) || (ip.dst == 192.168.56.6)

Zobaczymy więc wszystkie pakiety, które ten adres IP otrzymał lub wysłał. Możesz filtrować całe podsieci za pomocą notacji maski CIDR. Na przykład zidentyfikujmy zainfekowanego hosta, który rozsyła spam (tutaj 192.168.56.251 to adres IP naszego serwera SMTP):

ip.src == 192.168.56.0/24 i tcp.dstport == 25 i !(ip.dst == 192.168.56.251)

Nawiasem mówiąc, aby wybrać według adresów MAC, powinieneś użyć prymitywów eth.src, eth.dst i eth.addr. Czasami problemy z warstwą sieciową są ściślej związane z warstwą Ethernet, niż sugeruje teoria. W szczególności podczas konfigurowania routingu bardzo przydatne jest sprawdzenie adresu MAC routera, do którego uparty węzeł wysyła pakiety. Jednak do tak prostego zadania wystarczy narzędzie tcpdump, które jest prawie standardem w systemach typu UNIX.

Wireshark nie ma również problemów z filtrowaniem portów. W przypadku protokołu TCP dostępne są słowa kluczowe tcp.srcport, tcp.dstport i tcp.port, aw przypadku protokołu UDP — udp.srcport, udp.dstport i udp.port. To prawda, że ​​​​wbudowany język filtrów Wireshark nie miał odpowiednika prymitywu portu w Pcap, oznaczającego zarówno port UDP, jak i port TCP. Ale łatwo to naprawić za pomocą wyrażenia boolowskiego, takiego jak:

tcp.port == 53 || udp.port == 53

Improwizacja z ruchem HTTP

Protokoły aplikacji, w szczególności HTTP, to temat „odwieczny” w kontekście sniffingu. Trzeba uczciwie powiedzieć, że stworzono wiele specjalistycznych narzędzi programowych do badania ruchu w sieci. Ale tak wszechstronne narzędzie jak Wireshark, ze swoim elastycznym systemem filtrowania, wcale nie jest zbędne w tej dziedzinie.

Najpierw zbierzmy ruch w sieci, przechodząc do pierwszej witryny, która przychodzi nam do głowy. Teraz spójrzmy w komunikatach protokołu TCP, który służy jako transport dla HTTP, aby znaleźć wzmianki o twoim ulubionym zasobie internetowym:

TCP zawiera „stronę”

Operator zawiera sprawdza obecność podłańcucha w danym polu. Istnieje również operator dopasowań, który pozwala na używanie wyrażeń regularnych zgodnych z językiem Perl.


Okno „Filtruj wyrażenia” jest oczywiście dobrym pomocnikiem, ale czasami przewijanie długiej listy w poszukiwaniu żądanego pola jest bardzo uciążliwe. Istnieje prostszy sposób tworzenia/modyfikowania filtrów wyświetlania: przy użyciu menu kontekstowego podczas przeglądania pakietów. Aby to zrobić, wystarczy kliknąć prawym przyciskiem myszy interesujące pole i wybrać jeden z elementów podrzędnych elementu „Zastosuj jako filtr” lub elementu „Przygotuj filtr”. W pierwszym przypadku zmiany zaczną obowiązywać natychmiast, w drugim przypadku będzie można poprawić wyrażenie. "Wybrany" oznacza, że ​​wartość pola stanie się nowym filtrem, "Niewybrany" - to samo, tylko z negacją. Pozycje zaczynające się od „...” dodają wartość pola do istniejącego wyrażenia z uwzględnieniem operatorów logicznych.

Łącząc różne narzędzia Wireshark GUI i znajomość protokołu HTTP, możesz łatwo dostosować wyświetlanie ruchu w głównym oknie programu do wymaganego poziomu.

Na przykład, aby zobaczyć, jakie obrazy przeglądarka zażądała od serwera WWW podczas generowania strony, filtr analizujący zawartość URI przesyłanego do serwera będzie pasować:

(http.host eq "www..request.uri zawiera ".jpg#26759185") lub (http.request.uri zawiera ".png#26759185"))

To samo, ale używając dopasowań:

(http.host eq "www..request.uri pasuje do ".jpg|.png#26759185")

Oczywiście pola komunikatów protokołów różnych poziomów można bezpiecznie mieszać w jednym wyrażeniu. Na przykład, aby dowiedzieć się, jakie obrazy ten serwer wysłał do klienta, używamy adresu źródłowego z pakietu IP i pola „Content-Type” odpowiedzi HTTP:

(ip.src eq 178.248.232.27) i (http.content_type zawiera „obraz”)

Za pomocą pola żądania HTTP „Referer” możesz dowiedzieć się, z jakich innych serwerów przeglądarka pobiera treści podczas generowania strony Twojej ulubionej witryny:

(http.referer eq "http://www..dst eq 178.248.232.27))

Rzućmy okiem na kilka bardziej przydatnych filtrów. Aby próbkować ruch z żądań HTTP wykonanych metodą GET, możesz użyć następującego wyrażenia:

Http.request.method == POBIERZ

To właśnie na poziomie aplikacji filtry wyświetlacza manifestują się w całej okazałości i prostocie. Dla porównania: aby np. rozwiązać ten problem za pomocą Pcap, należałoby zastosować następującą trzykondygnacyjną konstrukcję:

Port 80 i tcp[((tcp i 0xf0) >> 2):4] = 0x47455420

Aby dowiedzieć się, jakie połączenia www wykonał użytkownik hosta 192.168.56.8 w określonym przedziale czasu (powiedzmy w porze lunchu), używamy prymitywu frame.time:

tcp.dstport == 80 && frame.time >= "9 stycznia 2013 13:00:00" && frame.time< "Yan 9, 2013 14:00:00" && ip.src == 192.168.56.8

Cóż, wyświetlanie żądań URI zawierających słowa „login” i „user” oraz „przypomnienie” haseł:

Http.request.uri pasuje do „login.*=user” (http zawiera „hasło”) || (pop zawiera „PASS”)

Przechwytywanie treści SSL

Prawdziwą plagą eksploratora ruchu sieciowego jest szyfrowanie. Ale jeśli masz cenny plik z certyfikatem (nawiasem mówiąc, musisz dbać o to jak o źrenicę oka), możesz łatwo dowiedzieć się, jacy użytkownicy tego zasobu ukrywają się w sesjach SSL. W tym celu należy określić parametry serwera oraz plik certyfikatu w ustawieniach protokołu SSL (w pozycji „Preferencje” w menu „Edycja”, z listy protokołów po lewej stronie wybrać SSL). Obsługiwane są formaty PKCS12 i PEM. W tym drugim przypadku musisz usunąć hasło z pliku za pomocą poleceń:

openssl pkcs12 -export -in server.pem -out aa.pfx openssl pkcs12 -in aa.pfx -out serverNoPass.pem --węzły

INFORMACJE

Ekstrakcja ruchu w celu monitorowania i debugowania z ruchu sieciowego jest wykonywana przez filtr pakietów. Filtr pakietów jest częścią jądra systemu operacyjnego i odbiera pakiety sieciowe ze sterownika karty sieciowej.

Przykładami filtrów pakietów dla systemu operacyjnego typu UNIX są BPF (Berkeley Packet Filter) i LSF (Linux Socket Filter). W BPF filtrowanie realizowane jest w oparciu o rozróżniający wielkość liter prymitywny język maszynowy, którego interpretatorem jest BPF.


Analizuj ruch ze zdalnych hostów

Użytkownicy systemu Windows mogą pracować nie tylko z interfejsami komputera, na którym działa Wireshark, ale także przechwytywać ruch ze zdalnych maszyn. Jest do tego specjalna usługa (Remote Packet Capture Protocol) w dystrybucji biblioteki WinPcap. Najpierw należy ją włączyć w przystawce zarządzania usługami (services.msc). Teraz, uruchamiając Wireshark na komputerze zdalnym, możesz połączyć się z hostem, na którym uruchomiona jest usługa zdalnego przechwytywania ruchu (domyślnie przy użyciu portu 2002), a dane RPCAP będą płynąć do Ciebie jak rzeka.

Podam również opcje połączenia z domowym * routerem nix „z zewnątrz” w celu zdalnej analizy ruchu:

$ ssh [e-mail chroniony]"tshark -f "port !22" -i dowolny -w -" | wireshark -k -i - $ ssh [e-mail chroniony] tcpdump -U -s0 -w - "nie port 22" | wireshark -k -i -

Niezbędne narzędzie

Wireshark to dobrze znane narzędzie do przechwytywania i interaktywnej analizy ruchu sieciowego, de facto standard dla przemysłu i edukacji. Rozpowszechniane na licencji GNU GPLv2. Wireshark współpracuje z większością znanych protokołów, posiada graficzny interfejs użytkownika oparty na GTK+, potężny system filtrowania ruchu oraz wbudowany interpreter języka programowania Lua do tworzenia dekoderów i programów obsługi zdarzeń.

Wyodrębnij ładunek

W niektórych kręgach powszechnie znane są specjalistyczne narzędzia, które pozwalają „wyciągać” końcowe obiekty informacyjne z ruchu: pliki, obrazy, treści wideo i audio itp. Dzięki potężnemu podsystemowi analitycznemu Wireshark obejmuje więcej niż tylko tę funkcjonalność, więc szukaj przycisku „Zapisz ładunek…” w odpowiednich oknach analizy.

Wniosek

Na tle powszechnej fascynacji podziemia komputerowego bezpieczeństwem aplikacji sieciowych monumentalne problemy niższych szczebli stopniowo schodzą na drugi plan. Oczywiste jest, że warstwy sieci i transportu zostały zbadane i zbadane w górę iw dół. Kłopot w tym, że specjaliści, którzy wychowali się na iniekcjach SQL, cross-site scriptingu i inkluzjach, nie są świadomi ogromnej warstwy ukrytej pod czubkiem góry lodowej i często ulegają pozornie elementarnym problemom.

Sniffer, podobnie jak debugger i deasembler, bardzo szczegółowo pokazuje szczegóły systemu. Po zainstalowaniu programu Wireshark i odrobinie pomysłowości możesz zobaczyć interakcje sieciowe takimi, jakie są — w niewinnej, nieskazitelnej nagości. I filtry, które Ci pomogą!

Podczas debugowania konkretnego problemu czasami może być konieczne przeanalizowanie ruchu protokołu wychodzącego i przychodzącego do komputera. Wireshark jest jednym z najlepszych narzędzi służących do tego celu. W tym artykule dowiemy się, jak korzystać z filtra wyświetlania analizatora protokołów sieciowych Wireshark.

1. Pobierz i zainstaluj Wireshark

Po pobraniu pliku wykonywalnego kliknij go, aby zainstalować Wireshark.

2. Wybierz interfejs i rozpocznij przechwytywanie

Po otwarciu programu wireshark musisz najpierw wybrać konkretny interfejs sieciowy swojej maszyny. W większości przypadków maszyna jest podłączona tylko do jednego interfejsu sieciowego, ale jeśli jest ich wiele, wybierz interfejs, na którym chcesz monitorować ruch.

Z menu kliknij „Capture –> Interfaces”, co spowoduje wyświetlenie następującego ekranu:

3. Filtr źródłowego adresu IP

Można zastosować filtr źródłowy, aby ograniczyć widok pakietów w programie Wireshark tylko do tych pakietów, które mają źródłowy adres IP, jak wspomniano w filtrze. Filtr zastosowany w poniższym przykładzie to:

ip.src == 192.168.1.1

4. Docelowy filtr IP

Można zastosować filtr miejsca docelowego, aby ograniczyć widok pakietu w programie Wireshark tylko do tych pakietów, które mają docelowy adres IP wymieniony w filtrze. Na przykład:

Ip.dst == 192.168.1.1

5. Filtruj według protokołu

Bardzo łatwo zastosować filtr dla określonego protokołu. Po prostu wpisz nazwę tego protokołu w zakładce filtra i naciśnij enter. W poniższym przykładzie próbowaliśmy przefiltrować wyniki dla protokołu http za pomocą tego filtra:

6. Używanie warunku LUB w filtrze

Ten filtr pomaga filtrować pakiety spełniające jeden lub drugi warunek.

Załóżmy, że może pojawić się wymaganie, aby zobaczyć pakiety, które mają protokół „http” lub „arp”. W takim przypadku nie można zastosować osobnych filtrów. Istnieje więc wyrażenie filtrujące „||”, które łączy LUB dwa warunki, aby wyświetlić pakiety spełniające dowolny lub oba warunki. W poniższym przykładzie próbowaliśmy filtrować pakiety http lub arp za pomocą tego filtra:

Http||arp

7. Stosowanie warunku AND w filtrze

Ten filtr pomaga filtrować pakiety, które dokładnie pasują do wielu warunków.

Załóżmy, że istnieje wymóg filtrowania tylko tych pakietów, które są pakietami HTTP i mają źródłowy adres IP „192.168.1.4”. Użyj tego filtra:

http&&ip.src==192.168.1.4

8. Filtruj według numeru portu

Można to zrobić za pomocą filtra „tcp.port eq”. Na przykład:

Tcp.port eq 80

9. Dopasuj pakiety zawierające określoną sekwencję

Składnia filtru używana w tym przypadku to: „zawiera”.

TCP zawiera 01:01:04

10. Odrzuć pakiety na podstawie źródła lub miejsca docelowego

Filtr tutaj to „ip.src !=” lub „ip.dst !=”.

Ip.dst != 192.168.1.1

Jeśli podobał Ci się ten artykuł, może Ci się również spodobać...

Większość pytań podczas pracy z programem WireShark wśród użytkowników jest spowodowana filtrami do przechwytywania ruchu. Dzisiaj przyjrzymy się ich głównym przykładom i pokażemy, jak je poprawnie skonfigurować!

W procesie analizy problemów z wydajnością sieci lub aplikacji, jeśli Twoja firma nie posiada scentralizowanego systemu monitorowania wydajności aplikacji, to do analizy problemów od poziomów 4 do 7 modelu sieci OSI będziesz musiał użyć analizatora protokołów (inaczej sniffer ).

Jeśli nie masz komercyjnego rozwiązania z wbudowanymi narzędziami do automatycznej analizy lub systemem eksperckim, być może najwłaściwszym sposobem byłoby:

    pobierz i zainstaluj na laptopie jeden z najlepszych darmowych analizatorów protokołów WireShark (http://www.wireshark.org/download.html);

    oswoić się z jego interfejsem;

    przestudiować stos protokołów i ich strukturę;

    dowiedz się, jak pracować z filtrami w celu przechwytywania ruchu;

    dowiedz się, jak pracować z filtrami do analizy ruchu.

W ramach tego artykułu skupimy się na punkcie przedostatnim – jak skonfigurować filtry do przechwytywania ruchu w WireShark.

Przykłady konfiguracji filtrów WireShark do przechwytywania ruchu

Po wybraniu interfejsu możemy albo rozpocząć przechwytywanie ruchu w trybie - wszystko z rzędu, ale nie jest to zalecane, ponieważ np. Przy 50% obciążeniu interfejsu gigabitowego przeniesienie 100 000 pakietów zajmuje tylko kilka milisekund . Dlatego ważne jest, aby zrozumieć, jaki problem rozwiązujemy. Wtedy przynajmniej będziemy mieli adres (IP lub MAC) użytkownika lub aplikacji, na którą narzeka, lub serwera, do którego uzyskuje dostęp.

Zatem najprostszym filtrem w Wireshark jest adres IP urządzenia (host, host) i ten filtr wygląda tak:

Jeśli problem jest bardziej globalny i musimy przechwytywać ruch z osobnej podsieci, niezależnie od kierunku jego transmisji, wówczas stosujemy filtr:

    siatka 192.168.0.0/24 lub siatka 192.168.0.0 maska ​​255.255.255.0

Podczas przechwytywania ruchu z podsieci filtr będzie wyglądał następująco:

    src net 192.168.0.0/24 lub src net 192.168.0.0 maska ​​255.255.255.0

A jeśli potrzebujesz zobaczyć do analizy tylko ruch przychodzący do naszej podsieci, to któryś z filtrów:

    dst netto 192.168.0.0/24

    dst netto 192.168.0.0 maska ​​255.255.255.0

Jeśli użytkownik skarży się, że strona nie otwiera się w jego przeglądarce, problem może być z serwerem DNS (port 53) lub z protokołem HTTP (port 80), wtedy przechwytujemy ruch za pomocą filtra „port”:

Jeśli zdecydujemy się przechwycić cały ruch dla określonego serwera, z wyłączeniem HTTP i FTP, to filtr jest konfigurowany zgodnie z dowolnym z tych dwóch przykładów:

    host 192.168.0.1 i nie (port 21 lub port 80)

    host 192.168.0.1, a nie port 21 i nie port 80

Jeśli chcemy zobaczyć cały ruch na porcie, z wyjątkiem ruchu DNS, FTP, ARP, to logika będzie podobna:

    port nie dns i nie 21 i nie arp

Podczas przechwytywania ruchu aplikacji korzystającego z dynamicznych portów z określonego zakresu filtr będzie wyglądał na trudny, jeśli wersja Libcap jest niższa niż 0.9.1:

    (tcp > 1500 i tcp< 1550) or (tcp >1500 i tp< 1550)

jeśli wersje są późniejsze, filtr będzie mniej groźny i zrozumiały:

    portrange tcp 1501-1549

Aby przechwytywać ramki Ethernet typu EAPOL (protokół EAP Messaging w standardzie 802.1x nosi nazwę EAPOL (EAP encapsulation over LAN)):

    protokół eterowy 0x888e

Dla odniesienia, oto lista typów ramek Ethernet określonych protokołów:

Typ eteru (szesnastkowy)

Protokół

0x0000 - 0x05DC

Długość IEEE 802.3

0x0101 - 0x01FF

IP, protokół internetowy

ARP, protokół rozpoznawania adresów.

Frame Relay ARP

Surowy przekaźnik ramek

DRARP, dynamiczny RARP. RARP, protokół odwrotnego rozpoznawania adresów.

Novell NetWare IPX

EtherTalk (AppleTalk przez Ethernet)

Usługi IBM SNA przez Ethernet

AARP, protokół rozpoznawania adresów AppleTalk.

EAPS, automatyczne przełączanie ochrony sieci Ethernet.

IPX, Internetowa wymiana pakietów.

SNMP, prosty protokół zarządzania siecią.

IPv6, protokół internetowy w wersji 6.

PPP, protokół punkt-punkt.

GSMP, ogólny protokół zarządzania przełącznikiem.

MPLS, wieloprotokołowe przełączanie etykiet (unicast).

MPLS, Multi-Protocol Label Switching (multicast).

PPPoE, PPP przez Ethernet (etap wykrywania).

PPPoE, PPP przez Ethernet (etap sesji PPP).

LWAPP, lekki protokół punktu dostępowego.

LLDP, protokół wykrywania warstwy łącza.

EAPOL, EAP przez LAN.

Loopback (protokół testu konfiguracji)

Identyfikator protokołu znacznika sieci VLAN

Identyfikator protokołu znacznika sieci VLAN

Jeśli potrzebujesz przechwycić ruch określonego protokołu IP, możesz użyć filtra:

    ip proto tcp - przechwytuje ruch TCP

    ip proto udp - przechwytuje ruch UDP

Najkrótszy filtr jest stosowany do przechwytywania ruchu IP:

Aby przechwytywać tylko ruch emisji pojedynczej, podczas analizowania ruchu wychodzącego i przychodzącego do urządzenia sieciowego używany jest filtr w następującym formacie:

    nie rozgłaszać i nie rozsyłać grupowo

Proste filtry, o których mówiliśmy, można łączyć za pomocą prostych znaków:

    Negacja: ! Lubnie

    Stowarzyszenie: && LubI

    Alternacja: IILubLub

Przykład: aby przechwycić ruch z lub do urządzenia o adresie 10.10.10.10, ale nie z sieci 192.168.0.0, filtr zostanie połączony z negacją:

    host 10.10.10.10 && !net 192.168.1

Filtry z przesunięciem bajtów są najpotężniejsze i znacznie upraszczają życie, ale aby z nich korzystać, musisz znać protokół i rozmieszczenie pól, których szukasz w pakiecie. Poniższe przykłady filtrów przechwytują pakiety z określoną wartością pola w nagłówkach lub ładunku. Konfiguracja jest łatwa:

Przesuwamy się o osiem bajtów w pakiecie IP i przechwytujemy ruch z wartością TTL równą 1

Przechwyć wszystkie pakiety TCP o adresie portu źródłowego 80. Jest to odpowiednik filtra src portu 80.

Dla odniesienia, oto przesunięcie bajtów do najciekawszych pól w pakiecie:

Pole w paczce

Długość w bajtach

Filtr

Długość nagłówka IP

Długość pakietu IP

Źródło adresu IP

Miejsce docelowe adresu IP

Fragmentacja IP

flaga = 3 i przesunięcie = 13

ip & 0x2000 = 0x2000 lub ip & 0x1fff !=0x0000

Port docelowy TCP

Długość nagłówka TCP

Aby zabezpieczyć otrzymane informacje, zbudujmy filtr przechwytujący ruch z żądaniem HTTP GET. Protokół HTTP wykorzystuje port 80, protokół transportowy TCP. Szesnastkowa wartość słowa GET będzie wyglądać jak 0x47455420. Przykład filtra, który otrzymujemy:

    port 80 i tcp[((tcp i 0xf0 >>2):4]=0x47455420

W ramach tego materiału przeanalizowaliśmy, jak skonfigurować i wykorzystać najprostsze podstawowe filtry do przechwytywania ruchu za pomocą analizatora protokołów Wireshark.

Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl + Enter
UDZIAŁ: