Audit síťového provozu pomocí nástroje Argus

Audit síťového provozu pomocí nástroje Argus

Co je to síťový tok? V čem se liší monitorování sítě pomocí nástrojů jako Tcpdump/Wireshark a pomocí nástroje Argus? Jak si v Linuxu zkompilovat nejnovější verzi Argusu? Jak prohlížet nasbíraná data? Tak přesně těmito otázkami se budu stručně zabývat v dnešním článku.

Co je to síťový tok?

Pěkná obecná definice síťového toku, kterou mám z předmětu Síťové aplikace a správa sítí (FIT – VUT Brno) od dr. Matouška zní: „Je to posloupnost paketů mající společnou vlastnost a procházející bodem pozorování za určitý čas.“.

Co že si pod tím tokem tedy představit? Například všechny pakety, odeslané a přijaté v rámci stahování nějakého souboru z internetu.

Pokud bychom se na to podívali z pohledu programátora, tak pro jednoduchou identifikaci toku lze využít zdrojovou a cílovou adresu a zdrojový a cílový port v hlavičce (hlavičkách) paketu. Pakety, které budou mít tyto informace stejné, se zařadí do stejného toku. V případě TCP spojení se ještě může kontrolovat začátek a konec toku, podle příznaků v TCP hlavičce. V případě UDP se za začátek spojení může pokládat první paket s danou kombinací hodnot adres a portů a konec spojení se bude hlídat nějakým časovačem.

Rozdíly v monitorování sítě na úrovni paketů a toků

Teď když už víte co to je síťový tok, tak zřejmě tušíte, že monitorování síťových toků bude dávat trochu jiné výsledky, než monitorování na úrovni jednotlivých paketů nástroji jako Tcpdump či Wireshark.

Tcpdump nebo Wireshark pracují tak, že zachytávají a ukládají každý paket, ať už celý, nebo jen prvních několik bajtů, či jen a pouze hlavičku. Výhodou dat nasbíraných těmito nástroji je jejich „detailnost“, kdy můžete zkoumat každý paket zvlášť, můžete kontrolovat adresy, porty, protokoly, příznaky nebo data, která paket obsahuje. Nevýhodou je fakt, že na vytíženější síti budou kvanta zachycených data obrovská a to bude znamenat náročnější zpracování.

Oproti tomu monitorování síťových toků poskytuje informace na vyšší úrovni, jinak řečeno nabízí data více agregovaná. Výsledky monitorování síťových toků nejsou jednotlivé pakety. Místo údajů z hlavičky a těla paketu vidíte souhrnné informace o tom kdo s kým komunikoval, na jakém portu, jakým protokolem, kolik se přeneslo paketů, kolik se přeneslo bajtů a podobně. Objem dat generovaných při monitorování toků je tím pádem mnohem menší, protože se spousta informací z paketů může zanedbat.

Pěkný příklad (obrázek), který ilustruje rozdílnost výsledků těchto způsobů monitorování je na stránkách nástroje Argus.

Jak jsem již zmínil, pro monitorování na úrovni paketů tu máme Tcpdump, Wireshark a mnoho dalších. Pro monitoring na úrovni toků určitě stojí za to zmínit Cisco NetFlow (což je konkrétní protokol) a nástroj Argus o kterém bude většina zbývajícího článku.

Cisco NetFlow

Jde o protokol, který vyvinula firma Cisco. Cisco zařízení si původně uchovávala informace o síťových tocích za účelem zrychlení routování, pak je napadlo nechat tyto data exportovat ven a vznikl NetFlow. Nyní už máme NetFlow verze 9, který mimo jiné přináší i podporu Ipv6. Pěkný článek o NetFlow naleznete na české Wikipedii.

Pokud by jste si chtěli vyzkoušet NetFlow na Linuxu nebo BSD, tak by se Vám mohli hodit tyto odkazy:

Argus

Argus je open source nástroj pro audit sítě. Je rozdělen na dvě části. Serverová část umí generovat data. Zatímco klientská část, která se skládá z několika různých nástrojů, které umí data, vygenerovaná serverovou částí, interpretovat.

To, že serverová část umí běžet jako démon a zachytávat data na vybraném síťovém rozhraní asi nikoho nepřekvapí, velice pěkná věc ale je, že serverová část umí generovat data o síťových tocích i ze souboru s daty nasbíranými Tcpdumpem nebo Wiresharkem.

Co se týče klientských nástrojů, tak jsou tu nástroje pro zobrazení zaznamenaných toků, pro jejich filtraci, pro generování statistik atd..

Kompilace Argusu – klienta i serveru pod Fedorou 14

Proč kompilovat? Protože Fedora 14 (ale i Ubuntu 10.10) mají v repozitářích pouze starou verzi 2.0.6, která je už trochu outdated, ale ještě ne tolik, aby se to dalo považovat za cool oldschool ;).

Kompilace se v podstatě skládá pouze z nainstalování závislostí, stažení souborů se zdrojovými kódy, jejich rozbalení a pak použití klasického komba:
./configure && make && make install

Jediný problém na který jsem narazil a kvůli kterému tuto „kapitolu“ o kompilaci vůbec píšu, je problém s knihovnou libpcap při kompilaci serverové části. ./configure mi totiž vyhodil velmi zvláštní hlášku, o tom, že nenašel knihovnu wpcap (WinPcap – knihovna pro zachytávání paketů ve Windows). Nebudu vás napínat, při bližším ohledání skriptu configure jsem přišel na to, že když nenajde libpcap, tak se snaží najít wpcap a když nenajde ani tu, tak si stěžuje pouze na chybějící wpcap a o libpcap už bohužel taktně mlčí. Řešení tedy spočívá v nainstalování knihovny libpcap.

Takže všechny potřebné závislosti nainstalujete yumem takto:

yum install bison
yum install flex
yum install libpcap*

Pak stáhněte zdrojáky z domovské stránky http://www.qosient.com/argus/.

Rozbalíte je, složky si otevřete v terminálu a následuje klasika v podobě:

./configure
make
su
make install

Příklad použití Argusu

Tento odstavec vychází ze článku: http://geek00l.blogspot.com/2007/12/network-flow-demystified.html

V tomto příkladu si zachytíme pár paketů pomocí tcpdumpu, který nám je rovnou zapíše do souboru pojmenovaného „dump“. Tento soubor pak překonvertujeme do formátu, který používá Argus a nakonec ukáži dva příklady manipulace s výsledným souborem pomocí klientských nástrojů.

1) Takže nejdříve si zachytíme několik paketů do souboru jménem „dump“. Pod rootem spusťte následující příkaz a pak proveďte několik spojení (Připojte se někam na ssh nebo dejte stahovat velký soubor a otevřete si ještě nějaké stránky).

tcpdump -i eth0 -w dump

2) Poté Tcpdump ukončíme stisknutím Ctrl+C. Teď si výsledný soubor „dump“ převedeme do formátu Argusu příkazem:

argus -mJRU 512 -r dump -w dump.arg

(Který nám vytvoří soubor dump.arg)

3) Nyní se můžeme podívat na zachycená spojení:

ra -L0 -nnr dump.arg -s stime saddr sport dir daddr dport spkts 
dpkts – ip

Asi se teď divíte, proč nevidíte celá spojení, ale výsledek je jakýsi „roztrhaný“. Prostě jedno spojení má několik záznamů. To je způsobeno faktem, že mezi tím co jste stahovali velký soubor (nebo měli dlouho otevřené ssh spojení),  tak vypršel časovač a Argus uložil všechna spojení co zaregistroval a začal poslouchat znovu.
Díky tomuto chování se dozvíte i o dlouhých spojeních. Kdyby měl Argus čekat až každé spojení skončí, tak by jste mohli být překvapeni, že nějaký uživatel celý den stahoval 100Gb soubor a vy jste to zjistili až večer kdy to spojení skončilo.

4) Pokud tedy chceme spojení jaksi „zkompletovat“, využijeme k tomu nástroj racluster:

racluster -L0 -nr dump.arg -s stime saddr sport dir daddr dport 
spkts dpkts

Ten spojí fragmenty jednotlivých spojení a zobrazí nám mnohem „líbivější“ výsledky.

Co jednotlivé parametry znamenají najdete v manuálových stránkách jednotlivých programů.

Jiné nástroje klientské částí Argusu jsou například:
ra, ramon, rasort, ratop, rabins, racount, ragraph, rasort, ratop, a spousta dalších.
Však se podívejte do adresáře bin/ v adresáři, se zdrojovými kódy Argus klienta kde jste provedli kompilaci.

Odkazy k Argusu

Comments are closed.