Jak používat filtry Wireshark v systému Linux

Wireshark je špičkový analyzátor paketů dostupný v systémech Linux, Windows a macOS. Jeho filtry jsou flexibilní a sofistikované, ale někdy neintuitivní. Vysvětlíme vám „gotchas“, na které si musíte dávat pozor.

Analýza paketů s Real Bite

Wireshark je jedním z klenotů open-source světa. Je to softwarový nástroj světové třídy, který používají profesionálové i amatéři ke zkoumání a diagnostice problémů se sítí. Vývojáři softwaru jej používají k určení a charakterizaci chyb v komunikačních rutinách. Bezpečnostní výzkumníci jej používají k zachycení a odstranění škodlivé aktivity v síti.

Typickým pracovním postupem je spouštět Wireshark v režimu Capture, takže zaznamenává síťový provoz přes jedno ze síťových rozhraní v počítači. Síťové pakety se zobrazují v reálném čase tak, jak jsou zachyceny. V analýze po zachycení jsou však odhaleny podrobné detaily toho, co se v síti děje.

Zachycené pakety se nazývají trasování. Po dokončení zachycení lze trasování procházet, paket po paketu. Jste schopni zkontrolovat jakýkoli paket do nejmenších podrobností, zmapovat síťové „konverzace“ mezi zařízeními a použít filtry k zahrnutí (nebo vyloučení) paketů z analýzy.

Filtrační schopnosti Wiresharku jsou bezkonkurenční, s velkou flexibilitou a rozlišovací schopností. Jejich syntaxe má jemnosti, díky nimž je snadné napsat filtr a získat výsledek, který nesplňuje vaše očekávání.

Pokud nerozumíte tomu, jak fungují filtry ve Wiresharku, nikdy nevystoupíte z prvního rychlostního stupně a omezíte možnosti softwaru.

Instalace Wireshark

Když nainstalujete Wireshark, budete dotázáni, zda by kdokoli, kdo používá jiný účet než root, měl být schopen zachytit trasování sítě. Říct tomu ne může být atraktivní nápad. Možná nechcete, aby každý viděl, co se děje v síti. Instalace Wireshark tak, aby jej mohli používat pouze uživatelé s oprávněními root, však znamená, že všechny jeho součásti poběží se zvýšenými oprávněními.

Wireshark obsahuje přes 2 miliony řádků komplikovaného kódu a spolupracuje s vaším počítačem na nejnižší úrovni. Nejlepší bezpečnostní postupy doporučují, aby co nejméně kódu běželo se zvýšenými oprávněními – zvláště když pracuje na tak nízké úrovni.

Je mnohem bezpečnější provozovat Wireshark s běžným uživatelským účtem. Stále můžeme omezit, kdo má možnost spouštět Wireshark. To vyžaduje několik dalších kroků nastavení, ale je to nejbezpečnější způsob, jak pokračovat. Prvky sběru dat Wireshark poběží se zvýšenými oprávněními, ale zbytek Wiresharku běží jako normální proces.

Chcete-li zahájit instalaci na Ubuntu, zadejte:

sudo apt-get install wireshark

Na Fedoře zadejte:

sudo dnf install wireshark

Na Manjaro použijte tento příkaz:

sudo pacman -Syu wireshark-qt

Během instalace se zobrazí obrazovka níže, která doporučuje, abyste nespouštěli Wireshark jako root. Stisknutím klávesy Tab přesuňte červené zvýraznění na „“ a stiskněte mezerník.

Na další obrazovce stisknutím klávesy Tab přesuňte červené zvýraznění na „“ a stiskněte mezerník.

Obrazovka možností umožňující uživatelům bez oprávnění root spouštět Wireshark s

Chcete-li spustit Wireshark, musíte být členem skupiny „wireshark“, která se vytvoří během instalace. To vám umožní ovládat, kdo může spustit Wireshark. Kdokoli, kdo není ve skupině „wireshark“, nemůže spustit Wireshark.

  Jak používat příkaz ls k výpisu souborů a adresářů v systému Linux

Chcete-li se přidat do skupiny „Wireshark“, použijte tento příkaz:

sudo usermod -a -G wireshark $USER

Aby se vaše nové členství ve skupině projevilo, můžete se odhlásit a znovu přihlásit nebo použít tento příkaz:

newgrp wireshark

Chcete-li zjistit, zda jste v nové skupině, použijte příkaz groups:

groups

V seznamu skupin byste měli vidět „wireshark“.

Spuštění Wiresharku

Wireshark můžete spustit příkazem níže. Ampersand (&) spustí Wireshark jako úlohu na pozadí, což znamená, že můžete pokračovat v používání okna terminálu. Můžete dokonce zavřít okno terminálu a Wireshark bude nadále běžet.

Zadejte následující:

Wireshark &

Zobrazí se rozhraní Wireshark. Jsou uvedena zařízení síťového rozhraní přítomná ve vašem počítači spolu s některými vestavěnými pseudozařízeními.

Vlnovka vedle rozhraní znamená, že je aktivní a prochází přes něj síťový provoz. Plochá čára znamená, že na rozhraní není žádná aktivita. Nejvyšší položka v tomto seznamu je „enp0s3“, kabelové připojení pro tento počítač a podle očekávání ukazuje aktivitu.

Chcete-li začít zachycovat pakety, klikněte pravým tlačítkem na „enp0s3“ a poté v kontextové nabídce vyberte „Spustit zachytávání“.

Klikněte

Můžete nastavit filtry, abyste snížili množství provozu, který Wireshark zachytí. Dáváme přednost zachycení všeho a odfiltrování všeho, co nechceme vidět při provádění analýzy. Tímto způsobem víme, že vše, co se stalo, je ve stopě. Nechcete nechtěně zmeškat síťovou událost, která vysvětluje situaci, kterou vyšetřujete, díky filtru zachycení.

U sítí s vysokým provozem se stopy mohou samozřejmě rychle velmi zvětšit, takže filtrování při zachycení má v tomto scénáři smysl. Nebo tomu možná dáváte přednost.

Všimněte si, že syntaxe pro zachytávací filtry se mírně liší než u displejů.

Zvýrazněné ikony na obrázku výše označují zleva doprava následující:

Žraločí ploutev: Pokud je modrá, kliknutím na ni spustíte zachycení paketů. Pokud Wireshark zachycuje pakety, bude tato ikona šedá.
Čtverec: Pokud je toto červené, kliknutím na něj zastavíte probíhající sběr paketů. Pokud Wireshark nezachycuje pakety, bude tato ikona šedá.
Žraločí ploutev s kruhovou šipkou: Pokud je zelená, kliknutím na ni zastavíte právě běžící stopu. To vám dává příležitost uložit nebo zahodit zachycené pakety a restartovat trasování. Pokud Wireshark nezachycuje pakety, bude tato ikona šedá.

Analýza stopy

Kliknutím na ikonu červeného čtverce zastavíte sběr dat, abyste mohli analyzovat pakety zachycené ve trasování. Pakety jsou prezentovány v časovém pořadí a barevně označeny podle protokolu paketu. Podrobnosti o zvýrazněném paketu jsou zobrazeny ve dvou spodních panelech rozhraní Wireshark.

Jednoduchým způsobem, jak si usnadnit čtení trasování, je nechat Wireshark poskytnout smysluplná jména pro zdrojové a cílové IP adresy paketů. Chcete-li to provést, klikněte na Zobrazit > Překlad názvů a vyberte „Vyřešit síťové adresy“.

Wireshark se pokusí vyřešit název zařízení, která odeslala a přijala každý paket. Nebude schopen identifikovat všechna zařízení, ale ta, která dokáže, vám pomohou se čtením stopy.

Posouváním displeje doleva zobrazíte další sloupce napravo. Informační sloupec zobrazuje veškeré informace, které Wireshark dokáže z paketu zjistit. V níže uvedeném příkladu vidíme některé požadavky a odpovědi ping.

  6 nejlepších aplikací pro vzdálený přístup pro Linux

Ve výchozím nastavení Wireshark zobrazuje všechny pakety v pořadí, v jakém byly trasovány. Mnoho zařízení posílá pakety tam a zpět současně. To znamená, že jedna konverzace mezi dvěma zařízeními pravděpodobně bude mít mezi sebou prokládané pakety z jiných zařízení.

Chcete-li prozkoumat jednu konverzaci, můžete ji izolovat pomocí protokolu. Protokol pro každý paket je uveden ve sloupci protokol. Většina protokolů, které uvidíte, patří do rodiny TCP/IP. Můžete zadat přesný protokol nebo použít Ethernet jako jakýsi záchytný bod.

Klepněte pravým tlačítkem na libovolný z paketů v pořadí, které chcete prozkoumat, a poté klepněte na Filtr konverzace > Ethernet. V níže uvedeném příkladu jsme vybrali paket požadavku ping.

Izolovaný ping

Sekvence paketů je zobrazena bez dalších mezi nimi, protože Wireshark k tomu automaticky vygeneroval filtr. Je zobrazen na liště filtrů a zvýrazněn zeleně, což znamená, že syntaxe filtru je správná.

Chcete-li filtr vymazat, klikněte na „X“ na panelu filtrů.

Vytváření vlastních filtrů

Do lišty filtrů dáme jednoduchý filtr:

ip.addr == 192.168.4.20

Vyberou se všechny pakety, které byly odeslány nebo přijaty zařízením s IP adresou 192.168.4.20. Všimněte si znamének dvojitého rovná se (==) bez mezery mezi nimi.

Pro zobrazení paketů odeslaných zařízením (zdrojem) můžete použít ip.src; k zobrazení paketů, které dorazily na zařízení (cíl), můžete použít ip.dst, jak je uvedeno níže:

ip.dst == 192.168.4.20 && ip.src == 192.168.4.28

Všimněte si použití dvojitého ampersandu (&&) k označení logického „a“. Tento filtr hledá pakety, které dorazily na 192.168.4.20 z 192.168.4.28.

Lidé noví ve filtrech Wireshark si často myslí, že takový filtr zachytí všechny pakety mezi dvěma IP adresami, ale není tomu tak.

Ve skutečnosti to dělá filtrování všech paketů do nebo z IP adresy 192.168.4.20, bez ohledu na to, odkud nebo kam byly odeslány. Totéž dělá se všemi pakety z IP adresy 192.168.4.28. Jednodušeji řečeno, filtruje veškerý provoz do nebo z jedné IP adresy.

Aktivitu můžete hledat i na jiných protokolech. Můžete například zadat tento filtr a vyhledat požadavky HTTP:

http.request

Chcete-li vyloučit pakety, které buď přišly ze zařízení nebo byly do zařízení odeslány, použijte vykřičník (!) a uzavřete filtr do závorek [()]:

!(ip.addr == 192.168.4.14)

Tento filtr vylučuje všechny pakety odeslané do nebo z 192.168.4.14.

Je to kontraintuitivní, protože filtr obsahuje operátor rovnosti (==). Možná jste očekávali, že tento filtr zadáte takto:

ip.addr !=192.168.4.14

To však nebude fungovat.

Můžete také hledat řetězce v paketech podle protokolu. Tento filtr vyhledává protokol kontroly přenosu (TCP) pakety, které obsahují řetězec „youtube“:

tcp contains youtube

Filtr, který hledá opakovaný přenos, je užitečný jako způsob, jak zkontrolovat, zda není problém s připojením. Opakované přenosy jsou pakety, které jsou znovu odeslány, protože byly poškozeny nebo ztraceny během počátečního přenosu. Příliš mnoho opakovaných přenosů označuje pomalé připojení nebo zařízení, které pomalu reaguje.

Zadejte následující:

tcp.analysis.retransmission

Narození, život, smrt a šifrování

Síťové spojení mezi dvěma zařízeními je iniciováno vždy, když jedno kontaktuje druhé a odešle SYN (synchronizační) paket. Přijímající zařízení poté odešle ACK (potvrzení) paket. Označuje, zda přijme spojení odesláním paketu SYN.

  Jak nainstalovat editor obrázků Gimp na Linux

SYN a ACK jsou ve skutečnosti dva příznaky ve stejném paketu. Původní zařízení potvrdí SYN odesláním ACK a poté zařízení vytvoří síťové připojení.

Toto se nazývá třístranné podání ruky:

A -> SYN -> B

A  ACK -> B

Na níže uvedeném snímku obrazovky někdo na počítači „nostromo.local“ vytvoří a Secure Shell (SSH) připojení k počítači „ubuntu20-04.local.“ Třístranné podání ruky je první částí komunikace mezi dvěma počítači. Všimněte si, že dva řádky obsahující pakety SYN jsou barevně označeny tmavě šedou.

Posouváním na displeji zobrazíte sloupce doprava a zobrazí se pakety handshake SYN , SYN/ACK a ACK.

Všimnete si, že výměna paketů mezi dvěma počítači se střídá mezi protokoly TCP a SSH. Datové pakety jsou předávány přes šifrované spojení SSH, ale pakety zpráv (jako ACK) jsou odesílány přes TCP. Brzy odfiltrujeme pakety TCP.

Když už připojení k síti není potřeba, zahodí se. Sekvence paketů k přerušení síťového připojení je čtyřcestný handshake.

Jedna strana odešle FIN (dokončovací) paket. Druhý konec odešle ACK pro potvrzení FIN a poté také pošle FIN, aby ukázal, že souhlasí s přerušením spojení. První strana odešle ACK pro FIN, který právě přijala, a síťové připojení je poté demontováno.

Čtyřcestné podání ruky vypadá takto:

A -> FIN -> B

A  ACK -> B

Někdy se původní FIN přibalí k ACK paketu, který měl být stejně odeslán, jak je znázorněno níže:

A -> FIN, ACK -> B

A  ACK -> B

To se děje v tomto příkladu.

Pokud chceme vidět pouze provoz SSH pro tuto konverzaci, můžeme použít filtr, který specifikuje daný protokol. Zadáme následující, abychom viděli veškerý provoz pomocí protokolu SSH do a ze vzdáleného počítače:

ip.addr == 192.168.4.25 && ssh

Tím se odfiltruje vše kromě provozu SSH do az 192.168.4.25.

Další užitečné šablony filtrů

Když zadáváte filtr do lišty filtrů, zůstane červená, dokud nebude filtr syntakticky správný. Jakmile je filtr správný a kompletní, změní se na zelenou.

Pokud zadáte protokol, například tcp, ip, udp nebo shh, následovaný tečkou (.), zobrazí se nabídka. Zobrazí seznam posledních filtrů, které obsahovaly daný protokol, a všechna pole, která lze použít ve filtrech pro daný název protokolu.

Například s ip můžete použít ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host a desítky dalších.

Jako základ svých filtrů použijte následující šablony filtrů:

Chcete-li zobrazit pouze pakety protokolu HTTP: http
Chcete-li zobrazit pouze pakety protokolu DNS: dns
Chcete-li zobrazit pouze pakety TCP s 4000 jako zdrojovým nebo cílovým portem: tcp.port==4000
Chcete-li zobrazit všechny pakety TCP reset: http.request
Pro odfiltrování paketů ARP, ICMP a DNS: !(arp nebo icmp nebo dns)
Zobrazení všech opakovaných přenosů ve trasování: tcp.analysis.retransmission
Chcete-li filtrovat příznaky (jako SYN nebo FIN): Pro tyto musíte nastavit srovnávací hodnotu: 1 znamená, že příznak je nastaven, a 0 znamená, že není. Příklad by tedy mohl být: tcp.flags.syn == 1.

Probrali jsme zde některé hlavní principy a základní použití filtrů zobrazení, ale je toho samozřejmě mnohem víc.

Chcete-li ocenit plný rozsah a výkon filtrů Wireshark, nezapomeňte se podívat jeho online reference.