Hlavní navigace

Průvodce programem ethereal (3)

11. 5. 2006
Doba čtení: 9 minut

Sdílet

V dnešním díle se už konečně podíváme na to, jak pakety zachytávat. Ukážeme si oba způsoby spuštění odposlouchávání (přes GUI i konzoli) a také si povíme něco o Capture filtrech.

Ještě než se pustíme do samotného sniffování, chtěl bych upozornit na to, že veškeré informace v tomto článku jsou vztaženy ke klasickým etherenetovým sítím, u jiných protokolů linkové vrstvy se mohou objevit menší odlišnosti.

Ethereal nabízí dvě možnosti, jak spustit zachytávání programu:

Capture Options dialog

Otevřeme Capture Options dialog (z minulého dílu víme, že to lze provést buď přes Main toolbar – první ikona z levé strany, a nebo přes menu, Capture->Start). Jak sami vidíte, jeho obsah je rozdělen na několik panelů.

Capture options

Panel Capture

V panelu Capture nastavíme v poli Interface zařízení, ze kterého chceme odposlouchávat (při prvním odposlouchávání po startu programu je v tomto poli nastaveno Default Interface z Preferences programu, pří dalších alespoň ve verzi 0.10.9 program nastaví loopback zařízení). Hned pod tím nalezneme informaci o IP adrese, přes kterou se dané zařízení připojuje do sítě.

Přes Link-layer header type specifikujeme typ protokolu linkové vrstvy, přes který dané zařízení komunikuje. Ve většině případů sice na výběr ani nemáme, ale existují speciální případy, např. u Endance DAG karty připojené přes synchronní sériovou linku dostaneme na výběr mezi Cisco HDLC a PPP over serial.

Buffer size určuje velikost vyrovnávací paměti. Ethereal totiž všechny zachycené pakety nejdříve načítá do vyrovnávací paměti, ze které následně pakety dekóduje a vypíše výsledek (paralelně se zachytáváním dalších paketů). Kdyby se tak nedělo, mohlo by dojít k poměrně velké ztrátě paketů (v době zpracování paketu by se nic nezachytávalo). Takže pokud se vám stává, že se ztrácí z komunikace pakety, zvyšte tuto vyrovnávací paměť, protože to pravděpodobně znamená, že není schopna všechny pakety v danou chvíli pojmout.

Capture in promiscuous mode alias povolení promiskudního módu. Již v první části seriálu jste se mohli dočíst o co jde, takže jen v rychlosti zopakuji. Při promiskudním módu zařízení „přijme“ veškeré pakety, které procházejí přes toto zařízení. V případě, že odposloucháváme např. na routeru, síť je tvořena pomocí hubu a nebo topologie sítě není hvězdicová, ale třeba kruhová, tedy naším zařízením procházejí pakety určené jiným stanicím než té naší, můžeme s takto nastavením zařízením odposlouchávat cizí komunikaci.

Pomocí Limit each packet to nastavíme maximální možnou velikost jednoho paketu. Pokud se do této velikosti paket nevejde, jeho datová část se zkrátí. Takto upravený paket je označen slovem snaplen. Tímto nastavením sice snížíte zátěž počítače, ale na druhou stranu můžete při neuváženém zkracování přijít o důležité informace.

Capture filters, které v tomto panelu taktéž nastavujeme, si probereme o několik řádků níž.

Panel Capture file(s)

V tomto panelu nastavujeme přímý zápis do souborů. Nejdříve vybereme cestu k souboru pomocí Tlačítka Browse a nebo jí přímo vepíšeme do připraveného pole. Chceme-li rozdělit zachycené pakety do více souboru, zaškrtneme Use multiple files a nastavíme zde podmínku a to čas a/nebo velikost souboru, po jejíž překročení začne ethereal zapisovat do nového souboru. Prefix souboru vypadá takto: vas_nazev_00001_rokmesicdenhodinaminutasekunda, kdy byl vytvořen. V poli Ring buffers with n files můžeme nastavit, při jakém počtu souborů má ethereal nejstarší soubor mazat. A Stop capture after n file(s) nastavuje, po jakém počtu souborů má program ukončit odposlouchávání.

Dále zde máme panel Stop Capture, kde můžeme nastavit zastavení odposlouchávání po průchodu n paketů, po překročení určité velikosti informací a nebo po určitém čase.

Předposlední panel Options se týká nastavení. Update packet list in real time zapříčiní to, že v průběhu sniffování se budou nové pakety objevovat hned v Packet list pane a můžeme je rovnou analyzovat, což je nesporná výhoda. Ale zpomalí se tím celý proces zachytávání a může docházet k ztrátě paketů. A také, pokud zapneme toto nastavení, přijdeme o možnost rozdělovat zachycené pakety do více souborů ( funkce Use multiple files nebude přístupná).

A poslední panel, Name resolution, je už vzpomínaný překlad adres na jména. Teď už stačí kliknout pouze na tlačítko OK a odposlouchávání může začít.

Konzole/příkazový řádek

ethereal -i nazev_zarizeni -k 

Pomocí přepínače „i“ specifikujeme název zařízení (např.: eth0) a přepínač „k“ zase udává, že chceme začít naslouchat okamžitě. Myslím, že tento příkaz ocení především uživatelé, kteří budou ethereal zapínat často, protože si potom rovnou můžou celý proces spouštění zkrátit. Zde se rozchází postup pro uživatele Windows a těch z rodiny Unix:

Unix

Přidáním aliasu do konfiguračního souboru vašeho shellu. Pro uživatele shellu bash by alias mohl vypadat takto (přidává se do .bashrc v domovském adresáři, viz man bash) :

alias ethcap='ethereal -i eth0 -k' 

A pak stačí už jen v konzoli napsat ethcap a ethereal by se měl zapnout a začít naslouchat.

MS Windows

Již minule jsem poznamenal, že ve Windows se neidentifikují síťová zařízení zrovna přítulnými názvy a vypisování těchto názvů do příkazového řádku či dialogu Start->spustit(run) je záležitost pro šílence, ale naštěstí si můžeme pomoci velice jednoduše, a to dávkovými soubory. K tomu ale potřebujeme zjistit název síťové karty. Zde využijeme samotný ethereal. Otevřete si okno Interfaces (Capture->Interfaces) a zde vyberte síťovou kartu, na které chce naslouchat (každá síťová karta je prezentována popisem a ip adresou). Klikněte na tlačítko Prepare, otevře se vám okno Capture dialog (o kterém budeme mluvit níž) a v něm v kolonce interface naleznete název zařízení. Pak už stačí v adresáři s etherealem vytvořit textový soubor(pokud umístíte dávkový soubor jinam, musíte uvést celou cestu k programu ethereal.exe), přidělit mu koncovku bat a vepsat do něj:

ethereal -i nazev_zarizeni -k 

Soubor uložit a při poklikání na něj by se měl otevřít ethereal a začít naslouchat.

Samozřejmě tyto dva představené přepínače nejsou zdaleka jediné, které lze použít. Shrnutí najdete v tabulce pod tímto odstavcem.

Seznam přepínačů
Přepínač Význam Parametr
-a automatické zastavení zapisování do souboru duration:čas, filesize:velikost
-b je-li -a, tak určuje počet souborů, které se mohou postupně vytvořit počet, 0 – nekonečno
-B výška pakcet bytes pane výška
-c počet paketů, které má program zachytit, používá se s -k počet
-f nastavení capture filtru filtr
-h nápověda /
-i specifikace zařízení název zařízení
-k start zachytávání po spuštení /
-l označení vždy posledního přích. paketu, vyžaduje -S /
-L vypsání protokolů linkové vrstvy, které zařízení umí zpracovat /
-m font programu název fontu
-n zákaz překladu adres na jména /
-N povolení překladu adres na jména m MAC, n síťová vrstva, t transp. vrstva
-o nastavení (viz konfigurační soubor preferences) název:hodnota
-p vypnutí promiskudního módu /
-P výška Packet list pane výška
-Q po skončení zachytávání se program ukončí /
-r otevře soubor po spuštení název souboru
-R nastavení display filtru filtr
-s maximální možná velikost paketu velikost
-t nastavení time reference r relativní, a absolutní, ad abs. + datum
-T výška packet details pane výška
-v verze programu /
-w spec. souboru pro zachycenou kom. název souboru
-y nastavení linkových protokolů, které má program zachytávat typ
-z vytištění statistik (viz man) statistika

Capture filter

Nyní se podíváme blíže na pravidla filtrování při zachycování komunikace. Tyto filtry jsou založeny na libpcap filtrovacím jazyce. Ethereal navíc disponuje jednoduchým „editorem“ těchto filtrů, spustit lze buď Capture->Capture filters nebo v Capture options dialogu kliknutím na Tlačítko Capture filter. Bohužel tento „editor“ nenabízí více než pojmenování filtru vlastním jménem a jeho uložení, ale i tak tato funkce ušetří práci. Ale zpátky k samotným filtrům, syntaxe vypadá takto:

(not) vyraz and/or (not) vyraz ... 

Jak můžeme vidět, pomocí prvků Booleovy algebry :

not – negace – pravidlo bude mít opačnou hodnotu
and – logický součin – podmínka před i za and musí platit, aby program paket zaznamenal
or – logický součet – stačí pouze splnění jedné podmínky k registrování paketu

Výrazy se pak mohou skládat z následujících slov (slova uvedená v závorkách jsou nepovinné) :

(scr/dst) host <host> – hostitelské jméno či ip adresa, které(mu) budeme naslouchat (a nebo přidáním not nebudeme). Dále můžeme specifikovat, jestli se nás zajímá zdrojový (src) nebo cílový(dst) host.

ether (src/dst) host <ehost> – prakticky stejné jako host, jenom se vztahuje na ethernetové adresy.

gateway host <host> – tato možnost odchytává pakety, kde je host používán jako brána(gateway). Tedy v případě, kdy pakety procházejí hostem, ale zdrojová ani cílová adresa neodpovídá IP adrese hosta.

(src/dst) net <net> (mask [mask <maska>] / [len <len>] ) – tímto můžeme nastavit podsíť (např.: 192.168), síťovou masku nebo takzvané CIDR.

(tcp/udp) (src/dst) port <port> – port, na kterém budeme/nebudeme naslouchat.

less/greater <length> – ethereal bude přijímat buď menší (less) a stejné veliké nebo větší (greater) a stejně veliké pakety než číslo lenght.

ip/ether proto <protokol> – propouští jen určitý protokol

ether/ip broadcast/mul­ticast – filtruje buď broadcast nebo multicast pakety

<expr> relop <expr> – tento způsob filtrování je složitější, <expr> zastupuje matematický výraz složený z celočíselných konstant a operátorů a relop je jeden z následujících znaků >, <, >=, <=, =, != . Více se o této možnosti dozvíte v manuálových stránkách programu tcpdump (pokud nemáte k dispozici, navštivte například www.hmug.org/man/8/tcpd­ump.html.

A nyní několik ukázek:

src host 10.1.1.100 

Zdrojový host musí mít ip adresu 10.1.1.100

tcp port 21 or tcp port 80 

registruje pouze tcp komunikace přes port 21 (standartně ftp) a 80 (standartně http)

net 10.1.1 

Pakety jsou registrovány pouze z podsítě 10.1.1

tcp port not 21 and port not 25 

Zachytí vše kromě tcp portu 21 (standartně ftp) a portu 25 (tcp standartně smtp ovšem toto pravidlo nebude registrovat ani udp pakety)

Ostatní výrazy se aplikují úplně stejným způsobem. A ještě jedno důležité upozornění: u tohoto typu filtrování (na rozdíl od display filtrů, o kterých se budeme bavit příště) nedochází pouze k vizuální filtraci, ale vyfiltrované pakety se skutečně nikam neuloží.

Průběh sniffování

Nyní jsem tedy nějakým způsobem spustili zachytávání paketů. Pokud jsme nevypnuli Capture info dialog, máme nyní před sebou kromě samotného okna etherealu i právě toto okno, které nás informuje o celkovém počtu přijatých paketů, procentově i celkově o vybraných protokolech a také o době, po kterou pakety odchytáváme.

Live

Pomocí toho dialogu také můžeme odposlouchávání vypnout (překvapivě tlačítkem Stop). Další možností je stisknutí prvního tlačítka zleva na Main toolbaru (které se mění podle potřeby ze start na stop a obráceně) a nebo přes menu v položce Capture. A je to. V Packet list pane byste nyní měli vidět všechny zachycené pakety (v případě zaškrtnuté položky Update list of packets in real time jste samozřejmě zachycené pakety mohli už prohlížet během odchytávání).

CS24_early

Poslední dialog, o kterém se dneska budeme bavit, je Interfaces. Toto okno je velice jednoduché, obsahuje pouze seznam zařízení (název + ip adresa) a u každého zařízení dvě tlačítka – Capture a Prepare. První kliknutí na tlačítko Capture začne program ihned odposlouchávat z daného zařízení. Po kliknutí na tlačítko Prepare se otevře Capture options dialog, který bude mít nastavený v poli Interface zařízení, u kterého jsme toto tlačítko stiskli, ale to už se opakuji.

A to je z dnešního dílu už všechno. Příště se zaměříme na analýzu zachycených paketů. Podíváme se na to, jak pracovat se soubory, představíme si i druhý typ filtrace, display filtry, ukážeme si zajímavou funkci Follow TCP stream a možná se podíváme i na statistiky.

Byl pro vás článek přínosný?

Autor článku