ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA APLIKOVANÝCH VĚD KATEDRA INFORMATIKY A VÝPOČETNÍ TECHNIKY
NÁVRH SYSTÉMU SLEDOVÁNÍ A VYHODNOCOVÁNÍ PROVOZU POČÍTAČOVÉ SÍTĚ DIPLOMOVÁ PRÁCE
Jan Nejman Studijní program: 3902T Inženýrská informatika Studijní obor: 3902/01 Informatika a výpočetní technika (1996 - 2001)
Vedoucí diplomové práce: Dr. Ing. Pavel Šmrha Plzeň, květen 2001
Návrh systému sledování a vyhodnocování provozu počítačové sítě Abstrakt: Cílem projektu je návrh modulárně řešeného distribuovaného systému NetFlow Monitor, který umožňuje vyhodnocování síťového provozu zpracováním NetFlow statistik exportovaných ze směrovačů Cisco. Monitor umožňuje analýzu provozu téměř v reálném čase, inteligentní filtraci, agregaci a statistické vyhodnocení dat. Dále poskytuje multikriteriální selekci dat na úrovni jednotlivých datových toků (například podle zdrojové/cílové IP adresy, použitého protokolu, portů apod., zahrnuje i heuristické metody umožňující zpracování protokolů s dynamickými porty. Systém by měl být zároveň schopen inteligentně upozorňovat na podezřelé aktivity síťového provozu (například bezpečnostní incidenty, chyby směrování apod.) zobrazováním varovných zpráv.
Monitoring and evaluating system of network traffic Abstract: The goal of the project is the design of the distributed NetFlow Monitor supporting evaluation of the network traffic using NetFlow statistics exported from Cisco routers. It provides nearly real-time traffic monitoring, smart flow filtration, aggregation and statistical evaluation. It is capable of providing multicriterial data flow selection using source/destination IP addresses, protocols, ports etc., including heuristic methods for protocols using dynamic ports. The NetFlow Analyzer should be able to deal with suspicious network activities (e.g. security attacks, routing troubles etc.) by displaying appropriate warning messages.
1 Úvod ............................................................................................................. 3 2 Současné technologie analýzy rozsáhlých sítí........................................... 4 2.1 Analýza a monitorování sítě ........................................................................................4 2.2 Současné produkty pro monitorování sítě....................................................................4 2.3 Směrovací techniky založené na technologii přepínání ...............................................8 2.3.1 Klasické metody pro přepínání paketů na třetí vrstvě..........................................8 2.3.2 Cisco Express Forwarding ...................................................................................9 2.3.3 Tag Switching......................................................................................................9 2.3.4 NetFlow Switching ............................................................................................10 2.4 NetFlow Export .........................................................................................................11 2.4.1 Použití NetFlow Exportu ...................................................................................11 2.4.2 Verze a formát NetFlow Exportu.......................................................................12
3 Bezpečnost počítačové sítě........................................................................ 13 3.1 3.2
Útoky typu odepření služby (Denial Of Service Attacks) .........................................13 Používané DDoS nástroje ..........................................................................................16
4 Popis programových prostředků............................................................. 17 4.1 4.2 4.3 4.4
Perl.............................................................................................................................17 PHP............................................................................................................................18 MySQL databáze .......................................................................................................19 Knihovna GD.............................................................................................................20
5 Návrh architektury NetFlow analyzátoru .............................................. 21 5.1 NetFlow Redirector ...................................................................................................22 5.2 NetFlow Collector .....................................................................................................22 5.2.1 Popis programu..................................................................................................22 5.2.2 Detekce spojení v pasivním módu .....................................................................23 5.3 NetFlow Database......................................................................................................24 5.3.1 Popis programu..................................................................................................24 5.3.2 Implementace bezpečnostních modulů ..............................................................25 5.4 Návrh databázového modelu .....................................................................................26 5.4.1 E-R Model .........................................................................................................26 5.4.2 Definice tabulek.................................................................................................27 5.5 NetFlow Web.............................................................................................................29 5.5.1 Hlavní statistiky (menu Main) ...........................................................................31 5.5.2 Výpis bezpečnostních incidentů (menu Event)..................................................35 5.5.3 Statistika přenesených dat (menu Audit) ...........................................................36 5.5.4 Statistika TOP 10 (menu Top) ...........................................................................37 5.5.5 Informace o databázi a o směrovačích (menu Stats)..........................................40 5.5.6 Pomoc (menu Help) ...........................................................................................41
1
6 Instalace, použití a optimalizace výkonu ................................................ 42 6.1 Požadavky na hardwarové vybavení..........................................................................42 6.2 Instalace .....................................................................................................................42 6.2.1 MySQL databáze ...............................................................................................42 6.2.2 Perl.....................................................................................................................42 6.2.3 Perl moduly pro přístup k databázi MySQL ......................................................43 6.2.4 Instalace WWW serveru a PHP .........................................................................43 6.2.5 Vytvoření databáze a tabulek.............................................................................45 6.2.6 Instalace NetFlow Monitoru ..............................................................................45 6.2.6.1 Konfigurace NetFlow Redirectoru.................................................................46 6.2.6.2 Konfigurace NetFlow Collectoru...................................................................46 6.2.6.3 Konfigurace NetFlow Database .....................................................................46 6.2.6.4 Konfigurace NetFlow Web ............................................................................46 6.3 Použití NetFlow Monitoru .........................................................................................47 6.4 Optimalizace výkonu MySQL serveru ......................................................................47 6.4.1 Tipy pro kompilaci MySQL...............................................................................47 6.4.2 Nastavení parametrů serveru..............................................................................48
7 Závěr .......................................................................................................... 50
2
1 Úvod Hlavním cílem práce je návrh modulárně řešeného systému pro sledování a vyhodnocování síťového provozu takřka v reálném čase založeném na zpracování NetFlow statistik exportovaných ze směrovačů Cisco. Výsledný systém by měl poskytovat inteligentní filtraci, agregaci a statistické zpracování získaných dat s případnou detekcí bezpečnostních incidentů nebo anomálního chování sítě. Cílem navrženého analyzátoru je hlavně umožnění výběru a zobrazení specifického datového toku. To lze provést například podle zdrojové/cílové IP adresy, použitého protokolu, zdrojového/cílového portu apod. Systém by měl mít možnost současného zpracování dat z různých směrovačů. Proto pro vytvoření distribuovaného systému je důležité navrhnout strukturu monitoru tak, aby se skládala z několika modulů. Jednotlivé moduly pak mohou spolupracovat a vytvářet tak i velmi rozsáhlý systém. Pro přehledné zobrazení výsledků v HTML formátu lze výhodně použit interpretovaný jazyk PHP. Všechny vytvořené stránky pak mohou mít jednotný vzhled a mohou být propojeny hypertextovými odkazy. Hypertextové odkazy zlepší přehlednost a orientaci v celém systému. To umožňuje vytvoření rozsáhlého systému, který je přehledný a snadný na ovládání. Pro grafickou reprezentaci získaných dat lze v systému implementovat barevné grafy, které mohou charakterizovat nejaktivnější stanice nebo uzly, nejpoužívanější protokoly, služby apod.
Stručný obsah: V druhé kapitole jsou probrány současné technologie analýzy rozsáhlých sítí a dostupné programy pro analýzu dat, směrovací techniky založené na technologii přepínání a popis NetFlow Exportu. Ve třetí kapitole je probrána velmi zkráceně bezpečnost počítačových sítí, možné typy útoků apod. Čtvrtá kapitola popisuje použité programové vybavení a vlastní návrh analyzátoru. Pátá kapitola se obsahuje vlastní programovou realizací zadání. Předposlední, sedmá, kapitola popisuje instalaci, použití a optimalizaci celého systému. V poslední kapitole je rozbor a vyhodnocení dosažených výsledků.
3
2 Současné technologie analýzy rozsáhlých sítí 2.1 Analýza a monitorování sítě Účelem oprávněného monitorování sítě je buď odhalení provozních problémů, nebo zajištění bezpečnosti sítě (detekce napadení či snaha o odhalení útočníků). Služba sledování síťového provozu umožňuje správcům sítě sledovat vytíženost daného systému. Cílem této služby je zajistit, aby vlastnosti daného informačního systému splňovaly požadavky kvalitního systému, tj. aby systém byl funkční, výkonný, spolehlivý, ekonomický a stabilní. Vytvořený monitorovací systém ukáže, zda je nedostačující nebo zda se jedná o nesprávné, případně neefektivní využívání (například problém pomalého přístupu, zablokování přístupu k Internetu, výpadky lokální počítačové sítě). Na základě zavedení systému sledování provozu je možné vydávat operativní, taktická i strategická rozhodnuti o informačním systému a způsobu jeho užívání tak, aby informační systém vykazoval všechny vlastnosti dobrého systému.
2.2 Současné produkty pro monitorování sítě V dnešní době existuje mnoho komerčních i volně dostupných produktů, které se zabývají monitorováním a analýzou počítačové sítě. Z nich heslovitě popíšeme nejdůležitější nebo nejzajímavější z nich. • Statistické zpracování NetFlow Exportů Velmi obsáhlý účtovací systém s příjemným webovským rozhraním. Systém vznikl pod záštitou sdružení CESNET. Systém zpracovává NetFlow exporty z přepínačů Cisco plus integruje data obdržená i z jiných zdrojů, jako jsou například SNMP statistiky, ap. Systém je vytvořen nad databázi MySQL s využitím interpretovaného jazyka Perl. Hlavním řešitelem tohoto systému je Tomáš Košňar. • Fluxoscope Systém napsaný v Lispu, který implementuje různé přístupy k agregaci NetFlow dat. Je používán sdružením SWITCH (Swiss Academic and Research Network) k prověřování, monitorování zaoceánských linek (JANET) a slouží k zpracování ohromného množství dat. • Transatlantic Itemisation Service Statistické vyhodnocení síťového provozu do Ameriky, které používá sdružení JANET jako svůj vlastní systém. Umožňuje organizacím přijímat detailní účtovací data jejich sítí či podsítí. Každá organizace zaregistrovaná u JANET může odeslat seznam síťových prefixů, pro které chce monitorovat a vyhodnocovat síťový provoz, který prochází přes Atlantik.
4
• Purgatorio NetFlow statistika pro páteřní linky sítí připojených do TEN-155 pro evropské výzkumné sítě. Tento systém používá sdružení DANTE. Dalším jejich systémem je FloodLog, který byl navržen pro detekci útoků typu odepření služby (Denial-of-Service attacks). Pokud by se systém měl porovnat s ostatními detektory DoS útoků, tak FloodLog obsahuje další vylepšení, které navíc musí pracovat v místech s velmi vysokou agregací dat (enormní množství datových toků). • MRTG - The Multi Router Traffic Grapher Velice rozšířený a populární nástroj pro monitorování síťového provozu. MRTG generuje HTML stránky s obrázky ve formátu PNG, které zobrazují dané vytíženosti linek.
Obrázek 2.1: MRTG statistika.
MRTG se skládá ze skriptu napsaného v jazyce Perl, který používá SNMP knihovnu, a z programu napsaného v jazyce C, který zaznamenává provoz a vytváří uvedené grafické reprezentace. Tyto grafy jsou pak vkládány do www stránek, které už mohou být zobrazovány odkudkoliv. Dá se zobrazit detailní denní, týdenní, 14 denní a roční provoz. S využitím nástroje MRTG se dá také monitorovat jakákoliv SNMP proměnná, která se navolí v konfiguračních souborech. Často je kromě síťového provozu ještě monitorováno vytížení jednotlivých procesorů, počet přihlášených lidi k systémům, dostupnosti modemů, atd. MRTG umí agregovat více zobrazovaných zdrojů do jediného obrázku, což je velice výhodné pro vytváření celkového přehledu o měřeném systému. Autorem systému je v prvé řadě Tobias Oetiker. • GRNET Accounting Graphs Je používán pro generování grafů vytíženosti linek mezi GRNET a Evropou či Amerikou. Grafy jsou podobné jako MRTG grafy. O tento systém se stará Dimitrios Kalogeras. • CoralReef CoralReef je komplexní software navržený organizací CAIDA pro sběr a analýzu dat z pasivních monitorů síťového provozu. Může zpracovávat data buď v reálném čase nebo analyzovat již uložené vzorky. Při zpracování
5
v reálném čase monitoruje systém síťové rozhraní s využítím knihovny libpcap. Distribuce v sobě obsahuje FreeBSD ovladače pro Apptel POINT (OC12 a OC3 ATM) a FORE ATM (OC3 ATM) karty, a podporu linuxových ovladačů pro WAND DAG (OC3 a OC12, POS a ATM) karty. Kromě toho balík obsahuje i vlastní programové API pro jazyk C a v neposlední řadě i aplikace pro odchytávání, analýzu a generování webovských hlášení. Tento balík vyvíjí organizace CAIDA ve spolupráci s internetovou komunitou. CoralReef je následník staršího softwaru Coral. • Mantra (Monitor and Analysis of Traffic in Multicast Routers) Mantra je nástroj pro monitorování multicastových datových přenosů, které prochází směrovačem. Výsledkem systému je grafický výstup multicastové infrastruktury. Výsledky jsou zpracovány v pravidelných intervalech, každých 15-30 minut. Jednotlivé snímky mohou být zobrazovány v několika různých módech. Matra je ve stále ve vývoji a je vytvářena ve spolupráci organizací CAIDA a Network and Multimedia Systems Lab pod záštitou Kalifornské Univerzity v Santa Barbaře. • CFLOWD Cflowd je analyzátor datových toků používaný pro analýzu Cisco NetFlow exportů. Nejnovější verze obsahuje prostředky pro sběr, ukládání a základní analýzu dat. Možností, kde se dá tento analyzátor použít je mnoho, od účtování, síťového plánování a monitorování, analýzy trendů, vytváření uživatelských profilů, až po různé bezpečnostní výzkumy. Celá distribuce se skládá z několika modulů: 1. cflowdmux - Tato část se stará o příjem NetFlow exportů z jednoho či více směrovačů. Obdržená data zapisuje do sdílené paměti, kde si je mohou odebírat jednotliví klienti, kteří chtějí mít přístup k nezpracovaným datům. 2. cflowd - Čte nezpracovaná data (nasbíraná cflowdmux) a vytváří tabulky se souhrnem síťového provozu (matice sítí, portů, rozhraní, protokolů a další). 3. cfdcollect - Tento blok se stará o centrální zpracování tabulek od různých instancí cflowd. Tato data jsou pak v pravidelných intervalech archivována. Jednotlivé archivy, pak mohou být přístupny i jiným aplikacím, které obsahují podporu funkcí arts++ knihovny. • NeTraMet NeTraMet je volně dostupná implementace RTFM architektury pro Network Traffic Flow Measurement, kterou vytváří a podporuje Nevil Brownlee na Univerzitě v Aucklandu. Nevil Browlee také navrhl verzi NeTraMetu, která používá knihovnu CoralReef pro čtení hlaviček paketů. Tento software pak může pracovat s jakýmikoliv daty, které používá CoralReef. Program je funkční, stabilní a hojně využíván po celém světě, což dokazuje živá emailová konference NeTraMetu. NeTraMet je založen na RTFM architektuře.
6
Realtime Traffic Flow Measurement (RTFM) Architektura Zobecněná pravidla pro měření datových toků, která byla vytvořena v Internet Engineering Task Force (IETF) okolo roku 1991. Tato architektura je popsaná v kolekci několika RFC 2721, 2722, 2723, 2724 a popisuje distribuované rozložení síťových měřících jednotek, které zkoumají jednotlivé datové toky a vytváří své vlastní tabulky těchto naměřených dat. NetTraMet je SNMP agent, který implementuje tyto vlastnosti. Kdokoliv pak (kdo má na to právo samozřejmě), může interaktivně komunikovat s měřící sondou. RTFM definuje sadu asi 40 vlastností, které mohou být použity k popsání paketu. Nejdůležitějšími jsou vlastnosti adresy, které specifikují adresu na síťové úrovni. Například pro IP pakety je to zdrojová a cílová adresa. RTFM sonda se konfiguruje pravidly, která jsou zadána ve speciálním jazyku. • Skitter Skitter je nástroj pro aktivní testování sítě, který analyzuje topologii a výkonnost jednotlivých částí i rozsáhlé počítačové sítě. Mezi jinými měří cestu IP paketů, průměrné doby přenosu dat, změny ve směrovacích tabulkách, zobrazení stavu síťových linek. Skitter tyto hodnoty získává pouze pravidelným odesíláním hromadných ICMP zpráv, na které měřené stanice odpovídají. Pokud některá organizace nechce, aby se dostávaly do její sítě ICMP pakety ze Skitteru, mohou na emailu
[email protected] požádat o vyřazení svých podsítí z monitorování. • Perf Perf je balík nástrojů pro monitorování výkonnosti sítě. Využívá ICMP zprávy, které zasílá v náhodných intervalech na stanice, které jsou uvedeny v konfiguraci jako monitorované. Výstup je opět přes CGI rozhraní zobrazován na www stránkách. Distribuce je určena jen pro architektury Sparc, Solaris a Digital Unix. Autorem balíku je Bruce Morgan. • NFA NFA je vývojové programovací prostředí organizace PARNet. Jejich systém pracuje s NetFlow exporty verze jedna a pět. Tento nástroj v pravidelných intervalech analyzuje informace, které zpracoval blok NNstat nebo jiný NetFlow software. Každých 5 minut jsou zobrazovány statistické výstupy o propustnosti sítí, počtu přerušených spojení, zdrojových podsítí a používaných portů. Pro zobrazování statistických dat jsou v balíku dva CGI programy, které vytváří přehledné tabulky, zobrazitelné z webovského prohlížeče. Distribuce je určena pro architektury Intel 386, Sparc, Solaris nebo pro Digital Unix.
7
• NetFlow Accounting Project NetFlow systém, který používá také organizace PARNet. Skládá se ze čtyř komponent. 1. Cisco NetFlow software, který je nainstalován na centrálním směrovači. 2. NFD (NetFlow Daemon), je to tzv. „collector“, čte NetFlow exporty a zapisuje je jako nezpracovaná data přímo na disk. 3. NFAD (NetFlow Accountancy Daemon). Tento blok analyzuje uložená data na disku a vytváří jednotlivá hlášení a statistiky. Celkové výsledky jsou uchovány po dobu několika měsíců. Nezpracovaná data zabírají okolo 2100 MB, zpracovaná pak 1050 MB, celkové výsledky méně jak 1 MB a statistická data okolo 4 MB. Z toho vyplývá, že pro měření je nutnost mít disk o přibližné kapacitě 4 GB. 4. Sada programů, které zobrazují výsledky NFAD na www stránky. Tyto programy musí běžet na serveru, kde je spuštěn i NFAD.
2.3 Směrovací techniky založené na technologii přepínání Přepínání se skládá z bloku načtení paketu na vstupním rozhraní, zjištění, jak dále poslat paket 1, a z bloku odeslání paketu na výstupní rozhraní. Rychlost s jakou směrovač provádí tyto úkoly je nejdůležitější složkou pro měření výkonnosti celé sítě. Zvláště na rychlých páteřních linkách je důležitá rychlost přepínání paketů. Pro přepínání paketů na 3. vrstvě ISO modelu existuje mnoho metod. Kromě klasické metody přepínání se často v zařízeních Cisco používají i další nové technologie NetFlow přepínání, Cisco Express Forwarding (CEF) a přepínání na základě značek (tagů).
2.3.1 Klasické metody pro přepínání paketů na třetí vrstvě Proces vlastního přepínání je nejpomalejší metoda v celé řadě operací, které směrovač zajišťuje. Když je paket přijat na vstupním rozhraní, systémový procesor je na čas pozastaven (je vyvoláno přerušení). Tento čas je potřebný pro okopírování paketu z vyrovnávací paměti rozhraní do systémové paměti. Procesor pak vyhledá cílovou cestu ve směrovací tabulce a na jejím základě zjistí výstupní rozhraní, do něhož má paket odeslat. Paket je přepsán správnou hlavičkou pro korektní výstupní zařízení a je vyslán na rozhraní. Záznam o hlavičce pro cílovou síť je uložen ve vyrovnávací paměti pro urychlení přepínání, takže pro další příchozí pakety se stejnou cílovou adresou se již 1
záleží na směrovací technologii, QoS a bezpečnostních hlediscích
8
nemusí zjišťovat nová hlavička. Rychlé přepínání je standardně povoleno pro většinu protokolů, ale v některých případech by mělo být zakázané, například pokud je připojen k síti server paralelní linkou. Směrovač totiž zjišťuje cestu jen při příchodu prvého paketu, pokud existuje paralelní cesta, tak se o ní nikdy nedoví. Autonomní přepínání využívá samostatné vyrovnávací paměti, které jsou umístěny přímo na vstupních rozhraních. Přepínání pak probíhá zcela nezávisle, bez nutnosti přerušovat běh systémového procesoru. Optimum switching je podobné jako rychlé přepínání, ale je rychlejší, protože využívá rozšířený algoritmus ukládání a vyhledávání ve vyrovnávací paměti. Optimum switching je možné použít na směrovačích vybavených Route/Switch procesorem (RSP).
2.3.2 Cisco Express Forwarding CEF je patentovaná technologie společnosti Cisco pro velmi rychlé přepínání paketů mezi velkými páteřními sítěmi a Internetem. Algoritmus CEF využívá tzv. „Forwarding Information Base“ (FIB). Používání FIB je mnohem méně náročné na procesor než jiné metody pracující na přepínání paketů na třetí vrstvě. FIB tabulky obsahují směrovací informace pro všechny směry. CEF je vyvinut pro Web aplikace a jiné interaktivní aplikace, které jsou charakteristické krátkým trváním relace na více cílových adres. Využití algoritmu CEF je zvlášť důležité pro sítě, kde nejsou instalovány vyrovnávací (cache) servery ve vnitřní síti. Bližší informace lze nalézt na www stránkách společnosti Cisco. 2.3.3 Tag Switching Tag switching mělo mírně odlišné cíle než jiné přepínací metody. Přepínání na základě značek (tagů) je optimální v sítích, které jsou tvořeny několika směrovači a které podporují tuto metodu. Tag switching je firemní Cisco implementací IETF standardu pro multiprotocol label switching (MPLS). Hlavní myšlenkou tohoto algoritmu je označení prvního paketu. Další pakety pak mohou být (na základě značky) urychleně odeslány na cílovou stanici. Značení paketů minimalizuje zátěž procesoru a značně zmenšuje zpoždění dat. S využitím značek se dá velmi dobře implementovat rozložení zátěže na paralelní cesty, QoS a další. Informace o značce je vložena mezi hlavičky druhé a třetí vrstvy, nebo jako část hlavičky třetí vrstvy (pokud to protokol třetí vrstvy dovoluje). V některých realizacích druhé vrstvy (jako ATM) se může značka uložit přímo v hlavičce druhé vrstvy. Síť, která používá směrování na základě značkování, se skládá ze tří hlavních součástí:
9
1. Hraniční Tag směrovače (Tag edge routers): jsou umístěny na hranicích této přepínané sítě a jejich úlohou je označkovat příchozí pakety. 2. Tag Přepínače (Tag switches): směrovače, které podporují algoritmus přepínání podle značek. Mohou podporovat i klasické metody přepínání na základě druhé či třetí vrstvy. 3. Protokol distribuce značek (Tag Distribution Protocol - TDB): distribuuje informace o značkách mezi zařízeními, které jsou v této síti. Hraniční směrovače používají směrovací tabulky vygenerované standardním směrovacím protokolem k přiřazení a k distribuci informací o značkách.
2.3.4 NetFlow Switching NetFlow switching je relativně nová technologie, která je navržená pro prostředí, kde je požadováno, aby na pakety byla aplikována bezpečnostní pravidla, aby byla zaručená určitá kvalita služeb (QoS) a účtování (traffic accounting). Příkladem může být hraniční směrovač mezi vnitřní sítí a Internetem. NetFlow přepínání identifikuje síťový provoz mezi jednotlivými uzly a pak rychle přepíná pakety jednotlivých datových toků. To dovoluje správcům sítě získávat informace o datovém toku a využití sítě, čehož bývá využíváno pro platby za služby a plánování správného rozložení zátěže sítě. Data se mohou analyzovat bez zpomalování procesu přepínání paketů.
První paket
Routovací tabulka
Přístupový seznam
Priorita front
Účtovací data
Přepínání
Kontrolní blok
Fronta
Účtování
NetFlow statistika
NetFlow Exporty
NetFlow cache
Další NetFlow pakety přepínání
Obrázek 2.2: Princip NetFlow přepínání.
10
UDP pakety
Popis funkce NetFlow přepínání je zřejmý z obrázku 2.2. První paket datového spojení projde celou řadou bloků. Tyto bloky jsou náročné na procesorový čas i na velikost paměti. Po průchodu paketu těmito bloky přepínač vygeneruje jednoznačný identifikační popis datového toku. Tato značka se poté uloží do tzv. „NetFlow Cache“. Specifikaci toku tvoří jen páry zdrojová/cílová IP adresa a zdrojový/cílový port. Další příchozí paket výše popsaného datového toku již neprochází uvedenými bloky, protože existuje jeho popis uložený v cache paměti. Přepínač ho na základě tohoto popisu rovnou odešle na příslušné rozhraní (případně zahodí). Tedy rozhodnutí, co se má s paketem stát, se děje už jen na základě popisu uloženého v bloku „NetFlow Cache“. Pojem NetFlow Switching se používá při jakémkoliv přepínání, které obsahuje účtovací mechanizmy, které umožňují správcům sítě testovat síťový provoz. 2.4 NetFlow Export V závislosti na tomto přepínání (založeném na technologii NetFlow a na požadavcích správců sítě) byla ve směrovačích implementována funkce pro export informací o jednotlivých datových tocích. Tyto exporty dat jsou nazývány NetFlow Data Export (dále budeme používat pojem NetFlow). NetFlow Data Export používá stejnou tabulku jako přepínač, kterou v pravidelných intervalech2 posílá „bezestavovým“ UDP protokolem na správcovské PC nebo na monitorovací stanici. Tyto exporty tvoří ohromné množství dat, zvláště na rychlých ATM sítích 3. To samozřejmě s sebou přináší mnoho problémů, mezi nimiž často bývá i to, že monitorovací stanice je připojena standardní 10Mbit/s linkou. Řešením je předzpracování dat na jiném počítači, který je připojen na rychlé lince, pokud možno na stejném segmentu, jako je přepínač (směrovač). 2.4.1 Použití NetFlow Exportu 1. Monitorování sítě (Network Monitoring) - umožňuje monitorování sítě téměř v reálném čase. Techniky založené na analýze NetFlow Exportů se používají k přehlednému zobrazování datových toků procházejících jednotlivými směrovači. Poskytují aktivní detekci problémů na síti a jejich odstraňování. 2. Monitorování a analýza aplikací (Application Monitoring and Profiling) Detailní statistika používání aplikací v časových úsecích. Toho se dá využít k plánování a navržení správné topologie sítě. Například umístění a nastavení Web serveru.
2 3
po zaplnění cache ihned nemluvě o gigabitovém Ethernetu
11
3. Monitorováni a analýza uživatelů (User Monitoring and Profiling) Detailní statistika aktivit jednotlivých uživatelů na síti. Statistika je výhodná pro efektivní plánování rozložení zatížení, umístění cache serverů apod. Také je užitečná pro detekci a řešení potenciálních bezpečnostních problémů. 4. Účtování/Platby (Accounting/Billing) - Informace o datovém toku v sobě zahrnuje informaci o zdrojovém a cílovém bodě spojení (IP adresy), počtu přenesených paketů a bytů, čase, použitých portech, typu služby. To je vhodné pro podrobné účtování mezi jednotlivými poskytovateli připojení. Poskytovatelé tyto statistiky používají k proplacení svých služeb, a to ve většině případů na základě přeneseného objemu dat. 5. Plánování a analýza sítě (Network Planning and Analysis) - NetFlow Exporty se dají použít pro optimalizaci strategického plánování sítě (například kdo s kým komunikuje, plánování rozšiřování páteřních linek a bezpečnostních pravidel). Hlavním cílem je minimalizace celkové ceny síťových operací při maximalizaci výkonu sítě, kapacity a dostupnosti. Příkladem utility pro plánovaní může být program NetSys. 6. Ukládání dat (NetFlow Data Warehousing) - NetFlow datové exporty mohou být uloženy k pozdější analýze, v níž se dá rekonstruovat veškerý síťový provoz. Tyto služby jsou často využívány pro generovaní statistik a grafů vytíženosti jednotlivých linek. Zjišťují, které služby používají uživatelé vnitřních sítí a které uživatelé z vnějšího světa. Zvláště jsou tyto informace cenné pro poskytovatele připojení (ISP). Analýza NetFlow exportů v neposlední řadě přináší informace typu kdo, co, kde, jak dlouho a s kým komunikoval.
2.4.2 Verze a formát NetFlow Exportu V současné době existují čtyři verze NetFlow Exportů. První verze se nyní téměř nepoužívá, taktéž i verze 7. Nejpoužívanějšími NetFlow verzemi jsou verze 5 a 8, přičemž verze 8 už obsahuje agregované informace. Agregaci provádí směrovač a monitorovací stanice pak už přijímá data jen ve formě matic, například matice používaných portů apod. Tedy agregace na straně směrovače v sobě nese určitou ztrátu informace, ale je méně náročná na přenosové linky co do objemu přenášených dat (může spolehlivě fungovat i na gigabitových přenosových linkách). U NetFlow verze 5 tomu tak není, informace jsou minimálně agregovány, tedy zatěžují linky a pro velmi rychlé páteřní linky nejsou příliš vhodné. V navrženém programu je podpora NetFlow verzí 1,5 a 7. Z použitých verzí pak plyne nasazení programu pro středně velké sítě s maximálním tokem dat do 1 Gb/sec z jednoho směrovače. Detailní popis formátu NetFlow exportů je uveden v příloze.
12
3 Bezpečnost počítačové sítě Každý den přibývá mnoho nových a nových „hackerů“, kteří používají nové důmyslné nástroje. Z tohoto důvodu je nutné chránit vnitřní sítě proti napadení, jak „zvenčí“, tak i ze strany vnitřní. V dnešní době existuje mnoho typů útoků. Proti některým se lze úspěšně bránit, proti některým však neexistují spolehlivé nástroje, pro zabránění útoku. Protože kapitola o bezpečnosti sítě by mohla být rozsahem náplní samostatné diplomové práce, zaměříme se v popisu bezpečnostních rizik jen na vybrané okruhy. V následujících odstavcích heslovitě popíšeme některé typy možných útoků na síť. Pro detailní informace o možných incidentech odkazuji na literaturu. V praxi se dá setkat s těmito typy útoků: • Sniffers - odposlech síťového provozu, • aktivní útoky, • IP Spoofing - obtížně zjistitelné, • Hijacking – „ukradení“ již navázaného spojení mezi dvěma stanicemi, • Routing Attacks - podvržené pakety provádí změny ve směrovacích tabulkách, • DoS Attacks - útoky typu odepření služby, • chyby typu přetečení vyrovnávací paměti „buffer overflow“, • ostatní.
3.1 Útoky typu odepření služby (Denial Of Service Attacks) Útočník se nedostane přímo do systému, ale odepře přístup ostatním k cílové stanici. Obrana proti takovým to útokům je velmi obtížná. Pokud cílové stanici trvá déle zpracování přijatých dat, než doba po jakou se šíří v síti, tak pro ni existuje i možnost, že podlehne případnému útoku typu odepření služby. Některé útoky typu odepření služby: • záplava SYN paketů Cílová stanice je bombardována požadavky na otevření TCP spojení, které mají jako zdrojovou adresu uvedenou nějakou neexistující adresu. Spojení se samozřejmě nemůže navázat a po krátké době dojde k zaplnění fronty spojení čekajících na navázání komunikace. Oprávnění uživatelé, pak nemohou navázat spojení s cílovou stanicí, protože ta má již plnou frontu požadavků na spojení. Pro většinu systémů existuje řešení tohoto problému, a to buď náhodné rušení některých spojení, nebo snížení času, po kterém se neuzavřené spojení samo zruší. V praxi se ovšem používá spíše první varianta.
13
• „Smurf“ útoky Tento typ útoku se dost rozšířil po celém světě. Existuje ve dvou variantách. 1. Pracuje na principu odeslání podvržené ICMP zprávy „echo request“ na stanici, kterou útočník chce napadnout. V této podvržené zprávě je však místo zdrojové IP adresy útočníka, uvedena broadcastová adresa sítě třídy B nebo C. Po přijmutí této zprávy, napadená stanice odpoví na tuto broadcastovou adresu a odešle ji do domény určené útočníkem. Doména (nebo síť) je označována jako zesilovač. V této doméně na příchozí ICMP zprávu odpoví všechny stanice a každá odešle svoji odpověď napadené stanici. Ta je zavalena množstvím těchto zpráv (mohou jich být i stovky) přicházejících od každé stanice v síti zesilovačů. V této době již útočník posílá další smrtící pakety. Po určité době již stanice neunese nápor a nemůže již s nikým komunikovat, protože celá linka je nasycena ICMP pakety.
Obrázek 3.1: Princip útoku typu Smurf.
2. Pracuje na podobném principu jako varianta prvá s tím rozdílem, že útočník v odesílané ICMP zprávě změní zdrojovou IP adresu, kterou nastaví na adresu napadené stanice a cílovou adresu nastaví na broadcastovou adresu nějaké středně velké sítě. Dále je princip podobný jako v prvé variantě. Firewally jen těžko mohou pomoci cílové stanici, protože linka může být nasycená již před firewallem.
14
• „Teardrop“ útoky Útočník odesílá „fragmentované“ pakety, které se překrývají svými délkami, na cílovou stanici. Cílová stanice nedokáže spravovat překrývající se kusy dat a přestane reagovat na vnější podněty. • Ping Of Death Útočník odešle velmi dlouhý paket, který je rozdělen na velmi malé fragmenty. Cílová stanice pak opět přestane reagovat na jakékoliv požadavky. • „Land“ útoky Útočník odešle paket, kde zdrojová a cílová adresa je adresa cílové stanice a zdrojový a cílový port je nastaven na stejné číslo. Cílová stanice si myslí, že jde o vytvoření socketu, a při pokusu o jeho vytvoření dojde ke kolapsu celého systému. Proto tomuto útoku se dá bránit „anti-spoofovacím“ filtrem. V posledních dvou letech se rozšířily hromadné DoS útoky. Těmto hromadným napadením sítě se říká distribuované útoky typu odepření služby (DDoS - Distributed Denial of Service). Tyto útoky využívají již výše uvedených metod, ale provozují je z více stanic najednou. Jde o velmi nebezpečné útoky, kterým v minulosti podlehlo mnoho známých serverů. Uvedený obrázek 3-2 ilustruje použití distribuovaného útoku.
Obrázek 3.2: Princip DDoS útoku.
15
3.2
Používané DDoS nástroje
Trin00 • přenositelný na systémy Solaris, Linux a Windows, • používané porty TCP 27665; UDP 27444 a 31335, • metody napadení UDP a SYN flood. Tribe Flood Network (TFN) - dnes se používá spíše nová verze TFN2K. Stacheldraht • přenositelný na systémy Solaris a Linux, • používané porty TCP 16660, 65000 ICMP echo reply, • metody napadení smurf, ICMP, SYN a UDP flood. Shaft • přenositelný na systém Solaris a Linux, • používané porty TCP 20432; UDP 18753 a 20433, • metody napadení ICMP, SYN a UDP flood. TFN2K • přenositelný na systémy Solaris, Linux a Windows, • používané porty kombinace TCP, UDP, ICMP echo reply, • šifrovaná komunikace CAST-256 , • metody napadení smurf, ICMP, SYN, UDP a TARGA. MStream • používané porty TCP 6723, 15104 a 12754; UDP 7983, 10498, 9325 a 6838 , • metody napadení ACK, SYN+ACK flood, • zatím obsahuje mnoho chyb.
16
4 Popis programových prostředků 4.1
Perl
Perl je interpretovaný programovací jazyk, který se v současné době těší značné oblibě. Přestože vůči němu lze mít z teoretického hlediska vážné námitky, je to jazyk zajímavý a mimořádně praktický. Dokáže totiž snadno a rychle vyřešit leckteré i dost složité problémy. Autorem jazyka je Larry Wall. Vytvořil jej původně pro svou vlastní potřebu, když jej neuspokojovaly dostupné nástroje pro práci s texty. Pak se rozhodl dát jej k dispozici veřejnosti a nestačil se divit, jaký zájem vyvolal. Kladná odezva okolí vedla k dalšímu vývoji jazyka a jeho postupnému obohacování. Jednou z nejužitečnějších věcí v Perlu jsou regulární výrazy. Regulární výrazy jsou silným nástrojem pro práci s textovými informacemi a jsou velmi využívány v operačních systémech typu Unix. Zatím se však používaly jen ve speciálních jednoúčelových nástrojích, jako jsou awk, sed, grep a další. Perl je spojuje s běžnými konstrukcemi programovacích jazyků a dává vám do rukou velice pružný a výkonný nástroj. Dalším silným nástrojem Perlu jsou asociativní pole (hash), která řeší problém vyhledávání. Ta velmi snadno nahradí stromy, spojové seznamy a jiné datové struktury. Další výhodou je velká podobnost s jazykem C. Z pohledu teorie programovacích jazyků je Perl naprosto nepřijatelný. Proměnné se nemusí deklarovat, není možnost si definovat vlastní datové typy. Syntaxe je velmi proměnlivá a celou řadu konstrukcí lze zapisovat několika různými způsoby. Chování většiny prvků závisí na kontextu, ve kterém se použije. Na druhou stranu je však mimořádně praktický a efektivní. Perl je interpretovaný jazyk, to znamená, že program se nijak nepřekládá a vykonává se přímo ze zdrojového kódu. Takový přístup má výhodu ve své jednoduchosti a snadné modifikovatelnosti programů. Možnou nevýhodou však je, že programy nejsou soběstačné. Aby je bylo možno spustit, je nutno mít nainstalován interpret Perlu. Interpret Perlu je distribuován k volnému použití. Díky rostoucí popularitě Perlu obsahuje stále více a více operačních systémů tento interpret v základní instalaci. Obecně se traduje, že interpretované jazyky jsou pomalé. Perl má (jako většina moderních interpretovaných jazyků) fázi „předkompilace“, kdy se vstupní textový tvar programu převede do binárního mezikódu, který se pak provádí. Tento přístup má dvě výhody. V úvodu se zpracuje celý program a budou tudíž odhaleny syntaktické chyby i v těch částech, k jejichž vykonání vůbec nedojde. Druhou předností je, že program pak běží mnohem rychleji (například v regulárních výrazech je Perl rychlejší než grep, nebo awk). Jediné, kde je tedy pomalejší, je úvodní „předkompilace“ a v běhu nejsou zásadní rozdíly mezi interpretovanými a kompilovanými jazyky. Současná standardní distribuce Perlu již obsahuje i překladač pro
17
kompilaci perlovských programů do binární podoby. Perl pak vygeneruje program v obvyklé binární formě, která je soběstačná a ke svému spuštění již nevyžaduje interpret. Funguje tak, že převede program do výše zmiňovaného binárního mezikódu a přibalí k němu vše, co je potřeba k jeho provedení. Tyto prováděcí knihovny jsou dosti objemné (řádově 0.5 MB), což se projeví zejména u jednoduchých programů.
4.2 PHP V poslední době můžeme na Internetu sledovat obrovskou změnu v druhu poskytovaných informací. Ještě nedávno byla většina informací na Webu statických, byly zde dostupné pouze obyčejné dokumenty provázané hypertextovými odkazy. Tento přístup je však v dnešní dynamické době zastaralý. Uživatelé Webu vyžadují stránky, které jim poskytují interaktivní přístup k informacím všeho druhu. Pro tvorbu takovýchto stránek je přímo optimální prostředí skriptovacího jazyka PHP. PHP umožňuje vývoj různorodého druhu aplikací, počínaje jednoduchým počítadlem přístupů a konče tvorbou podnikového informačního systému v prostředí Intranetu či Extranetu. Možnosti PHP ještě umocňuje důsledná integrace s mnoha databázovými systémy. Bez systému jako PHP by dnes nemohly pracovat virtuální obchodní domy, obchodní rejstřík na Internetu, rezervační systémy nebo třeba prohledávání katalogu počítačových komponent či hudebních nahrávek. Velká výhoda PHP spočívá v jeho nezávislosti na používaných platformách. Výsledkem běhu PHP skriptu je obyčejný HTML dokument, který umí zobrazit každý prohlížeč. Odpadají tedy problémy s kompatibilitou, které přináší Java a JavaScript. PHP je nezávislé i na platformě serveru, může běžet pod libovolným webovským serverem pracujícím v operačním systému Windows nebo Unix. Jedním z důvodu úspěchů PHP je jeho velice rychlý vývoj a přidávání dalších knihoven s užitečnými funkcemi. To je možné jen díky tomu, že je PHP vyvíjeno na bázi Open Source Software, kdy jsou zdrojové texty celého systému k dispozici všem vývojářům. Mezi poslední novinky patří zejména podpora generování PDF a práce s XML dokumenty. Práci s XML zajišťuje parser Expat, který je například i součástí nové verze Netscape Navigatoru. Největší novinkou ve světě PHP je nové jádro Zend, které pochází z dílny dvou vývojářů PHP. Testy ukazují, že Zend provádí skripty několikanásobnou rychlostí oproti starší verzi PHP. Díky novému a lepšímu správci paměti klesly i paměťové nároky. Zend přináší i mnoho dalších užitečných novinek, mezi něž patří i to, že je možno skripty kompilovat do binární podoby, která je však nezávislá na platformě. Zkompilované skripty jsou rychlejší a zamezí se
18
zkoumání zdrojových textů skriptů. Tuto vlastnost uvítají především firmy, které se zabývají vývojem a prodejem komerčních webovských aplikací. Nová modulární struktura Zendu umožňuje snadné vytvoření dalších důležitých nástrojů, jakými jsou debugger a profiler. Zend je stejně jako celé PHP šířen zcela zdarma. Některé jeho části jsou však šířeny pouze komerčně. Zend je nyní součástí nejnovější verze PHP 4.0. Součástí PHP 4.0 je i ISAPI modul, který umožní rychlý běh skriptů na Windows NT. O tom, že PHP je velice kvalitní nástroj pro tvorbu dynamicky generovaných stránek snad všechny přesvědčí více jak 200 000 serverů pracujících v kooperaci s PHP
4.3
MySQL databáze
Databáze je ve své podstatě uspořádaná struktura dat. To může být cokoliv, od jednoduchého nákupního lístku, obrazové galerie, až po nepřeberné množství informací v podnikové síti. Databáze by kromě standardního čtení a zapisování dat měla obsahovat kvalitní správu dat. Počítače jsou velmi dobré pro zpracování množství dat, kde hlavní úlohu hraje správa databáze. Dříve se data ukládala do jednoho velkého bloku, což sebou přinášelo mnoho problémů. Proto vznikly relační SQL databáze, které ukládají data v samostatných tabulkách. Databáze pak poskytují klientům větší rychlost a pružnost údržby. Zkratka SQL pochází z anglického Structured Query Language (strukturovaný dotazovací jazyk). V dnešní době existuje spousta SQL databází. Mým cílem je, aby NetFlow Monitor kromě své výkonnosti byl celý šířen jako volný software bez žádných poplatků za jeho používání. Proto musí být i všechny jeho části šířeny jako volný software. V tomto projektu bylo důležité rozhodnut mezi použitím vlastní databáze nebo použitím již funkčního a propracovaného databázového systému. Výsledkem bylo použití již hotové komponenty, která již obsahuje propracované algoritmy pro vyhledávání a třídění vybraných položek. Na výběr bylo několik volně dostupných systémů. Například InterBase, CQL++, PostgreSQL, MySQL, BeagleSQL, GNU SQL a GigaBASE. Pro implementaci NetFlow Monitoru bylo nejvýhodnější použití databáze MySQL. Databázový systém MySQL, vyniká jak svojí nedostižnou rychlostí, výkonností a množstvím podporovaných aplikačních rozhraní, tak i snadnou přenositelností na jiné typy operačních systémů. Nevýhodou MySQL je, že neobsahuje některé vlastnosti, které by měl dobrý databázový systém mít, například chybí podpora unionů, triggerů apod. Pro srovnání výkonnosti s jinými databázovými prostředky lze doporučit shlédnout tabulky, které jsou na webovských stránkách www.mysql.com
19
MySQL je vlastně aplikací typu klient/server, která se skládá z více komponent, které mohou být tvořeny různými klientskými programy, administrativními nástroji a různými programovacími rozhraními. MySQL databáze je, jak bylo výše uvedeno, volně dostupný software, který je distribuován pod licencí GPL (GNU General Public License).
4.4 Knihovna GD GD je grafická knihovna, která je určená pro rychlou tvorbu obrázků. Pro vytvoření obrázků jsou v knihovně vestavěné základní funkce, které umožňují kreslit linky, kružnice, obdélníky, vkládat text a jiné obrázky v plném barevném rozlišení (truecolor). V nejnovější verzi je podpora pro grafické formáty PNG a JPEG (formát GIF není z licenčních podmínek podporován). Oba formáty se používají pro zobrazování obrázků na Internetu a proto je knihovna často používána ve spolupráci s programy, které generují grafické výstupy na www stránky. Pro přístup k GD knihovně existuje mnoho programových rozhraní, jako je například Perl, TCL, Pascal, Haskell, REXX, PHP a mnoho dalších. GD knihovna je zcela zdarma i pro komerční použití.
20
5 Návrh architektury NetFlow analyzátoru Navržený distribuovaný systém pro sledování NetFlow exportů ze směrovačů Cisco se skládá z několika navzájem propojených bloků: NetFlow Redirector - přesměruje pakety s exportem na jiné cílové stanice (výhodné pro zálohování či paralelní zpracování dat). NetFlow Collector - zpracuje přijatý NetFlow export, rozšíří ho o další informace a odešle databázi. NetFlow Database - hlavním účelem je vyhodnocování toku dat v realném čase (detekce různých útoků, kontrola stavu tabulek, ...). NetFlow Web - kolekce php scriptů pro vlastní přehledné zobrazování jednotlivých statistik, zobrazování událostí apod.
Obrázek 5.1: Návrh systému pro analýzu NetFlow Exportů.
21
5.1 NetFlow Redirector NetFlow Redirector o malý program napsaný v jazyce C, který přijímá UDP pakety na zadaném portu a „přeposílá“ je na několik různých cílů. Program má i mnoho dalších užitečných nastavení, jako je například ponechání zdrojové adresy, ze které byl paket odeslán, zpožďování paketů apod. Autory programu jsou David Harmelin a Simon Leinen. Tento program je šířen pod GNU/GPL licencí. Je tedy zdarma a může se jakýmkoliv způsobem kopírovat a distribuovat. Nové verze programu jsou na webovské adrese: http://www.switch.ch/tf-tant/floma/sw/samplicator/ .
5.2
NetFlow Collector
5.2.1 Popis programu Hlavní náplní tohoto bloku (programu) je čtení NetFlow exportů, jejich zpracování a uložení do databáze. Blok je tvořen dvěma samostatnými procesy. První proces se stará o vlastní příjem UDP paketu, zjištění typu použité služby a jeho uložení do sdílené paměti. NetFlow exporty mohou být přijímány z více směrovačů nebo redirectorů. V aktuální verzi se dá zvolit, buď příjem dat od kohokoliv, nebo jen z jedné konkrétní adresy. Nelze tedy zatím definovat seznam několika adres, od kterých lze přijmout tyto exporty nebo seznam stanic od kterých je zakázán příjem exportů. Přijímaný UDP paket musí napřed projít procedurou, která zjistí, o jakou verzi NetFlow exportu se jedná (nyní jsou podporovány verze 1,5 a 7, kde standardní verzí je NetFlow verze 5). Celý systém je optimalizovaný spíše pro verzi 5, která je v dnešní době pravděpodobně nejrozšířenější. Často používaná je i verze 8, ale ta již obsahuje agregované informace o jednotlivých tocích, což však bohužel představuje určitou ztrátu informace. Formát dat verzí 1 a 5 je v příloze. Z příchozího paketu se přečte hlavička, ve které je uložena verze NetFlow Exportu a podle této verze jsou z paketu vybrány jednotlivé záznamy. Pro různé verze může být i odlišný maximální počet záznamů v paketu. Kromě toho různé verze obsahují i rozlišné informace o paketech procházejících směrovačem. Proto je v tomto projektu navržen jednotný formát, do kterého jsou ukládány všechny dostupné informace z té či oné použité verze a zbývající informace jsou doplněny prázdnými hodnotami. Záznamy jsou dále podstupovány některém testům, které je rozšiřují o další cenné údaje. Například je k záznamu přidána informace o adrese, ze které byl přijat (což v exportu přímo uloženo není /kromě exportu verze 7/) a o verzi NetFlow Exportu (ta je uložena jen v hlavičce a ne v každém záznamu). Následujícím krokem ve zpracování je detekce spojení pracující v pasivním módu přenosu
22
dat (například FTP spojení pracující v pasivním módu). Bližší informace viz dále. Po přidání rozšiřujících informací jsou jednotlivé záznamy uloženy do sdílené paměti. Sdílená paměť je realizována jako kruhový buffer. V případě zaplnění sdílené paměti proces čeká na její uvolnění. Samozřejmě, že v této době nemohou být přijímány žádné nové příchozí NetFlow exporty a proto je nutné nastavit parametry celého systému tak, aby k zaplnění sdílené paměti pokud možno nedocházelo. Druhý proces NetFlow Collectoru se stará o odesílání dat do databáze. Po spuštění naváže spojení z databází. V případě neúspěchu celý program končí s výpisem informace o této chybě. Pokud proběhlo správné prvotní navázání komunikace s databází, může program přejít k nekonečné smyčce přijímání dat ze sdílené paměti a jejich odeslání do databáze. Celý program je napsán v jazyce Perl s databázovým rozhraním pro přístup k databázi MySQL. 5.2.2 Detekce spojení v pasivním módu Některé aplikace mění během spojení komunikační porty, přes které přenáší data. Proto je vhodné také tuto informaci detekovat a zaznamenat. Příkladem takové aplikace může být datový FTP přenos v pasivním módu. Z tohoto důvodu je v prvém procesu použita fronta aktivních TCP spojení. Ve frontě jsou uloženy informace o zdrojové a cílové adrese, použitém zdrojovém a cílovém portu, odhadovaném čísle služby a době posledního přijatého paketu, náležející tomuto spojení. Nemá smysl ukládat informace o jiných protokolech než o spojově orientovaných, jako je TCP spojení. Každý přijatý záznam TCP spojení je podroben testu na použitou službu. Test se provádí tak, že jsou klíčové informace z přijatého paketu porovnány z údaji v tabulce, a pokud se shodují s některou položkou, je testovaný záznam doplněn informací o použité službě, která je uložena v tabulce. Jestliže se tato informace neshoduje s žádnou položkou v tabulce, je vytvořena nová položka, která popisuje tento záznam. Protože vyhledání položky v tabulce může být časově náročnější operace, zejména při větším počtu aktivních spojení, je informace o tomto spojení uložena jen na omezenou maximální dobu. Tato doba je standardně 5 minut. Pokud nepřijde do této doby žádný další paket daného spojení, musí se program postarat o odstranění této informace z tabulky. Fronta aktivních spojeni je také omezena maximálním počtem položek. V programu je primárně nastavená maximální délka fronty na 15.000 aktivních spojení. Tento postup je obdobný funkci v NetFlow směrovače, který provádí podobné úkony.
23
5.3
NetFlow Database
5.3.1 Popis programu Hlavní náplní tohoto bloku (programu) je kontrola datového toku v reálném čase s vyhodnocováním případných bezpečnostních incidentů a udržování celistvosti tabulek. Program je opět rozdělen na běh dvou nezávislých procesů. Prvý proces se stará o ukládání dat do hlavní tabulky a bezpečnostní testy, druhý pak o vlastní test počtu řádků v hlavní tabulce a rušení již starých řádků. Data odeslaná programem NetFlow Collector jsou ukládána do tabulky income. Jednou za časovou periodu program NetFlow Database uzamkne tabulku income pro zápis, a přemístí z ní veškerá data do pracovní tabulky wrk. Obě dvě tabulky income i wrk jsou takzvané „heap“ tabulky, to znamená, že veškerý obsah tabulek je uložen jen v paměti a ne na disku. Při výpadku napájení ztratí programy informace o datech, které byly uloženy v těchto tabulkách. To však není zas až tak podstatné, protože jde o ztrátu informace o řádově několika tisících paketech ve srovnání s hlavní databází, ve které jsou uloženy až stovky milionů paketů. Po přemístění dat do pracovní tabulky je tabulka income opět přístupna pro zápis. Na tuto krátkou dobu přesunu dat nemůže program NetFlow Collector zapisovat do databáze. Nyní přichází fáze různých testů, které jsou blíže popsány v následujícím odstavci. Výsledky bezpečnostních testů jsou ukládány do tabulky event. Každý z testů obsahuje na konci svého zpracování volání speciální funkce pro agregaci již starších událostí stejného typu, tato agregace se nazývá korelace událostí. Příkladem může být ICMP útok, který trvá po dobu 20 minut. Kdyby v podprogramu pro detekci ICMP útoku nebyla tato korelace událostí, bylo by v tabulce událostí několik stovek řádků informujících o tomto incidentu. Proto agregujeme data stejného typu a výsledkem je, že v tabulce událostí je pak záznam typu útok, od kdy do kdy trval a další potřebná data popisující útok. Po kroku testu bezpečnostních incidentů se všechny řádky s informací o datovém toku přemístí do hlavní tabulky nf. Druhou částí programu NetFlow Database je proces kontroly tabulek, který periodicky testuje počet řádků v hlavní tabulce, a pokud překročí nastavený limit (implicitně 50 milionů řádků) zruší nejstarší řádky (implicitně 10 tisíc řádků). Dalším úkolem tohoto procesu je kontrolovat i ostatní tabulky, jako je například tabulka event, u které maže řádky, které mají nastaven příznak pro smazání. To však provádí za mnohem delší periodu, než je kontrola stavu hlavní tabulky, která má nejvyšší prioritu.
24
5.3.2 Implementace bezpečnostních modulů • ICMP Count Flood Detekce přenesení velkého kvanta ICMP zpráv. Pokud překročí počet ICMP paketů určitou úroveň, například 2000 paketů za minutu, je vytvořena v tabulce událostí nová řádka nebo pokud informace o tomto útoku již existuje je aktualizován záznam o délce trvání útoku. • ICMP Size Flood Detekce přenesení velkého kvanta ICMP zpráv. Tím je myšleno, co do celkového součtu délek všech paketů. Pokud opět překročí určitou úroveň, například 200.000 bytů za minutu, je tato informace zaznamenána. ICMP Size Flood není tak častý jako je ICMP Count Flood. • „Smurf“ Attack Bližší informace o tomto útoku jsou v kapitole o bezpečnosti sítě. Stoprocentní detekce tohoto útoku je téměř nemožná, protože nutným předpokladem je zjištění, jestli některé pakety neobsahují jako zdrojovou adresu broadcastovou adresu. V tom je právě problém, protože v NetFlow Exportech lze těžko určit, která adresa je broadcastová a která ne. Příkladem může být adresa 147.228.255.191, která může být broadcastová, záleží na masce sítě, která se dá jen odhadnout. V tomto testu přepokládáme, že pokud adresa obsahuje nastavené bity u posledních dvou bytů adresy, jedná se o broadcastovou adresu. • Port Scanner Port scanner slouží k testování otevřených portů na cílové stanici, které útočník může použít pro napadení stanice. Port scanner tedy není klasickým typem útoku, protože přímo nezpůsobuje žádné ublížení stanici, ale jedná se o prostředníka, který umožní její případné pozdější napadení. V dnešní době existuje mnoho scannerů portů s různými sofistikovanými metodami detekce otevřených portů s pokud možno neprozrazením této události cílové stanici. Test provádím tak, že pokud útočník se pokouší v určité časovém kvantu navázat spojení na porty 1-1024 a překročí určitou hranici, je vyhodnocen jeho čin jako pokus o napadení. Druhou částí je pak test na pokusy o navázání spojení na vysoké čísla portů (tam je hranice pro signalizaci útoku o něco vyšší než pro test portů s nízkým číslem). I v tomto případě se jedná o určitou techniku detekce, kdy na některé metody „scanování“ portů nebude program signalizovat žádné varování.
25
• UDP Count Flood Je to obdobný typ útoku jako je ICMP Count Flood. Útočník posílá velké množství UDP paketů na cílovou stanici. Po překročení určité hranice je opět zaznamenán záznam o možném útoku. • SYN attack SYN útoky jsou charakterizovány velkým počtem žádostí o vytvoření TCP spojení. Vytvoření TCP spojení se skládá ze 3 kroků, ale při tomto útoku útočník posílá paket jen z prvého kroku. Napadená stanice musí alokovat pro tento paket prostředky, které jí po krátké době dojdou, a jiné stanice tak nemohou s napadenou stanicí vytvářet nová spojení. To znamená, že sice stanice je naprosto funkční, pouze se na ni nikdo z vnějšího světa nedostane. Nastavení hranice, kdy se jedná o SYN útok je velmi obtížné, protože na některé stanice je vytvářeno mnoho spojení na jiné nikoliv. V programu je standardně nastavená mez max. 600 nových spojení za minutu. Pro zjištění informace o navazování TCP spojení se kontrolují takzvané příznaky TCP spojení (TCP flags). Testovat tyto TCP příznaky je velmi obtížné (spíše nemožné), protože směrovače je v Neflow Exportech z nutnosti úspory místa agregují tzv. „OR'ed TCP flags“. Nový modul NetFlow exportu, který je vyvíjen na Univerzitě Karlově (MFF), do jádra Linuxu už bude mít možnost nastavení, jestli má směrovač provádět logický součet těchto flagů. V případě 100% testování TCP příznaků bude volba logického součtu příznaků zakázána. • SYN + FIN attack Nejedná se přímo o útok spíš o metodu testování portů či dostupnosti jednotlivých stanic, u kterých se nezaznamenávají pokusy o navázání spojení, protože je nastaven i příznak FIN, spojení není vytvořeno.
5.4
Návrh databázového modelu
5.4.1 E-R Model Pro správné navržení E-R modelu jsem bral v potaz několik hledisek, a to jak snadnost programové realizace, tak i jednoduchou práci a údržbu celého systému. Celá databáze obsahuje několik různých tabulek, kde každá má svůj specifický význam. Data tabulek jsou uložena buď v paměti („heap“ tabulky), nebo na disku („MYISAM“ tabulky). Detailní popis rozdílů mezi typy tabulek tvoří obsáhlá dokumentace databázového systému MySQL (viz literatura a odkazy na MySQL dokumentaci).
26
Obrázek 5.2: E-R model.
Obrázek není klasickým zobrazením E-R modelu, ale výstižně zobrazuje přenos dat mezi jednotlivými tabulkami.
5.4.2 Definice tabulek Tabulka income – „heap“ tabulka pro příjem dat z programu NetFlow Collector. V této tabulce jsou následující položky: • mt - čas vzniku NetFlow 4, • nt - čas v nanosekundách, • rt - IP adresa směrovače, který odeslal NetFlow, • sip, dip - zdrojová/cílová IP adresa, • nh – IP adresa dalšího směrovače, • sin, sou - zdrojové/cílové rozhraní přes, které procházel daný tok, • pck - počet přenesených paketů, • bytes - počet přenesených bytů, • sp, dp - zdrojový/cílový port, • flags - příznaky TCP spojení, • proto - použitý protokol 1=ICMP, 6=TCP, 17=UDP , • tos - Typ služby (Type Of Service), • sas, das - zdrojová/cílová adresa AS, • srv - odhadovaný typ použité služby, • sm, dm - délka zdrojové/cílové síťové masky, • ver - verze NetFlow exportu.
4
měřeno v počtech sekund od roku 1970
27
Tabulka wrk – „heap“ tabulka určená pro analýzu datového toku, obsahuje stejné položky jako tabulka income. Tabulka nf - hlavní tabulka, v ní je uložena veškerá historie zpracovaných dat, obsahuje stejné položky jako tabulka income. Tabulka nf obsahuje až desítky miliónů řádků. Tabulka event – tabulka, do které jsou ukládány výsledky „realtime“ analýzy, kterou provádí program NetFlow Database. Tabulka obsahuje položky: • • • • • • • • • •
id - jednoznačné identifikační číslo řádku, mt,mt1 - čas odkdy a dokdy trvala zaznamenaná událost, imp - důležitost zjištěné události, apt - pravděpodobnost události, eid - identifikátor události, sip, dip - zdrojová/cílová IP adresa, rt - směrovač, který poslal NetFlow, proto - použitý protokol, sp, dp - zdrojový/cílový port, flag - příznak stavu události (nová/smazat).
Tabulka evname - v tabulce je uložen bližší popis jednotlivých typů událostí a obsahuje následující položky: • • •
eid - jednoznačné identifikační číslo události, name - jméno události, comment - popis, nebo například odkaz na Internet, kde je kompletní popis události, její řešení nebo její prevence.
Tabulka router - v tabulce je uložen seznam směrovačů, ze kterých přichází NetFlow exporty, komentář k jednotlivým zařízením a nastavená volba, jestli má směrovač SNMP rozhraní pro získání dalších podrobnějších informací. Tabulka obsahuje následující položky: • • • • •
id - jednoznačné identifikační číslo směrovače, ip - IP adresa směrovače, comment - komentář či popis daného zařízení, snmp - příznak jestli zařízení disponuje SNMP rozhraním, comm - tzv. „Community Name“, udává se jen v případě podpory SNMP .
28
Pro urychlení práce s vyhledáváním položek se mohou v každé tabulce definovat takzvané indexy na položky, které jsou používány v podmínkách „selectů“. Použití indexů tvoří zhruba polovinu databáze. Bez indexů by se veškeré položky musely prohledávat sekvenčně. Pokud jsou použity indexy, je nad indexovanými položkami vytvořen binární vyhledávací strom, ve kterém lze najít konkrétní položku i o několik řádů rychleji. Další informace o urychlení vyhledávání lze najít v kapitole Optimalizace výkonu MySQL databáze.
5.5 NetFlow Web Náplní posledního bloku je přehledná vizualizace přijatých dat. Vlastní zobrazení a vyhodnocení dat je vytvořeno prostřednictvím PHP scriptů. Všechny tyto scripty jsou uloženy v adresáři přístupném pro HTTP server (například /home/httpd/html/netflow). Výsledkem provedení PHP scriptu je vygenerování HTML stránky, kterou už si může prohlídnout každý uživatel přes WWW prohlížeč. Jednotlivé stránky jsou rozčleněny podle své funkce a každá má svůj specifický význam. Stránky jsou mezi sebou propojeny, takže výsledek z jedné stránky může být přenesen na jinou, která na základě předaných dat zjistí jiné hodnoty. Úvodní stránka informuje o vlastnostech NetFlow Monitoru a dostupných funkcích. Přístup k jednotlivým funkcím je přes hlavní menu, ze kterého je možno vybrat typ dotazu. Každé hlavní menu má vlastní podmenu, ve kterém jsou už konkrétní dostupné funkce. V hlavní nabídce jsou následující menu: • • • • • • •
Main - podrobné vyhledávání, výpisy služeb, protokolů apod , Events - výpisy bezpečnostních incidentů, Audit - jednotlivé statistiky přenesených objemů dat z různých podsítí, Top - výpis nejpoužívanějších protokolů, služeb apod, Stats - informace o směrovačích a o stavu celé databáze, Admin - různé nastavení, Help - kontextový help, informace o programu, licenční podmínky.
29
Všechny www stránky mají jednotný vzhled a velmi podobné funkce pro zadávání hodnot. Téměř ve všech funkcích lze zadat časový interval, ve kterém se vyhledávají jednotlivé informace o datových tocích. Časový interval je nutnou podmínkou, protože vyhledávání položek v desítkách miliónů řádek je časově velmi náročnou úlohou. Implicitně je v programu maximální časový úsek pro vyhledávání jedna hodina. Po intervalu větším než jedna hodina, program neprovádí vyhledávání, ale zobrazí chybovou informaci o překročení tohoto intervalu. Nyní popíšeme typy vstupních parametrů, které lze zadávat pro konkretizaci vyhledávání. Ve většině případů se může zadat interval nebo jedna konkrétní hodnota specifikující vyhledávací podmínku. Pokud se parametr nezadá (je prázdné vstupní pole), systém bude vyhledávat s pravidlem „jakýkoliv možný výskyt“. Drobná výjimka je u zadání časového intervalu. Standardně je v systému nastaveno, že při nevyplněném údaji o čase se budou zjišťovat statistiky za posledních deset minut. Formát zadání času je možný v několika následujících variantách: 19 Apr 2001 16:5:1 ~ 19 duben 2001 16:05:01 19 Apr 01 16:61 ~ 19 duben 2001 17:01:00 04/12/01 ~ 12 duben 2001 00:00:00 2001/04/12 ~ 12 duben 2001 00:00:00 -5 hour ~ o 5 hodin před aktuálním časem -1 week +5 min ~ před týdnem bez 5 minut now ~ aktuální čas V případě nejasných či sporných kombinací doporučujeme zkontrolovat převedený čas po odeslání parametrů serveru. Tento převedený čas je zobrazen ve spodní části zobrazené stránky s hledanými výsledky. Další možné typy vstupních parametrů jsou adresy. Adresa může být zadána jako jméno uzlu, nebo může být charakterizována IP adresou. Pro zjišťování přenosu dat z (do) určité sítě či podsítě je vhodné použít volbu zadání intervalu IP adres, například 147.228.0.0 – 147.228.255.255. Protokol může být zadán buď číslem, nebo řetězcem (ten však musí být uvedený v souboru /etc/protocols). Příkladem může být zadání řetězce TCP nebo čísla 6. Pro zadání portu jménem platí speciální pravidla: předně musí být zadán protokol, pak lze zadat místo čísla portu i jeho jméno (například www, snmp, atd ...) Všechny rozpoznávané řetězce pro zadání portu jsou v souboru /etc/services, kde je kromě čísla služby uveden i příslušný protokol. Ostatní parametry se zadávají už jen číselně. Možné parametry pro vyhledávání jsou kromě času, protokolu, zdrojových/cílových adres a portů také typ služby, zdrojové/cílové číslo rozhraní, přes které směrovač přenášel data, a další ...
30
5.5.1 Hlavní statistiky (menu Main) V tomto menu lze vybrat několik možných funkcí, a to například detailní vyhledání informace o konkrétním datovém toku a dále výpisy použitých protokolů, ICMP zpráv a použitých TCP a UDP služeb. • Funkce Search Tato funkce je často použita i v dalších funkcích pro detailní zobrazení informací o datovém toku či o konkrétních paketech. Před vlastním vyhledáním se zobrazí nabídka pro výběr konkrétní hledané události. Na výběr jsou intervaly hodnot jako například čas odkdy a dokdy hledat, směrovač, přes který procházel hledaný paket, zdrojová a cílová adresa, porty a tak dále. Další podmínkou pro vyhledání je, co se má následně zobrazit (například zdrojové adresy a porty a počty přenesených bytů a paketů). Poslední volbou před odesláním dotazu je vybrání položky, podle které se mají zobrazené statistiky setřídit (standardně vzestupně podle času). Na výběr je opět několik kritérií jako podle přenesených bytů, času, adres, atd. Po zadání všech kritérií se dotaz odešle na server, který rychle zpracuje vybrané data a výslednou statistiku zobrazí v podobě tabulky.
Obrázek 5.3: Funkce Search.
Pokud chce uživatel změnit některá kritéria, je možné se vrátit na původní stránku, po stisku tlačítka Redefine. Některé dotazy mohou ve výsledku obsahovat mnoho řádků, proto je v systému v první řádce lišta s počtem
31
nalezených výsledků a tlačítka pro přechod mezi jednotlivými stránkami výpisu. Standardně je zobrazováno 50 výsledků na jedné stránce.
• Funkce výpisu protokolů Náplní této funkce, jak je patrné již z názvu, je zobrazení statistiky použitých protokolů. Podmínky pro zadávané hodnoty jsou obdobné jako v případě funkce Search. V této funkci lze zadat jen již hodnoty časového intervalu, IP rozsahu zkoumané podsítě, případně interval hledaných protokolů. Ve výsledku se zobrazí podíl daného protokolu v síťovém provozu a to v bytech a v procentech.
Obrázek 5.4: Funkce Protocols.
Pro detailní informace o ICMP protokolu doporučujeme místo volby view detail zvolit funkci ICMP v menu Main.
32
•
Funkce výpisu ICMP statistiky
Tato funkce zobrazuje všechny ICMP zprávy vyhovující podmínkám. Typ ICMP zprávy a její kód směrovače ukládají v NetFlow exportech po položky cílového portu. A to tak, že ve vyšším bytu je uložena informace o typu ICMP a v nižším pak kód. Například pokud je v cílový port 2048, je typ zprávy 8 a kód 0. Tento převod je prováděn jen ve funkci ICMP statistiky, proto není vhodné používat funkci Search, kde jsou informace uloženy zakódovány v cílovém portu. Ostatní položky pro zadání údajů jsou obdobné jako v ostatních funkcích.
Obrázek 5.5: Funkce ICMP statistiky.
Při zadávání typu ICMP, u kterého existují ještě kódy ICMP zprávy, se musí zadat rozsah. Například pro výpis informací o ICMP typu 3, u kterého jsou definovány i kódy ICMP zprávy se musí zadat hledání v intervalu 3 až 4, to však zobrazí i hodnoty s ICMP zprávy typu 4!
33
•
Funkce pro výpis TCP a UDP služeb
Tyto funkce zobrazují použité TCP nebo UDP služby. Parametry jsou obdobné jako u předchozích funkcí. Ve výsledném zobrazení jsou služby implicitně seřazeny podle počtu přenesený bytů. U neznámé služby je místo jejího jména uvedené číslo portu, na kterým byla služba provozována. Na obrázku je jen TCP statistika, UDP statistika je téměř shodná.
Obrázek 5.6: Funkce TCP služby.
Při zadávání typu služby je možno pro konkrétní protokol, zadat i její jméno (například pro TCP protokol se dá zadat jméno služby www (port 80) a program převede jméno na číslo portu). Jména služeb jsou definována v souboru /etc/services, kde lze dodefinovat i další známé služby.
34
5.5.2 Výpis bezpečnostních incidentů (menu Event) V tomto menu jsou funkce pro zobrazování incidentů, které se vznikly na síti. Přečtené události lze smazat, případně již smazané lze obnovit. • Funkce View Náplní funkce je zobrazení událostí či bezpečnostních incidentů zjištěných programem NetFlow Database. Ve výsledku se zobrazí časový interval, ve kterém událost vznikla a skončila, typ události, její pravděpodobnost (Apt), důležitost (Imp) a další informace. Stránka odkazuje na funkci Search, která zobrazí detailní informace.
Obrázek 5.7: Funkce View Event.
V další verzi NetFlow monitoru bude změněn přístup k výpisu událostí, které se při delších intervalech uživatelské kontroly stávají nepřehlednými. • Funkce Delete a Undelete Jak název napovídá, funkce slouží pro smazání či případné obnovení záznamů o událostech. Po zavoláni funkce smazání není záznam fyzicky zrušen, ale je mu jen nastaven příznak smazání. Proto lze záznam teoreticky kdykoliv obnovit (lze obnovit jen do určité doby, které je udána v programu NetFlow Database, který periodicky čistí tabulku event).
35
5.5.3 Statistika přenesených dat (menu Audit) V tomto menu jsou funkce pro zobrazování statistiky součtů příchozích a odchozích bytů či paketů. Poslední funkcí je zobrazení statistiky „traffic“, ve které jsou součty příchozích a odchozích paketů, je to vlastně statistika všech dat, které zpracovával konkrétní uzel. Výsledná statistika je implicitně seřazena podle přenesených bytů. Při zjišťování celkového síťového provozu musela být použita pomocná tabulka, která je uložena ve vyrovnávací paměti. Tato tabulka je po skončení vyhledání odstraněna. Nutnost použití pomocné tabulky vychází z faktu, že MySQL databáze nepodporuje takzvané „uniony“ (sjednocení dvou dotazů), které mají být implementovány v další verzi MySQL databáze.
Obrázek 5.8: Funkce Traffic.
36
5.5.4 Statistika TOP 10 (menu Top) V tomto menu jsou funkce pro zobrazování nejpoužívanějších protokolů, služeb, atd... formou přehledných koláčových grafů. Po kliknutí na některý z obrázků je zobrazena detailní statistika. Pokud některá z položek ve statistice Top 10 je menší než 2%, je přičtena k položce other. Ta je zobrazena jako poslední položka v grafech. Pro vytvoření obrázků je použita knihovna GD lib a další PHP scripty pro vytvoření grafů.
•
Funkce TOP Protocols
Funkce pracuje obdobně jako funkce Protocols v menu Main. Rozdíl je jen v grafickém vzhledu a v tom, že v menu top se zobrazuje max. 10 nejpoužívanějších protokolů. Neznámé protokoly (ty co nejsou uloženy v souboru /etc/protocols) jsou popsány číslem protokolu a ne jeho jménem.
Obrázek 5.9: Funkce TOP Protocols.
37
•
Funkce TOP TCP nebo UDP Services
Pro funkci Top services platí totéž, co pro předchozí službu. Výsledkem je statistika používaných služeb sestupně seřazených podle přenesených bytů nebo paketů.
Obrázek 5.10: Funkce TOP UDP služby.
38
•
Funkce pro zobrazení počtu přenesených dat (income, outcome, traffic)
Funkce jsou podobné jako jsou ty v menu Audit, jen je opět zobrazeno maximálně 10 různých adres. V těchto funkcích pravděpodobně budou i nadále jen IP adresy a ne přeložené jména, protože IP adresa může být maximálně 15 znaků dlouhá, kdyžto přeložené jméno může mít i 256 znaků, což by znamenalo, že se pak nedá celé umístit do obrázku.
Obrázek 5.11: Funkce TOP traffic.
39
5.5.5 Informace o databázi a o směrovačích (menu Stats) V tomto menu jsou funkce pro zobrazení informací o aktuálním stavu databáze nebo informace o směrovačích, které odesílají NetFlow Exporty. • Funkce DB Status Funkce vypisuje informace získané od databázového serveru. Mezi tyto informace patří záznamy o počtu zpracovaných bytů v databázi, o stavu spojení, celkovém vytížení, apod. Velice zajímavé jsou údaje o počtu přerušených odpovědí (ukazují na vytíženost databáze nebo nedostupnost sítě), o velikosti odeslaných dat (ukazuje na četnost používaní databáze uživatelem) a o počtu spojení (ukazuje na návštěvnost stránek). • Funkce DB Tables V této statistice jsou důležité informace o počtu řádek v jednotlivých tabulkách, o časech uložení položek, stavu jednotlivých tabulek apod. Velmi důležité pro běh databáze jsou hlavně informace o počtu řádků (příliš velký počet řádků je úměrný době vyhledávání) a o době posledního vloženého řádku. Nerostoucí čas poslední aktualizace řádků signalizuje buď problém s doručením NetFlow exportu nebo nefunkčnost programů, které ukládají exporty do databáze. Například při růstu počtu řádků v tabulce income a nezvětšování počtu řádku v tabulce nf signalizuje poruchu programu NetFlow Database (pozor k změně v databáze dochází jen v intervalech po 1 minutě ...).
• Funkce Router Stats Funkce je velmi náročná na časové zpracování, protože po dotazu jsou sekvenčně čteny všechny řádky v databázi. Pro 3 miliony řádků v databázi tato operace trvá několik desítek sekund. Pro větší počet řádků se výsledek nemusí vůbec zobrazit, protože po překročení určité doby, http server nebo PHP zruší spojení. Výsledkem je statistika, ve které je zobrazen seznam všech směrovačů s počty přenesených bytů, od kterých přišly NetFlow exporty. K některým směrovačům můžou být uloženy v databázi detailnější informace. Ty lze získat po vybrání odkazu View Detail nebo přímo v menu Router Info.
40
• Funkce Router Info Hlavní účelem funkce je získání informací o směrovači. Seznam směrovačů, ze kterých lze získat informace, se definuje v Menu Admin. Některé směrovače mají implementovánu podporu protokolu SNMP. Protokolem SNMP lze získat seznam dalších důležitých hodnot, mezi nimiž jsou informace o kontaktní osobě, o provozovaném systému, případně informace o jednotlivých rozhraních. Získané hodnoty jsou zobrazeny v přehledné tabulce. Informace o jednotlivých rozhraní směrovače zatím nejsou implementovány, ale v další verzi by měl být tento nedostatek odstraněn.
Obrázek 5.12: Funkce Router Info.
5.5.6 Pomoc (menu Help) V tomto menu je krátká kontextová nápověda k jednotlivým funkcím. Dále licenční podmínky pro šíření a distribuci systému a informace o programu, jeho verzi, autorovi apod.
41
6 Instalace, použití a optimalizace výkonu 6.1 Požadavky na hardwarové vybavení Největší výpočetní výkon je kladen na databázový systém. Je těžké stanovit optimální konfiguraci, protože potřeba výkonnosti serveru záleží na množství příchozích dat. Obecně však platí, že je dobré mít dostatečnou velikost paměti RAM a rychlý přístup k disku. Bližší popis je v odstavci o optimalizaci MySQL serveru. Minimální nároky jsou počítač i386 s 16 MB RAM, ale praktické použití této konfigurace nemyslitelné. Jako dostatečnou konfiguraci považuji počítač s procesorem na 800 MHz, pamětí RAM 256 MB a rychlým SCSI diskem. Výpočetní nároky pro ostatní komponenty NetFlow nesrovnatelně nižší než jsou kladeny na databázový systém. 6.2
Monitoru
jsou
Instalace
6.2.1 MySQL databáze MySQL databáze se může instalovat už buď z předkompilovaných balíčků, nebo pro zvýšení výkonu si lze zkompilovat vlastní verzi. Pro instalaci balíčků doporučuji sekvenci: rpm -i --no-deps verzemysql-server.rpm rpm -i --no-deps verzemysql-client.rpm rpm -i --no-deps verzemysql-include.rpm Volba no-deps je v systémech, kde primárně nejsou podporovaný rpm balíčky (například debian, atd). Nejnovější verze MySQL je na adrese www.mysql.com Taktéž na této adrese je i detailní postup instalace. 6.2.2 Perl Perl je vyžadován programy NetFlow Collector a NetFlow Database. Minimální verze Perlu je 5.002, oba programy byly testovány s Perlem verze 5.005. Dokumentace, programové vybavení a moduly jsou přístupné na adrese www.perl.com
42
6.2.3 Perl moduly pro přístup k databázi MySQL Instalace modulů pro přístup k MySQL databázi je trochu obtížnější. Pro instalaci se prvně musí nainstalovat rozhraní DBI a pak moduly MySQL. Při instalaci modulů většina systémů ohlásí chybu. Chyba bývá způsobena chybějící knihovnou ZLIB, která na většině systémů není implicitně instalovaná. Instalace DBI rozhraní: tar –zxvf DBI-1.14.tar.gz cd DBI-1.14 perl Makefile.PL make make test make install Instalace MySQL modulů: tar –zxvf Msql-Mysql-modules-1.2215.tar.gz perl Makefile.PL make make install
6.2.4 Instalace WWW serveru a PHP Pro stabilitu celého systému doporučuji použít www server Apache. Verze PHP by měla být alespoň 4.0, s verzí 3.0 by systém fungoval, po mírných úpravách scriptů. Výkon systému je vyšší při statickém zkompilování PHP do serveru Apache. Před kompilaci PHP je nutné mít nainstalovány knihovny GD, LIBPNG, SNMP a knihovnu pro přístup do MySQL 5. Knihovnu GD lze získat na adrese www.boutell.com/gd, na této adrese jsou i odkazy na nejnovější verzi knihovny libpng. Instalace GD knihovny se provádí standardním způsobem. Konkrétní postup je v dokumentaci GD knihovny. Knihovna pro práci se SNMP protokolem je na adrese: www.net-snmp.org . Ta se opět instaluje standardním postupem. Po přípravě a nainstalování potřebných knihoven se může přistoupit k vlastní kompilaci PHP a Apache. Následující příklad je jen ukázkový, před kompilací doporučuji přečíst soubor INSTALL v adresáři PHP distribuce, případně informace uvedené v adresáři se zdrojovými kódy Apache.
5
MySQL lib a includes
43
Příklad statické kompilace Apache a PHP4 cd ./apache_1.3.19 ./configure cd ../php-4.0.4pl1 ./configure –-with-snmp –-with-mysql –-with-gd \ –-with-apache=../apache_1.3.19 make make install cd ../apache_1.3.19 ./configure –-activate-module=src/modules/php4/libphp4.a \ --htdocsdir=/home/httpd/html –-cgidir=/home/httpd/cgi-bin make make install cp ../php-4.0.4pl1/php.ini-dist /usr/local/lib/php.ini
Nyní zbývá poslední krok a to editace konfiguračních souborů www serveru. V těchto konfiguračních souborech se musí správně nastavit zpracování souborů s příponou .php (soubory s touto příponou bude zpracovávat PHP). Soubor s konfigurací je implicitně /usr/local/apache/conf/httpd.conf. V tomto souboru musí být povolen řádek: AddType application/x-httpd-php .php
Po instalaci je dobré ověřit funkčnost PHP. Funkčnost se dá zjistit po vytvoření souboru (například test.php) a jeho umístění v adresáři viditelném pro www server. Soubor bude obsahovat jen krátký text: Pokud proběhla instalace správně, tak po zobrazení souboru, webovským prohlížečem, se zobrazí detailní informace o stavu PHP. Ačkoliv se může zdát instalace obtížná je výborně popsaná v dokumentaci k PHP a neměli by s ní být problémy. Výše uvedený příklad je pro statickou kompilaci PHP. PHP však může být zkompilováno samostatně jako modul. To však sníží výkon systému, respektive zvětší délku odezvy.
44
6.2.5 Vytvoření databáze a tabulek Po rozbalení celé distribuce NetFlow Monitoru je v adresáři /sql několik souborů, které definují nebo ruší jednotlivé tabulky. Po instalaci MySQL je automaticky v systému vytvořena databáze test, která je přístupná bez hesla. Pokud někdo chce instalovat jednotlivé tabulky do této databáze stačí pouze spustit script pro vytvoření jednotlivých tabulek. Jméno scriptu je cr_table V případě vytvoření jiné databáze s nastaveným heslem se instalují tabulky zadáním příkazu: shell> mysql test < cr_tabulka nebo shell> mysql <jmeno_databaze> [-u username] [-p] < cr_tabulka
6.2.6 Instalace NetFlow Monitoru Instalace NetFlow Monitoru je velmi snadná. Po rozbalení distribuce do pomocného adresáře se spustí script install, ve kterém se dá zvolit co konkrétně instalovat na výběr jsou možnosti NetFlow Redirector, Collector, Database a Web. NetFlow Redirector je psaný v programu C a je už zkompilován pro platformu i386. V případě modifikace pro jinou platformu, doporučuji překompilovat program. Zdrojové kódy jsou v adresáři /other. Příklad instalace: tar –zxvf NetFlow-0.1.0.tar.gz cd NetFlow-0.1.0.tar.gz ./install Po nainstalování je vhodné správně nastavit konfigurační soubory. Bližší popis konfigurace jednotlivých modulů jsou v následujících odstavcích. Jelikož se programy spouští po startu počítače, doporučuji modifikovat startovací scripty, které jsou v adresáři /scripts, a ty pak umístit v adresáři pro konkrétní distribuci, pro RedHat je to v adresáři /etc/rc.d/init.d, pro distribuci Debian je to v adresáři /etc/init.d
45
6.2.6.1 Konfigurace NetFlow Redirectoru Program nepoužívá žádné konfigurační soubory. Nastavení se předává programu na příkazové řádce. Proto se musí úprava provést ve startovacím scriptu (viz výše). Syntaxe: ./nfr [-p port] [IP1[/port]] [IP2[/port]] ...
kde parametr -p definuje port na který přichází UDP pakety a IP jsou adresy, kam se mají pakety „přeposílat“. Program podporuje ještě další parametry, které lze získat po zobrazení výpisu parametrů. Příklad spuštění: ./nfr -p 44444 147.228.111.21/55555 147.228.111.12/55555
6.2.6.2 Konfigurace NetFlow Collectoru Konfigurace NetFlow Collectoru je uložena v souboru nfc.pm ten musí být umístěn buď v adresáři /etc, nebo v adresáři, ve kterém je program nfc (tam má větší prioritu). Detailní popis parametrů je uveden v konfiguračním souboru formou komentáře. Program se dá spouštět ještě s parametry na příkazové řádce, jedná se o parametry: -nd | -nodaemon - program není spuštěn v módu systémové služby -v N | -verbose N - N je číslo v intervalu 0-5, které udává úroveň výpisu pomocných ladících informací.
6.2.6.3 Konfigurace NetFlow Database Pro umístění konfiguračního souboru platí to samé, co pro NetFlow Collector. Název konfiguračního souboru je nfd.pm a může být opět umístěn na dvou různých místech. V program nfd může být spuštěn se stejnými parametry na příkazové řádce jako program nfc.
6.2.6.4 Konfigurace NetFlow Web Konfigurační soubor pro NetFlow Web je umístěn v podadresáři common. Implicitní cesta ke konfiguračnímu souboru v případě standardní distribuce je: /home/httpd/html/netflow/common/conf.php V konfiguračním souboru je kromě parametrů pro připojení k databázi (username, password, database, atd) ještě mnoho parametrů jako počet zobrazovaných řádek v jedné stránce výpisu, nastavení intervalu pro vyhledávání, časy pro znovu načtení stránek (refresh).
46
6.3 Použití NetFlow Monitoru Použití NetFlow Monitoru je výhodné pro vytváření charakteristik chování středně velkých sítí s přenosovými rychlostmi do 1Gb/sec. Nejvýhodnější pro monitorování je povolit NetFlow Exporty na hraničním směrovači testované oblasti, kde je přehled o veškerých datech procházejících z vnitřní sítě do Internetu (nebo naopak). Program je možné zkombinovat s nějakým sofistikovaným nástrojem pro účtování (NetFlow Redirector může posílat Exporty na vícero cílů). V praxi se zdá být užitečným nástrojem pro správce sítí, kteří mají přehled o celkovém chodu jejich sítí.
6.4 Optimalizace výkonu MySQL serveru Optimalizace je komplikovanou úlohou, protože vyžaduje podrobnou znalost celého systému. Nejdůležitější částí pro vytvoření rychlého a stabilního systému je samozřejmě jeho základní návrh. Při návrhu se musí vycházet z toho, k čemu má systém sloužit, jaké jsou cíle, apod. Nejslabším místem bývají buď špatně navržené algoritmy nebo zápisy na disk, při kterých se musí hlavička vystavovat na různé pozice. Moderní disky mají přístupovou dobu nižší než 10ms, takže mohou změnit pozici hlavičky zhruba 1000 za sekundu. Vhodnou volbou pro zvýšení rychlosti čtení z disku je použití diskového pole, na které se vyváženě rozloží celková zátěž. Přenosová rychlost po správném vystavení hlavičky se pohybuje v intervalu od 2 až po několik desítek megabytů za sekundu. Další možností optimalizace systému je vlastní výkon CPU a velikost hlavní paměti. Pokud je systému dostupné velké množství paměti typu RAM, je možnost zrušit všechny „swapovací“ zařízení. Jelikož je databázový systém jádrem celého sytému NetFlow monitorování, pak optimalizace databázového sytému přináší největší navýšení výkonu celého systému. Je tedy vhodné si překompilovat MySQL databázi podle vlastních potřeb. 6.4.1 Tipy pro kompilaci MySQL • Databázi kompilovat s přepínačem -static a použitím překladače pgcc. Kompilace s překladačem pgcc bude vyžadovat enormní množství paměti RAM (okolo 200MB). Některé verze pgcc generují výsledný kód jen pro procesory typu Pentium. Správnou volbou přepínačů překladače lze dosáhnou zvýšení výkonu o 10-30%. • Použitím utility strip na výsledný spustitelný kód lze dosáhnout ješte 4% nárůstu výkonu. • Při přístupu do databáze použitím TCP/IP spojení, místo použití lokálního spojení unixovými sockety, dojde k snížení výkonu zhruba o 7%. • Použitím volby --with-debug=full dojde k 35% poklesu výkonu.
47
•
Na serverech Sun SPARCstation 20 a s překladačem SunPro C++ 4.2 je o 5% rychlejší než při použití překladače gcc 2.95.x .
Jak již bylo napsáno výše, disky a pevné paměti jsou nejslabším místem databáze. Tento problém se stává velmi významný pro rostoucí velikost databáze, kdy se přestává uplatňovat disková vyrovnávací paměť (cache). Pro minimalizaci problému s rychlostí čtení z disku se používají disky s nízkým časem potřebným pro vystavení hlavičky, s vícero plotnami a s vyššími otáčkami. Další možností optimalizace je diskové pole, kde se používá metoda „striping“. Diskové pole pracuje tak, že první blok dat je uložen na prvém disku, druhý bok na druhém, atd. Dalším rozšířením diskového pole je takzvaný „mirroring“. Jedná se o duplicitní zápis dat na více disků. V případě havárie, některého disku jsou stejná data i na jiných discích, takže celý systém funguje dál, jako by se nic nestalo. V linuxových systémech lze nastavit volbu, aby systém neaktualizoval položku času posledního přístupu k souboru (databázi). 6.4.2 Nastavení parametrů serveru Správným nastavením parametrů serveru lze výkon celého sytému ještě i několikanásobně zvýšit. V následujícím seznamu uvedu jen nejdůležitější parametry, všechny parametry lze získat zadáním příkazu mysqld --help Mezi nejdůležitější parametry patří: • connect_timeout • key_buffer_size • long_query_time • max_allowed_packet • max_connections • max_connect_errors • max_heap_table_size • max_sort_length • myisam_sort_buffer_size • net_buffer_length • net_retry_count • net_read_timeout • net_write_timeout • query_buffer_size • record_buffer • slow_launch_time • sort_buffer • table_cache
implicitní hodnota: 5, implicitní hodnota: 1048540, implicitní hodnota: 10, implicitní hodnota: 1048576, implicitní hodnota: 100, implicitní hodnota: 10, implicitní hodnota: 16777216, implicitní hodnota: 1024, implicitní hodnota: 8388608, implicitní hodnota: 16384, implicitní hodnota: 10, implicitní hodnota: 30, implicitní hodnota: 60, implicitní hodnota: 0, implicitní hodnota: 131072, implicitní hodnota: 2, implicitní hodnota: 2097116, implicitní hodnota: 64,
48
• • • •
thread_concurrency tmp_table_size thread_stack wait_timeout
implicitní hodnota: 10, implicitní hodnota: 1048576, implicitní hodnota: 131072, implicitní hodnota: 28800.
Aktuální hodnoty proměnných lze získat pomocí utility mysqladmin, která po zadání příkazu mysqladmin variables zobrazí seznam aktuálních hodnot proměnných, se kterými server pracuje. MySQL používá algoritmy, které jsou dosti přizpůsobivé, můžou pracovat jak na počítačích s malou velikostí paměti, tak i na výkonných serverech, které mají stovky megabytů paměti RAM. Samozřejmě čím více paměti, tím větší výkon. Pro správné nastavení serveru jsou důležité hlavně dvě proměnné a to key_buffer_size a table_cache. Pokud server obsahuje více jak 256 MB paměti RAM, pak je optimální běh serveru s těmito hodnotami: shell> safe_mysqld -O key_buffer=64M -O table_cache=256 \ -O sort_buffer=4M -O record_buffer=1M & Konfigurace se mění podle velikosti paměti. Příklady nastavení lze najít v souborech: my-huge.cnf, my-large.cnf, my-medium.cnf a my-small.cnf, které jsou určené pro různě výkonné servery.
49
7 Závěr Cílem práce je funkční návrh programového systému pro sledování a vyhodnocování provozu počítačové sítě. Popis toku NetFlow Exporty je vhodnou volbou pro analýzu středně velkých sítí. Pro detailní informace o datovém toku v prostředí malých sítí není příliš optimálním řešením, protože jednak neposkytuje informace z druhé vrstvy ISO modelu, a některé informace z třetí vrstvy jsou agregovány, případně nejsou vůbec exportovány. Použití NetFlow Monitoru je jednou z mála možností analýzy datových toků na Internetové úrovni v prostředí páteřních linek. Vytvořený systém má následující vlastnosti: • zpracování NetFlow Exportu současně z několika různých směrovačů, • podporu NetFlow Exportu verze 1,5 a 7 , • distribuováné zpracování, • heuristickou detekci bezpečnostních incidentů, • tvorbu přehledných statistik a grafů nejpoužívanějších služeb, • přenostitelnost na jiné typy systémů, • možnost exportu a archivace statistik. V realizaci se podařilo implementovat několik bezpečnostních filtrů, i když s jen omezenými možnostmi. Omezení v prvé řadě způsobil zjištěný fakt, že směrovače provádí logický součet TCP příznaků (uložených v IP hlavičce datového spojení). Kdyby toto směrovač neprováděl, vzrostl by sice objem exportovaných dat, ale velmi by se zvýšila pravděpodobnost úspěšné detekce bezpečnostních incidentů filtry. Použití NetFlow Monitoru pro heuristickou detekci útoku může být nečekaným překvapením pro útočníka, protože ten spíše očekává detektor bezpečnostních incidentů přímo na napadeném počítači, ale už nepředpokládá možné vyhodnocování síťového provozu ze směrovače. Mnoho „hackerů“ smaže po napadení cílové stanice veškeré záznamy s informacemi o jejich identitě, ale nemohou tušit, že informace o jejich útoku lze ještě získat z tohoto monitoru. Určitou nevýhodou však je, že statistiky na běžném počítači mohou být vzhledem ke své objemnosti uloženy jen po určitou dobu. Nelze tedy přepokládat, že po měsíc starém útoku bude přímo nějaká informace z NetFlow Monitoru dostupná. Všechny statistiky lze však jednoduše archivovat, případě přenášet, na jiné stanice pro pozdější analýzu. Optimální velikost disku závisí na odhadovaném síťovém provozu monitorované linky, nedoporučuji však disky menší jak 4 GB.
50
Při vlastní implementaci systému bylo nutno řešit několik nečekaných problémů. Databázový systém MySQL je neustále ve vývoji a některé skutečnosti nejsou stále vyřešeny ke spokojenosti uživatelů (programátorů). Problémem bylo například i to, že databáze nyní nepodporuje sjednocení dvou „selectů“. Tuto, zatím neimplementovanou, funkci bylo nutno vyřešit dočasnou pomocnou tabulkou. V další verzi MySQL se již připravuje implementace této funkce. Drobné nedostatky databáze MySQL lze zanedbat ve srovnání s přínosem, který tato databáze přináší. Celý navržený systém je šířen v rámci licence GPL/GNU (je tedy zcela zdarma). Jeho otevřenost a koncepce umožňuje snadné rozšiřování a přidávání dalších bezpečnostních modulů. Nyní jsou moduly definovány v perlovém scriptu. V další verzi NetFlow Monitoru bude implementována možnost definice a údržby těchto filtrů v rámci www prohlížeče. NetFlow Monitor byl otestován na síťovém provozu linky Plzeň-Cheb. Další nasazení se předpokládá v akademických vysokorychlostních sítích TEN-155 CZ / CESNET 2, které odhalí jeho případné nedostatky. NetFlow Monitor je součástí projektu Inteligentní analyzátor NetFlow exportu sdružení CESNET, jehož záměrem je projektování vysokorychlostních sítí národního výzkumu a vývoj nových aplikací. Bližší informace jsou na Internetové adrese: http://www.cesnet.cz/projekt/ .
51
Přehled zkratek a použitého značení •
API - Application Program Interface
•
ATM - Asynchronous Transfer Mode
•
CEF - Cisco Express Forwarding
•
CGI - Common Gateway Interface
•
DoS - Denial of Service
•
DDoS - Distributed Denial of Service
•
FIB - Forwarding Information Base
•
FTP - File Transfer Protocol
•
HTTP - Hypertext Transfer Protocol
•
HTML - Hypertext Markup Language
•
ICMP - Internet Control Message Protocol
•
IETF - Internet Engineering Task Force
•
IP - Internet Protocol
•
MPLS - Multiprotocol Label Switching
•
MRTG - Multi Router Traffic Grapher
•
QoS - Quality of Services
•
RFC - Request for Comment
•
RTFM - Realtime Traffic Flow Measurement
•
SNMP - Simple Network Management Protocol
•
TCP - Transmission Control Protocol
•
TOS - Type Of Service
•
UDP - User Datagram Protocol
•
XML - Extensible Markup Language
Literatura [1] Programování na Webu: Kris Jamsa, UNIS Publishing, Smetanova 3, 602 00 Brno, ISBN 80-96097-03-X, 1996 [2] Perl pro zelenáče: Pavel Satrapa, Neokortex, s.r.o., Na rovnosti 3, 130 00 Praha 3, ISBN 80-86330-02-8 [3] Programování v jazyce Perl: Larry Wall, Tom Christiansen & Randal L. Schwartz, Computer Press, Hornochlupická 22, 140 00 Praha 4, 1997 [4] Programování v Perlu pro pokročilé: Sriram Srinivasan, Computer Press, Hornochlupická 22, 140 00 Praha 4, ISBN 80-7226-079-0, 1998 [5] MySQL dokumentace: http://www.mysql.com/documentation [6] PHP dokumentace: http://www.php.cz/manual/en/ [7] Caida Tools: http://www.caida.org/tools/ [8] Cisco NetFlow Collector: http://www.cisco.com/univercd/cc/td/doc/product/rtrmgmt/nfc/ [9] Route Monitoring (TF-TANT): http://www.switch.ch/tf-tant/rm/ [10] Network Monitoring and Analysis http://www.switch.ch/tf-tant/floma/ [11] Multi Router Traffic Grapher http://people.ee.ethz.ch/~oetiker/webtools/mrtg/ [12] Internet Traffic Archive: Lawrence Berkeley National Laboratory http://ita.ee.lbl.gov/ [13] Max’s Vision’s Whitehats – Max Vision Network Security http://whitehats.com/
Příloha NetFlow Export verze 1
Obrázek 1: hlavička paketu NetFlow Exportu verze 1
Obrázek 2: datová část paketu NetFlow Exportu verze 1
NetFlow Export verze 5
Obrázek 3: hlavička paketu NetFlow Exportu verze 5
Obrázek 4: datová část paketu NetFlow Exportu verze 5