Wireshark představuje prvotřídní nástroj pro analýzu síťových paketů, který je dostupný pro operační systémy Linux, Windows a macOS. Jeho filtry nabízejí rozsáhlé možnosti a propracovanost, avšak jejich používání může být pro začátečníky ne zcela intuitivní. V tomto článku si posvítíme na specifika, na která je třeba si dát pozor.
Důkladná analýza paketů s Wiresharkem
Wireshark je opravdový skvost open-source světa. Jedná se o špičkový softwarový nástroj, který odborníci i nadšenci využívají k prozkoumávání a řešení problémů v počítačových sítích. Vývojáři ho používají k identifikaci a diagnostice chyb v komunikačních procesech, zatímco bezpečnostní specialisté s jeho pomocí odhalují a eliminují škodlivou aktivitu v síti.
Běžný postup práce s Wiresharkem spočívá v jeho spuštění v režimu zachytávání, kdy program zaznamenává veškerý síťový provoz procházející vybraným síťovým rozhraním vašeho počítače. Sběr paketů se zobrazuje v reálném čase, jak jsou zachycovány. Po ukončení zachytávání můžete získat podrobné informace o dění v síti.
Zachyćená data se nazývají trasování. Jakmile je zachytávání dokončeno, je možné procházet trasování, paket po paketu. Můžete zkoumat každý paket do nejmenších detailů, analyzovat síťovou komunikaci mezi zařízeními a používat filtry pro zahrnutí nebo vyloučení konkrétních paketů z analýzy.
Filtrovací schopnosti Wiresharku jsou bezkonkurenční, poskytují velkou flexibilitu a přesnost. Nicméně, syntaxe filtrů má svá specifika, která mohou vést k tomu, že vytvořený filtr neposkytne očekávané výsledky.
Pokud nepochopíte, jak filtry ve Wiresharku fungují, omezíte svůj potenciál a nikdy plně nevyužijete jeho možnosti.
Instalace Wiresharku
Při instalaci Wiresharku budete dotázáni, zda mají mít i uživatelé bez oprávnění root možnost zachytávat síťový provoz. Odmítnutí této možnosti může vypadat lákavě, zvláště pokud si nepřejete, aby každý viděl, co se děje ve vaší síti. Nicméně, instalace Wiresharku tak, aby ho mohli používat pouze uživatelé s právy root, znamená, že všechny jeho části budou spuštěny s vyššími oprávněními.
Wireshark obsahuje více než 2 miliony řádků komplexního kódu a pracuje s vaším počítačem na velmi nízké úrovni. Z bezpečnostního hlediska je doporučeno, aby co nejméně kódu běželo s vyššími oprávněními, zvláště pokud se jedná o kód pracující na tak nízké úrovni.
Je mnohem bezpečnější používat Wireshark s běžným uživatelským účtem. Stále je možné omezit, kdo má možnost spouštět Wireshark. To vyžaduje několik dalších kroků nastavení, ale je to nejbezpečnější přístup. Prvky Wiresharku, které shromažďují data, poběží s vyššími oprávněními, ale zbytek programu bude pracovat jako běžný proces.
Pro zahájení instalace na Ubuntu zadejte:
sudo apt-get install wireshark
Na Fedoře použijte příkaz:
sudo dnf install wireshark
Na Manjaru instalaci provedete pomocí tohoto příkazu:
sudo pacman -Syu wireshark-qt
Během instalace se objeví okno s doporučením nespouštět Wireshark jako root. Pomocí klávesy Tab přesuňte zvýraznění na „
V dalším okně pomocí klávesy Tab přesuňte zvýraznění na „
Pro spuštění Wiresharku je nutné být členem skupiny „wireshark“, která je vytvořena během instalace. Tímto se řídí, kdo může Wireshark používat. Uživatelé, kteří nejsou členy skupiny „wireshark“, nemohou program spustit.
Pro přidání do skupiny „wireshark“ použijte následující příkaz:
sudo usermod -a -G wireshark $USER
Aby se nové členství ve skupině projevilo, odhlaste se a znovu přihlaste, nebo použijte tento příkaz:
newgrp wireshark
Pro ověření, zda jste byli přidáni do skupiny, použijte příkaz groups:
groups
V seznamu skupin byste měli vidět „wireshark“.
Spuštění Wiresharku
Wireshark spustíte příkazem uvedeným níže. Symbol ampersand (&) spustí Wireshark na pozadí, což vám umožní pokračovat v práci s terminálem. Okno terminálu můžete dokonce zavřít a Wireshark poběží dále.
Zadejte:
Wireshark &
Objeví se rozhraní Wireshark. Zobrazí se seznam síťových rozhraní dostupných na vašem počítači, včetně některých vestavěných pseudozařízení.
Vlnovka vedle rozhraní indikuje, že je aktivní a prochází jím síťový provoz. Rovná čára znamená, že na rozhraní není žádná aktivita. První položka v tomto seznamu je „enp0s3“, což je kabelové připojení počítače, a jak se očekává, vykazuje aktivitu.
Chcete-li začít zachytávat pakety, klikněte pravým tlačítkem myši na „enp0s3“ a z kontextové nabídky vyberte „Spustit zachytávání“.
Můžete nastavit filtry pro omezení množství zachyceného provozu. Většinou se doporučuje zachytit veškerý provoz a filtry používat až při analýze. Tímto způsobem máte jistotu, že žádná síťová událost neunikne vaší pozornosti. Nechtějte, aby vám nechtěně unikla událost, která může vysvětlit analyzovanou situaci.
U sítí s vysokým provozem se samozřejmě mohou trasování rychle zvětšit, takže filtrování během zachytávání může být v takovém případě užitečné, nebo mu můžete dát přednost z jiných důvodů.
Je důležité si uvědomit, že syntaxe zachytávacích filtrů se mírně liší od filtrů zobrazení.
Zvýrazněné ikony na obrázku, zleva doprava, označují:
Žraločí ploutev: Pokud je modrá, kliknutím spustíte zachytávání paketů. Pokud Wireshark pakety zachytává, ikona bude šedá.
Čtverec: Pokud je červený, kliknutím zastavíte probíhající sběr paketů. Pokud Wireshark pakety nezachytává, ikona bude šedá.
Žraločí ploutev s kruhovou šipkou: Pokud je zelená, kliknutím zastavíte aktuální trasování. Tím se vám naskytne možnost uložit nebo zahodit zachycené pakety a spustit nové trasování. Pokud Wireshark pakety nezachytává, bude ikona šedá.
Analýza Trasování
Kliknutím na ikonu červeného čtverce zastavíte sběr dat, aby bylo možné analyzovat pakety zaznamenané v trasování. Pakety se zobrazují v časovém pořadí a jsou barevně odlišeny dle protokolu. Detailní informace o vybraném paketu se zobrazují ve dvou spodních panelech rozhraní Wireshark.
Pro snadnější čitelnost trasování si můžete nechat Wireshark zobrazovat smysluplná jména pro zdrojové a cílové IP adresy paketů. Pro aktivaci této funkce klikněte na Zobrazit > Překlad názvů a vyberte „Vyřešit síťové adresy“.
Wireshark se pokusí vyřešit jména zařízení, která odesílala a přijímala pakety. Nemusí se mu to podařit u všech zařízení, ale u těch, které dokáže identifikovat, vám to usnadní analýzu.
Posunutím zobrazení vlevo zobrazíte další sloupce. Sloupec s informacemi zobrazuje veškeré dostupné informace, které lze z paketu získat. V příkladu níže vidíme některé požadavky a odpovědi ping.
Ve výchozím nastavení Wireshark zobrazuje všechny pakety v pořadí, v jakém byly zaznamenány. Mnoho zařízení odesílá pakety současně. To znamená, že komunikace mezi dvěma zařízeními bude pravděpodobně prokládána pakety z jiných zařízení.
Pro analýzu specifické komunikace mezi dvěma zařízeními ji můžete izolovat pomocí protokolu. Protokol každého paketu je uveden ve sloupci protokol. Většina protokolů, které uvidíte, patří do rodiny TCP/IP. Můžete specifikovat přesný protokol nebo použít Ethernet jako záchytný bod.
Klikněte pravým tlačítkem myši na libovolný paket v komunikaci, kterou chcete zkoumat a vyberte Filtr konverzace > Ethernet. V příkladu níže byl vybrán paket požadavku ping.
Zobrazí se pouze vybraná sekvence paketů, protože Wireshark automaticky vygeneroval filtr. Ten je zobrazen na liště filtrů a je zvýrazněn zeleně, což indikuje, že syntaxe filtru je správná.
Pro smazání filtru klikněte na „X“ na panelu filtrů.
Vytváření vlastních filtrů
Do lišty filtrů zadejme jednoduchý filtr:
ip.addr == 192.168.4.20
Tímto se vyberou všechny pakety, které byly odeslány nebo přijaty zařízením s IP adresou 192.168.4.20. Všimněte si dvojitého rovnítka (==) bez mezery.
Pro zobrazení paketů odeslaných zařízením (zdrojem) můžete použít ip.src. Pro zobrazení paketů, které dorazily na zařízení (cíl), použijte ip.dst, viz níže:
ip.dst == 192.168.4.20 && ip.src == 192.168.4.28
Všimněte si použití dvojitého ampersandu (&&) pro logický operátor „a“. Tento filtr hledá pakety, které dorazily na 192.168.4.20 z 192.168.4.28.
Uživatelé, kteří s filtry Wiresharku teprve začínají, se často domnívají, že takový filtr vybere všechny pakety mezi dvěma IP adresami, avšak není tomu tak.
Ve skutečnosti tento filtr vybere všechny pakety, které byly odeslány na adresu 192.168.4.20 nebo z ní, bez ohledu na to, odkud nebo kam byly odeslány. A to samé se stane s pakety z adresy 192.168.4.28. Zjednodušeně řečeno, filtruje veškerý provoz do nebo z jedné konkrétní IP adresy.
Aktivitu můžete vyhledávat i u jiných protokolů. Například můžete zadat filtr a vyhledat požadavky HTTP:
http.request
Pro vyloučení paketů, které byly odeslány ze zařízení nebo na něj, použijte vykřičník (!) a uzavřete filtr do závorek [()]:
!(ip.addr == 192.168.4.14)
Tento filtr vyloučí všechny pakety odeslané na nebo z 192.168.4.14.
Je to poněkud neintuitivní, protože filtr obsahuje operátor rovnosti (==). Možná byste očekávali, že tento filtr zadáte takto:
ip.addr !=192.168.4.14
To by však nefungovalo.
Můžete také vyhledávat řetězce v paketech podle protokolu. Následující filtr vyhledává pakety protokolu TCP, které obsahují řetězec „youtube“:
tcp contains youtube
Filtr pro vyhledávání opakovaných přenosů je užitečný pro detekci problémů se spojením. Opakované přenosy jsou pakety, které byly znovu odeslány, protože byly poškozeny nebo ztraceny při prvním pokusu o odeslání. Příliš mnoho opakovaných přenosů indikuje pomalé připojení nebo zařízení, které reaguje pomalu.
Zadejte následující:
tcp.analysis.retransmission
Vznik, trvání, zánik a šifrování
Síťové spojení mezi dvěma zařízeními začíná, když jedno zařízení kontaktuje druhé a odešle paket SYN (synchronizace). Přijímací zařízení následně odešle paket ACK (potvrzení). Indikuje, zda přijme připojení, odesláním paketu SYN.
SYN a ACK jsou vlastně dvě značky ve stejném paketu. Původní zařízení potvrdí SYN odesláním ACK a poté obě zařízení vytvoří síťové připojení.
Tento proces se nazývá trojcestné podání ruky:
A -> SYN -> B A ACK -> B
Na obrázku níže zařízení „nostromo.local“ vytvoří Secure Shell (SSH) spojení se zařízením „ubuntu20-04.local“. Trojcestné podání ruky je první částí komunikace mezi těmito dvěma počítači. Všimněte si, že dva řádky obsahující pakety SYN jsou označeny tmavě šedou barvou.
Posunutím zobrazení vpravo se zobrazí sloupce s pakety SYN, SYN/ACK a ACK handshake.
Všimněte si, že výměna paketů mezi dvěma počítači se střídá mezi protokoly TCP a SSH. Datové pakety se přenášejí přes šifrované SSH spojení, ale pakety zpráv (např. ACK) se odesílají přes TCP. Brzy odfiltrujeme pakety TCP.
Když již síťové spojení není potřeba, je ukončeno. Sekvence paketů k ukončení síťového spojení je čtyřcestný handshake.
Jedna strana odešle FIN (ukončovací) paket. Druhý konec odešle ACK pro potvrzení FIN a následně také pošle FIN, čímž vyjádří souhlas s ukončením spojení. První strana odešle ACK pro FIN, který právě přijala, a síťové spojení je ukončeno.
Čtyřcestné podání ruky vypadá takto:
A -> FIN -> B A ACK -> B
Někdy se původní FIN připojí k paketu ACK, který by byl stejně odeslán, jak je ukázáno níže:
A -> FIN, ACK -> B A ACK -> B
Právě k tomu dochází v tomto příkladu.
Pokud chceme vidět pouze provoz SSH pro tuto komunikaci, použijeme filtr, který specifikuje daný protokol. Pro zobrazení veškerého provozu protokolu SSH do a ze vzdáleného počítače zadejte:
ip.addr == 192.168.4.25 && ssh
Tímto se odfiltruje vše kromě provozu SSH do a z 192.168.4.25.
Další Užitečné Šablony Filtrů
Při zadávání filtru do lišty filtrů zůstane červený, dokud není filtr syntakticky správný. Jakmile je filtr správný, změní se jeho barva na zelenou.
Pokud zadáte protokol, jako tcp, ip, udp nebo shh, následovaný tečkou (.), objeví se nabídka. Zobrazí se seznam posledních filtrů, které obsahovaly daný protokol, a všechna pole, která lze ve filtrech pro daný název protokolu použít.
Například u ip můžete použít ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host a desítky dalších.
Níže jsou uvedeny šablony filtrů, které můžete použít jako základ:
Pro zobrazení pouze paketů protokolu HTTP: http
Pro zobrazení pouze paketů protokolu DNS: dns
Pro zobrazení pouze paketů TCP s 4000 jako zdrojovým nebo cílovým portem: tcp.port==4000
Pro zobrazení všech paketů TCP reset: http.request
Pro odfiltrování paketů ARP, ICMP a DNS: !(arp nebo icmp nebo dns)
Pro zobrazení všech opakovaných přenosů: tcp.analysis.retransmission
Pro filtrování značek (jako SYN nebo FIN): Je nutné nastavit srovnávací hodnotu: 1 znamená, že značka je nastavena, 0 že ne. Příklad: tcp.flags.syn == 1.
V tomto článku jsme probrali některé základní principy a použití filtrů zobrazení, ale možností je mnohem více.
Pro plné využití rozsahu a výkonu filtrů Wiresharku doporučujeme prostudovat si oficiální dokumentaci.