VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA INFORMA ČNÍCH TECHNOLOGIÍ ÚSTAV PO ČÍTA ČOVÝCH SYSTÉM Ů FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS
WEBOVÉ ROZHRANÍ PRO SYSTÉM DETEKCE SÍ ŤOVÝCH ANOMÁLIÍ
BAKALÁ ŘSKÁ PRÁCE BACHELOR‘S THESIS
AUTOR PRÁCE PETR SLÁDEK AUTHOR
BRNO 2013 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA INFORMA ČNÍCH TECHNOLOGIÍ ÚSTAV PO ČÍTA ČOVÝCH SYSTÉM Ů FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS
WEBOVÉ ROZHRANÍ PRO SYSTÉM DETEKCE SÍŤOVÝCH ANOMÁLIÍ WEB INTERFACE FOR NETWORK ANOMALY DETECTION SYSTEM
BAKALÁ ŘSKÁ PRÁCE BACHELOR‘S THESIS
AUTOR PRÁCE PETR SLÁDEK AUTHOR
VEDOUCÍ PRÁCE Ing. VÁCLAV BARTOŠ SUPERVISOR
BRNO 2013 Abstrakt
Úkolem této bakalá řské práce je vytvo řit webové rozhraní pro systém detekce sí ťových anomálií s názvem HostStats. Jeho úkolem je umožnit uživateli efektivn ě pracovat s daty a statistikami, které systém poskytuje. Webové rozhraní funguje jako plugin do NfSenu i jako zcela nezávislá webová aplikace. Implementace prob ěhla v PHP s využitím Nette Frameworku, HTML5, CSS3 a JavaScriptu s použitím jQuery knihovny.
Abstract
The goal of this work is to create a web interface for network anomaly detection system called HostStats. Its mission is to enable users to effectively work with data and statistics provided by the system. Web interface works as a plugin to NfSen as a completely independent web applications. Implementation took place in PHP using the Nette Framework, HTML5, CSS3, and JavaScript using the jQuery library.
Klí čová slova
HostStats, NfSen, NetFlow, timeslot, detekce útok ů, sí ťové anomálie, Nette framework
Keywords
HostStats, NfSen, NetFlow, timeslot, attack detection, network anomaly, Nette framework
Citace
Sládek Petr: Webové rozhraní pro systém detekce sí ťových anomálií, bakalá řská práce, Brno, FIT VUT v Brn ě, 2013 Webové rozhraní pro systém detekce sí ťových anomálií
Prohlášení
Prohlašuji, že jsem tuto bakalá řskou práci vypracoval samostatn ě pod vedením Ing. Václava Bartoše. Uvedl jsem všechny literární prameny a publikace, ze kterých jsem čerpal.
…………………… Petr Sládek 15.kv ětna 2013
Pod ěkování
Děkuji svému vedoucímu práce Ing. Václavu Bartošovi za odborné vedení a všechny podn ěty a podklady, které mi k vypracování práce poskytl.
© Petr Sládek, 2013 Tato práce vznikla jako školní dílo na Vysokém u čení technickém v Brn ě, Fakult ě informa čních technologií. Práce je chrán ěna autorským zákonem a její užití bez ud ělení oprávn ění autorem je nezákonné, s výjimkou zákonem definovaných p řípad ů.
4 Obsah
Obsah ...... 1 1 Úvod ...... 3 2 Analýza ...... 4 2.1 Proces získávání dat pro HostStats ...... 4 2.1.1 NetFlow ...... 4 2.1.2 NfSen – Netflow Senzor ...... 5 2.1.3 HostStats ...... 5 2.2 Architektura plugin ů NfSen ...... 6 2.3 Komunikace Frontendu s Backendem ...... 7 2.3.1 NEW_DATA (1) ...... 8 2.3.2 GET_STATUS (10) ...... 8 2.3.3 GET_HOST_CNT_HISTORY (11) ...... 8 2.3.4 GET_FLOW_CNT_HISTORY(12) ...... 9 2.3.5 GET_PROFILES(20) ...... 9 2.3.6 GET_FIELD_LIST(30) ...... 9 2.3.7 GET_TIMESLOT_DATA(31) ...... 10 2.3.8 GET_TIMESLOT_IPMAP (32) ...... 10 2.3.9 GET_HOST_HISTORY(35) ...... 11 2.3.10 GET_DETECTION_LOG_LIST(40) ...... 11 2.3.11 GET_DETECTION_LOG(41) ...... 12 2.4 Potencionální technologie Frontendu ...... 12 3 Implementace ...... 13 3.1 Použité technologie ...... 14 3.1.1 HTML5 ...... 14 3.1.2 CSS3 ...... 15 3.1.3 PHP Framework Nette ...... 15 3.1.4 Konfigurace p řes Neon ...... 16 3.1.5 JavaScriptová knihovna jQuery ...... 16 3.1.6 CSS Framework Bootstrap ...... 17 3.1.7 AJAX & Snippety ...... 17 3.2 Objektový návrh aplikace ...... 18 3.2.1 MVP struktura ...... 18 3.2.2 Životní cyklus aplikace ...... 20 3.2.3 Třída HSConnection ...... 22
1 3.2.4 Třída Timeslot ...... 22 3.2.5 Třída Timewindow ...... 23 3.2.6 Třída Nettools ...... 23 3.2.7 Zpracování chyb ...... 23 3.3 Sekce Frontendu ...... 24 3.3.1 Sekce Overview ...... 24 3.3.2 Sekce Detail ...... 25 3.3.3 Sekce IP map ...... 25 3.3.4 Sekce History ...... 26 3.3.5 Sekce Detectors ...... 27 4 Testování ...... 28 4.1 Oblasti testování ...... 28 4.1.1 Testování funk čnosti ...... 28 4.1.2 Testování použitelnosti ...... 29 4.1.3 Testování bezpe čnosti ...... 29 4.2 Na čem bylo testováno ...... 29 4.3 Výsledky testování ...... 29 5 Možnosti dalšího rozší ření ...... 30 6 Záv ěr ...... 31
2 1 Úvod
Cílem této práce je popsat a zdokumentovat webové rozhraní pro systém detekce sí ťových anomálií HostStats, vyvíjeného v rámci výzkumné skupiny ANT. HostStats je název systému, který využívá data v NetFlow záznamech a generuje statistiky o jednotlivých hostech na síti. V těchto statistikách poté vyhledává anomálie, na základ ě kterých detekuje jednotlivé sí ťové útoky jako DOS, horizontální a vertikální skenování port ů a další. Webové rozhraní (neboli také frontend) systému HostStats je prost ředek pro zobrazování statistik ve form ě tabulek, filtr ů a graf ů uživateli tak, aby bylo vše p řehledn ě vid ět a s daty se dalo bez problém ů pracovat. Webové rozhraní je plugin do monitrovacího systému NfSen, který slouží pro práci s NetFlow záznamy. Důraz je ale taktéž kladen na to aby frontend mohl fungovat samostatn ě jako nezávislá webová aplikace. Tato práce se zabývá analyzováním a ur čením nejlepšího vhodného technologického řešení pro implementaci webového rozhraní systému HostStats, a také popsáním implementace samotné. A to p ředevším architekturou plugin ů do monitorovacího systému NfSen, fungováním aplikace ve vybraném Nette Frameworku, dále pak popsáním n ěkterých d ůležitých t říd objektového modelu, popsáním MVC struktury aplikace a v neposlední řad ě komunikací webového rozhraní s backendovou (serverovou) částí systému. V poslední kapitole je popsáno testování funk čnosti a použitelnosti webu. Vzhledem k tomu, že tato aplikace slouží pro administrátora či správce sít ě, testování prob ěhlo na skupince lidí z IT oboru. Dále jsou uvedeny možná budoucí užite čná rozší ření systému. Na p řiloženém CD jsou kompletní zdrojové kódy webového rozhraní a elektronická verze tohoto dokumentu.
3 2 Analýza
Tato kapitola se zabývá teoretickou stránkou funk čnosti systému. Dozvíte se kde a jak se berou data pro statistiky ze kterých HostStats vychází a na základ ě kterých odhaluje sí ťové útoky. Jsou zde popsány technologie, na kterých je systém detekce sí ťových anomálií založen a ze kterých je proto nutné vycházet. Na záv ěr jsou zde uvedeny možné technologie a prost ředky na kterých je vhodné stav ět webové rozhraní.
2.1 Proces získávání dat pro HostStats
Stru čně funguje systém takto: HostStats zpracovává NetFlow záznamy o tocích na síti. NetFlow záznamy jsou ukládány do soubor ů, p řičemž každý soubor obsahuje záznamy z jednoho časového intervalu o délce 5 minut (tzv. timeslot ). Pomocí opensource nástroje nfdump se dají data z těchto soubor ů číst. Pro lepší vizualizaci a práci s NetFlow záznamy se ovšem používá opensource nástroj NfSen. Jeho webový frontend zobrazuje tyto údaje uživateli ve form ě graf ů a tabulek s různými filtry a vyhledáváním. NfSen také nabízí podporu pro pluginy. Vždy po 5 minutách, když dojde k vytvo ření nového souboru s flow záznamy, pošle NfSen pomocí pluginu zprávu s názvem souboru timeslotu na HostStats a ten ho zpracuje a vytvo ří statistiku o jednotlivých hostech na síti. Základním článkem získání dat ke statistice je tedy NetFlow.
2.1.1 NetFlow
NetFlow je protokol vytvo řený, jednou z nejvíce dominujících firem na poli síťových prvk ů, spole čností Cisco Systems. Tento otev řený protokol slouží k monitorování sí ťového provozu na základ ě IP tok ů a to v tém ěř reálném čase. Toto monitorování je d ůležité zejména k zabezpe čování po číta čové sít ě, ale i nap říklad pro ISP k zpoplat ňování svých služeb na základ ě p řenesených dat.
IP tok (neboli flow) je definovaný jako ukon čená sekvence paket ů se shodnými p ěti údaji • Cílová IP adresa • Zdrojová IP adresa • Cílový port • Zdrojový port • Číslo protokolu
U každého toku je evidován čas jeho za čátku, délka jeho trvání, po čet p řenesených paket ů, po čet přenesených byt ů a případn ě další údaje. Z každého toku tedy m ůžeme určit kdo s kým kdy komunikoval, na jakém protokolu a kolik přitom přenesl dat.
4
Architektura NetFlow je složena z několika sond (tzv. exportér ů) a jednoho kolektoru . Exportéry jsou umíst ěny v různých místech sít ě, na kterých chceme schra ňovat statistiky a analyzují procházející pakety. Ukládají informace o toku a ve chvíli kdy tok skon čí, odešlou ho na kolektor. A to bu ď po síti na které jsou p řipojené nebo po vlastní dedikované lince, která nezat ěžuje monitorovanou sí ť. [1] Kolektor je za řízení, které schra ňuje a ukládá všechny statistiky o tocích, které p řijme od exportér ů. Proto musí mít velký úložný prostor. V ětšinou na tomto za řízení b ěží také software vhodný pro vizualizaci t ěchto NetFlow záznam ů. Jedním z nich je nap říklad NfSen.
2.1.2 NfSen – Netflow Senzor
Tento oblíbený a často používaný nástroj slouží nejen jako NetFlow kolektor , ale ve své podstat ě jako grafická nadstavba nástroje nfdump . Pochází také od stejného autora a je stejně tak vydávaný jako opensource. NfSen je rozd ělen na backend a webový frontend. Backend slouží jako kolektor, který shromažduje NetFlow záznamy a ukládá je do RRD 1 databáze. Frontend pomocí RRD graf ů vykresluje využití sít ě (v bytech, paketech i tocích) a další statistiky. Tyto data se dají samoz řejm ě filtrovat podle port ů, ip adres, jednotlivých senzor ů atp… Jak backend, tak i frontentd mají své pluginy. Backendové jsou volané p ři r ůzných událostech, jako je nap říklad nový timeslot, n ějaké definované upozorn ění a podobn ě. Frontendové pluginy slouží k vlastní vizualizaci a filtraci dat. A také k volání funkcí v backendových pluginech. [2] Tyto pluginy jsou využity i pro HostStats. Backendový plugin posílá nová data do HostStats ke zpracování a Frontendový plugin zajištuje vykreslení HostStats frontendu v layoutu NfSenu.
2.1.3 HostStats
HostStats je název systému pro analýzu dat a detekci sí ťových anomálií vyvíjený pod výzkumnou skupinou ANT, jehož základem je výpo čet statistik o jednotlivých hostech (IP adresách) v síti. Systém je vyvíjen jako plug-in pro NfSen. Každých 5 minut jsou z NetFlow dat vypo čítány informace o provozu jednotlivých IP adres. V t ěchto informacích pak jsou vyhledávány adresy vykazující podez řelé chování. Komunikace jednotlivých prvk ů systému je znázorn ěna na schématu (obrázek 1). Backendový plugin NfSenu, napsaný v jazyce perl, posílá jednou za 5 minut p řes socket zprávu s názvem nového timeslotu. HostStats server (backend) timeslot analyzuje a vypo čítá statistiky pro
1 RRD – Databázový nástroj, který se zam ěř uje na zpracování a ukládání časov ě závislých dat
5 jednotlivé hosty (IP adresy) a statistiku uloží na disk. Ze vzniklé statistiky detekuje hrozby, jejichž seznam taktéž uloží na disk k dalšímu použití, p řípadn ě odešle informace do systému Warden 2. Na všechny uložená data se op ět p řes socket dotazuje webový frontend. Ten je poté zobrazuje v uživatelsky p řijatelné form ě uživateli. Podrobn ě je komunikace HostStats backendu s frontendem popsána v kapitole 2.3.
Obrázek 1: Schéma datových tok ů HostStats
2.2 Architektura plugin ů NfSen
Webové rozhraní (frontend) systému HostStats musí fungovat jako plugin do NfSenu. A to p ředevším z toho d ůvodu, aby byly všechny nástroje používané k analýze NetFlow p ěkn ě na jednom míst ě. Na druhou stanu je ovšem vhodné aby webový frontend mohl být funk ční i samostatn ě bez použití NfSenu. Jak už bylo řečeno NfSen nabízí podporu pro frontendové pluginy psané v PHP , které jsou vid ět na webovém frontendu NfSenu a backendové pluginy, které se spouští jako perl skript a mohou komunikovat s frontendovými pomocí aplika čního rozhraní. Z důvodu pot řeby samostatnosti našeho webového rozhraní, není možné použít nabízené rozhraní pro frontendové pluginy. Proto je použit jen drobný m ůstek, kterým je php soubor hoststats.php v adresá ře NfSen plugin ů. Ten vypne automatické obnovování stránky v nastaveném intervalu, vloží iframe s adresou našeho webového rozhraní a pomocí JavaScriptu ho roztáhne na celou možnou plochu uživatelova prohlíže če.
2 WARDEN - systém pro efektivní sdílení informací o detekovaných událostech (hrozbách). Systém je vyvíjen v rámci projektu Velká Infrastruktura CESNET, který řeší sdružení CESNET. https://csirt.cesnet.cz/Warden
6 Jakákoli jiná možnost velmi komplikovala využít kterékoli framework, ajaxové požadavky, vlastní CSS styly atd. NfSen rozhraní pro PHP frontendové pluginy není pro funk čnost HostStats webového rozhraní nutností, protože to komunikuje přes sockety p římo s HostStats backendem a nevyžaduje jakékoliv propojení s NfSenem.
Obrázek 2: Schéma architektury plugin ů v NfSen [2]
2.3 Komunikace Frontendu s Backendem
Frontend posílá požadavky na socket otev řený backendem (standardn ě localhost na portu 3333 ) ve formátu: • první byte - kód požadavku • řet ězec libovolné délky - parametry • poslední byte - ukon čení zprávy nulovým znakem ('\0’)
Nap ř:
\x1E all;201302171200;flows > 100;50;0 \0
Po čet a význam parametr ů závisí na typu požadavku, parametry jsou obvykle odd ělovány pomocí st ředníku. Backend odešle zp ět požadovaná data (formát závisí na typu požadavku) a uzav ře spojení. Pro každý požadavek je tedy nutné vytvo řit nové spojení. Pokud není specifikováno jinak: • všechny časy (timesloty) se posílají ve formátu: yyyymmddHHMM. • parametr "profil" ur čuje profil, ze kterého se získávají data, je to bu ď "all", nebo n ěkterý z řet ězc ů získaných voláním GET_PROFILES viz dále.
7 Pokud dojde k chyb ě, je místo o čekávané odpov ědi odeslána chybová hláška za čínající řet ězcem "ERROR". Ta je potom vyvolaná jako Exception a dále odchycená a zpracovaná v aplikaci. Dále jsou uvedeny jednotlivé typy požadavk ů. V závorce je vždy uveden kód požadavku v desítkové soustav ě.
2.3.1 NEW_DATA (1)
Speciální požadavek, který nep řichází z webového rozhraní, ale posílá ho NfSen backend plugin. Říká tím, že jsou k dispozici nová data. Na tento požadavek jako jediný není odesílána žádná odpov ěď .
Parametry: timeslot
2.3.2 GET_STATUS (10)
Vrátí základní stavové informace o stavu backendu. Požadavek nemá žádné parametry.
Formát odpov ědi promenna=hodnota;promenna=hodnota;...;promenna=hodnota
V sou časnosti se vracejí tyto prom ěnné: • processing - 1 pokud plugin práv ě zpracovává nová data, jinak 0 • timeslot - aktuáln ě zpracovávaný, nebo poslední zpracovaný timeslot • flows - po čet na čtených tok ů v posledním timeslotu • hosts - po čet na čtených host ů v posledním timeslotu
2.3.3 GET_HOST_CNT_HISTORY (11)
Vrací historii po čtu host ů v minulých timeslotech
Paramery: profil;starttimeslot,endtimeslot
Formát odpov ědi timeslot=hodnota;timeslot=hodnota;...;timeslot=hodnota
8 Hodnota pro každý timeslot mezi starttimeslot a endtimeslot (v četn ě), ke kterému jsou data k dispozici.
2.3.4 GET_FLOW_CNT_HISTORY(12)
Vrací historii po čtu tok ů v minulých timeslotech. Parametry a formát odpov ědi stejné jako u GET_HOST_CNT_HISTORY .
2.3.5 GET_PROFILES(20)
Vrátí seznam dostupných profil ů. Nemá žádné parametry.
Formát odpov ědi: nazev_profilu_1;nazev_profilu_2;...;nazev_profilu_n
2.3.6 GET_FIELD_LIST(30)
Vrátí seznam položek, ze kterých se skládá záznam o hostu.
Parametry: profile Formát odpov ědi: polozka;polozka;...;položka
Příklad: address;in_flows;in_packets;in_bytes;out_flows;out_packets;out_bytes
9 2.3.7 GET_TIMESLOT_DATA(31)
Na tento požadavek p řijde jako odpov ěď tabulka dat z jednoho timeslotu.
Parametry: profile;timeslot;filter;limit;sort_by;ascending
• filter - filtrovací pravidlo, formát kontroluje backend, z hlediska frontendu jde o libovolný řet ězec). M ůže být prázdné. • limit - maximální po čet vrácených záznam ů (kladné číslo) • sort_by - název položky, podle jejíž hodnoty budou data seřazena (jeden z názv ů získaných voláním GET_FIELD_LIST ), m ůže být prázdné, pak data nejsou řazena • ascending - 1 pokud mají být data řazena vzestupn ě, jinak jsou řazena sestupn ě (default)
Formát odpov ědi: Tabulka, řádky odd ěleny pomocí ' \n’, hodnoty na řádku pomocí ' ;'. • První řádek - popisky sloupc ů tabulky (názvy položek) • Každý další řádek jeden záznam (tj. adresa a hodnoty položek)
Příklad: address;in_flows;in_packets;in_bytes;out_flows;out_packets;out_bytes 10.0.0.1;2;2;120;1;4;2405 192.168.1.2;54;510;14028;27;98;841 2001:db8::1428:57ab;0,0,0;250;250;15000
2.3.8 GET_TIMESLOT_IPMAP (32)
Na tento požadavek p řijde jako odpov ěď tabulka dat z jednoho timeslotu agregované podle /16 prefixu IPv4 adresy. Tyto data se používají pro vykreslení IP mapy (viz kapitola 253.3.3).
Parametry: profile;timeslot;base_address;prefix_len
• base_address – Adresa specifické podsít ě • prefix_len – Délka prefixu p ředchozí adresy
Formát odpov ědi: Stejný jako v předchozím požadavku
10
2.3.9 GET_HOST_HISTORY(35)
Vrací statistiky o jednom hostu z daného časového intervalu, tj. ze všech existujích soubor ů s časovou zna čkou mezi starttimeslot a endtimeslot (v četn ě).
Parametry: profile;address;starttimeslot;endtimeslot
• address - adresa hosta, jehož statistiky jsou požadovány (IPv4 nebo IPv6 v b ěžném textovém formátu) • starttimeslot - za čátek časového rozsahu (první požadovaný timeslot) • endtimeslot - konec časového rozsahu (poslední požadovaný timeslot)
Formát odpov ědi: Tabulka, řádky odd ěleny pomocí ' \n’, hodnoty na řádku pomocí ' ;'. • První řádek - popisky sloupc ů tabulky (názvy položek) • Každý další řádek jeden záznam (tj. timeslot a hodnoty položek) • Pokud se požadovaná adresa v datech z ur čitého timeslotu nevyskytuje, jsou všechny hodnoty záznamu nulové. • Pokud n ějaký timeslot není v ůbec k dispozici (soubor neexistuje), je řádek s tímto timeslotem vynechán. Příklad: timeslot;in_flows;in_packets;in_bytes;out_flows;out_packets;out_bytes 201301021200;2;2;120;1;4;2405 201301021205;0;0;0;0;0;0 201301021210;212;215;4320;250;250;15000 2.3.10 GET_DETECTION_LOG_LIST(40)
Vrací seznam dn ů, pro které je k dispozici log detekovaných událostí. Tento požadavek nemá žádné parametry.
Formát odpov ědi: Seznam dní ve formátu yyyymmdd odd ělených pomocí ' \n’ Příklad: 20130102 20130103 20130104
11 2.3.11 GET_DETECTION_LOG(41)
Vrací obsah logu detekovaných událostí pro zadaný den Parametry: day (den ve formátu yymmdd )
Formát odpov ědi: Tabulka, řádky odd ěleny pomocí ' \n’, hodnoty na řádku pomocí ' ;'. Příklad: 201202151115;portscan_h;6;43.99.57.181;;;;1516;horizontal SYN scan 201202151115;portscan_h;6;138.243.71.66;;;;1413;horizontal SYN scan 201202151115;dos;6;;20fd:6cfa:e321:ff:0:ffff:93fa:e3fe;;;124112;
Význam jednotlivých sloupc ů: 1. Timeslot, ve kterém byla událost detekována 2. Typ události, možnosti: o portscan (skenování portu bez bližšího ur čení) o portscan_h (horizontální skenování portu, tj jeden port na více adresách) o portscan_v (vertikální skenování portu, tj r ůzné porty na jedné adrese) o bruteforce (hádání hesel hrubou silou) o dos (denial od service útok) o other (ostatní) 3. protokol, p řes který byl útok veden (1=ICMP, 6=TCP, 17=UDP) 4. zdroj události (IPv4 nebo IPv6 adresa) 5. cíl události (IPv4 nebo IPv6 adresa) 6. zdrojový port 7. cílový port 8. intenzita události (nap ř. po čet proskenovaných adres/port ů, po čet tok ů DoS útoku apod.) 9. poznámka – jakýkoli řet ězec
Protokol ů, adres a port ů může byt i vice, v tom p řípad ě jsou jednotlivé hodnoty odd ěleny čárkou ',' .
2.4 Potencionální technologie Frontendu
Vzhledem k zadání je nutné použít pro webové rozhraní PHP na stran ě serveru a Javascript na stran ě klienta. To uleh čuje výb ěr a odpadají tím možnosti jako Ruby, ASP, Perl či Python. Ovšem používat v dnešní dob ě PHP bez n ějakého frameworku je velmi nevhodné a časov ě neekonomické. PHP framework ů je široká škála a proto je nutné vybrat ten nejvhodn ější.
12 K nejvíce používaným a nejlépe dokumentovaným pat ří Zend Framework, Nette Framework, CodeIgnitier, CakePHP a Sympony. Všechny tyto Frameworky samoz řejm ě fungují na PHP5, které obsahuje vylepšenou podporou pro objektov ě orientované programování. Zend Framework pochází od stejné spole čnosti jako PHP samotné, je stále vyvíjený a má podrobnou a udržovanou dokumentaci. Oproti tomu je ale relativn ě pomalý, obsahuje mnoho soubor ů a t říd, které v normální aplikaci programátor v ůbec nevyužije a oproti ostatním framework ům není moc uživatelsky p říjemný. Skoro vše se konfiguruje a p ředává p řes pole, místo toho aby se použil objektový p řístup. Nette Framework vyvíjí malá česká komunita. Na za čátku roku vyšla jeho 2 verze, která je stabilní a kvalitn ě česky i anglicky zdokumentovaná. Obsahuje skv ělý šablonovací systém Latte a vynikající systém vytvá ření formulá řů a komponent. Do Nette existují také r ůzné pluginy, knihovny a rozší ření od uživatelské komunity. Tento Framework se stává velmi populární a pro své webové aplikace ho použili nap říklad servery Ulozto.cz, Denik.cz nebo kancelá ř prezidenta ČR. CodeIgnitier, CakePHP a Sympony jsou menší frameworky. Podporují, stejn ě jako p ředchozí dva, základní nástroje jako MVC strukturu, formulá ře, emaily atp. Využívají se ovšem mén ě a nejdou úpln ě s dobou. Na základ ě nezávislého testu [3] a prohlédnutí dokumentace a p říklad ů jednotlivých framework ů jsem se rozhodl použít pro Webové rozhraní HostStats framework Nette. A to p ředevším kv ůli šablonovacímu systému a skv ělé podpo ře AJAXu. Pro vývoj aplikace tohoto typu se hodí taktéž CSS Framework. Ten slouží k vytvo ření základního rozložení layoutu webu a také obsahuje typografii a základní styly formulá řových prvk ů, tabulek, r ůzných zpráv, stav ů apod. Takovýchto voln ě dostupných framework ů se dá najít také mnoho. Některé, jako nap říklad 360.gs, jsou jen na vykreslení tzv „m řížky 3“ webu. Jiné mají i grafické styly a JavaScript pro záložky, vysouvací menu apod. Mezi nejznám ější pat ří YUI od Yahoo, YAML CSS Framework a Twitter Bootstrap. Já jsem pro implementaci zvolil ten poslední. Twitter Bootstrap má široké využití ve všech „administra čních“ prost ředích, má hezký design, který se dá jednoduše p řizp ůsobit a nabízí spoustu užite čných prvk ů.
3 Implementace
Po výb ěru optimálních technologií a prostudování dokumentace technologií, na které je pot řeba navázat bylo množné za čít implementovat. V této kapitole jsou popsány technologie, frameworky a knihovny použité pro implementaci.
3 Grid neboli m řížka webu je rozmíst ění jednotlivých celk ů na stránce
13 Dále je uveden objektový návrh MVP struktury, životní cyklus aplikace a podrobn ěji popsány důležité t řídy aplikace.
3.1 Použité technologie
3.1.1 HTML5
HTML neboli hypertextový zna čkovací jazyk je jedním ze základních jazyk ů webu. Tedy publikace dokument ů na internetu. Dnes je HTML spolu s JavaScriptem, stylovacím jazykem CSS a serverovým jazykem PHP základem pro v ětšinu internetových prezentací. Další vývoj HTML p římo ovliv ňuje rozvoj internetových aplikací a umož ňuje vývojá řů m realizovat čím dál tím více nápad ů. Proto se s každou novou verzí internet posune o neuv ěř itelný krok kup ředu. Stejn ě tak se stalo i v případ ě vydání poslední verze HTML5. HTML5 se za čala vyvíjet kolem roku 2007, a její kone čné schválení je plánováno až na rok 2014. Proto je verze 5 stále velmi živá a její podpora je ze strany prohlíže čů p řijata r ůzn ě. Velká část HTML 5 je v sou časné dob ě podporována všemi velkými prohlíže či a je tedy možné mnoho z nové specifikace již používat. HTML verze 5 se od verze 4 liší novými, zkrácenými a rychlejšími zápisy zna ček (tag ů). Auto ři dávají d ůraz na jednoduchost a zárove ň ú činnost. V HTML5 je též možné vytvo řit aplikaci, která funguje v prohlíže či i tehdy, když uživatel nemá internetové p řipojení, a která ukládá data do lokálního úložišt ě na uživatelov ě po číta či. Je-li internetové p řipojení k dispozici, m ůže aplikace synchronizovat data se vzdáleným serverem.
Obrázek 3: Ukázka HTML5 kódu
Příklad t ěla dokumentu ukazuje obrázek 3. Na první pohled je z řejmé, že je velmi zjednodušený DOCTYPE a také meta tagy. Vzhledem k tomu že HTML5 vychází stejn ě jako starší HTML4 ze SGML nemusí být všechny tagy párové jako tomu bylo u XHTML vycházejícího z XML.
14 Jazyk dále obsahuje mnoho nový zna ček (tag ů). Nap říklad
3.1.2 CSS3
Kaskádové styly (CSS) jsou dalším základním kamenem tvorby web ů. Hlavním smyslem CSS je umožnit návrhá řů m odd ělit vzhled dokumentu od jeho struktury a obsahu. P ůvodn ě to m ěl umožnit už jazyk HTML, ale v d ůsledku nedostate čných standard ů a konkuren čního boje výrobc ů prohlíže čů se vyvinul jinak. Starší verze HTML obsahují celou řadu element ů, které nepopisují obsah a strukturu dokumentu, ale i zp ůsob jeho zobrazení. Z hlediska zpracování dokument ů a vyhledávání informací není takový vývoj žádoucí a proto konsorcium W3C začalo pracovat na standardu CSS. Pro moji aplikaci jsem zvolil nejnov ější verzi tohoto jazyka a to CSS3. Kaskádové styly ve své t řetí verzi nabízejí mnoho novinek uleh čující kodér ům práci a umož ňujících psát čistší p řenositeln ější kód a které odstra ňují rozdíly mezi jednotlivým prohlíže či. Za zmínku stojí nap říklad CSS vlastnost border-radius , díky které lze u blokových i řádkových element ů nastavit zaoblení roh ů. Další takovou novinkou jsou vlastnosti box-shadow a text-shadow pro vytvo ření stínu blok ům nebo textu. Velké využití májí také tzv. transformace , ty slouží k jednoduchým animacím nap říklad p ři hover efektu (najetí myší) nebo p ři focus (zaktivn ění) nějakého formulá řového prvku. Další velkou výhodou je možnost zadávat barvy ve formátu RGBA podporující alfa-kanál pro pr ůhlednost. Mnohé tyto vlastnosti m ěli prohlíže če už d říve, ovšem každý na to m ěl své vlastnosti. Nap říklad Mozzila používala –moz-border-radius a chrome –webkit-border-radius. Specifikace CSS3 tyto rozdíly eliminuje a popsuje p řesné chování ve všech prohlíže čích podporujících CSS3. [5]
3.1.3 PHP Framework Nette
Nette je populární nástroj pro vytvá ření webových aplikací v PHP 5. Tento Framework bez speciálního zásahu programátora elimuje výskyt bezpe čnostních d ěr jako nap ř. XSS, CSRF, session
15 hijacking, session fixation atd. Disponuje skv ělými ladícími nástroji, jak pro vypisování a odhalování chyb, tak pro lad ění SQL dotaz ů, optimalizaci rychlosti apod. [6] Programování v Nette Framework Vás také vede k čistému návrhu aplikace s důrazem na budoucí rozši řitelnost. Díky velké a aktivní komunit ě nabízí velké množství dopl ňků, jako nap říklad různé DataGridy, formulá řové prvky, užite čné knihovny a podobn ě.
3.1.4 Konfigurace p řes Neon
NEON je textový soubor s příponou *.neon, který se používá pro definici konfigurace. Je jednoduší a pro člov ěka čiteln ější než nap ř. INI, JSON nebo PHP pole. NEON používá velmi podobnou syntaxi jako YAML 4. Hlavní rozdíl je v tom, že NEON podporuje tzv. „entity“, pro odsazení používá tabulátory, syntaxe je o n ěco jednodušší a jeho analýza je rychlejší. Syntaxe je blíže popsaná v dokumentaci [7]. Aplikace používá dva konfigura ční soubory. První, který je uložen v app/config/application.neon a nastavuje prost ředí aplikace, framwork, php, služby a podobně. A druhý ( app/config/config.neon ), ve kterém se nastavuje přizp ůsobení HostStats frontendu. Dají se zde zm ěnit formáty datumu, email na který chodí p řípadné chyby v aplikaci, parametry (adresa a port) pro připojení k HostStats, interval obnovování p řehledu a adresu serveru na který se mají posílat whois dotazy.
3.1.5 JavaScriptová knihovna jQuery
Tato velmi populární knihovna velmi usnad ňuje práci s JavaScriptem na webu. Její filozofie je úpln ě odd ělit „chování“ od struktury HTML dokumentu, stejn ě jako CSS odd ěluje grafické prvky a formátování. jQuery také využívá podobné selektory jako CSS. Nap říklad místo b ěžného document.getElementById(‘login’) sta čí napsat $(‘#login’) . Jak je vid ět i jQuery se drží hesla „write less, do more“ (piš málo, ud ělej hodn ě). Knihovna nabízí mnoho animací, efekt ů, událostí a nesčetné množství rozší ření a plugin ů, které si psát sám by byla v dnešní dob ě velká ztráta času. Ve webovém rozhraní HostStats jsou použity jQuery pluginy pro generování graf ů pro HTML5 canvas ( jquery.flot.js ), pro práci s cookies ( jquery.cookiee.js ), pro jednotný vzhled zaškrtávacích polí ček, přepína čů a dalších formulá řových prvk ů ( jquery.uniform.js ), pro práci s AJAXem a Nette (jquery.livequery.js a jquery.nette.js ) a další.
4 YAML je formát pro serializaci strukturovaných dat. Výhodou tohoto formátu je, že je čitelný nejen strojem, ale i člov ěkem. Jednou ze zásadních v ěcí tohoto formátu je, že nepodporuje znaky tabulátor ů. Ty musí být nahrazeny mezerami, jinak vše vyústí v chybu.
16 3.1.6 CSS Framework Bootstrap
Pokud se jedná o administra ční rozhraní, ovládání nebo nastavování n ějakého systému je zbyte čné vymýšlet n ějakou speciální grafiku. V ětšinou poslouží kvalitní CSS Framework, který za použití správných CSS t říd vytvo ří celý vzhled. Jedním z takovýchto framework ů je Bootstrap od tv ůrc ů známé sociální sít ě Twitter. Auto ři o n ěm tvrdí že je elegantní, intuitivní a výkonný front-end framework pro rychlejší a snadn ější vývoj webových aplikací. [8] Bootstrap definuje fluidní i statické layouty. Pro frontend hoststats byl zvolen fluidní, který se p řizp ůsobí ší řce monitoru a tím pádem zvýhodní lidi s velkými monitory, kterým se vejde na jednu obrazovku více informací. Dále jsou využity styly pro tabulky, formulá ře, chybové informace a stavy, boxy, menu atd.
3.1.7 AJAX & Snippety
Moderní webové aplikace dnes b ěží nap ůl na serveru a nap ůl v prohlíže či. AJAX je tím klí čovým spojovacím prvkem. AJAX umožňuje zm ěny na webové stránce, bez toho aniž by se musela celá znovu na čítat. To celé provádí pomocí JavaScriptu, který na pozadí posílá b ěžné HTTP požadavky na server. Jejich odpov ěď (v ětšinou ve form ě JSONu, XML, ale klidn ě i HTML či „plain text“) zpracovává a vykresluje pomocí orientace v DOMu zp ět do webové stránky. Nette podporuje AJAX hned n ěkolika zp ůsoby. Umí pomocí hlavi čky HTTP požadavku rozpoznat, zda se jedná o AJAXový požadavek nebo o „normální“. Na základ ě toho pak vykreslí bu ď celou šablonu, nebo pošle jen odpov ěď ve formátu JSON (tzv. payload), který zpracovává JavaScript.
Obrázek 4: AJAXový payload v Nette
Do tohoto payloadu je možné zapsat svoje vlastní prom ěnné, jak je vid ět na p říkladu (obrázek 4). Daleko siln ější nástroj ovšem představuje vestav ěná podpora AJAXových snippet ů. Díky ní lze ud ělat z oby čejné aplikace AJAXovou prakticky n ěkolika řádky kódu. A p řitom všem aplikace pob ěží správn ě, i když webový prohlíže č AJAX nebo Javascript nepodporuje nebo ho má vypnutý.
17 Snippety fungují tak, že p ři prvotním (tedy neAJAXovém) požadavku se p řenese celá stránka a poté se p ři každém již AJAXovém požadavku na stejnou stránku přenáší pouze kód zm ěněných částí ve zmín ěném úložišti payload . Tím se poté pomocí JavaScriptu pouze v příslušném bloku nahradí.[9] Na každý odkaz v HTML kódu šablony, které má t řádu ajax je nav ěšena akce onClick , která AJAXovým GET požadavkem zavolá, jeho cílovou adresu, a o čekává payload v JSONu, ze kterého přečte obsah snippet ů a těm poté aktualizuje obsah. Obsah snippetu se do payloadu dostane tak, že je v šablon ě tento blok kódu speciáln ě ozna čen (Latte makrem {snippet}) a kdykoliv, v pr ůběhu životního cyklu aplikace, ješt ě před vykreslením (viz kapitola 3.2.2) je ozna čen jako zm ěněný. V naší aplikaci se AJAXem odesílají i formulá ře. Pomocí jQuery dopl ňku jquery.ajaxSubmit.js se z formulá ře posbírají hodnoty a AJAXovým POST požadavkem se pošlou ke zpracování na presenter. Ten vrátí stejný payload jako v případ ě GETu v předchozím odstavci.
3.2 Objektový návrh aplikace
3.2.1 MVP struktura
Model-View-Controller je softwarová architektura, která vznikla z pot řeby odd ělit u aplikací s grafickým rozhraním kód obsluhy (controller) od kódu aplika ční logiky (model) a od kódu zobrazujícího data (view). Tím jednak aplikaci zp řehled ňuje, usnad ňuje budoucí vývoj a umož ňuje testování jednotlivých části zvláš ť. Model je datový a zejména funk ční základ celé aplikace. Je v n ěm obsažena aplika ční logika. Jakákoliv akce uživatele (p řihlášení, vložení zboží do košíku, zm ěna hodnoty v databázi) p ředstavuje akci modelu. Model si spravuje sv ůj vnit řní stav a ven nabízí pevn ě dané rozhraní. Voláním funkcí tohoto rozhraní m ůžeme zjiš ťovat či m ěnit jeho stav. Model o existenci view nebo kontroleru neví. Pojem Model p ředstavuje celou vrstvu, nikoliv samostatnou t řídu. View , tedy pohled, je vrstva aplikace, která má na starost zobrazení výsledku požadavku. Obvykle používá šablonovací systém a ví, jak se má zobrazit ta která komponenta nebo výsledek získaný z modelu. Controller je řadi č, který zpracovává požadavky uživatele a na jejich základ ě pak volá pat řičnou aplika ční logiku (tj. model) a poté požádá view o vykreslení dat. Obdobou kontroler ů v Nette Framework jsou presentery . Každý požadavek na aplikaci se dostane p řes soubory index.php a bootstap.php do objektu $application . Objekt aplikace za pomocí routeru zpracuje HTTP požadavky (URL adresu a její GET parametry) a zavolá správný presenter a jeho akci kterou má vykonat. Nap říklad uživatel chce zobrazit na e-shopu produkt s id=123. V aplikaci je tento požadavek v presenteru Product, akce show s parametrem id (v Nette se to b ěžn ě zapisuje Product:show id=>123 ). Router je ten, který na
18 základ ě tohoto požadavku vygeneruje správnou url adresu (nap ř. www.example.com/product/show/produkt-123.html ) a naopak z této adresy dokáže zpátky zjistit, že se má zavolat akce Product:show id=>123. [10] Presenter je objekt, který vezme požadavek p řeložený routerem a vytvo ří odpov ěď . Odpov ědí může být HTML stránka, obrázek, XML dokument, soubor na disku, JSON, p řesm ěrování nebo cokoliv pot řebujete. Konkrétn ě ProductPresenter požádá model o data a ty poté p ředá do šablony k vykreslení. Tohle se zpravidla odehraje v metod ě renderShow, kde slovo Show odpovídá názvu akce a parametr požadavku id bude p ředán jako parametr této metod ě:
Obrázek 5: Kód presenteru a jeho akce
Po zavolání metody render
Obrázek 6: HTML kód s Latte makrem
Normální vykreslování prom ěnné se provádí pouze jeho zapsáním mezi složené závorky, takto: {$variable} . To ale neud ělá pouze vypsání prom ěnné, ale ješt ě ji escapuje, čímž samovoln ě chrání proti hrozb ě Cross -site scripting (XSS). Latte filter poskytuje programátorovi spoustu
5 Smarty je šablonovací systém pro PHP odd ělující vykreslovací šablony od logiky aplikace.
19 užite čných funkcí a nástroj ů, jako nap říklad další makra, helpery (drobné užite čné funkce, p řes které se výsledek p řepíše), snippety apod. Více je v dokumentaci latte v [12]. Celá naše aplikace je rozd ělena do 6 presenter ů, pro každou sekci jeden, které dědi od jednoho BasePresenteru. Ten má za úkol p ředávat do šablon i presenter ů data, komponenty a metody, které jsou pro všechny presentery spole čné. Všechny tyto presentery jsou uloženy ve složce app/presenters/. Každý presenter má také svou defaultní šablonu v Latte souboru (pro šablonovací systém Nette frameworku) /app/templates/
3.2.2 Životní cyklus aplikace
Jak bylo psané d říve, na presenteru se volají metody render
Obrázek 7: Životní cyklus Nette aplikace [10]
20 Metoda startup() , se zavolá ihned po vytvo ření presenteru. Slouží nap říklad k inicializování prom ěnných, nebo k ov ěř ení uživatelského oprávn ění. Po ní se volá metoda action
6 Anotace je b ěžný blokový PHP komentá ř za čínající dv ěma hv ězdi čkami. Stejný zápis se používá nap říklad pro DoxyGen komentá ře.
21 3.2.3 Třída HSConnection
Tato t řída zajiš ťuje komunikaci Webového rozhraní z backendem HostStats pomocí socket ů. Přes její konstruktor se p ředá adresa hosta a port na který se má p řipojit a volají se na ní metody pro získávání dat z HostStats serveru. Vý čet metod koresponduje s komunika čním protokolem z kapitoly 2.3. jen jsou jeho názvy p řevedeny do camelCase a parametry se p ředávají jako jednotlivé parametry metody.
Nap říklad p říkaz GET_TIMESLOT_DATA se zavolá metodou na objektu typu HSConnection takto:
$obj->getTimeslotData($timeslot, $profile, $filter, $limit, $sort, $asc);
Metoda zajistí p řipojení k serveru p řes sockety, zaslání správného kódu typu požadavku a zaslání parametrů. Poté po čká na odpov ěď od serveru a p řijatá data vrátí v asociativním poli . Tato t řída se dá bez jakýchkoli problém ů vzít a použít v jiné aplikaci. Do frontendu HostStats je p řipojená jako služba (service) p řes konfigura ční soubor Nette. Ten jí přímo z configu p ředá parametry do konstruktoru (host a port) a nabídne ji pod názvem conn . Ve všech presenterech se k ní poté dá p řistupovat přes $this->context->getService(‘conn’) nebo zkrácen ě $this- >context->conn .
3.2.4 Třída Timeslot
Tato t řída slouží k reprezentaci p ětiminutových časových úsek ů používaných v HostStats, tzv. timeslot ů .V aplikaci pot řebujeme pracovat jejich časovým názvem a posouvat se o timesot dozadu či dop ředu. Pro vyjád ření Timeslotu ale nevysta čí b ězný DateTime z PHP, takže tato t řída od n ěj d ědí, a nabízí další pot řebné metody. Třída má konstruktor, který zvládne vzít jakýkoliv formát času (stejný jako DateTime) a navíc formát který používá HostStats (dvanáctimístného číslo RRRRMMDDHHMMSS, kde R je rok, M je m ěsíc atp.) Čas, který je do konstruktoru p ředán je také pot řeba srovnat na 5-ti minutové úseky. Timeslot kon čící nap říklad 8 minut a 20 sekund samoz řejm ě neexistujte, proto se zaokrohlí na 5 minut 0 sekund. Oproti DateTime byly také definovány nové metody. Nejd ůležit ější jsou getName(), která vrací název timeslotu ve formátu dvanáctimístného čísla, které se používá pro komunikaci s HostStats. Dále pak metody getNext() a getPrev() , které posouvají timeslot na další / předchozí (tzn. o 5minut dop ředu / dozadu). Tato t řída se dá samoz řejm ě také použít v jakékoliv jiné aplikaci pracující s timesloty. V případ ě že je timeslot jinak dlouhý než 5 minut, sta čí zm ěnit statickou konstantu LENGTH na jiný po čet vte řin.
22 3.2.5 Třída Timewindow
Pro historii komunikace jednoho konkrétního hosta je pot řeba uvád ět od kdy do kdy se mají data vypisovat. Tento časový úsek se nazývá časové okno – timewindow. Stejnojmenné t říd ě, která jej reprezentuje se v konstruktoru p ředávají dv ě instance t řídy Timeslot (timeslot od a timeslot do), mezi kterými chceme definovat časové okno. Z nich se automaticky dopo čítá délka časového okna, ze které vycházejí v podstat ě všechny d ůležité metody. Metoda getTitle() zajiš ťuje slovní vyjád ření délky okna ve stringu . Nap říklad „1 day“, „2 hours“, „last week“ nebo „last 2 hour“ pro minulé dv ě hodiny do te ď. Tyto informace se vypisují na webovém frontendu uživateli, pro lepší p řehled než kdyby tam bylo pouze dvakrát datum. Třída Timewindow op ět disponuje mimo jiné metodami getNext() a getPrev(), které vrací další časové okno o stejné délce.
3.2.6 Třída Nettools
V aplikaci byly zapot řebí také r ůzné nástroje pro práci s IP adresami a zjiš ťování informací o nich, Tato t řída obsahuje statické metody pro zjištění WHOIS záznamu, pro zjišt ění názvu hosta podle adresy a také ov ěř ení validity formátu IPv4 a IPv6 adresy. Metoda Nettool:whois($ip, $host=null) ke zjišt ění WHOIS záznamu používá standartní unixový p říkaz whois s volitelným parametrem -h
3.2.7 Zpracování chyb
Chyby jsou v celé aplikaci ošet řovány za pomocí vyjímek (tzv. exceptions) a try-catch blok ů. Jediné odchytávané výjimky v presenterech jsou potomky t řídy HSCException a TimewindowException, jejichž zprávy jsou poté zobrazovány uživateli ve form ě flash message ve webovém rozhraní. Potomky vyjímky HSCException generuje třída HSConnection v případ ě, že dojde k chyb ě p ři komunikaci ze serverem (HSCConnectException ) nebo v případ ě že HostStats server vrátí zprávu za čínající slovem „ ERROR: “ ( HSCBadCommandException ). To se m ůže stát, když pošleme špatný kód typu požadavku, špatné parametry požadavku nebo když server pot řebuje ohlásit nějakou chybu (nap ř. že nemá p říslušná data). TimewindowException vyvolává t řída Timewindow v případ ě špatn ě zadaných parametr ů konstruktoru. Všechny ostatní neodchycené vyjímky jsou chyby aplikace a v případ ě, že by se n ěkde objevily, logují se do souboru /log/errors.log .
23 3.3 Sekce Frontendu
Celý webový frontend je rozd ělen do 5 sekcí. Přehled, detail timeslotu, IP mapa timeslotu, historie hosta a detektor útok ů. Všechny tyto sekce jsou navzájem propojené odkazy a nebo se k nim dá přistoupit z hlavního menu.
3.3.1 Sekce Overview
Sekce „Overview“ neboli „P řehled“ je hlavní stranou aplikace. Je otev řená hned po zadání adresy, případn ě otev ření pluginu v NfSenu.
Obrázek 8 Vý řez sekce Overview
Jak je vid ět na obrázku 8 je zde zobrazen aktuální na čtený timeslot. P řípadn ě se u n ěj píše, jestli už je zpracovaný (zelené „Proccessed“) nebo jestli se práv ě zpracovává (modré „Processing“). Tzn. jestli se práv ě vytvá ří statistika. Vedle je poté po čet tok ů a po čet host ů v aktuálním timeslotu. Dále je ve vrchní části ješt ě informace ke kterému HostStats serveru (backendu) je frontend p řipojen či se k němu snaží p řipojovat. Pod tímto „ řádkem“ se stavem HostStats jsou dva grafy. Červeno-oranžový uvádí historii po čtu tok ů v jednotlivých timeslotech za posledních 12 hodin, a modrý historii po čtu host ů v těchto timeslotech. Na stránce p řehledu je ješt ě historie detekcí útok ů. Je to ta drobná tabulka vlevo dole. Uvádí několik posledních dní, ve kterých byly detekovány n ějaké útoky a jejich po čet. Po kliknutí na příslušný řádek je uživatel samoz řejm ě p řesm ěrován na stránku s výpisem on ěch útok ů.
24 3.3.2 Sekce Detail
V této sekci je vid ět statistika kterou po čítá HostStats. Ze všech tok ů v jednom timeslotu (tzn. 5ti minutovém časovém úseku) se čte p říchozí/odchozí packety, jednotlivé typy packet ů (SYN,ACK,FIN..) atd. Podle t ěchto čísel se poté detekují jednotlivé hrozby.
Obrázek 9: Vý řez sekce Detail
Zde, jak je vid ět na obrázku 9, je možné vybrat p říslušný timeslot (po kliknutí k dispozici kalendá ř s výb ěrem konkrétního času). Šipkami doleva a doprava je možné se pohybovat na další či předchozí timeslot (tzn o 5 minut dozadu či dop ředu) a v tabulce uvidíte vždy seznam host ů (IP adres), kte ří v tomto časovém úseku spolu na síti komunikovali. Vzhledem k tomu, že takovýchto záznam ů m ůžou být na síti desetitisíce, statisíce i víc (záleží na velikosti sít ě), vypisuje se pouze N výsledku (po čet se dá nastavit zm ěnou čísla v pravém horním rohu tabulky). Těchto N výsledk ů samoz řejm ě m ůžeme se řadit podle p říslušného sloupce, bu ďto od nejv ětšího nebo nejmenšího čísla. Dále se dají výsledky filtrovat zapsáním filtrovacího pravidla do kolonky „Filter“ v pravé horní části obrazovky. Tyto filtrovací pravidla mají formát nap ř. IN_ACK > 100 && OUT_ACK = 0. Podrobn ěji jsou popsány v dokumentaci k HostStats serveru, který má také za úkol je rozpoznávat a validovat. V případ ě chyby se do frontendu vrátí chybová hláška která je poté zobrazena uživateli.
3.3.3 Sekce IP map
Zde je vid ět vizualizace komunikujících host ů shromážd ěných podle prefixu IP adresy v tzv IP map ě. Je to obrázek 256x256 pixel ů, kde každý pixel odpovídá jednomu /16 prefixu (prvních 16bit ů z každé IP adresy hosta. Na obrázku 10 je vid ět, že IP mapy jsou zde tři. Jedna pro p říchozí p řenosy, druhá
25 pro odchozí a t řetí pro jejich rozdíl. Na té je syt ě mod ře vid ět, když n ěkterý rozsah IP adres data jen vysílal a syt ě červeně když jen přijímal. Formulá ř vpravo nastavuje, jestli chceme intenzitu p řenosu zobrazovat podle po čtu tok ů, paket ů nebo byt ů. Dále se nastavuje rozsah zobrazení, který je vid ět zárove ň pod mapami. Pokud je intenzita menší/v ětší než rozsah, použije se minimální/maximální hodnota. Pokud pixely s intenzitou mimo rozsah v ůbec nechceme vid ět, sta čí odškrtnout „View out of range“.
Obrázek 10: Vý řez sekce IP map
V této vizualizaci m ůžou být vid ět n ěkteré typy útok ů. Nap říklad p ři DDOS útok ů s podvrženými (náhodnými) zdrojovými adresami se rozsvítí velká část bitmapy. Tyto mapy jsou inspirovány projektem Internet Census 2012 7. Stejn ě jako tam jsou zde prefixy IPv4 adres vykreslovány do bitmapy podle Hilbertovy k řivky, takže po sob ě jdoucí čísla (prefixy adres) se seskupují do čtvercových oblastí.
3.3.4 Sekce History
Pokud pot řebujeme naopak v ědět, jak na síti komunikoval jeden host v pr ůř ezu času, slouží k tomu sekce History. V horní části okna je možné zadat IP adresu hosta, o kterém chceme v ědět informace a vedle toho vpravo je polí čko pro zadání časového okna. Pole pro výb ěr časového okna (timewindow) poskytuje možnost použít p ředdefinované hodnoty (minulá hodina, 6 hodin, 12 hodin ..) nebo zadat pomocí kalendá ře p řesný čas od kdy do kdy chceme vid ět výsledky. Dále je pak možné časovým oknem hýbat dop ředu a dozadu. Pod t ěmito boxy na zadání „filtru“ se zobrazují samotná data v tabulce. Tabulka obsahuje, krom ě prvního, stejné sloupce jako v sekci Details. V prvním sloupci se zobrazuje timeslot, ze kterého jsou data v tomto řádku. Timeslot je samoz řejm ě prolinkovaný na jeho detail.
7 http://internetcensus2012.bitbucket.org/
26
Obrázek 11 Vý řez sekce History - filtr + tabulka
Pod tabulkou následuje box s grafem. Do tohoto grafu je možné pomocí zaškrtávacích polí ček napravo vynést libovolné sloupce z tabulky v závislosti na čase. Samoz řejm ě má smysl porovnávat pouze vstupní a výstupní hodnoty stejné veli činy, protože jinak jsou čísla diametráln ě rozdílná (nap ř. po čet tok ů a po čet p řenesených byt ů v nich je n ěkolikanásobný).
Obrázek 12 Vý řez sekce History - grafy
Úpln ě na konci stránky se nachází výpis WHOIS 8 záznamu zkoumané IP adresy. Tento výpis se získává z unixového konzolového nástroje „whois“ a jeho syntaxe je zvýrazn ěna pomocí voln ě dostupné knihovny GeSHi.
3.3.5 Sekce Detectors
V této sekci se zobrazují útoky, které HostStats detekoval. V horní části stránky je op ět možnost zadat datum, tentokrát celý den, ve kterém chceme zobrazit odhalené útoky. Pomocí šipek doleva a doprava se dá op ět pohybovat po dnech zp ět a vp řed.
8 WHOIS – databáze evidující údaje o majitelích internetových domén a IP adres
27
Obrázek 13 Vý řez sekce Detectors
Tabulka obsahuje následující sloupce: • Timeslot – časový úsek ve kterém byl útok detekován • Type – typ útoku (Horizontální či vertikální skenování port ů, Dos útoky atd..) • Protocol – Protokol na kterém byl útok veden • Source IP – adresa hosta, ze kterého byl útok veden • Destination IP – adresa hosta na kterého byl útok veden • Source port – Zdrojový port • Destination port – Cílový port • Intensity – Intenzita útoku (Význam se liší se podle typu útoku. U portscan je to nap ř. po čet proskenovaných adres/port ům u DoS útoku po čet tok ů, apod). • Note – Poznámka, kterou posílá detektor v HostStats
4 Testování
Testování systému p řed jeho nasazením do provozu je velmi d ůležitá sou část vývoje. Pro testování webového rozhraní HostStats jsem vybral n ěkolik aspekt ů, které je vhodné testovat. Testování t ěchto oblastí a jejich výsledky jsou uvedeny v této kapitole.
4.1 Oblasti testování
4.1.1 Testování funk čnosti
Nejd říve je pot řeba otestovat funk čnost. Jestli aplikace d ělá to co má. Zobrazuje správn ě všechna očekávaná data. A také jestli ve všech p řípadech provede to co má a neskon čí s nějakou chybou či neodchycenou vyjímkou.
28 4.1.2 Testování použitelnosti
Úkolem tohoto typu testování je odhalit jestli je aplikace uživatelsky p řív ětivá. V případ ě, že se uživatel ztrácí v navigaci či neví jak ud ělat libovolnou akci, je n ěco špatn ě. Testování prob ěhlo na malé skupin ě lidí orientující se v oblasti IT, pro které je tento systém také zamýšlený. Pozoroval jsem p ředevším, jakým problém ům uživatel čelí a jestli jsou všechny prvky rozhraní uživateli srozumitelné.
4.1.3 Testování bezpe čnosti
Testování bezpe čnosti systému je jedna z nejd ůležit ějších oblastí. I systém HostStats pracuje s velmi citlivými daty. Webové rozhraní ovšem nedisponuje žádnými prvky ochrany jako je autorizaci či autentizace. Po čítá se s tím, že nebude na ve řejn ě p řístupném serveru a tím pádem sv ěř uje tuto autoriza ční službu opera čnímu systému serveru, na kterém b ěží.
4.2 Na čem bylo testováno
Testovaný systém b ěžel na školním serveru ANT-STUD (ant-stud.fit.vutbr.cz). Na stejném stroji byl nainstalován NfSen, HostStats server (backend) i naše testované webové rozhraní. Serverové zázemí použité k testování: • Opera ční systém: Linux ant-stud 2.6.18-194.26.1.el5 #1 SMP Tue Nov 9 12:54:20 EST 2010 x86_64 x86_64 x86_64 GNU/Linux • Webový server: Apache/2.2.3 (CentOS) Server • PHP: PHP 5.3.3 (cli) (built: Jun 27 2012 12:25:48) Testované webové prohlíže če • Mozzilla Firefox 20.0.1 • Google Chrome Verze 26.0.1410.64 m • Microsoft Internet Explorer v.9 a 10.
4.3 Výsledky testování
Funk čnost systému byla ov ěř ována a kontrolována již b ěhem implementace a samoz řejm ě i po dokon čení. Za pomocí diagnostických nástroj ů poskytovaných frameworkem byly všechny chyby odstran ěny a vylad ěny. V krajním p řípad ě, že by se ješt ě n ějaká objevila, zapíše se do logu /app/log/error.log a odešle se na email nastavený v konfiguraci. Na základ ě pozorování a reakcí uživatel ů p ři testování použitelnosti byly lehce upraveny některé funk ční prvky rozhraní. V této fázi se rozhraní jeví uživatel ům jako velmi p říjemné a použitelné.
29 Bezpe čnost systému zajiš ťuje to, že je umíst ěný na serveru na školní síti, kam mají p řístup jen oprávnění uživatelé.
5 Možnosti dalšího rozší ření
Možností dalšího rozší ření, které by obohatily tento systémem, se objevilo hned n ěkolik. Pro širší využití systému by se ur čit ě hodilo implementovat autorizaci uživatel ů. V případ ě, že by každý uživatel systému m ěl sv ůj login a heslo mohla by být aplikace nasazena i na ve řejn ě přístupném webovém serveru (datová komunikace s backendem by samoz řejm ě musela být stále důkladn ě zabezpe čena.). Dále by se dalo uvažovat nad jazykovými mutacemi . Aplikace by poté byla p říjemnější uživatel ům z různých zemí. Nette Framework poskytuje pro jazykové p řeklady spoustu užite čných nástroj ů. Pokra čovat lze také samoz řejm ě v různé vizualizaci dat . Ta by v případ ě tohoto systému m ěla uživateli pomáhat odhalovat bezpe čnostní hrozby pouhým okem. V případ ě širšího nasazení by šlo aplikaci rozší řit o přepínání mezi více servery . Nyní se připojuje jen k jednomu serveru, který je nastavený v konfigura čním souboru.
30 6 Záv ěr
Tato bakalá řská práce se zabývá návrhem, implementací a testováním webového rozhraní pro systém detekce sí ťových anomálií s názvem HostStats. Webové rozhraní je možné provozovat jako plugin do monitorovacího systému NfSen, ale i jako samostatnou webovou aplikaci, závislou pouze na serverovém zázemí (webový server + PHP5). Webové rozhraní systému komunikuje s HostStats serverem pomocí socket ů. To v případ ě pot řeby umož ňuje mít webový server na jiném po číta či než HostStats server. Komunikace probíhá princpem požadavek – opov ěd. Webové rozhraní pošle pomocí PHP p řes sockety typ požadavku a jeho parametry, a ze socketu p řečte odpov ěď, kterou zpracuje a ve webovém prohlíže či zobrazí uživateli v uživatelsky p řív ětivé form ě. Celá aplikace byla na stran ě webového serveru naprogramována ve skriptovacím jazyce PHP za použití nejnov ější verze Nette Frameworku. Na stran ě klienta se po čítá s moderním prohlíže čem podporujícím HTML5, CSS3 a JavaScript. Při progamování javascriptu byla použita voln ě dostupná knihovna jQuery a n ěkteré její pluginy. Systém spl ňuje požadavky na n ěj kladené a p ři uživatelském testování nebyl nalezen žádný problém p ři jejím užívání. Aplikace je psána zp ůsobem, aby nebylo složité ji rozší řit či upravit. V záv ěre čné kapitole jsou rozvedeny n ěkteré možné zp ůsoby dalšího rozší ření. V této fázi aplikace ovšem pln ě implementuje všechny funkce, které HostStats server poskytuje.
31 Literatura
[1] B. Claise: Cisco Systems Netflow Services Export Version 9 . RFC 3954, 2004.
[2] NfSen - Netflow Sensor . [online], [cit 2013-04-20]. Dostupné z: http://nfsen.sourceforge.net/
[3] DAN ĚK, Petr. Velký test PHP framewok ů. In: Root.cz [online]. 2008 [cit. 2013-04-20]. Dostupné z: http://www.root.cz/clanky/velky-test-php-frameworku-zend-nette-php-a-ror/
[4] PILGRIM, Mark. Dive Into HTML5 . O'Reilly Media, 2010. ISBN 0596806027.
[5] Kaskádové styly [online],[cit. 2013-04-20]. Dostupné z: http://www.w3.org/Style/CSS/Overview.cs.html.
[6] Nette framework [online]. 2008 [cit. 2013-04-20]. Dostupné z: http://nette.org/
[7] NEON [online]. 2010 [cit. 2013-04-20]. Dostupné z: http://ne-on.org/
[8] Bootstrap [online]. [cit. 2013-04-20]. Dostupné z: http://twitter.github.io/bootstrap/
[9] AJAX & snippety. Nette Framework [online]. [cit. 2013-04-20]. Dostupné z: http://doc.nette.org/cs/ajax
[10] MVC aplikace & presentery. Nette Framework [online]. [cit. 2013-04-20]. Dostupné z: http://doc.nette.org/cs/presenters
[11] Šablony. Nette Framework [online]. [cit. 2013-04-20]. Dostupné z: http://doc.nette.org/cs/templating
[12] Výchozí Latte makra. Nette Framework [online]. [cit. 2013-04-20]. Dostupné z: http://doc.nette.org/cs/default-macros
32 Seznam použitých zkratek
HTML HyperText Markup Language SGML Standart Generalized Markup Language XHTML Extensible Hypertext Markup Language XML Extensible Markup Language CSS Cascade Style Sheets PHP Hypertext Preprocesor WWW Word Wide Web IP Internet Protokol NfSen Netflow sensor FW Framwork AJAX Asynchronous JavaScript and XML DOM Document Object Model RRD Round-Robin Database URL Uniform Resource Locator
Seznam p říloh
Příloha A. CD s kompletními zdrojovými kódy a dokumentací
33 Příloha A - CD s kompletními zdrojovými kódy a dokumentací
Na p řiloženém CD jsou k dispozici následující soubory a adresá ře src/ Adresá ř se zdrojovými kódy aplikace readme.txt Základní informace o aplikaci install.txt Soubor s popisem instalace aplikace bachelor_thesis.pdf Elektronická verze tohoto dokumentu bachelor_thesis.docx Elektronická verze tohoto dokumentu
34