Univerzita Karlova v Praze Matematicko-fyzik´aln´ı fakulta
´ RSK ˇ ´ PRACE ´ BAKALA A
Martin Liˇska Pasivn´ı analyz´ ator s´ıt´ı Katedra aplikovan´e matematiky
Vedouc´ı bakal´aˇrsk´e pr´ace: Mgr. Martin Mareˇs, Ph.D. Studijn´ı program: Informatika, obor Programov´an´ı
2010
Chtˇel bych podˇekovat Mgr. Martinu Mareˇsovi, Ph.D. za veden´ı bakal´aˇrsk´e pr´ace, cenn´e rady, u ´ˇceln´e pˇripom´ınky a za ochotu pˇri spoleˇcn´e pr´aci.
Prohlaˇsuji, ˇze jsem svou bakal´aˇrskou pr´aci napsal(a) samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. Souhlas´ım se zap˚ ujˇcov´an´ım pr´ace a jej´ım zveˇrejˇ nov´an´ım. V Praze dne 3. srpna 2010
Martin Liˇska
2
Obsah ´ 1 Uvod 1.1 Anal´ yza s´ıt’ov´eho provozu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Probl´emy s provozov´an´ım s´ıtˇe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Rodina protokol˚ u TCP/IP 2.1 Architektura protokolu TCP/IP . . . . 2.2 Historie protokolu TCP/IP . . . . . . . 2.3 Porovn´an´ı s modelem ISO/OSI . . . . 2.4 Linkov´a vrstva a technologie Ethernet . 2.5 S´ıt’ov´a vrstva IP . . . . . . . . . . . . . 2.6 Transportn´ı vrstva . . . . . . . . . . . 2.6.1 Protokol UDP . . . . . . . . . . 2.6.2 Protokol TCP . . . . . . . . . . 3 Pasivn´ı s´ıt’ov´ e analyz´ atory 3.1 Definice . . . . . . . . . . . . 3.2 Tcpdump . . . . . . . . . . . 3.3 Tcpflow . . . . . . . . . . . . 3.4 Wireshark . . . . . . . . . . . 3.4.1 Historie . . . . . . . . 3.4.2 Filtrov´an´ı . . . . . . . 3.4.3 Anal´ yza r´amc˚ u . . . . 3.4.4 Statistick´e komponenty 3.5 Netgrind . . . . . . . . . . . . 4 S´ıt’ov´ y analyz´ ator NEPAL 4.1 Pˇredstaven´ı . . . . . . . . . . 4.2 Zapojen´ı programu . . . . . . 4.3 Datov´ y objekt . . . . . . . . . 4.4 Pˇredstaven´ı modul˚ u. . . . . . 4.4.1 Modul PCAP . . . . . 4.4.2 Modul Ethernet . . . . 4.4.3 Modul ARP . . . . . . 4.4.4 Modul ARP view . . . 4.4.5 Modul IPv4 . . . . . . 4.4.6 Modul IPv6 . . . . . . 4.4.7 Modul IP reassembler 4.4.8 Modul UDP . . . . . . 4.4.9 Modul TCP . . . . . . 4.4.10 Modul TCP flow . . . 4.4.11 Modul HTTP . . . . . 4.4.12 Modul DNS . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
3
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
6 6 6 6
. . . . . . . .
8 8 8 9 10 11 13 13 13
. . . . . . . . .
16 16 16 17 17 18 18 19 19 19
. . . . . . . . . . . . . . . .
20 20 20 21 21 22 23 23 24 24 24 25 26 26 27 27 28
5 Ovl´ ad´ an´ı programu NEPAL 5.1 Pˇreklad programu . . . . . . . . . . . 5.2 Uk´azka programu . . . . . . . . . . . 5.3 Ovl´ad´an´ı a program´atorsk´e rozhran´ı . 5.4 Spouˇstˇen´ı programu . . . . . . . . . .
. . . .
29 29 29 30 32
. . . . . . . . .
33 33 33 33 34 35 35 37 37 39
. . . . .
42 42 42 42 43 43
8 Z´ avˇ er 8.1 Zhodnocen´ı pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Moˇznosti budouc´ıho v´ yvoje . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45 45 45
Literatura
46
6 Uk´ azky z programu NEPAL 6.1 Modul pro HTTP . . . . . 6.1.1 Prvn´ı pˇr´ıklad . . . 6.1.2 Druh´ y pˇr´ıklad . . . 6.1.3 Tˇret´ı pˇr´ıklad . . . 6.2 Grafov´ y modul . . . . . . 6.2.1 Prvn´ı pˇr´ıklad . . . 6.2.2 Druh´ y pˇr´ıklad . . . 6.3 Modul ARP/RARP . . . . 6.4 Modul DNS . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
7 Vnitˇ rn´ı ˇ reˇ sen´ı analyz´ atoru 7.1 Soubory programu . . . . . . . . 7.2 Implementace datov´eho objektu . 7.3 Z´asobn´ık ud´alost´ı . . . . . . . . . 7.4 Programov´an´ı modul˚ u . . . . . . 7.5 Pˇredstava fungov´an´ı modulu TCP
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
4
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
. . . .
. . . . . . . . .
. . . . .
N´azev pr´ace: Pasivn´ı analyz´ator s´ıt´ı Autor: Martin Liˇska Katedra (´ ustav): Katedra aplikovan´e matematiky Vedouc´ı bakal´aˇrsk´e pr´ace: Mgr. Martin Mareˇs, Ph.D. E-mail vedouc´ıho:
[email protected] Abstrakt: C´ılem pr´ace je navrhnout a implementovat program pro monitorov´an´ı a anal´yzu provozu v poˇc´ıtaˇcov´ych s´ıt´ıch, kter´y bude pracovat ˇcistˇe pasivnˇe, tedy aniˇz by ovlivˇ noval mˇeˇrenou komunikaci. Informace o chov´an´ı s´ıtˇe bude z´ısk´avat odposlouch´av´an´ım pˇren´aˇsen´ych paket˚ u, z nichˇz ’ bude rekonstruovat chod s´ıt ov´ych spojen´ı a ˇcinnost pˇrenosov´ych protokol˚ u. Kl´ıˇcov´a slova: anal´yza, TCP/IP, poˇc´ıtaˇcov´e s´ıtˇe
Title: A passive network analyser Author: Martin Liˇska Department: Department of Applied Mathematics Supervisor: Mgr. Martin Mareˇs, Ph.D. Supervisor’s e-mail address:
[email protected] Abstract: The aim of this thesis is to design and implement a program for computer network traffic monitoring and analysis that would operate in a purely passive mode, i.e., without affecting the measured traffic. Information about the network performance will be received by tapping the transmitted packets, which will enable the software to reconstruct the operation of network connections as well as activity of the transfer protocols. Keywords: analysis, TCP/IP, computer networks
5
´ Uvod 1.1
Anal´ yza s´ıt’ov´ eho provozu
Provozov´an´ı s´ıt’ov´e komunikace mezi poˇc´ıtaˇci je v dneˇsn´ı dobˇe jiˇz d´avno zabˇehl´a praxe a mnoˇzstv´ı datov´eho provozu a poˇcet lid´ı, kteˇr´ı maj´ı pˇr´ıstup k Internetu budiˇz toho d˚ ukazem. Poˇcet uˇzivatel˚ u s´ıtˇe Internet se vyˇsvihl na dneˇsn´ı hodnotu 1,8 miliardy lid´ı, coˇz odpov´ıd´a v´ıce neˇz ˇctvrtinˇe obyvatelstva planety a oproti roku 2000 vzrostl tento poˇcet uˇzivatel˚ u ˇctyˇrn´asobnˇe. ˇ e republice vzrostlo mnoˇzstv´ı pˇrenesen´ Jenom v r´amci p´ateˇrn´ı s´ıtˇe NIX.CZ v Cesk´ ych dat dvojn´asobnˇe oproti roku minul´emu. Z pohledu samotn´eho s´ıt’ov´eho provozu je valn´a vˇetˇsina informac´ı pˇren´aˇsena pomoc´ı rodiny protokol˚ u TCP/IP a d´ıky nezaˇsifrovan´e vˇetˇsinˇe provozu je moˇzn´e z´aznamy komunikace sledovat, ukl´adat a n´aslednˇe analyzovat. Vidˇeno oˇcima bˇeˇzn´eho uˇzivatele, napˇr´ıklad s´ıtˇe Internet, je komunikace a pˇrenos dat v r´amci s´ıtˇe ˇcernou skˇr´ıˇ nkou, kter´a zd´anlivˇe funguje velmi spolehlivˇe, intuitivnˇe a bezpeˇcnˇe.
1.2
Probl´ emy s provozov´ an´ım s´ıtˇ e
Druh´a strana mince ale jasnˇe ukazuje, ˇze zneuˇzit´ı pˇren´aˇsen´ ych informac´ı je vcelku snadn´e, pˇr´ıkladem budiˇz moˇznost sledov´an´ı navˇst´ıven´ ych webov´ ych str´anek, odeslan´ ych formul´aˇr˚ u a emailov´ ych zpr´av obsahuj´ıc´ıch osobn´ı informace, zobrazen´ ych obr´azk˚ u, odeslan´ ych zpr´av napˇr´ıklad pomoc´ı protokolu IRC ˇci moˇznost dohled´an´ı hesel, kter´ ymi se uˇzivatel autorizuje na nezaˇsifrovan´ ych webov´ ych serverech. Se svoj´ı velikost´ı se stal Internet kolbiˇstˇem nejr˚ uznˇejˇs´ıch z´ajm˚ u, poˇc´ınaje masivn´ı reklamou na kaˇzd´em kroku, pˇres rozes´ıl´an´ı nevyˇza´dan´e poˇsty, ˇs´ıˇren´ı internetov´ ych ˇcerv˚ u a konˇce u ´toky na citliv´e osobn´ı u ´daje v podobˇe datab´azov´ ych aplikac´ı. Druh´ ym fenom´enem dneˇsn´ıch poˇc´ıtaˇcov´ ych s´ıt´ı je tempo nar˚ ust´an´ı pˇrenosov´eho v´ ykonu infrastruktury. Doch´az´ı k nasazov´an´ı st´ale sofistikovanˇejˇs´ıch s´ıt’ov´ ych zaˇr´ızen´ı, kter´e si ale s sebou nesou probl´emy u ´zk´ ych hrdel. Rychlost v poˇc´ıtaˇcov´e s´ıti se ˇr´ıd´ı rychlost´ı jej´ıho nejuˇzˇs´ıho m´ısta, pˇrestoˇze v glob´aln´ı mˇeˇr´ıtku m˚ uˇzeme o s´ıti uvaˇzovat jako o pˇredimenzovan´e. Jako pˇr´ıklad mohou poslouˇzit r˚ uzn´e proxy servery, jenˇz zprostˇredkov´avaj´ı komunikaci mimo lok´aln´ı s´ıt’ nebo protokoly pro sd´ılen´ı soubor˚ u typu P2P, kter´e dok´aˇzi otevˇr´ıt velk´e mnoˇzstv´ı spojen´ı. N´avaznost´ı na zm´ınˇen´e probl´emy je dobr´e probl´em˚ um porozumˇet a anal´ yza s´ıt’ov´eho provozu m˚ uˇze b´ yt dobr´ ym pomocn´ıkem pro z´ısk´av´an´ı d˚ uleˇzit´ ych informac´ı.
1.3
Motivace
C´ılem bakal´aˇrsk´e pr´ace nen´ı zneuˇzit´ı slabin s´ıt’ov´eho modelu, n´ ybrˇz pr´avˇe naopak vytvoˇren´ı ’ programu, kter´ y bude schopen nashrom´aˇzdˇen´a s´ıt ov´a data naˇc´ıtat, analyzovat a poskytovat specifick´e informace, v podobˇe ˇclovˇeku co moˇzn´a nejv´ıce pˇr´ıvˇetiv´e. Pˇren´aˇsen´a data pomoc´ı rodiny protokol˚ u TCP/IP jsou pˇren´aˇsena ve formˇe r´amc˚ u (paket˚ u), jenˇz v sobˇe nesou pouze d´ılˇc´ı ˇc´ast mozaiky a skladba kompletn´ı mozaiky, ch´apan´e napˇr´ıklad ve smyslu pˇrenesen´ ych email˚ u ˇci HTML str´anek potˇrebuje vˇetˇs´ı u ´sil´ı pˇri synt´eze. Jiˇz od ran´e f´aze n´avrhu programov´eho 6
ˇreˇsen´ı je kladen d˚ uraz na modularitu a moˇzn´a dalˇs´ı rozˇs´ıˇren´ı libovoln´eho druhu. Software lze ch´apat jako kmen stromu, kter´ y poskytuje z´akladn´ı funkˇcnost a na kter´ y lze naroubovat r˚ uzn´a rozˇs´ıˇren´ı a vylepˇsen´ı. Ambic´ı programu nem˚ uˇze b´ yt v ˇz´adn´em pˇr´ıpade podpora pro vˇsechny zn´am´e protokoly, ale c´ılem je poskytnout framework, jenˇz nab´ıdne jednoduch´e rozˇs´ıˇren´ı v podobˇe modulu v Pythonu ˇci modulu v jazyce C, kter´ y bude optimalizovan´ y na rychlost. Program bude implementovat podporu z´akladn´ıch protokol˚ u vrstevnat´eho modelu TCP/IP: Ethernetov´ y ’ protokol, s´ıt ov´ y protokol verze 4 i 6, protokol TCP a UDP. Zm´ınˇen´e protokoly ch´apu jako nosnou kostru, na kter´e prob´ıh´a pˇrenos vˇetˇsiny dneˇsn´ıch aplikaˇcn´ıch protokol˚ u a uk´azkov´e moduly budou pr´avˇe pracovat na zm´ınˇen´em z´akladu.
7
Rodina protokol˚ u TCP/IP 2.1
Architektura protokolu TCP/IP
Rodinou protokol˚ u TCP/IP naz´ yv´ame mnoˇzinu s´ıt’ov´ ych protokol˚ u uˇz´ıvan´ ych v s´ıti Internet a ’ v jin´ ych poˇc´ıtaˇcov´ ych s´ıt´ı. N´azev rodiny je odvozen z jm´ena protokolu s´ıt ov´e vrstvy (Internet Protocol) a jm´ena spojovan´eho protokolu transportn´ı vrstvy (Transmission Control Protocol). Rodina pokr´ yv´a 4 vrstvy s´ıt’ov´eho modelu: linkov´a, s´ıt’ov´a, transportn´ı a aplikaˇcn´ı. Vznik protokolu je pevnˇe sv´az´an s rozvojem a prvopoˇc´atkem celosvˇetov´e poˇc´ıtaˇcov´e s´ıtˇe Internet. Protokol vznikl v l˚ unˇe Internetu a stal se jeho hlavn´ım nosn´ ym m´ediem. Myˇslenka paketov´eho pˇrenosu je t´emˇeˇr 50 let star´a a vznikla jako du´aln´ı idea k s´ıti telefonn´ı, kterou odstartoval Alexander Graham Bell v 80. letech 19. stolet´ı. Ve sv´em n´avrhu poˇc´ıt´a s um´ıstˇen´ım inteligence do koncov´ ych uzl˚ u s´ıtˇe, negarantuje pˇrenosovou kapacitu, ale pracuje v reˇzimu best effort“ (maxim´aln´ı moˇzn´a ” snaha). Standardy a specifikace kolem protokolu vznikly ve formˇe dokument˚ u RFC (Request for Comments), kde se ˇsirok´e mnoˇzstv´ı odborn´ık˚ u shodlo na svobodn´ ych, nelicencovan´ ych standardech a vloˇzili t´ım tak do v´ınku velk´e mnoˇzstv´ı potenci´alu do budoucna. Drobn´ ym probl´emem dokument˚ u RFC je nemoˇznost jejich modifikace a nutnost vyd´av´an´ı nov´eho dokumentu pˇri modifikaci. Pro tyto u ´ˇcely vznikly dokumenty STD (standard) dokumenty, kter´e si lze pˇredstavit jako poˇradaˇc, do kter´eho se ukl´adaj´ı RFC dokumenty, t´ ykaj´ıc´ı se stejn´eho probl´emu.
2.2
Historie protokolu TCP/IP
Jak jiˇz bylo v´ yˇse zm´ınˇeno, myˇslenka paketov´eho pˇrenosu se rozvinula na poˇca´tku 60. let 20. stolet´ı v USA v r´amci arm´adn´ı grantov´e agentury ARPA. Spojen´e st´aty v dobˇe Studen´e v´alky prohr´aly pomysln´ y souboj o dobyt´ı vesm´ıru v roce 1957 vesm´ırnou lod´ı Sputnik a rozhodly se investovat do budouc´ıch technologi´ı. Na ovˇeˇren´ı faktu, zda je myˇslenka paketov´eho pˇrenosu uskuteˇcniteln´a vznikla na konci 70. let s´ıt’ Arpanet. V s´ıti byl nasazen experiment´aln´ı protokol NCP (Network Control Program), kter´ y kop´ıroval z dneˇsn´ıho hlediska funkci transportn´ı vrstvy. Prvn´ı pˇredstava rodiny protokol˚ u TCP/IP byla prezentov´ana v roce 1972 a jej´ı jm´eno je spjato s osobou Vintona Gray Cerfa, kter´ y jako postgradu´aln´ı student na Kalifornsk´e univerzitˇe a Stanfordsk´e univerzitˇe poˇra´d´a s´ıt’ov´e semin´aˇre, jichˇz se u ´ˇcastn´ı napˇr. Robert Metcalfe (3Com) nebo Jack Haverty. P˚ uvodnˇe mˇel b´ yt n´astupce experiment´aln´ıho protokolu tak´e monolitick´ y, ’ ale posl´eze autoˇri zmˇenili koncepci a doˇslo k rozpadu na protokol s´ıt ov´ y (IP) a transportn´ı (TCP). Na pˇrelomu let 70. a 80. se st´av´a protokol TCP/IP preferovan´ ym Ministerstvem obrany Spojen´ ych st´at˚ u a 1. 1. 1983 na nˇej pˇreˇslo vˇsech zhruba 200 smˇerovaˇc˚ u pˇredch˚ udce dneˇsn´ı s´ıtˇe Internet. Za druh´e datum narozen´ı nˇekter´e autority povaˇzuj´ı z´aˇr´ı 1981, kdy spatˇrily svˇetlo svˇeta RFC dokumenty 791 a 793, v nichˇz se specifikuj´ı protokoly IP a TCP. V r´amci pˇrechodu vlastnictv´ı a pl´anov´an´ı problematiky kolem Internetu a protokol˚ u TCP/IP vznikla organizace ISOC (Internet Society), kter´a pˇrevzala od vl´ady Spojen´ ych st´at˚ u odpovˇednost za dalˇs´ı v´ yvoj a vystupuje jako organizace k ostatn´ım subjekt˚ um na trhu. V r´amci organizace je kladen d˚ uraz na kontinuitu a stromovou strukturu, kde jednotliv´e divize zastˇreˇsuj´ı na jedn´e stranˇe v´ yvoj do budoucna a ˇreˇsen´ı aktu´aln´ıch probl´emu napˇr. s nedostatkem IPv4 veˇrejn´ ych adres konˇce. 8
2.3
Porovn´ an´ı s modelem ISO/OSI
Referenˇcn´ı model ISO/OSI vznikl jako model pro poˇc´ıtaˇcov´e s´ıtˇe z d´ılny Mezin´arodn´ı organizace pro standardy (ISO) v roce 1984. Model poch´az´ı ze svˇeta spoj˚ u a v pr˚ ubˇehu sv´e geneze a v´ yvoje se ub´ıral znaˇcnˇe odliˇsnˇe od rodiny protokol˚ u TCP/IP, se kter´ ymi nakonec prohr´al na pln´e ˇca´ˇre. Koncepce se zrodila od zelen´eho stolu, definovaly se obecnˇe funkce jednotliv´ ych vrstev bez korespondence s realitou a vyzkouˇsenou implementac´ı. Pro porovn´an´ı je nutn´e v 2. f´az´ı pˇrijet´ı dokumentu RFC pro protokoly souvisej´ıc´ı s TCP/IP vytvoˇrit alespoˇ n dvˇe funkˇcn´ı implementace a v praxi je ovˇeˇrit a d˚ ukladnˇe otestovat. Autoˇri nakladli velkou mnoˇzinu poˇzadavk˚ u na s´ıt’ovou architekturu a prosadili ji do standardu. Organizace ISO mˇela velk´ y vliv na fungov´an´ı st´atu a spr´ava st´at˚ u tlaˇcila na poˇrizov´an´ı zaˇr´ızen´ı, jeˇz by vyhovovalo standard˚ um a bylo plnˇe kompatibiln´ı. V d˚ usledku ˇsirok´eho rozpˇet´ı referenˇcn´ıho modelu museli ze sv´ ych poˇzadavk˚ u tv˚ urci ustupovat a vyjasnili je aˇz v podmnoˇzinˇe, zn´am´e pod jm´enem GOSIP (Government OSI Profile). Pro porovn´an´ı ukaˇzme paralelu s protokoly TCP/IP, kter´e vznikaly od jednoduˇsˇs´ıho ke sloˇzitˇejˇs´ımu. Jako pˇr´ıklad bych r´ad uvedl elektronickou poˇstu a SMTP protokol. Prvn´ı verze umˇela pouze pˇren´aˇset zpr´avy v prost´em textu bez moˇznosti form´atov´an´ı, vkl´ad´an´ı obr´azk˚ u, pˇr´ıloh a to vˇcetnˇe moˇznosti uˇzit´ı n´arodn´ıch znak˚ u abecedy. Na popt´avku reagovalo rozˇs´ıˇren´ı MIME (Multipurpose Internet Mail Extensions – v´ıce´ uˇcelov´e rozˇs´ıˇren´ı internetov´e poˇsty), jeˇz specifikovalo a zahrnovalo v´ yˇse zm´ınˇen´e nedostatky. Na n´asleduj´ıc´ım obr´azku si m˚ uˇzete prohl´ednout korespondenci sedmi vrstev modelu ISO/OSI s ˇctyˇrmi vrstvami v pˇr´ıpadˇe modelu TCP/IP.
Za nejv´ıce kritizovan´e vrstvy modelu ISO/OSI povaˇzuji vrstvu relaˇcn´ı a prezentaˇcn´ı, kter´e maj´ı velmi omezen´e penzum pr´ace oproti ostatn´ım. Naopak velk´e portfolio sluˇzeb se soustˇredilo do vrstvy linkov´e, jeˇz se n´asledkem toho rozpadla na podvrstvy LLC a MAC. Dalˇs´ım d˚ uleˇzit´ ym rozd´ılem je pˇr´ıtomnost spojovan´eho charakteru pˇrenosu a spolehliv´eho doruˇcov´an´ı v ISO/OSI. Autoˇri ze svˇeta telefonn´ıch syst´em˚ u povaˇzovali nespolehlivou sluˇzbu za zbyteˇcnou, nevidˇeli d˚ uvod, proˇc by j´ı mˇel nˇekdo koupit a v d˚ usledku toho museli investovat do drah´e vnitˇrn´ı in’ frastruktury s´ıt ov´ ych prvk˚ u. V prostˇred´ı TCP/IP je negarantovan´ y pˇrenos hojnˇe uˇz´ıv´an napˇr. v P2P s´ıt´ıch (s´ıtˇe, kde se informace pˇren´aˇs´ı mezi uzly bez centr´aln´ıho serveru), kdy aplikace implementuje algoritmus pro potvrzov´an´ı pˇrenesen´ ych dat dle vlastn´ı logiky a potˇreby. Spo9
jovan´ y charakter komunikace zase vych´azel z fungov´an´ı telefonn´ı s´ıtˇe, avˇsak na pˇrenos mal´eho mnoˇzstv´ı dat se nevyplat´ı navazovat spojen´ı. V r´amci propojov´an´ı s´ıt´ı se uk´azal model ISO/OSI jako velmi slab´ y, od zaˇca´tku pˇredpokl´adal topologie s´ıti v dikci vl´ad, proto je podpora propojov´an´ı s´ıt´ı (internetworking) velmi slab´a. Problematiky se t´ yk´a i n´avrh linkov´e vrstvy pouze na dvoubodov´ ych spoj´ıch, naˇceˇz musel b´ yt dodateˇcnˇe zakomponov´an mechanismus pracuj´ıc´ı se sd´ılen´ ym m´ediem, kter´ y vy´ ustil v rozpad linkov´e vrstvy. Model poˇc´ıtal s podobou velmi rozs´ahl´e s´ıtˇe oproti s´ıti lok´aln´ı a dlouho dobu byl prosazov´an jako ofici´aln´ı a certifikovan´e ˇreˇsen´ı. Po tˇrech f´az´ıch pˇribliˇzov´an´ı a smiˇrov´an´ı s potˇrebami poˇc´ıtaˇcov´e s´ıtˇe se stal ISO/OSI model prakticky mrtv´ ym ˇreˇsen´ım, na kter´em se uk´azaly prvotn´ı nedostatky v celkov´e koncepci a filosofii pˇr´ıstupu.
2.4
Linkov´ a vrstva a technologie Ethernet
S´ıt’ov´ y model TCP/IP nespecifikuje linkov´e vrstvy pouˇzit´e na pˇrenosov´e s´ıti, pouze specifikuje vrstvu s´ıt’ov´eho rozhran´ı, kter´a je z´avisl´a na pouˇzit´ı konkr´etn´ıho linkov´eho protokolu. Nejpouˇz´ıvanˇejˇs´ım linkov´ ym protokolem je Ethernet, d´ale pak z historick´eho hlediska Token ring, FDDI ˇci X.25. Technologie Ethernetu se zrodila ve stˇredisku PARC a nejzn´amˇejˇs´ı jm´ena spjat´a s jeho genez´ı jsou Robert Metcalfe a David Boggs. Firma Xerox si nechala po v´ yvoji zaregistrovat jm´eno jako ochranou zn´amku. Po pˇredloˇzen´ı n´avrhu na standardizaci spoleˇcnosti IEEE se v´ yvoj vydal dvˇema hlavn´ımi v´ yvojov´ ymi smˇery. IEEE standardizovalo Ethernet, p˚ uvodnˇe navrˇzen´ y firmou Xerox, jako standard 802.3, kter´ y se odliˇsuje od p˚ uvodn´ıho n´avrhu. Autoˇri p˚ uvodn´ıho n´avrhu zakotvili koncepci Ethernetu do pr˚ umyslov´eho standardu, zn´am´emu jako Ethernet II (RFC 894). Oba zm´ınˇen´e form´aty nevyluˇcuj´ı vz´ajemnou koexistenci a dle RFC 894 mus´ı b´ yt ve svˇetˇe TCP/IP kaˇzd´ y poˇc´ıtaˇc schopen komunikovat pomoc´ı Ethernetu II. Atributy paket˚ u dle obou specifikac´ı naleznete na dalˇs´ım obr´azku.
Pˇri sv´em n´avrhu byl Ethernet koncipov´an jako technologie s pˇr´ıstupovou metodou CSMA/CD, kdy se pˇredpokl´ad´a sd´ılen´e m´edium, zaˇr´ızen´ı maj´ı pˇr´ıposlech nosn´e a jsou schopny detekovat kolize. Filosofie nezaruˇcuje kaˇzd´emu, ˇze bude hned schopen vys´ılat a proto technologie nen´ı vhodn´a automaticky do m´ıst, kde potˇrebujeme nˇejak´e z´aruky na maxim´aln´ı dobu do odvys´ıl´an´ı. Od podpory na linkov´e vrstvˇe se odv´ıj´ı i garance sluˇzeb QoS, na nˇeˇz mus´ı b´ yt myˇsleno jiˇz od nejniˇzˇs´ıch vrstev. Ethernet byl navrˇzen jako 1-perzistentn´ı, tedy ˇcekaj´ıc´ı na konec jin´eho vys´ıl´an´ı, ale v d˚ usledku mikrosegmentace na u ´rovni pˇrep´ınaˇc˚ u je princip dnes zastaral´ y a pouˇz´ıvan´ y hojnˇe sp´ıˇse v s´ıt´ıch typu 802.11 (bezdr´atov´e lok´aln´ı s´ıtˇe). 10
Pˇri programov´an´ı modulu pro naˇc´ıt´an´ı a zpracov´an´ı Ethernetov´ ych r´amc˚ u jsou nejd˚ uleˇzitˇejˇs´ımi atributy: zdrojov´a a c´ılov´a hardwarov´a adresa ve form´atu EUI-48 a typ pouˇzit´eho s´ıt’ov´eho protokolu, zabalen´eho uvnitˇr paketu. Vz´ajemn´a koexistence schopnosti detekce r´amc˚ u typu Ethernet II a 802.3 je moˇzn´a za pˇredpokladu, ˇze vˇsechny typy s´ıt’ov´eho nosiˇce maj´ı konstantu vˇetˇs´ı, neˇz je maxim´aln´ı velikost linkov´eho r´amce (1 500B). Podm´ınka je zajiˇstˇena, ale nen´ı pˇresnˇe d´ano, ˇze do budoucna nem˚ uˇze IEEE, spr´avce Ethernetu, pˇriˇradit konstanty niˇzˇs´ı neˇz maxim´aln´ı velikost. Adresy ve form´atu EUI-48 se skl´adaj´ı ze dvou ˇc´ast´ı: prvn´ı ˇctyˇri bajty jednoznaˇcnˇe identifikuj´ı v´ yrobce zaˇr´ızen´ı, jenˇz lze nal´ezt ve veˇrejnˇe dostupn´em zdroji na str´ank´ach standard˚ u IEEE[4] a zbytek adresy je jiˇz jednoznaˇcn´ ym identifik´atorem vyroben´e s´ıt’ov´e karty, avˇsak nˇekter´e operaˇcn´ı syst´emy umoˇzn ˇuj´ı pˇresto jejich konfiguraci.
2.5
S´ıt’ov´ a vrstva IP
Prvn´ı vrstva, kterou plnˇe pokr´ yv´a protokol TCP/IP je vrstva s´ıt’ov´a, jedn´a se o jedin´ y pˇrenosov´ y protokol, kter´ y se snaˇz´ı b´ yt hardwarovˇe nez´avisl´ y a univerz´aln´ı. Ve sv´e podstatˇe funguje jako pokliˇcka, kter´a um´ı fungovat nad vˇsemi linkov´ ymi protokoly a na druh´e stranˇe jsou vˇsechny transportn´ı protokoly implementov´any pr´avˇe nad n´ı. Ve verzi 4, kter´a se pomalu st´av´a nedostaˇcuj´ıc´ı hlavnˇe z hlediska mnoˇziny moˇzn´ ych unik´atn´ıch veˇrejn´ ych adres, se uˇz´ıvaj´ı virtu´aln´ı adresy, zcela bez korespondence k hardwaru (v modelu TCP/IP). Hlavn´ım u ´kolem s´ıt’ov´e vrstvy je volba smˇer˚ u odes´ıl´an´ı paket˚ u (smˇerov´an´ı) a pˇrenos datagram˚ u. Pro ochranu proti zacyklen´ı bˇehem pˇrenosu, je do hlaviˇcky zanesena informace o poˇctech hop˚ u, kter´e jeˇstˇe m˚ uˇze paket pˇrekonat pˇred sv´ ych z´anikem, probl´emem je ale fakt, ˇze pˇri kaˇzd´em pr˚ uchodu smˇerovaˇcem mus´ıme pˇrepoˇc´ıt´avat kontroln´ı souˇcet. Implementace vrstvy je nutn´a jak v hostitelsk´ ych poˇc´ıtaˇc´ıch, tak v uzlech pˇrenosov´e infrastruktury. Oproti tomu ale samotn´ y protokol poskytuje pouze nespolehlivou a nespojovanou sluˇzbu, je nositelem pouze nutn´eho minima. V d˚ usledk˚ u t´eto vlastnosti nem´ame ˇza´dn´e z´aruky o doruˇcen´ı, nem´ame garanci nepoˇskozen´ı dat, doba doruˇcen´ı se m˚ uˇze znaˇcnˇe liˇsit a i proto nen´ı podporovan´a garance kvality sluˇzeb (QoS – kvalita sluˇzby). Volba variabiln´ı velikosti pˇren´aˇsen´eho paketu je z´avisl´a na uˇz´ıvan´e pˇrenosov´e linkov´e vrstvˇe a v protokolu je implementov´an mechanizmus fragmentace, kdy se pˇri pˇrenosu velk´eho r´amce rozdˇel´ı na segmenty, kter´e jiˇz co do velikosti vyhovuj´ı technologie pˇrenosu. Nejrozˇs´ıˇrenˇejˇs´ı verz´ı protokolu IP je verze 4, kter´a v sobˇe nese 32-bitov´e s´ıt’ov´e adresy, jejichˇz kapacita, co do velikosti pˇridˇelen´ ych veˇrejn´ ych adres, dosahuje sv´eho limitu. Dnes se zvolna pˇrech´az´ı na verzi IPv6. Atributy s´ıt’ov´e vrstvy ve verzi 4 najdete na n´asleduj´ıc´ım obr´azku. K podstatn´ ym atribut˚ um s´ıt’ov´ ych paket˚ u mus´ım zaˇradit identifikaci spolu s offsetem, kter´e slouˇz´ı pro u ´ˇcely fragmentace. Atribut TTL (Time to live – ˇzivotnost paketu) zamezuje zacyklen´ı paketu v s´ıti donekoneˇcna a ud´av´a, kolik maxim´alnˇe m˚ uˇze paket navˇst´ıvit pˇrep´ınaˇc˚ u pˇred t´ım, neˇz bude zam´ıtnut. Protokolem odliˇsujeme typ transportn´ıho protokolu, jenˇz je uloˇzen v datech. Nejˇcastˇeji vyskytuj´ıc´ımi konstantami jsou konstanty pro TCP a UDP. Identifikace s´ıt’ov´ ych ’ karet (rozhran´ı) je zajiˇstˇen´a d´ıky s´ıt ov´ ym adres´am d´elky 4B, kter´e nejˇcastˇeji zapisujeme ve form´atu napˇr. 192.168.0.1. Adresy v protokolu TCP/IP nemaj´ı ˇz´adnou korespondenci s hardwarem s´ıt’ov´e karty a jedno rozhran´ı (karta) m˚ uˇze obsahovat v´ıce adres z´aroveˇ n. D´elka hlaviˇcky vymez´ı voliteln´a rozˇs´ıˇren´ı hlaviˇcky a urˇc´ı poˇc´atek dat vyˇsˇs´ı vrstvy. V d˚ usledku velk´e rychlosti pˇridˇelov´an´ı veˇrejn´ ych IPv4 adres vznikl probl´em s jejich nedostatkem, kter´ y se ˇc´asteˇcnˇe podaˇrilo zbrzdit pˇridˇelov´an´ım menˇs´ıch blok˚ u IP adresa (za pouˇzit´ı 11
s´ıt’ov´ ych masek). D´ale vznikl NAT a PAT, kter´e maj´ı za u ´kol maskovat navenek uzly, pˇripojen´e v lok´aln´ıch s´ıt´ıch LAN. Pˇres to bylo nevyhnuteln´e pˇrej´ıt na novou verzi, kter´a pracuje se s´ıt’ov´ ymi adresami velikosti 16B, kter´e jsou bohatˇe nadimenzov´any co do spektra veˇrejn´ ych adres. Kromˇe vˇetˇs´ıho adresn´ıho prostoru pˇribyla bezstavov´a autokonfigurace, pln´a podpora multicastu (vys´ıl´an´ı k v´ıce uzl˚ um souˇcasnˇe), moˇznost odes´ıl´an´ı jumbogram˚ u (velk´e pakety). Kontroln´ı souˇcet souˇca´st´ı hlaviˇcky a jako novinka pˇribyla moˇznost pˇr´ıdavn´ ych hlaviˇcek, kter´e podporuj´ı napˇr´ıklad zabezpeˇcen´ı ˇci mobiln´ı adresov´an´ı. Detail hlaviˇcky paketu je prezentov´an na n´asleduj´ıc´ım obr´azku.
Atributy nejsou nepodobn´e starˇs´ı verzi, novinkou ale je moˇznost pˇripojen´ı rozˇsiˇruj´ıc´ıch hlaviˇcek, kter´e na jednu stranu ˇsetˇr´ı m´ısto, pokud nechceme n´est nav´ıc informace, a na druhou stranu lze rozˇs´ıˇren´ı navz´ajem kombinovat a m˚ uˇzeme jich mezi z´akladn´ı hlaviˇcku a data pˇripojit v´ıce. Oproti starˇs´ı verzi IPv4 odpadl kontroln´ı souˇcet, protoˇze transportn´ı vrstvy poˇc´ıtaj´ı kontroln´ı souˇcet tak´e z metahlaviˇcky s´ıt’ov´e vrstvy a nen´ı nutn´a jeho modifikace. Z´akladn´ı i rozˇsiˇruj´ıc´ı hlaviˇcka obsahuj´ı ukazatel, identifikuj´ıc´ı dalˇs´ı hlaviˇcku a vznik´a tak jak´ ysi spojov´ y seznam pˇripojen´ ych hlaviˇcek. Nejpouˇz´ıvanˇejˇs´ı hlaviˇcky jsou tyto: fragmentaˇcn´ı, za12
bezpeˇcen´ı ˇci smˇerovac´ı. S´ıt’ov´e adresy narostly co do velikosti ˇctyˇrn´asobnˇe a nejˇcastˇeji se zapisuj´ı po 2-bajtov´ ych bloc´ıch oddˇelen´ ych dvojteˇckou s vynech´an´ım nulov´ ych segment˚ u, napˇr. 2001:db8::1428:57ab.
2.6
Transportn´ı vrstva
V rodinˇe TCP/IP rozliˇsujeme dva z´akladn´ı typy transportn´ıch protokol˚ u: TCP a UDP, oba protokoly budou pˇredstaveny v n´asleduj´ıc´ıch kapitol´ach. Z pohledu s´ıt’ov´e vrstvy nerozliˇsujeme jednotliv´e entity (programy, d´emony, atd.) s´ıt’ov´eho rozhran´ı, ale pouze doruˇcujeme mezi uzly s´ıtˇe. Entity v syst´emu se pˇripojuj´ı k port˚ um, kter´e nejsou niˇc´ım jin´ ym neˇz ˇc´ısly v r´amci syst´emu a konkr´etn´ı implementace jejich pouˇzit´ı z´avis´ı na operaˇcn´ım syst´emu, kdy napˇr. u BSD ˇci Unixu se hojnˇe uˇz´ıvaj´ı sockety, coˇz je jak´asi abstrakce nad soubory. Ve svˇetˇe Internetu se postupem ˇcasu zabydlely tzv. well-known (dobˇre zn´am´e) porty, jejichˇz seznam byl udrˇzov´an v RFC dokumentech (posledn´ı RFC 1700), dnes doˇslo k pˇrechodu k online datab´azi na str´ank´ach organizace IANA. TCP (Transmission Control Protocol) pˇrin´aˇs´ı moˇznost spolehliv´eho a spojovan´eho kan´alu, jenˇz se d´ıky udrˇzov´an´ı stav˚ u dok´aˇze vypoˇr´adat se ztr´atou ˇci modifikac´ı dat. Pˇri pˇrenosech dat vznik´a reˇzie s t´ımto mechanismem spojen´a, kdy z´akladn´ı ideou, kter´a zajiˇst’uje spolehlivost je kontinu´aln´ı zas´ıl´an´ı potvrzen´ı o pˇrijat´ ych datech.
2.6.1
Protokol UDP
Datagramov´a sluˇzba poskytuje z´akladn´ı nadstavbu nad s´ıt’ov´ ymi protokoly, stala se hojnˇe vyuˇz´ıvanou pro aplikace poˇzaduj´ıc´ı rychlost a malou reˇzii. Funguje nespolehlivˇe a nespojovanˇe, vytv´aˇr´ı uˇzivateli iluzi blokov´eho pˇrenosu a funguje bezstavovˇe. Zaj´ımavost´ı je kontroln´ı souˇcet, kter´ y kromˇe samotn´e hlaviˇcky a dat UDP paketu pouˇz´ıv´a i pseudohlaviˇcku ze s´ıt’ov´e vrstvy. Atributy UDP paketu jsou zn´azornˇeny na obr´azku.
Pakety obsahuj´ı pouze dvoubajtov´a ˇc´ısla zdrojov´eho a c´ılov´eho portu, d´ale d´elku hlaviˇcky protokolu UDP a jiˇz zmiˇ novan´ y kontroln´ı souˇcet. Pro jeˇstˇe vˇetˇs´ı urychlen´ı existuje i modifikace UDP protokolu tzv. protokol UDP Lite, kter´ y neobsahuje kontroln´ı souˇcet hlaviˇcky a pouˇz´ıv´a se napˇr. pˇri pˇrenosu hlasu ˇci videa, kde poˇzadujeme pravideln´e a rychl´e doruˇcovan´ı.
2.6.2
Protokol TCP
Protokol TCP (Transmision Control Protocol) se stal u ´spˇeˇsn´ ym transportn´ım protokolem, kter´ y se dok´aˇze efektivnˇe vypoˇra´dat s nespolehliv´ ym a nespojovan´ ym charakterem s´ıt’ov´e vrstvy a na13
stol´ı uˇzivateli syst´em, jenˇz garantuje plnou spolehlivost. Sluˇzba je poskytov´ana na spojovan´em charakteru, tj. nejprve je nav´az´ano spojen´ı mezi uzly, pot´e se pˇren´aˇs´ı data (obousmˇernˇe) a nakonec se strany domluv´ı na ukonˇcen´ı spojen´ı (i jednostrannˇe). Garance spolehlivosti zahrnuje oblasti jako je v´ ypadek paketu, duplicitn´ı doruˇcen´ı a tak´e ˇspatn´e poˇrad´ı doruˇcen´ ych dat. Jak jiˇz bylo zm´ınˇeno, spojen´ı se navazuj´ı pouze dvoubodovˇe, pˇr´ıjemce i odes´ılatel je unik´atn´ı. K atribut˚ um protokolu lze zm´ınit ˇr´ızen´ı toku, kontinu´aln´ı potvrzov´an´ı pˇriˇsedˇs´ıch dat, schopnost vypoˇr´adat se s zahlcen´ım (prostˇrednictv´ım publikov´an´ı velikosti okna) a tvorba iluze bajtov´e ˇ aˇri se m˚ roury, jeˇz distribuuje informace po bajtech (nikoli po bloc´ıch). Cten´ uˇze vybavit lehk´a paralela s pˇrepojov´an´ım okruh˚ u, ale ve skuteˇcnosti se jedn´a o softwarovou emulaci virtu´aln´ıho okruhu, o kter´em vnitˇrn´ı uzly s´ıt’ov´e infrastruktury nic nevˇed´ı a nebo ani nepodporuj´ı tak vysokou vrstvu rodiny protokol˚ u TCP/IP. Na samotnou strukturu paket˚ u protokolu TCP m˚ uˇzete nahl´ednout na obr´azku.
´ Uvod hlaviˇcky je identick´ y s bratrsk´ ym protokolem UDP, obsahuje tedy zdrojov´ y a c´ılov´ y port. N´asleduje poˇradov´e ˇc´ıslo, ud´avaj´ıc´ı pozici v bajtov´e rouˇre, dalˇs´ım 4-bajtov´ ym identifik´atorem je potvrzovac´ı ˇc´ıslo, jenˇz d´av´a najevo protistranˇe, kter´e posledn´ı poˇradov´e ˇc´ıslo bylo u ´spˇeˇsnˇe pˇrijato. Urˇcen´ı vlastnost´ı paketu, kter´e lze povaˇzovat za platn´e se uplatˇ nuje d´ıky pˇrep´ınaˇc˚ um, napˇr. ACK (potvrzovac´ı ˇc´ıslo je platn´e), PSH (okamˇzit´e odesl´an´ı dat), RST (resetov´an´ı spojen´ı), SYN (ˇza´dost o sestaven´ı spojen´ı) a FIN (ˇza´dost o ukonˇcen´ı relace). Pro u ´ˇcely ˇr´ızen´ı toku obsahuje paket velikost okna, kter´ ym si obˇe strany pˇred´avaj´ı informaci o voln´em m´ıstu v z´asobn´ıc´ıch. Na n´asleduj´ıc´ım obr´azku m˚ uˇzeme vidˇet pr˚ ubˇeh navazov´an´ı spojen´ı, pˇrenos dat a ukonˇcen´ı spojen´ı. Navazov´an´ı spojen´ı se realizuje pomoc´ı tzv. tˇr´ıstavov´eho handshaku“ (pod´an´ı ruky), ” kdy ˇzadatel o zaloˇzen´ı spojen´ı (klient) sestav´ı paket se zapnut´ ym pˇr´ıznakem SYN, n´ahodnˇe vygeneruje sekvenˇcn´ı ˇc´ıslo a odeˇsle paket c´ılov´emu poˇc´ıtaˇci (server). Server po korektn´ım doruˇcen´ı paketu sestav´ı obdobn´ y paket, ale nav´ıc uvede pˇr´ıznak ACK, kter´ ym potvrd´ı inicializaˇcn´ı sekvenˇcn´ı ˇc´ıslo. Pokud je r´amec spr´avnˇe doruˇcen, je na klientovi, aby odeslal paket pouze s potvrzen´ım a spojen´ı d´ale povaˇzujeme za ustaven´e, na druh´e stranˇe je opakov´ano odesl´an´ı paketu a obˇe strany se ˇr´ıd´ı algoritmem pro d´elky vyprˇsen´ı ˇcasov´eho limitu. Pˇri n´asledn´em odes´ıl´an´ı dat 14
je vˇzdy paket opatˇren sekvenˇcn´ım ˇc´ıslem, kter´e koresponduje s pozic´ı v bajtov´em proudu, br´ano od inicializaˇcn´ıho sekvenˇcn´ıho ˇc´ısla. Druh´a strana pˇrenosov´eho kan´alu m´a za u ´kol odes´ılat potvrzen´ı o pˇriˇsedˇc´ıch datech a to pr˚ ubˇeˇznˇe. Na z´avˇer spojen´ı dojde k vyˇza´d´an´ı ukonˇcen´ı z jedn´e ze stran, zm´ınˇen´a strana odeˇsle r´amec se zapnut´ ym pˇr´ıznakem FIN a korektn´ım sekvenˇcn´ım ˇc´ıslem. Po doruˇcen´ı potvrzen´ı od druh´e strany se kan´al st´av´a pouze jednosmˇern´ ym a po opakov´an´ı stejn´eho kroku stranou druhou spojen´ı definitivnˇe zanik´a jako ukonˇcen´e. Bˇehem cel´eho pˇrenosu je potvrzovac´ı ˇc´ıslo vˇzdy o jedna vˇetˇs´ı neˇz je pˇriˇs´ıdˇs´ı sekvenˇcn´ı ˇc´ıslo.
15
Pasivn´ı s´ıt’ov´ e analyz´ atory 3.1
Definice
Pasivn´ım s´ıt’ov´ ym analyz´atorem rozum´ıme software, jenˇz je zamˇeˇren´ y na rozbor s´ıt’ov´e ko’ munikace na z´akladˇe odchycen´ ych z´aznam˚ u paket˚ u ze s´ıt ov´e karty bez jak´ekoliv modifikace pˇren´aˇsen´ ych dat. Data jsou ukl´ad´ana do bin´arn´ıch soubor˚ u r˚ uzn´ ych form´at˚ u, mezi nejzn´amˇejˇs´ı ´ form´aty patˇr´ı: pcap, pcapng ˇci cap (Sun Microsystems, Microsoft Network Monitor). Ukolem analyz´atoru je naˇc´ıst odchycen´a data a dle vrstvy s´ıt’ov´eho protokolu vyhodnotit hlaviˇcku a odeslat vrstvˇe vyˇsˇs´ı, pokud je v datech zachycena. Takto mohou z odchycen´ ych r´amc˚ u na u ´rovni linkov´e vrstvy vznikat napˇr. TCP spojen´ı, na nichˇz je kupˇr´ıkladu provozov´an hojnˇe uˇz´ıvan´ ych protokol HTTP. Schopnosti analyz´atoru lze klasifikovat dle nˇekolika metrik: pˇr´ıtomnost grafick´eho rozhran´ı (GUI), mnoˇzina podporovan´ ych protokol˚ u na vrstv´ach s´ıt’ov´eho modelu TCP/IP ˇci pˇr´ıtomnost statistick´ ych v´ ystup˚ u. Pˇri komunikaci se s´ıt’ov´a karta chov´a t´ım zp˚ usobem, ˇze na z´akladˇe sv´e hardwarov´e adresy pˇrij´ım´a pouze data pro ni urˇcen´a a pˇred´av´a je j´adru operaˇcn´ıho syst´emu. V promiskuitn´ım m´odu jsou ale pˇrij´ım´ana vˇsechna data, bez ohledu na adresu skuteˇcn´eho adres´ata. Typicky jsou pro zapnut´ı promiskuitn´ıho m´odu nutn´a pr´ava superuˇzivatele v pˇr´ıpadˇe operaˇcn´ıho syst´emu UNIX a metoda je z´akladem pro z´ısk´av´an´ı dat pro vˇsechny druhy s´ıt’ov´ ych analyz´ator˚ u. Na z´akladˇe definice a deklarovan´ ych krit´eri´ı jsem zvolil n´asleduj´ıc´ı analyz´atory pro bliˇzˇs´ı popis: Tcpdump, Tcpflow, Wireshark a Netgrind.
3.2
Tcpdump
Nejstarˇs´ım analyz´atorem z vybran´e trojice je Tcpdump, jenˇz spatˇril svˇetlo svˇeta na poˇca´tku 90. let 20. stolet´ı. Tcpdump je typicky souˇc´ast´ı kaˇzd´e mutace syst´emu UNIX a funguje pouze v konzolov´em reˇzimu. Program um´ı pracovat s uloˇzen´ ymi daty v souboru, um´ı s´am ukl´adat data do takov´eho souboru (form´at pcap) a v´ yhodou pro uˇzivatele je i promiskuitn´ı m´od, funguj´ıc´ı s daty v re´aln´em ˇcase. Ve volb´ach je nab´ızena ˇsirok´a paleta pˇrep´ınaˇc˚ u pro volbu u ´rovnˇe v´ ypis˚ u zobrazen´ ych dat, moˇznosti konverze IP adres na DNS z´aznamy ˇci rychlosti uˇzit´ı protokolov´ ych modul˚ u. Data se daj´ı lehce filtrovat dle tˇrech z´akladn´ıch kategori´ı: typ, smˇer a protokol. Pro ilustraci bude lepˇs´ı uk´azat moˇznosti filtrov´an´ı na pˇr´ıkladech. ip host ace and not helios tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 ether[0] & 1 = 0 and ip[16] >= 224 Program Tcpdump podporuje nativnˇe solidn´ı mnoˇzinu protokol˚ u, jejichˇz data dok´aˇze v textov´e formˇe prezentovat. K v´ıce specifick´ ym protokol˚ um lze zaˇradit: protokoly pro sd´ılen´ı soubor˚ u jako NFS ˇci SMB, Kip AppleTalk, IP fragmentace nebo pˇrenosov´ y protokol ATP. 16
21:41:11.005508 arp who-has 192.168.2.104 tell 192.168.2.1 21:41:11.005527 arp reply 192.168.2.104 is-at 00:13:e8:0a:61:93 (oui Unknown) 21:41:11.126551 IP 167.col.prg.mynet.cz.http > 192.168.2.104.50485: S 1862118129:1862118129(0) ack 1764776068 win 65535 Na vloˇzen´em pˇr´ıkladu je uk´az´ana funkce prezentov´an´ı vypsan´ ych dat, prvn´ı 2 ˇra´dky se t´ ykaj´ı ’ protokolu ARP, kter´ y pˇrev´ad´ı virtu´aln´ı adresy s´ıt ov´e vrstvy na adresy fyzick´e (MAC). Nejprve se prvek s´ıtˇe s adresou 192.168.2.1 pt´a pomoc´ı broadcastu na fyzickou adresu 192.168.2.1 a n´aslednˇe dost´av´a tak´e odpovˇed’. Tˇret´ı ˇra´dek ukazuje segment TCP spojen´ı, kter´e je HTTP poˇzadavkem, jedn´a se o druh´ y paket ze tˇr´ıstavov´eho nav´az´an´ı spojen´ı.
3.3
Tcpflow
Jako o druh´em analyz´atoru se zm´ın´ım o programu Tcpflow, kter´ y vznikl na pˇrelomu tis´ıcilet´ı. Program za pomoci promiskuitn´ıho m´odu naˇc´ıt´a pakety a rekonstruuje jednotliv´a TCP spojen´ı. Spojen´ı jsou ukl´ad´ana ve v´ ychoz´ım nastaven´ı do soubor˚ u ve form´atu, kde figuruj´ı zdrojov´a a c´ılov´a IP adresa a tak´e porty. Obsahem soubor˚ u jsou pˇren´aˇsen´a data po spojen´ıch, program bohuˇzel nepodporuje IP fragmentaci a posledn´ı uvolnˇen´a stabiln´ı verze se datuje do roku 2003. Podobnˇe jako v pˇr´ıpadˇe pˇredchoz´ıho pˇredstaven´eho programu umoˇzn ˇuje Tcpflow filtrovat data za pomoci v´ yraz˚ u. Z filtrovac´ı ˇsk´aly bych zm´ınil moˇznost filtrovat na z´aklade dom´enov´eho jm´ena uzlu, IP adresy uzlu, velikosti datov´e r´amce ˇci ethernetov´eho typu paketu. Program je co do velikosti minimalistick´ y a jeho funkˇcnost je zahrnuta v programu Wireshark, kde m´a uˇzivatel moˇznost zobrazit data pˇren´aˇsen´a po TCP spojen´ı. Program nen´ı postaven´ y ˇcistˇe na spojen´ı TCP, ale porad´ı si i s daty pˇren´aˇsen´ ymi po protokolu UDP ˇci ICMP. V´ ystupn´ı form´at si m˚ uˇzete prohl´ednout na pˇriloˇzen´e uk´azce. 209.085.135.139.00080-192.168.002.104.44056: HTTP/1.1 200 OK Date: Tue, 13 Jul 2010 20:26:23 GMT Expires: Tue, 13 Jul 2010 21:26:23 GMT Cache-Control: public, max-age=3600 Content-Type: text/javascript; charset=utf-8 Content-Encoding: gzip Server: gws Content-Length: 170 X-XSS-Protection: 1; mode=block
3.4
Wireshark
Wireshark je dnes povaˇzovan´ y za nejlepˇs´ı open-source s´ıt’ov´ y analyz´ator s grafickou nadstav’ bou. Nab´ız´ı ˇsirokou podporu s´ıt ov´ ych protokol˚ u, funguje na ˇsirok´e mnoˇzinˇe operaˇcn´ıch syst´em˚ u poˇc´ınaje UNIX, pˇres BSD, Solaris a konˇce operaˇcn´ım syst´emem Windows. Z´akladem je konzolov´ y analyz´ator TShark, jenˇz se sv´ ymi v´ ypisy do konzole podob´a programu tcpdump, ale nab´ız´ı ˇsirˇs´ı portfolio protokol˚ u. Wireshark dok´aˇze pˇrinutit fungovat s´ıtovou kartu poˇc´ıtaˇce v promiskuitn´ım m´odu a t´ım z´ısk´av´a pakety ze s´ıtˇe. Z´ıskan´a data je moˇzno filtrovat, pˇreskupovat a ukl´adat do form´atu pcap ˇci dalˇs´ıch podporovan´ ych. Grafick´a nadstavba napsan´a v GTK+ nab´ız´ı pˇrehledn´ y seznam paket˚ u, pˇrin´aˇs´ı moˇznost zabarvov´an´ı, filtrov´an´ı dle atribut˚ u paket˚ u a v ne17
posledn´ı ˇradˇe pˇrin´aˇs´ı moˇznost zapojen´ı vlastn´ıho z´asuvn´eho modulu ˇci zapojen´ı modulu jin´eho, neˇz je ve v´ ychoz´ım nastaven´ı vybr´an. Za nejvˇetˇs´ı pˇrednost programu povaˇzuji bohatou paletu statistick´ ych v´ ystup˚ u, zobrazen´ı dat pˇrenesen´ ych v r´amci TCP spojen´ı a pˇrehledn´e zobrazen´ı vrstev s´ıt’ov´eho modelu u jednotliv´ ych r´amc˚ u. Uk´azku programu lze nal´ezt na obr´azku.
3.4.1
Historie
Historie programu se datuje do roku 1997, kdy Gerald Combs zaˇcal vyv´ıjet pˇredka dneˇsn´ıho programu pod jm´enem Ethereal. Po nˇekolika pˇreruˇsen´ıch v´ yvoje v roce 1998 spojil Gerard Combs sv´e s´ıly s Richardem Sharpem a odstartovali v´ yvoj dek´odovac´ıch modul˚ u, specifick´ ych pro jednotliv´e protokoly vrstevnat´eho modelu architektury TCP/IP. V roce 2006 doˇslo k pˇrejmenov´an´ı na nynˇejˇs´ı jm´eno a po deseti letech v´ yvoje byla v roce 2008 uvolnˇena verze 1.0, kter´a je povaˇzov´ana za prvn´ı kompletn´ı verzi, pokr´ yvaj´ıc´ı z´akladn´ı mnoˇzinu protokol˚ u a autoˇri ji pˇredstavili t´ehoˇz roku na konferenci SharkFest.
3.4.2
Filtrov´ an´ı
Filtrov´an´ı dat nab´ız´ı uˇzivateli jednak pˇrednastaven´e filtrovac´ı profily typu: TCP only“, no ARP ” ” and no DNS“. V z´asadˇe lze vytvoˇrit libovolnou logickou klauzuli pomoc´ı pˇreddefinovan´ ych atribut˚ u a z´akladn´ıch operand˚ u, jako je porovn´an´ı, pˇr´ısluˇsnost do mnoˇziny, atd. Krit´eria lze skl´adat z primitivn´ıch atribut˚ u, jako je IP adresa zdrojov´eho poˇc´ıtaˇce, ale zabrousit lze i do mnohem detailnˇejˇs´ıch atribut˚ u. Jako zaj´ımav´e atributy, kter´e lze pouˇz´ıt pˇri specifikaci podm´ınky, mohu uv´est jm´eno pˇr´ıkazu protokolu SMTP, velikost pˇren´aˇsen´eho obr´azku form´atu PNG pomoc´ı HTTP ˇci pˇrezd´ıvku adres´ata pˇrenosov´eho protokolu Yahoo Messanger.
18
3.4.3
Anal´ yza r´ amc˚ u
Anal´ yza pˇrenesen´ ych r´amc˚ u je ˇr´ızena stromem dekod´er˚ u, kter´e dle atribut˚ u vrstevnat´eho modelu rozliˇsuj´ı dekod´er, kter´ y bude uˇzit. Z´akladn´ımi atributy pro detekci jsou ethertype“ na linkov´e ” vrstvˇe, IP protokol na vrstvˇe s´ıt’ov´e a zdrojov´ y a c´ılov´ y port na vrstvˇe transportn´ı jak u TCP, tak i UDP. Dekod´ery uˇzit´e na rozklad lze mˇenit a Wireshark nab´ız´ı i moˇznost naprogramov´an´ı takov´eho modulu. Pro u ´spˇech takto velk´eho programu je zm´ınˇen´a ˇc´ast programu kl´ıˇcov´a, kdy v dneˇsn´ı dobˇe v´ıce jako 500 v´ yvoj´aˇr˚ u pˇrisp´ıv´a a programuje rozˇs´ıˇren´ı, kter´a jsou nez´avisl´a na ostatn´ıch a komunita udrˇzuje bohatou dokumentaci n´avod˚ u, jak postupovat pˇri v´ yvoji.
3.4.4
Statistick´ e komponenty
Statistickou komponentu Wiresharku povaˇzuji za nejv´ıce pˇr´ınosnou ˇc´ast programu. K z´akladn´ım jednotk´am patˇr´ı sum´aˇr obsahuj´ıc´ı informace o odchycen´ ych datech a informace o hierarchii pouˇzit´ ych protokol˚ u bˇehem komunikace. Dalˇs´ım uˇziteˇcn´ ym n´astrojem je pˇrehled komunikac´ı, kde na z´akladˇe protokol˚ u nalezneme informace mezi kter´ ymi uzly se pˇren´aˇsela data. Mezi grafick´e v´ ystupy mus´ım zm´ınit histogram velikosti paket˚ u a velmi n´azorn´ y Graf tok˚ u, jenˇz v pr˚ ubˇehu ˇcasu vizualizuje toky dat v obou smˇerech komunikace. Pro protokol TCP jsou v nab´ıdce grafy stˇredn´ı doby obr´atky, velikosti pˇren´aˇsen´ ych dat v pr˚ ubˇehu ˇcasu ˇci seznamu poˇzadavk˚ u na zobrazen´e webov´e str´anky.
3.5
Netgrind
Netgrind vznikl jako jednoduch´ y, srozumiteln´ y a pomocn´ y program pˇri anal´ yze zejm´ena protokolu HTTP a vrstev, kter´e leˇz´ı pod n´ım. Autorem je vedouc´ı m´e pr´ace Mgr. Martin Mareˇs, Ph.D. a stal se inspirac´ı pro t´ema moj´ı pr´ace. Konzolov´ y program nab´ız´ı statistiky o spr´avnˇe zpracovan´ ych, ˇspatn´ ych a neplatn´ ych paketech na vrstv´ach s´ıt’ov´eho modelu a jako hlavn´ı produkt prezentuje v pˇrehledn´em v´ ypisu HTTP spojen´ı, detailn´ı informace o adres´ach, portech, poˇctech pˇrenesen´ ych dat, URL a typy dokumentu dle standardu rozˇs´ıˇren´ı MIME. Po nastaven´ı m˚ uˇzeme nechat zapsat statick´e informace o jednotliv´ ych pˇrenosech do adres´aˇre pro budouc´ı zobrazen´ı pomoc´ı grafov´eho kresl´ıc´ıho n´astroje gnuplot. K programu je pˇribalena mnoˇzina skript˚ u v jazyce Perl, kter´e transformuj´ı nashrom´aˇzdˇen´e statistiky a vykresluj´ı v´ ystupn´ı grafy. Grafy se t´ ykaj´ı poˇctu aktu´aln´ıch spojen´ı v ˇcase, velikosti pˇren´aˇsen´ ych dat v ˇcase ˇci d´elce ˇcek´an´ı HTTP poˇzadavku. source 192.168.2.104:46414 192.168.2.104:46415 192.168.2.104:46417 192.168.2.104:46414
destination 89.250.246.4:80 89.250.246.4:80 89.250.246.4:80 89.250.246.4:80
-
res 200 200 200 200
cac ... ... ... ...
q len ttime wtime ctype 0 4883 0.075 0.050 text/html 0 2430 0.040 0.040 text/css 0 188 0.054 0.054 image/png 1 1190 0.013 0.012 image/png
met GET GET GET GET
V´ ystup z programu Netgrind poskytne pˇrehledn´e informace o jednotliv´ ych HTTP poˇzadavc´ıch, kdy byly uskuteˇcnˇeny v ˇcase, z jak´ ych IP adres a port˚ u doˇslo k pˇrenosu, d´ale z´ısk´ame cenn´e informace o velikosti pˇrenesen´ ych datech, dobˇe vyˇr´ızen´ı poˇzadavku, MIME typu a v neposledn´ı ˇradˇe tak´e poˇzadovan´ y soubor, jenˇz byl vyˇz´adat po HTTP d´emonovi.
19
S´ıt’ov´ y analyz´ ator NEPAL 4.1
Pˇ redstaven´ı
Vlastn´ı s´ıt’ov´ y pasivn´ı analyz´ator Network Passive Analyser (zkratka NEPAL) byl vyvinut pro u ´ˇcel bakal´aˇrsk´e pr´ace. Program na sv´em vstupu akceptuje z´aznamy paket˚ u uloˇzen´ ych v souboru ve form´atu PCAP. Program je navrˇzen´ y jako modul´arn´ı syst´em, kdy mezi jednotliv´ ymi moduly putuj´ı datov´e objekty r˚ uzn´ ych tˇr´ıd. Kaˇzd´ y modul m´a definovanou mnoˇzinu typ˚ u vstupn´ıch a v´ ystupn´ıch objekt˚ u, kdy po pr˚ uchodu dat modulem nastane jedna z ud´alost´ı, jeˇz modul definuje. D´ıky zm´ınˇen´emu apar´atu je moˇzn´e pomoc´ı skript˚ u, napsan´ ych v jazyce Python[6], napojit v´ ystup na libovoln´e moduly a t´ım sestavit celou ˇsk´alu funkˇcn´ıch program˚ u, t´ ykaj´ıc´ıch se r˚ uzn´e oblasti zpracov´an´ı dat ze s´ıtˇe. Moduly jsou napsan´e v jazyc´ıch C a Python, mohou se mezi sebou libovolnˇe kombinovat a jako poj´ıtko mezi obˇema svˇety je uˇzit n´astroj SWIG[7], kter´ y obaluje k´od psan´ y v jazyce C do jazyk˚ u vyˇsˇs´ıch, mimo jin´e i do Pythonu. Software implementuje naˇc´ıt´an´ı z´akladn´ıch protokol˚ u TCP/IP a jako uk´azkov´e specifick´e moduly obsahuje modul pro zobrazen´ı poˇzadavk˚ u protokolu HTTP, modul ARP/RARP vˇcetnˇe zobrazov´an´ı v´ yrobc˚ u s´ıt’ov´ ych karet, statistick´ y modul (napsan´ y v Pythonu) a modul pro zobrazov´an´ı DNS poˇzadavk˚ u a odpovˇed´ı.
4.2
Zapojen´ı programu
Zapojen´ı pr´ace jednotliv´ ych modul˚ u m˚ uˇze ˇcten´aˇr nahl´ednout na n´asleduj´ıc´ım obr´azku.
20
Pomoc´ı obd´eln´ık˚ u r˚ uzn´ ych barev jsou vyznaˇceny moduly, atributy u modul˚ u symbolizuj´ı vybran´e ud´alosti, kter´e m˚ uˇze modul vyvolat a na kter´e se n´aslednˇe m˚ uˇze dalˇs´ı modul zavˇesit. Kaˇzd´ y modul disponuje z´asobn´ıkem ud´alost´ı, kde se registruj´ı dalˇs´ı vstupn´ı moduly. Popsan´ ym zp˚ usobem je dosaˇzena modularita, schopnost zapojit vlastn´ı modul na sestavu pˇredeˇsl´ ych a syst´em poskytuje z´akladn´ı transparentn´ı program´atorsk´e rozhran´ı pro napojov´an´ı modul˚ u. V obr´azku jsou zm´ınˇen´a napojen´ı vyj´adˇrena ˇsipkami a kruh symbolizuje putuj´ıc´ı datov´ y objekt. Na zapojen´ı staˇc´ı pouze zaregistrovat vstupn´ı metodu do z´asobn´ıku ud´alost´ı vybran´eho modulu a program se jiˇz postar´a o pˇred´an´ı dat.
4.3
Datov´ y objekt
Datov´ y objekt je z´akladn´ı jednotkou informac´ı pˇren´aˇsenou mezi moduly. Pˇri sv´em n´avrhu byl kladen d˚ uraz na co nejvˇetˇs´ı univerz´alnost na stranˇe jedn´e a na co nej´ uspornˇejˇs´ı a nejrychlejˇs´ı ˇreˇsen´ı na stranˇe druh´e. Datov´ y objekt se stal univerz´aln´ı strukturou, do kter´e lze ukl´adat data r˚ uzn´ ych typ˚ u (viz n´asleduj´ıc´ı tabulka). Typ atributu INT TIME IPV4 IPV6 STRING ARRAY MAC48 DOBJ VOIDPTR
D´ elka 4B 8B 4B 16 B — — 6B 4B 4B
Popis typu atributu cel´e nez´aporn´e ˇc´ıslo v rozsahu [0,4 294 967 295] uloˇzen´ı ˇcasu s pˇresnost´ı na nanosekundy IPv4 s´ıt’ov´a adresa IPv6 s´ıt’ov´a adresa ˇretˇezec ASCII znak˚ u pole bajt˚ u MAC adresa ukazatel na jin´ y datov´ y objekt vˇseobecn´ y ukazatel
Souˇc´ast´ı datov´eho objektu je tak´e z´asobn´ık ud´alost´ı, do kter´eho je moˇzn´e registrovat metody, kter´e se zavolaj´ı, kdyˇz nastane ud´alost. Zm´ınˇen´a vlastnost je napˇr´ıklad pouˇzita u TCP spojen´ı, u nˇehoˇz nastane ud´alost, signalizuj´ıc´ı pˇrenesen´a data. U datov´ ych objekt˚ u rozliˇsujeme jejich tˇr´ıdy, na vstupu modul˚ u si zpravidla moduly kontroluj´ı tˇr´ıdy vstupn´ıch dat a rozhoduj´ı se, zda je zpracuj´ı. V pr˚ ubˇehu pr˚ uchodu je moˇzn´e za bˇehu mˇenit tˇr´ıdu datov´eho objektu, mohou se pˇrid´avat atributy a ˇcasto se tak pˇri pr˚ uchodu moduly rodiny TCP/IP i dˇeje. V n´asleduj´ıc´ı kapitole z´ısk´ate pˇrehled, jak´e tˇr´ıdy objektu vznikaj´ı v jak´ ych modulech, jak´e tˇr´ıdy moduly podporuj´ı na sv´em vstupu a tak´e jak´e vznikaj´ı ud´alosti.
4.4
Pˇ redstaven´ı modul˚ u
Program pracuje jako s´ıt’ov´ y analyz´ator nad rodinou protokol˚ u TCP/IP a implementuje mo’ duly, kter´e odpov´ıdaj´ı protokol˚ um s´ıt ov´eho modelu. Pro uk´azku specifick´ ych aplikac´ı je pˇrid´ana mnoˇzina modul˚ u, kter´e se t´ ykaj´ı problematiky pˇrevodu fyzick´ ych a s´ıt’ov´ ych adres, protokolu HTTP pro pˇrenos dokument˚ u ˇci protokolu DNS, kter´ y mimo jin´e pˇrev´ad´ı dom´enov´a jm´ena na ’ ’ s´ıt ov´e adresy (at uˇz verze 4 ˇci 6). Jako demonstrace kombinov´an´ı modul˚ u v obou jazyc´ıch jsem naprogramoval grafov´ y modul v jazyce Python, jenˇz uˇz´ıv´a velmi dobˇre propracovanou knihovnu 21
pro v´ ystupy graf˚ u pod jm´enem Matplotlib[8]. V n´asleduj´ıc´ı tabulce m˚ uˇze ˇcten´aˇr nahl´ednout do pˇrehledu implementovan´ ych modul˚ u v programovac´ım jazyce C a v dalˇs´ıch sekc´ıch jsou moduly charakterizov´any vˇcetnˇe atribut˚ u objekt˚ u, kter´e pˇri pr˚ uchodu tˇemito moduly vznikaj´ı. Jm´ eno modulu Modul PCAP Modul Ethernet Modul ARP Modul ARP view Modul IPv4 Modul IPv6
Zkratka PCAP ETH ARP ARPVIEW IPV4 IPV6 IPREASS
Modul IP Reassembler Modul UDP Modul TCP Modul TCP Flow Modul HTTP
Vstupn´ı objekty — PCAP packet Ethernet packet ARP packet Ethernet packet Ethernet packet IPv4 packet IPv6 packet
UDP
IPv4 IPv6 TCP IPv4 IPv6 TCPFLOW TCP
packet packet packet packet packet
HTTP
packet data packet flow data
DNS Modul DNS
TCP TCP UDP TCP TCP
V´ ystupn´ı objekty PCAP packet Ethernet packet ARP packet — IPv4 packet IPv6 packet IPv4 packet IPv6 packet IP reassembly UDP packet TCP packet TCP flow TCP data — —
Tabulka 4.1: Tabulka modul˚ u
4.4.1
Modul PCAP
Vstupn´ı modul kaˇzd´eho zapojen´ı naˇc´ıt´a sekvenˇcnˇe uloˇzen´e a pˇren´aˇsen´e r´amce, modul vyuˇz´ıv´a sluˇzeb knihovny PCAP[9], jeˇz ukl´ad´a do souboru s pˇr´ıponou pcap cel´e r´amce v bin´arn´ı podobˇe. V hlaviˇcce takov´eho souboru jsou deklarov´any atributy o maxim´aln´ı d´elce zachycen´ ych r´amc˚ u, ˇcasov´em posunu oproti ˇcasu nult´emu poledn´ıku ˇci typu linkov´e vrstvy. Po pr˚ uchodu modulem vznik´a datov´ y objekt, jenˇz nese bin´arn´ı data po m´ediu pˇren´aˇsen´a, informace o p˚ uvodn´ı a odchycen´e velikosti a v posledn´ı ˇradˇe tak´e ˇcas pr˚ uchodu paketu s´ıt’ovou kartou. O detailech atribut˚ u v´as sezn´am´ı n´asleduj´ıc´ı tabulka, po n´ıˇz n´asleduje tabulka s v´ ypisem ud´alost´ı. Atribut pcap frame pcap time pcap origlen pcap packet
Typ INT TIME INT ARRAY
Popis atributu poˇradov´e ˇc´ıslo paketu datum odchycen´ı paketu p˚ uvodn´ı velikost odchycen´eho r´amce data odchycen´eho paketu
22
Ud´ alost Popis ud´ alosti Typ objektu packet vznik nov´eho r´amce PCAP packet
4.4.2
Modul Ethernet
Ethernetov´ y modul se star´a o spr´avn´e naˇcten´ı atribut˚ u pro datov´ y objekt Ethernet packet. Ve sv´e podstatˇe podporuje rodina protokol˚ u TCP/IP velk´e portfolio linkov´ ych protokol˚ u, ale v pr˚ ubˇehu ˇcasu se Ethernet stal nejpouˇz´ıvanˇejˇs´ım a nejrozˇs´ıˇrenˇejˇs´ım. V´ıce informac´ı o modulu pˇrinesou dvˇe bezprostˇrednˇe n´asleduj´ıc´ı tabulky. Atribut Typ eth smac MAC48 eth tmac MAC48 INT eth type
Ud´ alost packet drop
4.4.3
Popis atributu zdrojov´a MAC adresa ve form´atu MAC-48 c´ılov´a MAC adresa ve form´atu MAC-48 typ protokolu vyˇsˇs´ı vrstvy 0x0800 pro IPv4, 0x86DD pro IPv6, 0x0806 pro ARP
Popis ud´ alosti Typ objektu vznik nov´eho paketu Ethernet packet zahozen´ı nekompatibiln´ıho paketu PCAP packet (napˇr. z d˚ uvodu nekompletnosti paketu pˇri odchycen´ı)
Modul ARP
Modul dek´oduje hlaviˇcky paket˚ u protokolu ARP (Address resolution protocol – RFC 826[11]) a protokolu RARP (Reverse address resolution protocol – RFC 903[12]) a odes´ıl´a je spˇra´telen´emu modulu pro jejich vizualizaci. Tabulka specifikuje atributy objektu, modul nedisponuje ˇza´dn´ ymi ud´alostmi, vˇsechna data jsou automaticky posunuta n´asleduj´ıc´ımu modulu ARP view. Atribut arp htype arp ptype
Typ INT INT INT
arp opcode ARRAY MAC48 IPV4 arp sendpaddr IPV6 ARRAY arp targhaddr MAC48 IPV4 arp targpaddr IPV6 arp sendhaddr
Popis atributu typ hardwarov´e adresy (0x0001 pro Ethernet II) typ s´ıt’ov´eho protokolu 0x0800 pro IPv4, 0x86DD pro IPv6 typ poˇzadavku 0x0001 pro ARP dotaz, 0x0002 pro ARP odpovˇed’ 0x0003 pro RARP dotaz, 0x0004 pro RARP odpovˇed’ fyzick´a adresa odes´ılatele (typ na z´akladˇe d´elky, pro d´elku 6 typ MAC48, ARRAY jinak) s´ıt’ov´a adresa odes´ılatele (typ na z´akladˇe atributu arp ptype) fyzick´a adresa pˇr´ıjemce (typ na z´akladˇe d´elky, pro d´elku 6 typ MAC48, ARRAY jinak) s´ıt’ov´a adresa pˇr´ıjemce (typ na z´akladˇe atributu arp ptype)
23
4.4.4
Modul ARP view
´ Ukolem modulu ARP view nen´ı nic jin´eho neˇz prezentovat odchycen´e datov´e objekty typu ARP packet. Modul m´a zabudovan´e rozˇs´ıˇren´ı pro prezentov´an´ı v´ yrobce s´ıt’ov´e karty, ke kter´e se v´aˇze odchycen´a MAC adresa, a to v podobˇe tzv. OUI-48 (Organizationally unique identifier). Seznam v´ yrobc˚ u je uveden na str´ank´ach IEEE[4] a souˇc´ast´ı bakal´aˇrsk´e pr´ace je i program pro staˇzen´ı a transformaci dat pod jm´enem: oui.py, kter´ y stahuje z webov´ ych str´anek organizace IEEE aktu´aln´ı datab´azi pˇridˇelen´ ych rozsah˚ u MAC adres jednotliv´ ych v´ yrobc˚ u a ukl´ad´a je do souboru pro modul. V´ ypis z modulu je pˇriloˇzen v uk´azk´ach programu.
4.4.5
Modul IPv4
Ze jm´ena modulu vypl´ yv´a jeho funkce, modul pouze dek´oduje datov´e objekty typu IPv4 packet a veˇsker´a data jsou odes´ıl´ana modulu IP reassembler, kter´ y rozhodne o tom, zda je nutn´e zakl´adat IP reassembly nebo zda jsou data nefragmentovan´a a staˇc´ı je odeslat vyˇsˇs´ı vrstvˇe. Odes´ıl´an´ı datov´ ych objekt˚ u pro jejich kontrolu je ˇcinˇeno automaticky, nen´ı nutn´e registrovat ud´alost. Specifikace paketu byla poprv´e pˇredstavena v RFC 791[13]. N´asleduj´ıc´ı dvˇe tabulky pˇrin´aˇsej´ı v´ıce informac´ı o vznikl´ ych objektech a o ud´alostech. Atribut ipv4 version ipv4 hdrlen ipv4 tos ipv4 length ipv4 ident ipv4 flags ipv4 ttl ipv4 proto
Typ INT INT INT INT INT INT INT INT
ipv4 hdrsum INT ipv4 saddr IPV4 ipv4 daddr IPV4 Ud´ alost drop
4.4.6
Popis atributu verze s´ıt’ov´eho protokolu d´elka hlaviˇcky paketu v bajtech typ pˇren´aˇsen´e sluˇzby v datech celkov´a d´elka paketu v bajtech identifikace pro u ´ˇcely fragmentace flagy spolu s fragmentaˇcn´ım offsetem TTL – ˇzivotnost paketu typ protokolu vyˇsˇs´ı vrstvy 0x0006 pro TCP, 0x0011 pro UDP kontroln´ı souˇcet IP paketu zdrojov´a s´ıt’ov´a adresa c´ılov´a s´ıt’ov´a adresa
Popis ud´ alosti Typ objektu zahozen´ı nekompatibiln´ıho paketu Ethernet packet
Modul IPv6
Nov´a verze s´ıt’ov´eho protokolu se od sv´eho sourozence co do form´atu hlaviˇcky znaˇcnˇe odliˇsuje, vznikla u ´plnˇe nov´a koncepce pˇr´ıdavn´ ych hlaviˇcek ve formˇe spojov´eho seznamu, kter´ y rozˇsiˇruje hlaviˇcku z´akladn´ı, jeˇz v sobˇe nese pouze nutn´e informace. Hlaviˇcek najdeme ve specifikaci celkem mnoho a jsou podporovan´e 4 z´akladn´ı: Hop-by-Hop, c´ılov´a, fragmentaˇcn´ı a trasovac´ı. K ostatn´ım hlaviˇck´am m˚ uˇzeme pˇristupovat pomoc´ı atribut˚ u, kter´e jsou specifikovan´e na konci n´asleduj´ıc´ı tabulky, po n´ıˇz n´asleduje pˇrehled ud´alost´ı. Specifikace paketu a protokolu nalezneme v RFC 2460[14], podobnˇe jako v pˇr´ıpadˇe pˇredchoz´ıho modulu se modul star´a o dek´odov´an´ı a data jsou postoupena automaticky modulu IP reassembler. 24
Atribut ipv6 version ipv6 tos ipv6 flabel ipv6 length
Typ INT INT INT INT INT
ipv6 nexthdr ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6 ipv6
ttl saddr daddr hophop options dest options route type route segleft route options fragm offset fragm flag fragm ident headers[t] headers type[i] Ud´ alost drop
4.4.7
INT IPV6 IPV6 ARRAY ARRAY INT INT ARRAY INT INT INT ARRAY INT
Popis atributu verze s´ıt’ov´eho protokolu (6 pro IPv6) typ pˇren´aˇsen´e sluˇzby v datech identifik´ator proudu dat (Flow label) celkov´a d´elka paketu v bajtech identifik´ator dalˇs´ı hlaviˇcky (po pˇreˇcten´ı vˇsech pˇr´ıdavn´ ych) 44 pro fragmentaci, 17 pro UDP, 6 pro TCP (RFC[14]) TTL – ˇzivotnost paketu zdrojov´a s´ıt’ov´a adresa c´ılov´a s´ıt’ov´a adresa volby rozˇs´ıˇren´ı Hop-by-Hop volby pro c´ılov´e rozˇs´ıˇren´ı typ trasov´an´ı rozˇsiˇruj´ıc´ı hlaviˇcky zb´ yvaj´ıc´ı poˇcet segment˚ u trasov´an´ı volby trasovac´ı rozˇsiˇruj´ıc´ı hlaviˇcky offset fragmentovan´eho paketu flag fragmentaˇcn´ı rozˇs. hlaviˇcky identifikace v r´amci fragmentace rozˇsiˇruj´ıc´ı hlaviˇcky typu t typ i-t´e rozˇsiˇruj´ıc´ı hlaviˇcky
Popis ud´ alosti Typ objektu zahozen´ı nekompatibiln´ıho paketu Ethernet packet
Modul IP reassembler
´ Ukolem modulu je naˇc´ıtat vstupn´ı pakety IPv4 packet a IPv6 packet a na z´akladˇe atribut˚ u se rozhodovat, zda budou pakety fragmentovan´e ˇci nikoliv. V pˇr´ıpadˇe nefragmentovan´ ych dat okamˇzitˇe nastane ud´alost, signalizuj´ıc´ı vznik nov´eho paketu. V opaˇcn´em pˇr´ıpadˇe dojde k zaloˇzen´ı objektu typu IP reassembly, kter´ y pˇredstavuje datagram, kter´ y vznik´a skl´ad´an´ım fragment˚ u (obou verz´ı s´ıt’. protokolu). Pokud uˇzivatele zaj´ımaj´ı pouze kompletn´ı IP pakety, nen´ı nutn´e s IP reassembly pracovat. Na druh´e stranˇe pokud chceme programovat modul, kter´ y se jak´ ymkoliv zp˚ usobem dot´ yk´a IP fragmentace, m´ame moˇznost se k jednotliv´ ym proch´azej´ıc´ım fragment˚ um dostat. Skladba fragment˚ u prob´ıh´a spojov´an´ım fragment˚ u do seznamu, kter´ y kdyˇz se stane kompletn´ım, tak dojde k ud´alosti vzniku nov´eho datov´eho objektu. Jako obrana pˇred velk´ ym poˇctem otevˇren´ ych IP datagram˚ u slouˇz´ı ˇcasov´ y limit, kter´ y aktivuje ud´alost conn timeout, pokud do IP datagramu nepˇribyl po urˇcitou dobu ˇz´adn´ y paket. Atribut ipreass time ipreass ipreass ipreass ipreass
Typ Popis atributu TIME ˇcas zaloˇzen´ı IP reassembly IPV4 zdrojov´a s´ıt’ov´a adresa saddr IPV6 IPV4 c´ılov´a s´ıt’ov´a adresa daddr IPV6 ident INT identifikace IP reassembly version INT rozliˇsen´ı mezi verzemi 4 a 6 25
Ud´ alost
Popis ud´ alosti vznik nefragmentovan´eho IP paketu
packet
zahozen´ı nekompatibiln´ıho paketu
drop
conn create zaloˇzen´ı nov´eho IP datagramu conn close korektn´ı uzavˇren´ı IP datagramu conn timeout vyprˇsen´ı ˇcasov´eho limitu pro IP reassembly
4.4.8
Typ objektu IPv4 packet IPv6 packet IPv4 packet IPv6 packet IP reassembly IP reassembly IP reassembly
Modul UDP
Modul UDP tvoˇr´ı jenom jakousi malou nadstavbu nad s´ıt’ov´ ym protokolem, proto nen´ı nutn´e dlouze vysvˇetlovat fungov´an´ı a nahl´edneme rovnou na popis atribut˚ u modulu a ud´alost´ı, jeˇz mohou nastat. V´ıce informac´ı m˚ uˇzete ˇcerpat v RFC 768[15]. Atribut udp sport udp dport udp length udp checksum Ud´ alost packet drop
4.4.9
Typ INT INT INT INT
Popis atributu zdrojov´ y port c´ılov´ y port d´elka nesen´ ych dat kontroln´ı souˇcet hlaviˇcky
Popis ud´ alosti Typ objektu vznik nov´eho paketu UDP packet zahozen´ı nekompatibiln´ıho paketu IPv4 packet IPv6 packet
Modul TCP
Modul m´a za u ´kol dek´odovat hlaviˇcky datov´ ych objekt˚ u typu IPv4 packet a IPv6 packet, vˇsechny atributy vznikl´eho datov´eho objektu spolu s ud´alostmi naleznete ve dvou tabulk´ach. Dalˇs´ı informace lze ˇcerpat z RFC 793[16]. Atribut tcp sport tcp dport tcp seq tcp ack tcp hdrlen tcp flags tcp winsize tcp checksum tcp urgptr tcp options
Typ INT INT INT INT INT INT INT INT INT ARRAY
Popis atributu zdrojov´ y port c´ılov´ y port poˇradov´e ˇc´ıslo v bajtov´em proudu potvrzovac´ı ˇc´ıslo d´elka hlaviˇcky v bajtech flagy pro jednotliv´e volby velikost okna kontroln´ı souˇcet hlaviˇcky urgentn´ı ukazatel dalˇs´ı volby
26
Ud´ alost packet drop
4.4.10
Popis ud´ alosti Typ objektu vznik nov´eho paketu TCP packet zahozen´ı nekompatibiln´ıho paketu IPv4 packet IPv6 packet
Modul TCP flow
Nejsloˇzitˇejˇs´ı modul, implementovan´ y v program, je bezpochyby modul pro rekonstrukci spojen´ı, pracuj´ıc´ı s obˇema verzemi s´ıt’ov´eho protokolu. Na vstupu je TCP packet a pˇri korektn´ım nav´az´an´ı spojen´ı vznik´a datov´ y objekt typu TCP flow. Objekt v sobˇe uchov´av´a informace o zdrojov´em a c´ılov´em portu a tak´e o adres´ach, mezi kter´ ym se pˇrenos uskuteˇcn ˇuje. Zm´ınˇen´ y objekt disponuje z´asobn´ıkem ud´alost´ı, ve kter´em nast´av´a ud´alost, signalizuj´ıc´ı pˇren´aˇsen´a data po spojen´ı typu TCP data. Stejnˇe jako v pˇr´ıpadˇe modulu IP reassembler je ˇcinnost spojen´ı monitorov´ana a neˇcinn´a spojen´ı jsou po uplynut´ı ˇcasov´eho limitu uzav´ır´ana. Pˇrehled obou typ˚ u datov´ ych objekt˚ u n´asleduje na pˇriloˇzen´ ych tabulk´ach. Atribut
Typ IPV4 tcpflow saddr IPV6 IPV4 tcpflow daddr IPV6 tcpflow sport INT tcpflow dport INT
4.4.11
Popis atributu zdrojov´a adresa c´ılov´a adresa zdrojov´ y port c´ılov´ y port
Atribut tcpdata time tcpdata direct tcpdata data tcpdata conn
Typ Popis atributu TIME ˇcas vzniku pˇrenesen´ ych dat INT smˇer pˇrenesen´ ych dat po spojen´ı ARRAY data pˇrenesen´a po spojen´ı DOBJ ukazatel na datov´ y objekt se spojen´ım
Ud´ alost conn create conn reset conn close conn timeout data
Popis ud´ alosti vznik nov´eho spojen´ı resetov´an´ı spojen´ı korektn´ı uzavˇren´ı spojen´ı vyprˇsen´ı ˇcasov´eho limitu spojen´ı vznik dat po spojen´ı
Typ objektu TCP flow TCP flow TCP flow TCP flow TCP data
Modul HTTP
Protokol HTTP (Hypertext transfer protocol) se v dneˇsn´ı dobˇe tˇeˇs´ı obrovsk´e oblibˇe, spousta doposavad desktopov´ ych aplikac´ı se zabydlela ve formˇe webov´ ych str´anek (kancel´aˇrsk´ y bal´ık, webmail, atd.), vznikly masivnˇe se rozv´ıjej´ıc´ı soci´aln´ı s´ıtˇe a pˇrib´ yv´a na dynamiˇcnosti webov´ ych str´anek. Modul HTTP rekonstruuje transfery, zaznamen´av´a dokumenty, kter´e si uˇzivatel vybere a dopoˇc´ıt´av´a d´elku vyˇr´ızen´ı poˇzadavk˚ u. S pˇr´ıkladem v´ ystupu modulu se m˚ uˇzeme sezn´amit 27
v dalˇs´ı ˇca´sti pr´ace a jedna sekce kapitoly je vˇenovan´a popisu, jak se takov´ y modul mus´ı spr´avnˇe napojit, aby poskytoval vytouˇzen´e v´ ysledky. Specifikace protokolu je definov´ana v RFC 2616[17].
4.4.12
Modul DNS
Modul DNS opˇet prezentuje nashrom´aˇzdˇen´e informace, do pr´ace byl modul zahrnut hlavnˇe z hlediska demonstrace univerz´alnosti n´avrhu programu, kdy modul pracuje s v´ıce typy vstupn´ıch datov´ ych objekt˚ u, v pˇr´ıpadˇe DNS se jedn´a o UDP datagram a TCP flow. Modul se vypoˇra´d´a s hlavn´ı mnoˇzinou typ˚ u poˇzadavk˚ u a odpovˇed´ı: CNAME (kanonick´e jm´eno), NS (name server), A (IPv4 adresa), AAAA (IPv6 adresa), SOA (z´aznam autority), TXT (textov´ y ˇretˇezec), RRSIG (elektronick´ y podpis). Podobnˇe jako v pˇr´ıpadˇe v´ ystupu modulu HTTP i tento modul dopoˇc´ıt´av´a dobu, za jakou doˇslo v vyˇr´ızen´ı poˇzadavku. Uk´azku pr´ace modulu naleznete v dalˇs´ıch kapitol´ach.
28
Ovl´ ad´ an´ı programu NEPAL 5.1
Pˇ reklad programu
Program je napsan´ y v jazyc´ıch C a Python a je urˇcen´ y prim´arnˇe pro operaˇcn´ı syst´em Unix, pro kter´ y je vytvoˇren´ y Makefile. Program spolupracuje s knihovnou LibUCW[5] (aktu´aln´ı verze 4.0) a s programem SWIG[7] (aktu´aln´ı verze 1.3.40-r1). V jazyce Python nejsou uˇz´ıv´any ˇz´adn´e sloˇzit´e konstrukce a otestov´ana je funkˇcnost ve verzi 2.6 a vyˇsˇs´ı. Jako nutn´a prerekvizita pro pˇreklad programu pomoc´ı GCC[10] je um´ıstˇen´ı knihovny LibUCW, kter´e se detekuje pomoc´ı zn´am´eho programu pkg-config (v souboru Makefile naleznete cestu ke knihovnˇe, kterou je nutn´e pro pˇreklad spr´avnˇe vyplnit). Po pˇrekladu vznikne dynamick´a knihovna, kterou lze jiˇz importovat z prostˇred´ı jazyka Python, jenˇz spouˇst´ı pˇripraven´e uk´azkov´e skripty.
5.2
Uk´ azka programu
#!/usr/bin/env python2.6 from nepal import * import sys
def entrypoint(file): eho paketu bind module("PCAP", "ETH", "packet") # registrace module Ethernet na vznik nov´ an´ ı paket˚ u bind func("ETH", meth dispatcher, "packet") # registrace funkce pro filtrov´ bind module("ARP", "ARPVIEW", "packet") # registrace vizualizaˇ cn´ ıho modulu pro ARP setinfo("module.arpview ouifile", "STRING", "../utils/oui.txt") # nastaven´ ı OUI souboru mpcap(file)
def meth dispatcher(obj): if obj.eth type == 0x0806: # ARP obj.send("ARP")
# Main if len(sys.argv) != 2: print "usage: ./scriptname
" else: entrypoint(sys.argv[1])
Po pˇredstaven´ı modul˚ u, datov´ ych objekt˚ u a ud´alost´ı nastal koneˇcnˇe ˇcas na pˇredstaven´ı jednoduch´eho zapojen´ı naˇseho analyz´atoru. Jako prvn´ı najdete registrov´an´ı funkc´ı do z´asobn´ık˚ u ud´alost´ı pro moduly, kter´e budou ˇr´ıdit cel´ y bˇeh programu. Jak si m˚ uˇzete vˇsimnout, doch´az´ı i k registrov´an´ı naˇs´ı metody, psan´e v Pythonu, kter´a nastane pokud vznikne Ethernet packet. Po vzniku paketu dojde k rozhodnut´ı, zda se jedn´a o ARP paket a pouˇzije se metoda pro odesl´an´ı datov´eho objektu do dalˇs´ıho modulu. V demonstraˇcn´ım skriptu jsou pˇredstaveny vˇsechny potˇrebn´e 29
metody pro naprogramov´an´ı zapojen´ı a v n´asleduj´ıc´ı kapitole bude specifikov´ano veˇsker´e program´atorsk´e rozhran´ı.
5.3
Ovl´ ad´ an´ı a program´ atorsk´ e rozhran´ı
Jak bylo moˇzno vidˇet z pˇredchoz´ı uk´azky, skripty jsou ˇr´ızeny mnoˇzinou funkc´ı, kter´e pracuj´ı ˇ aˇri jistˇe neuniklo, ˇze j´adro programu je napsan´e s datov´ ymi objekty a z´asobn´ıky ud´alost´ı. Cten´ v jazyce C a pro jeho zpˇr´ıstupnˇen´ı je k dispozici mnoˇzina metod, pˇredstaven´ ych v tabulce. Metoda bind func(module, func, event)
bind module(module, dest module, event)
set info(attr name, attr type, value)
obj.attr name obj.attr name = value obj.set int(attr name, value) obj.set time(attr name, value) obj.set ipv4(attr name, value) obj.set ipv6(attr name, value) obj.set string(attr name, value) obj.set array(attr name, value) obj.set mac48(attr name, value) obj.set voidptr(attr name, value) obj.bind func(func, event) obj.bind module(module, event) obj.incref() obj.decref() mpcap(file) obj.send(module)
Popis metody registrov´an´ı ud´alosti, vznikl´e z modulu, prvn´ım argumentem je zkratka modulu (viz. tabulka 4.1), n´asleduje ukazatel na funkci, jeˇz m´a b´ yt zavol´ana a posledn´ım argumentem je jm´eno ud´alosti, na kterou se m´a funkce zavˇesit registrov´an´ı ud´alosti, vznikl´e z modulu, prvn´ım argumentem je zkratka modulu (viz. 4.1), n´asleduje zkratka c´ılov´eho modulu (dest module), jenˇz m´a b´ yt zavol´an a posledn´ım argumentem je jm´eno ud´alosti, na kterou se m´a funkce zavˇesit nastaven´ı informac´ı modul˚ u, jejich specifikace je v n´asleduj´ıc´ı tabulce, prvn´ım argumentem je jm´eno atributu, druh´ ym je typ atributu dle definice v kapitole 4.3 a posledn´ı je hodnota, kter´a odpov´ıd´a attr type a bude pˇredstavena z´ısk´an´ı atributu jm´enem attr name z objektu modifikace atributu attr name hodnotou value metoda pro vloˇzen´ı nov´e hodnoty typu INT metoda pro vloˇzen´ı nov´e hodnoty ˇcasu metoda pro vloˇzen´ı nov´e IPv4 adresy metoda pro vloˇzen´ı nov´e IPv6 adresy metoda pro vloˇzen´ı nov´eho ˇretˇezce metoda pro vloˇzen´ı nov´eho pole metoda pro vloˇzen´ı nov´e hodnoty MAC adresy metoda pro vloˇzen´ı nov´eho obecn´eho ukazatele registrov´an´ı funkce func, pokud nastane na datov´em objektu ud´alost event registrace modulu, jenˇz se pouˇzije pro ud´alost event pˇrid´an´ı reference na datov´ y objekt odebr´an´ı reference na datov´ y objekt zavol´an´ı hlavn´ıho modulu s jm´enem vstupn´ıho souboru jako argumentem odesl´an´ı datov´eho objektu na zpracov´an´ı modulem jm´enem module (napˇr. TCP nebo ARP) 30
Pro spojen´ı svˇet˚ u obou programovac´ıch jazyk˚ u je d˚ uleˇzit´e specifikovat korespondenci jednotliv´ ych typ˚ u atribut˚ u. Jejich vztah naleznete v n´asleduj´ıc´ı tabulce. U pˇriˇrazen´ı a metody setnew ukl´ad´ame do datov´eho objektu hodnotu ve formˇe Python objektu, kter´ y mus´ı odpov´ıdat typem atributu, kter´ y je v tabulce v prvn´ım sloupci. Typ atributu INT TIME IPV4 IPV6 STRING ARRAY MAC48 VOIDPTR
Odpov´ıdaj´ıc´ı typ v Pythonu Python Long dvouprvkov´e pole ve form´atu [sekundy, milisekundy] (oboj´ı typu Long) Python String ve standardn´ım form´atu a.b.c.d (RFC 791[13]) Python String ve standardn´ım form´atu dle RFC 2460[14] Python String Python ByteArray (novinka ve verzi Pythonu 2.6) Python String ve form´atu aa:bb:cc:dd:ee:ff Python Long, umoˇzn ˇuje zapouzdˇrit void ukazatel
Pro ilustraci pˇrid´av´am p´ar uk´azek uˇzit´ı pˇriˇrazen´ı hodnot a jejich z´ısk´av´an´ı: ısk´ an´ ı poˇ radov´ eho c ˇ´ ısla paketu typu Python Long obj.pcap frame ... z´ obj.smac = "00:0e:2e:aa:aa:aa"... nastaven´ ı nov´ e zdrojov´ e MAC adresy objektu zen´ ı nov´ eho atributu obj.set string("pcap popis", "DUPL") ... uloˇ obj.pcap popis = 123 ... chyba, s ˇpatn´ y typ objektu uspˇ eˇ sn´ e pˇ reps´ an´ ı atributu objektu obj.set int("pcap popis", 12345 ... ´ data = obj.pcap packet ... z´ ısk´ an´ ı dat paketu typu Python ByteArray Pro u ´plnost specifikace rozhran´ı je nutn´e jeˇstˇe dodat seznam atribut˚ u modul˚ u, kter´e lze nastavovat pomoc´ı jiˇz pˇredstaven´e metody set info. Pˇriloˇzen´a tabulka ukazuje vˇsechny moˇzn´e volby pro moduly. Atribut module pcap n module eth valid module eth invalid module arp invalid module arpview ouifile module arpview valid module ipv4 valid module ipv4 invalid module ipv4 checksum module ipv6 valid module ipv6 invalid module iptcp timeout module udp checksum module tcp valid module tcp invalid
Popis atributu Poˇcet paket˚ u proˇsl´ ych modulem PCAP Poˇcet spr´avnˇe zpracovan´ ych paket˚ u modulem Ethernet Poˇcet zahozen´ ych paket˚ u modulem Ethernet Poˇcet zahozen´ ych paket˚ u modulem ARP Cesta k souboru s OUI jm´eny v´ yrobc˚ u Poˇcet spr´avnˇe zpracovan´ ych paket˚ u modulem ARP view Poˇcet spr´avnˇe zpracovan´ ych paket˚ u modulem IPv4 Poˇcet zahozen´ ych paket˚ u modulem IPv4 Zapnut´ı kontroln´ıho souˇctu u IPv4 packet Poˇcet spr´avnˇe zpracovan´ ych paket˚ u modulem IPv6 Poˇcet zahozen´ ych paket˚ u modulem IPv6 ˇ Casov´ y limit pro vyprˇsen´ı IP datagramu a TCP spojen´ı Zapnut´ı kontroln´ıho souˇctu u UDP packet Poˇcet spr´avnˇe zpracovan´ ych paket˚ u modulem TCP Poˇcet zahozen´ ych paket˚ u modulem TCP
31
module tcp dupl Poˇcet duplicitn´ıch paket˚ u proˇsl´ ych modulem TCP module tcp checksum Zapnut´ı (1) ˇci vypnut´ı (0) kont. souˇctu paket˚ u v modulu TCP module tcpflow treshold Poˇcet paket˚ u v z´asobn´ıku spojen´ı, pˇri kter´em ruˇseno spojen´ı
5.4
Spouˇ stˇ en´ı programu
Uk´azkov´a zapojen´ı jsou pˇredstavena ve ˇctyˇrech pˇripraven´ ych skriptech, kaˇzd´ y se nach´az´ı v samostatn´em souboru. Pro spuˇstˇen´ı programu staˇc´ı spustit soubor s jedin´ ym argumentem, kter´ ym je jm´eno vstupn´ıho souboru. Pˇr´ıklad spuˇstˇen´ı programu: ./script http.py ../../nepal-data/www pages.pcap Dojde ke spuˇstˇen´ı skriptu script http.py, kter´ y rekonstruuje HTTP spojen´ı. Pˇrehled vˇsech pˇriloˇzen´ ych skript˚ u je zn´azornˇen v n´asleduj´ıc´ı tabulce. Jm´ eno souboru script http.py script graph.py script arp.py script dns.py
Popis skriptu HTTP modul, rekonstuuje a vizualizuje HTTP spojen´ı Grafov´ y modul, vytv´aˇr´ı grafy z´akladn´ıch informac´ı ARP/RARP modul, zobrazuje (R)ARP poˇzadavky a odpovˇedi DNS modul, naˇc´ıt´a a zobrazuje DNS dotazy a odpovˇedi
32
Uk´ azky z programu NEPAL 6.1 6.1.1
Modul pro HTTP Prvn´ı pˇ r´ıklad
Jako u ´vodn´ı uk´azku v˚ ubec jsem si vybral odchycen´a data, kter´a jsou pouˇzita pro zobrazen´ı tˇrech webov´ ych str´anek, v prvn´ım sloupci v´ ystupu m˚ uˇzete nal´ezt pravdˇepodobnˇe nejzaj´ımavˇejˇs´ı atribut, jedn´a se o dobu (v sekund´ach), za jakou byl poˇzadavek na webovou str´anku vyˇr´ızen. N´asleduje n´avratov´ y k´od webov´eho serveru, ve vˇetˇsinˇe pˇr´ıpad˚ u je navr´acen k´od 200, jenˇz znaˇc´ı u ´spˇeˇsn´ y poˇzadavek. K´odem 304 oznaˇcujeme stav, kdy jiˇz str´anka byla v minulosti pˇrenesena a na serveru se dokument nezmˇenil, v tomto pˇr´ıpadˇe nen´ı nutn´a data znovu pˇren´aˇset, a proto je i celkov´e d´elka pˇrenesen´eho tˇela nastavena na nulovou hodnotu. Za zm´ınku stoj´ı jeˇstˇe n´avratov´ y k´od 301, kter´ y nesignalizuje nic jin´eho neˇz fakt, ˇze str´anka byla trvale pˇrem´ıstˇena. Po atributu k´odu n´asleduj´ı zdrojov´a a c´ılov´a adresa a tak´e zdrojov´ y a c´ılov´ y port. Do posledn´ı trojice atribut˚ u spadaj´ı: URL dorazu, typ obsahu (content-type) a celkov´a velikost pˇren´aˇsen´ ych informac´ı v tˇele protokolu. RTT1
code saddr:sport
daddr:dport
URL, content-type, length
0.066457
200
192.168.2.104:48439
77.75.72.10:80
http://mapy.cz/ text/html, 6846 B
0.039601
304
192.168.2.104:58049
77.75.72.22:80
http://style.seznam.cz/... application/x-javascript, 0 B
0.047120
200
192.168.2.104:51744
77.75.73.27:80
http://api.mapy.cz/... application/x-javascript 1271 B
0.015909
200
192.168.2.104:48439
77.75.72.10:80
http://mapy.cz/firmpoi/... text/xml, 467 B
0.027949
200
192.168.2.104:48442
77.75.72.10:80
http://mapy.cz/basepoi/... text/xml, 701 B
0.035656
200
192.168.2.104:48443
77.75.72.10:80
http://mapy.cz/fotopoi/... text/xml, 2579 B
0.058675
200
192.168.2.104:48444
77.75.72.10:80
http://mapy.cz/trafficpoi/... text/xml, 6451 B
0.061435
200
192.168.2.104:48439
77.75.72.10:80
http://mapy.cz/weatherpoi/... text/xml, 6322 B
0.018402
200
192.168.2.104:37050
77.75.73.15:80
http://mapi.mapy.cz/... image/png, 304 B
0.128821
200
192.168.2.104:55866
195.113.27.37:80
http://www.mff.cuni.cz/ text/html, 6408 B
0.099579
200
192.168.2.104:55866
195.113.27.37:80
http://www.mff.cuni.cz/.../default.css text/css, 24969 B
0.056736
200
192.168.2.104:55869
195.113.27.37:80
http://www.mff.cuni.cz/.../slideshow.css text/css, 1086 B
0.036781
200
192.168.2.104:55867
195.113.27.37:80
http://www.mff.cuni.cz... application/x-javascript, 7516 B
0.018826
301
192.168.2.104:38338
212.24.146.202:80 http://prace.cz/ text/html, 228 B
0.022571
304
192.168.2.104:38339
212.24.146.202:80 http://www.prace.cz/css/print.css, 0 B
6.1.2
Druh´ y pˇ r´ıklad
Druh´ y pˇr´ıklad zapojen´ı modulu se t´ yk´a opˇet zobrazov´an´ı webov´ ych str´anek, protentokr´at jsem nasimuloval velmi pomalou linku na u ´rovni modemu (28kb/s). Str´anka obsahuje n´ahledy obr´azk˚ u a stejn´a odchycen´a data jsou uˇzita i v uk´azce modulu n´asleduj´ıc´ıho. U str´anek, kter´e jsou st´ale platn´e a uloˇzen´e v cache, je doba odezvy menˇs´ı nˇeˇz jedna sekunda, coˇz ovˇsem nem˚ uˇzeme tvrdit o pˇren´aˇsen´ ych obr´azc´ıch, jejichˇz pr˚ umˇern´a doba pˇrenesen´ı tvoˇr´ı dnes nepˇredstaviteln´ ych 1
Round-trip time – doba mezi odesl´ an´ım zpr´avy a jej´ım potvrzen´ım
33
30 sekund. I pˇres velikost v ˇra´du des´ıtek kilobajt˚ u je pˇrenos neskuteˇcnˇe pomal´ y a m˚ uˇzeme s povdˇekem kvitovat, ˇze se jedn´a o odezvy z dob d´avno minul´ ych. RTT
code saddr:sport
daddr:dport
URL, content-type, length
0.119196
200
192.168.2.104:34433
74.125.87.138:80
http://clients1.google.cz/... text/javascript, 94 B
0.086568
200
192.168.2.104:34433
74.125.87.138:80
http://clients1.google.cz/... text/javascript, 102 B
0.067575
200
192.168.2.104:34434
74.125.87.138:80
http://clients1.google.cz/... text/javascript, 115 B
0.023053
304
192.168.2.104:60469
82.208.6.4:80
http://www.bagr.cz/.../16.jpg , 0 B
0.023479
304
192.168.2.104:60468
82.208.6.4:80
http://www.bagr.cz/.../11.jpg , 0 B
0.128240
304
192.168.2.104:60472
82.208.6.4:80
http://www.bagr.cz/.../24.jpg , 0 B
0.267189
304
192.168.2.104:60473
82.208.6.4:80
http://www.bagr.cz/.../26.jpg , 0 B
0.896860
304
192.168.2.104:60479
82.208.6.4:80
http://www.bagr.cz/.../02.jpg , 0 B
0.974960
200
192.168.2.104:59078
195.122.208.167:80 http://www.devnull.cz/docs/index.html text/html, 4453 B
0.336974
301
192.168.2.104:59078
195.122.208.167:80 http://www.devnull.cz/greece text/html, 304 B
1.034904
200
192.168.2.104:59079
195.122.208.167:80 http://www.devnull.cz/greece/ text/html, 2848 B
6.748143
301
192.168.2.104:59085
195.122.208.167:80 http://www.devnull.cz/barcelona text/html, 307 B
4.804956
200
192.168.2.104:59088
195.122.208.167:80 http://www.devnull.cz/barcelona/ text/html, 12438 B
42.917346 200
192.168.2.104:59092
195.122.208.167:80 http://www.devnull.cz/.../P1000492.gif image/gif, 20966 B
44.352634 200
192.168.2.104:59091
195.122.208.167:80 http://www.devnull.cz/.../P1000491.gif image/gif, 17201 B
0.955253
204
192.168.2.104:46455
77.75.77.156:80
62.694313 200
192.168.2.104:59093
195.122.208.167:80 http://www.devnull.cz/.../P1000494.gif image/gif, 22074 B
23.477284 200
192.168.2.104:59095
195.122.208.167:80 http://www.devnull.cz/.../P1000503.gif image/gif, 19166 B
72.921036 200
192.168.2.104:59094
195.122.208.167:80 http://www.devnull.cz/.../P1000497.gif image/gif, 19922 B
6.1.3
http://d.seznam.cz/hit/... text/html, 0 B
Tˇ ret´ı pˇ r´ıklad
Pro posledn´ı pˇr´ıklad v podkapitole jsem zvolil modul, kter´ y ukazuje vyuˇzit´ı protokolu s´ıt’ov´e vrstvy ve verzi 6 a z´aznam komunikace vznikl po lok´aln´ı s´ıti. Adresy jsou dlouh´e co do v´ ypisu, proto jsem zvolil jejich menˇs´ı zkr´acen´ı pro u ´ˇcely prezentov´an´ı do bakal´aˇrsk´e pr´ace. RTT
code saddr:sport
daddr:dport
URL, content-type, length
0.018620
200
fd0:...:6193:36603
fd0:...:e39:80
http://[fd0:...:e39]/Sport.cz.html text/html, 42833 B
0.017950
200
fd0:...:6193:36606
fd0:...:e39:80
http://[fd0:...:e39]/.../userwebprint.css text/css, 716 B
0.018716
200
fd0:...:6193:36608
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../javascript text/plain, 1339 B
0.045221
200
fd0:...:6193:36603
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../sportall.js ..., 80087 B
0.024495
200
fd0:...:6193:36604
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../winplayer.js ..., 5401 B
0.028471
200
fd0:...:6193:36607
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../sectionhp.css text/css, 4722 B
0.012110
200
fd0:...:6193:36603
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../gemius.js ..., 6234 B
0.039178
200
fd0:...:6193:36605
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../userweb.css text/css, 16106 B
0.012024
200
fd0:...:6193:36607
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../impress text/plain, 43 B
0.022939
200
fd0:...:6193:36608
fd0:...:e39:80
http://[fd0:...:fe30:e39]/.../javascript text/plain, 7891 B
34
6.2
Grafov´ y modul
Grafov´ y modul n´am d´av´a z´akladn´ı charakteristiku dat, kter´a jsou v souboru odchycen´em ze s´ıtˇe. Modul disponuje histogramem velikosti r´amce, pˇren´aˇsen´eho po s´ıt’ov´e infrastruktuˇre, d´ale m´ame k dispozici kol´aˇcov´ y graf, kter´ y ud´av´a pomˇer uˇzit´ ych transportn´ıch protokol˚ u, a to jak co do poˇctu r´amc˚ u, tak i co do celkov´e velikosti dat t´ımto zp˚ usobem pˇrenesen´ ych. Jako posledn´ı p´ar grafov´ ych v´ ystup˚ u nab´ız´ı modul graf tok˚ u, tedy kolik paket˚ u bylo pˇreneseno za jednotku ˇcasu, resp. kolik bajt˚ u bylo pˇreneseno. N´asleduj´ıc´ı obr´azky demonstruj´ı pouˇzit´ı modulu s popisem dat, kter´a byla vloˇzena na vstupu.
Pˇr´ıklad 1: Flow graf velikosti pˇren´aˇsen´ ych dat
Pˇr´ıklad 1: Flow graf poˇctu pˇren´aˇsen´ ych dat
6.2.1
Prvn´ı pˇ r´ıklad
Jako prvn´ı sadu vstupn´ıch dat jsem si pˇripravil data, kter´e jsou odchycen´e pˇri navˇst´ıven´ı str´anek www.devnull.cz, navˇst´ıvil jsem str´anku s uk´azkov´ ymi fotografiemi a nav´ıc jsem nasimuloval omezen´ı rychlosti podobn´e modemu (28kbit/s) pomoc´ı Simple Queue u operaˇcn´ıho syst´emu MikroTik RouterOS[18]. Prvn´ı dvojice graf˚ u ukazuje pr˚ utok dat v ˇcase, na prvn´ım obr´azku je kr´asnˇe vidˇet pr˚ umˇern´a rychlost 3.5 kB/s, na kterou byla linka degradov´ana a druh´ y obr´azek fakticky koresponduje s prvn´ım, poˇc´ıt´a vˇsak jenom poˇcet paket˚ u, kter´e se v praxi velmi diametr´alnˇe liˇs´ı co do velikosti, poˇc´ınaje potvrzovac´ım paketem spojen´ı TCP a konˇce pˇren´aˇsen´ ymi 35
Pˇr´ıklad 1: Histogram velikosti pˇren´aˇsen´ ych r´amc˚ u
(a)
(b)
Pˇr´ıklad 1: Pod´ıl uˇzit´ ych transportn´ıch protokol˚ u daty v takov´em spojen´ı. N´asleduje klasick´ y histogram velikosti r´amc˚ u, jenˇz dokazuje zmiˇ novan´e rozloˇzen´ı velikosti paket˚ u a najdete ho na tˇret´ım obr´azku. Jako posledn´ı v sadˇe uk´azek graf˚ u najdete kol´aˇcov´ y graf, kter´ y reflektuje percentu´aln´ı vyuˇzit´ı transportn´ıch protokol˚ u, at’ uˇz co do poˇctu paket˚ u pˇrenesen´ ych nebo co do velikosti dat. Z anal´ yzy dat vypl´ yv´a, ˇze se vˇetˇsina pˇrenosu odehr´av´a po TCP, coˇz re´alnˇe odpov´ıd´a pˇrenosu webov´ ych str´anek. Po protokolu UDP doch´az´ı k pˇrenosu hlavnˇe DNS dotaz˚ u a jejich odpovˇed´ı a nakonec po ICMP doch´az´ı k pˇrenosu zpr´av hlavnˇe o nedostupn´em DNS serveru.
36
6.2.2
Druh´ y pˇ r´ıklad
Pro druh´ y pˇr´ıklad jsem si vybral DNS poˇzadavky na vˇsechny dom´eny nejvyˇsˇs´ı u ´rovnˇe. Pro demonstraci jsem pouˇzil program dig, jenˇz dok´aˇze formulovat poˇzadavek na dom´enu, vybral jsem volbu na dotaz na vˇsechny atributy dom´eny. Z´amˇernˇe jsem pouˇzil protokol UDP, kter´ y je ostatnˇe v´ ychoz´ım protokolem pro DNS poˇzadavky. Avˇsak v d˚ usledku poˇzadavku na vˇsechny atributy dom´eny doch´az´ı k tomu, ˇze po UDP lze dle specifikace pˇren´aˇset pouze DNS odpovˇedi do velikosti 512B. Pokud je pˇrekroˇcena velikosti, je v odpovˇedi zapnut´ y pˇr´ıznak truncated“ a ” poˇzadavek je opakov´an po spojovan´em kan´ale TCP.
Pˇr´ıklad 2: Histogram velikosti pˇren´aˇsen´ ych r´amc˚ u Na grafu s histogramem n´azornˇe vid´ıme, ˇze se n´am oproti prvn´ımu pˇr´ıkladu zmenˇsilo spektrum velikosti paket˚ u, velikost odpovˇed´ı pro UDP je limitov´ana velikost´ı 512B. Pro poˇzadavky, kter´e jsou vˇetˇs´ı doch´az´ı k navazov´an´ı TCP spojen´ı, avˇsak velikost DNS odpovˇed´ı nen´ı o mnoho vˇetˇs´ı, neˇz zmiˇ novan´ ych 512B. Na druhou stranu ale rozloˇzen´ı velikost´ı kop´ıruje minul´ y histogram, nejvˇetˇs´ı hustota je na poˇc´atku a konci spektra. Jako druh´ y graf v pˇr´ıkladu nalezneme vyuˇzit´ı transportn´ıch protokol˚ u, kter´ y jasnˇe d´av´a do souvislosti zastoupen´ı UDP a TCP protokol˚ u. Co do poˇctu paket˚ u, pˇrenesen´ ych po protokolu, m´a vˇetˇsinu protokol TCP, avˇsak jak v´ıme, protokol vytv´aˇr´ı spojen´ı, kter´e spolyk´a jistou reˇzii a na druh´em grafu je zastoupen´ı opaˇcn´e, coˇz odpov´ıd´a realitˇe, kdy se vˇetˇsina odpovˇed´ı vrac´ı ve formˇe UDP datagramu.
6.3
Modul ARP/RARP
Modul ARP/RARP netˇreba dlouze pˇredstavovat, slouˇz´ı pro pˇrevod hardwarov´ ych adres a ’ s´ıt ov´ ych (resp. naopak). Do modulu je zakomponov´an pˇrevod MAC adres na v´ yrobce hardwaru a m˚ uˇzete se o fungov´an´ı pˇresvˇedˇcit na n´asleduj´ıc´ıch dvou uk´azk´ach. Vstup pro prvn´ı uk´azku poch´az´ı z bezdr´atov´e s´ıtˇe, kde doˇslo na routeru k zak´az´an´ı s´ıt’ov´e karty a posl´eze k jej´ımu zapnut´ı. Klienti se proto znovu zaregistrovali a znovu je nutn´a registrace na u ´rovni MAC adres.
37
(a)
(b)
Pˇr´ıklad 2: Pod´ıl uˇzit´ ych transportn´ıch protokol˚ u
Druhou uk´azku jsou st´ahl na str´ank´ach programu Wireshark[19], jedn´a se o tzv. ARP bouˇrku, kterou vyvolal jeden z prvk˚ u v s´ıti. time
dev company
source paddr
target haddress
16:34:30.66 ARP REQ
type
00:60:b3:2a:47:5e Z-COM, INC.
source haddress
196.168.48.1
00:00:00:00:00:00
dev company target paddr 196.168.48.2
16:34:30.79 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
192.168.183.1
00:00:00:00:00:00
192.168.183.2
16:34:31.65 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
196.168.48.2
196.168.48.1
00:00:00:00:00:00
16:34:31.74 ARP RESP 00:4f:62:0c:54:e4
196.168.48.2
00:60:b3:2a:47:5e Z-COM, INC. 196.168.48.1
16:34:31.79 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
192.168.183.1
00:00:00:00:00:00
192.168.183.2
16:34:32.79 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
192.168.183.1
00:00:00:00:00:00
192.168.183.2
16:34:32.86 ARP RESP 00:0e:2e:34:33:8e Edimax Technol. 192.168.183.2
00:60:b3:2a:47:5e Z-COM, INC. 192.168.183.1
16:34:32.99 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
192.168.157.1
00:00:00:00:00:00
192.168.157.2
16:34:33.11 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
193.168.106.1
00:00:00:00:00:00
193.168.106.2
16:34:33.17 ARP RESP 00:12:0e:34:7c:4c AboCom
193.168.106.2
00:60:b3:2a:47:5e Z-COM, INC. 193.168.106.1
16:34:33.99 ARP REQ
00:60:b3:2a:47:5e Z-COM, INC.
192.168.157.1
00:00:00:00:00:00
192.168.157.2
16:34:34.96 ARP REQ
00:12:0e:34:7c:4c AboCom
193.168.106.2
00:00:00:00:00:00
193.168.106.1
16:34:34.96 ARP RESP 00:60:b3:2a:47:5e Z-COM, INC.
193.168.106.1
00:12:0e:34:7c:4c AboCom
193.168.106.2
16:34:34.99 ARP REQ
192.168.157.1
00:00:00:00:00:00
192.168.157.2
192.168.157.2
00:60:b3:2a:47:5e Z-COM, INC. 192.168.157.1
00:60:b3:2a:47:5e Z-COM, INC.
16:34:35.20 ARP RESP 00:4f:62:07:e4:df
38
time
source haddress
dev company
source paddr
target haddress
16:01:05.27 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.159
16:01:05.37 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.172.141
16:01:05.38 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.161
16:01:05.48 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
65.28.78.1
00:00:00:00:00:00
65.28.78.76
16:01:05.49 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.163
16:01:05.58 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.175.123
16:01:05.60 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.165
16:01:05.68 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.175.82
16:01:05.73 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
69.76.216.1
00:00:00:00:00:00
69.76.220.131
16:01:05.76 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.168
16:01:05.78 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
69.76.216.1
00:00:00:00:00:00
69.76.221.27
16:01:05.78 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.174.184
16:01:05.81 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.169
16:01:05.86 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.174.181
16:01:05.93 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
69.76.216.1
00:00:00:00:00:00
69.76.223.216
16:01:05.96 ARP REQ
00:07:0d:af:f4:54
Cisco Systems
24.166.172.1
00:00:00:00:00:00
24.166.173.172
6.4
type
company target paddr
Modul DNS
Z´avˇereˇcn´a uk´azka demonstruje pr´aci pˇri dotazovan´ı a odpov´ıd´an´ı server DNS, kter´ y m´a na starost pˇreklad ˇc´ıseln´ ych adres na dom´enov´a jm´ena, d´ale udrˇzuje informace o poˇstovn´ım serveru dom´eny, atd. U kaˇzd´e navr´acen´e odpovˇedi naleznete informaci o ˇcase, za jak´ y doˇslo k vyˇr´ızen´ı, d´ale protokol, pˇres kter´ y odpovˇed’ a identifikace dotazu probˇehla. N´asleduje vyˇc´ıslen´ı poˇctu ot´azek (resp. odpovˇed´ı) a na dalˇs´ıch ˇr´adc´ıch v´ ypisu jiˇz figuruj´ı ot´azky a odpovˇedi. U vˇetˇsiny zn´am´ ych typ˚ u odpovˇed´ı jsou zn´azornˇeny detailn´ı informace. Prvn´ı uk´azka poch´az´ı z programu Tcpdump a ukazuje bˇeˇzn´e dotazy, uskuteˇcn ˇovan´e pˇri brouzd´an´ı po webov´ ych str´ank´ach. DNS UDP query: 0.128958
41305
1
1
1
0
(- - RD RA)
Q: www.bonusweb.cz AAAA IN R: answer
www.bonusweb.cz CNAME IN 837 (bonusweb.cz)
R: authority
bonusweb.cz SOA IN 1800 (ns1.mobil.cz, hostmaster.mobil.cz, 2009011601, 1800, 900, 604800, 1800)
DNS UDP query: 0.091388
56210
1
2
2
0
(- - RD RA)
Q: www.hobby.cz A IN R: answer
www.hobby.cz CNAME IN 69290 (c2.idnes.cz)
R: answer
c2.idnes.cz A IN 878 (194.79.52.193)
R: authority
idnes.cz NS IN 2351 (ns2.mafra.cz)
R: authority
idnes.cz NS IN 2351 (ns.mafra.cz)
DNS UDP query: 0.091730
28638
1
1
1
0
(- - RD RA)
Q: www.hobby.cz AAAA IN R: answer
www.hobby.cz CNAME IN 69290 (c2.idnes.cz)
R: authority
idnes.cz SOA IN 1800 (ns.mafra.cz, hostmaster.mafra.cz, 2010041501, 1800, 900, 604800, 1800)
39
DNS UDP query: 0.089450 63402
1
2
2
0
(- - RD RA)
Q: www.mobil.cz A IN R: answer
www.mobil.cz CNAME IN 1250 (c2.idnes.cz)
R: answer
c2.idnes.cz A IN 877 (194.79.52.193)
R: authority
idnes.cz NS IN 2350 (ns.mafra.cz)
R: authority
idnes.cz NS IN 2350 (ns2.mafra.cz)
DNS UDP query: 0.089598
19899
1
1
1
0
(- - RD RA)
Q: www.mobil.cz AAAA IN R: answer
www.mobil.cz CNAME IN 1250 (c2.idnes.cz)
R: authority
idnes.cz SOA IN 1799 (ns.mafra.cz, hostmaster.mafra.cz, 2010041501, 1800, 900, 604800, 1800)
DNS UDP query: 0.057208
8179
1
2
2
0
(- - RD RA)
Q: www.technet.cz A IN R: answer
www.technet.cz CNAME IN 69289 (technet.cz)
R: answer
technet.cz A IN 69289 (194.79.52.193)
R: authority
technet.cz NS IN 4030 (ns.mafra.cz)
R: authority
technet.cz NS IN 4030 (ns2.mafra.cz)
DNS UDP query: 0.057378
12552
1
1
1
0
(- - RD RA)
Q: www.technet.cz AAAA IN R: answer
www.technet.cz CNAME IN 69289 (technet.cz)
R: authority
technet.cz SOA IN 10800 (ns.mafra.cz, hostmaster.mafra.cz, 2009072001, 28800, 7200, 604800, 86400)
DNS UDP query: 0.057656
62360
1
2
2
0
(- - RD RA)
Q: www.xman.cz A IN R: answer
www.xman.cz CNAME IN 69289 (c2.idnes.cz)
R: answer
c2.idnes.cz A IN 877 (194.79.52.193)
R: authority
idnes.cz NS IN 2350 (ns2.mafra.cz)
R: authority
idnes.cz NS IN 2350 (ns.mafra.cz)
DNS UDP query: 0.057778
41968
1
1
1
0
(- - RD RA)
Q: www.xman.cz AAAA IN R: answer
www.xman.cz CNAME IN 69289 (c2.idnes.cz)
R: authority
idnes.cz SOA IN 1799 (ns.mafra.cz, hostmaster.mafra.cz, 2010041501, 1800, 900, 604800, 1800)
DNS UDP query: 0.062469
19219
1
2
2
0
(- - RD RA)
Q: zdravi.idnes.cz A IN R: answer
zdravi.idnes.cz CNAME IN 1250 (c3.idnes.cz)
R: answer
c3.idnes.cz A IN 828 (194.79.52.194)
R: authority
idnes.cz NS IN 2350 (ns2.mafra.cz)
R: authority
idnes.cz NS IN 2350 (ns.mafra.cz)
Na z´avˇer uk´azek pˇrid´av´am pr´avˇe v´ ystup z programu dig, konkr´etnˇe se jedn´a o DNS poˇzadavek na dom´enu CZ, tedy na ˇceskou dom´enu nejvyˇsˇs´ı u ´rovnˇe. V´ ystup ukazuje napˇr. z´aznamy o pod40
pisech a jejich kl´ıˇc´ıch, d´ale list DNS server˚ u dom´eny a jejich IP adresy v obou verz´ıch. DNS TCP query: 0.054798
0
1
22
5
6
(- - RD RA)
Q: CZ A IN R: answer
CZ RRSIG IN 3600 (6 RSA/SHA-1 1 18000 64127 cz xjzl4fNQhkm6...uLnUQh4dd7mX7+Poz+QJLPQ=)
R: answer
cz SOA IN 3600 (a.ns.nic.cz, hostmaster.nic.cz, 1279157753, 900, 300, 604800, 900)
R: answer
cz RRSIG IN 3174 (2 RSA/SHA-1 1 18000 49499 cz dNOcoqK1Su22...gvoJxMRKxL6gV9m+TH0yZQo=)
R: answer
cz RRSIG IN 3174 (2 RSA/SHA-1 1 18000 64127 cz n0QNrrBa7sIa...DxljQchtoozQR4BOyc3UE58=)
R: answer
cz RRSIG IN 900 (47 RSA/SHA-1 1 900 49499 cz YKbIgqstlHYY...RbDLMZo6LhVcHYbdpt4zbvSQ=)
R: answer
cz RRSIG IN 900 (47 RSA/SHA-1 1 900 64127 cz WKgnUHTjaG1j...8LZ8t+DGacNndUhqXNrJsphY=)
R: answer
cz NSEC IN 900
R: answer
cz DNSKEY IN 3600
R: answer
cz DNSKEY IN 3600
R: answer
cz DNSKEY IN 3600
R: answer
cz DNSKEY IN 3600
R: answer
cz NS IN 2200 (b.ns.nic.cz)
R: answer
cz NS IN 2200 (d.ns.nic.cz)
R: answer
cz NS IN 2200 (c.ns.nic.cz)
R: answer
cz NS IN 2200 (a.ns.nic.cz)
R: answer
cz NS IN 2200 (f.ns.nic.cz)
R: answer
cz RRSIG IN 3600 (48 RSA/SHA-1 1 3600 7978 cz 044/071EUNbXYqr...Xb3LhMU2gz6qB9GjCA==)
R: answer
cz RRSIG IN 3600 (48 RSA/SHA-1 1 3600 49499 cz GMrIkQ9mB3M0eze...FiIcPlSzmEBQeOY9Xn8=)
R: answer
cz RRSIG IN 3600 (48 RSA/SHA-1 1 3600 64127 cz kMUY7VCdVazESur...PrtHrxrzWH2sbTc2VUk=)
R: answer
cz RRSIG IN 172799 (43 Unknown algorithm 1 172800 41248 YLEVIwUeei...pCfLkLGMjL1/E=)
R: answer
cz DS IN 172791 (9988 RSA/SHA-1 1 Ghjsr7hXl66hAxcD/Jpuc8kVACs=)
R: answer
cz DS IN 172791 (7978 RSA/SHA-1 1 RwkUzdqY0MwAFojLMsF6CckVAAI=)
R: authority
cz NS IN 2200 (d.ns.nic.cz)
R: authority
cz NS IN 2200 (b.ns.nic.cz)
R: authority
cz NS IN 2200 (a.ns.nic.cz)
R: authority
cz NS IN 2200 (f.ns.nic.cz)
R: authority
cz NS IN 2200 (c.ns.nic.cz)
R: additional a.ns.nic.cz A IN 148648 (194.0.12.1) R: additional a.ns.nic.cz AAAA IN 148648 (2001:678:f::1) R: additional b.ns.nic.cz A IN 148649 (194.0.13.1) R: additional b.ns.nic.cz AAAA IN 148649 (2001:678:10::1) R: additional d.ns.nic.cz A IN 148648 (193.29.206.1) R: additional d.ns.nic.cz AAAA IN 148648 (2001:678:1::1)
41
Vnitˇ rn´ı ˇ reˇ sen´ı analyz´ atoru 7.1
Soubory programu
Na u ´vod z´avˇereˇcn´e kapitole zaˇcnu s pˇredstaven´ım vˇsech zdrojov´ ych soubor˚ u, kter´e v programu naleznete. Jejich seznam spolu s vysvˇetlen´ım naleznete v n´asleduj´ıc´ı tabulce. Jm´ eno souboru config.h data obj.c (data obj.h) event calc (event cal.h) logger.c (logger.h) Makefile modules.c (modules.h) nepal.i utils.c (utils.h)
7.2
Popis definice konstant spolu s datov´ ymi typy implementace datov´eho objektu, zejm´ena velk´a mnoˇzina funkc´ı pro ukl´ad´an´ı hodnot z´asobn´ık ud´alosti, funkce pro registrace a vyˇr´ızen´ı ud´alost´ı logovac´ı syst´em, pˇrevzat´ y z knihovny LibUCW soubor s definic´ı kompilace a linkov´an´ı programu deklarace a implementace vˇsech modul˚ u, kter´e jsou pouˇzity v programu soubor pro definov´an´ı obalu pro program SWIG soubor s pomocn´ ymi funkcemi
Implementace datov´ eho objektu
Datov´ y objekt je univerz´aln´ı struktura pro ukl´ad´an´ı informac´ı o datagramech, paketech, spojen´ıch atd. Pro ukl´ad´an´ı dat do datov´eho objektu slouˇz´ı heˇsovac´ı tabulka z d´ılny knihovny LibUCW[5], kter´a zaheˇsuje atribut nˇejak´eho typu do tabulky. Atributy zpravidla rozdˇelujeme do dvou z´akladn´ıch kategori´ı: hodnotov´e a referenˇcn´ı. Hodnotov´e atributy sed´ı pˇr´ımo ve struktuˇre pro atribut a jsou jimi napˇr. INT, IPV4, DOBJ. Na druh´e stranˇe stoj´ı atributy o kter´ ych pˇredem nev´ıme, jak budou dlouh´e. Pˇr´ıkladem budiˇz STRING ˇci ARRAY, pro takov´e atributy je nutn´e alokovat m´ısto mimo strukturu a uloˇzit si jejich referenci. Pro veˇskerou alokaci pamˇeti pro datov´ y objekt je pouˇzit memory pool, pro uvolnˇen´ı pamˇeti objektu. Nen´ı nutn´e dealokovat po jednom vˇsechny atributy, ale staˇc´ı zavolat metodu poolu, jeˇz uvoln´ı cel´ y blok pamˇeti. Popsan´a technika urychluje pr´aci s pamˇet´ı a zapouzdˇruje data spoleˇcn´a pro jeden objekt. Kaˇzd´ y datov´ y objekt jasnˇe definuje, jak´e je tˇr´ıdy, a disponuje tak´e z´asobn´ıkem ud´alost´ı.
7.3
Z´ asobn´ık ud´ alost´ı
D´ıky z´asobn´ıku ud´alost´ı m˚ uˇzeme o programu hovoˇrit jako o ud´alostmi ˇr´ızen´em. Nedoch´az´ı k pˇr´ım´emu vol´an´ı metod, n´ ybrˇz nastane ud´alost, kter´a posl´eze zavol´a vˇsechny metody, kter´e jsou v z´asobn´ıku ud´alost´ı zaregistrovan´e. O z´asobn´ıku mluv´ıme z toho d˚ uvodu, ˇze pokud nastane ud´alost, nen´ı nikam uloˇzena do kalend´aˇre pro vyˇr´ızen´ı, ale jsou sekvenˇcnˇe proch´azeny ud´alosti 42
a zavol´any jejich metody pro obslouˇzen´ı. Hlavn´ı smyˇcka je prov´adˇena v modulu PCAP, jenˇz naˇc´ıt´a data ze souboru a vol´a pro kaˇzd´ y paket obsluhu ud´alosti packet. Z´asobn´ıkem disponuj´ı t´emˇeˇr vˇsechny naprogramovan´e moduly a i nˇekter´e typy datov´ ych objekt˚ u, kter´e zpravidla pˇredstavuj´ı nˇejak´ y IP datagram, spojen´ı, atd. Z hlediska vlastn´ı implementace je nejprve nutn´e registrovat jm´eno ud´alosti do heˇsovac´ı tabulky. Pro registrov´an´ı metody do z´asobn´ıku je nutn´e uloˇzit identifik´ator ud´alosti do heˇsovac´ı tabulky. Po vypuknut´ı ud´alosti nejprve naleznu ud´alost v z´asobn´ıku a zaˇcnu sekvenˇcnˇe proch´azet vˇsechny zaregistrovan´e funkce. Vol´an´ı funkc´ı je vytvoˇreno pomoc´ı Python C API, kde jako jedin´ y argument vypln´ım datov´ y objekt a obalen´ y objekt v Pythonu posl´eze m˚ uˇze vstoupit jednak do funkce v jazyce C, tak do funkce v Pythonu. ˇ Reˇsen´ı je celkem jednoduch´e a pro spr´avn´e vol´an´ı funkc´ı si vystaˇc´ıme s klasick´ ym z´asobn´ıkem vol´an´ı, nen´ı nutn´e realizovat centr´aln´ı kalend´aˇr nebo jinou, podobnˇe orientovanou, datovou strukturu.
7.4
Programov´ an´ı modul˚ u
Pˇri programov´an´ı modul˚ u musel b´ yt br´at zˇretel na nˇekolik vˇec´ı. Kaˇzd´ y modul dost´av´a na sv´em vstupu datov´ y objekt a je nutn´e filtrovat jejich typ. Pro tyto u ´ˇcely slouˇz´ı datov´e tˇr´ıdy a jejich otestov´an´ı je velmi rychl´e. Dalˇs´ı nepˇr´ıjemnost´ı se st´av´a skuteˇcnost, ˇze paket nebyl odchycen ze s´ıtˇe v cel´e sv´e velikosti. Proto je bˇehem naˇc´ıt´an´ı informac´ı vˇzdy nutn´e kontrolovat velikost dat a cel´ y program je kontrolami protk´an. Pro programov´an´ı komplikovanˇejˇs´ıch modul˚ u si nelze vystaˇcit pouze s datov´ ymi objekty a je nutn´e vytv´aˇret i dalˇs´ı pomocn´e datov´e struktury. Jako velmi ˇsikovn´ y se uk´azat void ukazatel, d´ıky nˇemuˇz nen´ı sloˇzit´e uloˇzit do datov´eho objektu ukazatel na nˇejakou pomocnou strukturu a pˇri resetov´an´ı ˇci vyprˇsen´ı ˇcasov´eho limitu se nejen smaˇze spojen´ı, ale dojde i k uvolnˇen´ı pamˇeti, takto vznikl´ ych struktur.
7.5
Pˇ redstava fungov´ an´ı modulu TCP
Modul TCP povaˇzuji za nejsloˇzitˇejˇs´ı v r´amci programu a proto bych se r´ad zm´ınil o jeho fungov´an´ı. Jako vstup se naˇctou pakety s´ıt’ov´e vrstvy, n´aslednˇe dojde k dek´odov´an´ı atribut˚ u hlaviˇcky a nalezen´ı spojen´ı, do nˇehoˇz paket zapad´a. Pro ukl´ad´an´ı spojen´ı je pouˇzita heˇsovac´ı tabulka, kde za pomoci adres a port˚ u vznik´a jednoznaˇcn´a identifikace spojen´ı. Prvn´ım omezen´ım, kter´e je nutn´e br´at na zˇretel, je potvrzov´an´ı: data proˇsl´a po s´ıt’ov´e infrastruktuˇre jsou pˇred´av´ana aplikaˇcn´ı vrstvˇe aˇz v okamˇziku, kdy doraz´ı potvrzen´ı od druh´e strany. Proto je nutn´e vstupn´ı data ukl´adat do z´asobn´ık˚ u a uvolˇ novat je aˇz po doruˇcen´ı potvrzen´ı. Za druh´ y probl´em povaˇzuji ztr´atu pˇrenesen´ ych paket˚ u bˇehem odchyt´av´an´ı, kter´e je povˇetˇsinou zp˚ usobeno t´ım, ˇze pakety pˇrich´az´ı ve ˇspiˇck´ach rychleji, neˇz je disk staˇc´ı ukl´adat. Jak jiˇz bylo zm´ınˇeno, modul vytv´aˇr´ı datov´ y objekt TCP flow, kter´e disponuje vlastn´ım kalend´aˇrem ud´alost´ı, uchov´av´a si stav spojen´ı a na obou smˇerech kan´alu drˇz´ı data proˇsl´a po s´ıti, kter´a jeˇstˇe nejsou potvrzena. Pro ilustraci fungov´an´ı slouˇz´ı pˇriloˇzen´ y obr´azek. Na horn´ı ˇca´sti obr´azku m˚ uˇzeme nahl´ednout dva moduly, kter´e jiˇz byly uk´az´any v sch´ematu zapojen´ı programu. Z modulu TCP flow vid´ıme, ˇze nastala ud´alost conn create, jeˇz symbolizuje vznik nov´eho spojen´ı. Na obr´azku jsou zn´azornˇeny jak vlastn´ı z´asobn´ık ud´alost´ı, tak z´asobn´ıky paketu, kter´e ˇcekaj´ı na potvrzen´ı. Kromˇe jeˇstˇe nepotvrzen´ ych paket˚ u m˚ uˇzeme vidˇet i TCP data, jenˇz vznikaj´ı pˇri ud´alosti data. Data v sobˇe nesou pouze z´akladn´ı informace a na 43
zm´ınˇenou ud´alost se typicky navˇeˇsuj´ı dalˇs´ı moduly (napˇr. Modul HTTP), data zpracov´avaj´ı a tak´e uvolˇ nuj´ı (uvolnˇen´a data symbolizuje proˇskrtl´ y obd´eln´ık). Z hlediska koneˇcn´eho mnoˇzstv´ı pamˇeti, jenˇz m´ame k dispozici nen´ı moˇzn´e vˇse drˇzet v pamˇeti a syst´em datov´ ych objekt˚ u n´am slouˇz´ı jako dobr´ y mechanizmus. Jako obrana proti velk´emu mnoˇzstv´ı alokovan´e pamˇeti jsou implementov´any dva mechanizmy pro uvolˇ nov´an´ı uˇzit´e pamˇeti. Prvn´ım mechanizmem je limit na horn´ı poˇcet paket˚ u v z´asobn´ıku spojen´ı, limit lze v modulu TCP flow nastavit a pˇri dosaˇzen´ı ym mehranice je cel´e spojen´ı prohl´aˇseno za neplatn´e a nastane ud´alost conn timeout. Druh´ chanizmem je kontrola posledn´ıho doˇsl´eho paketu do spojen´ı, kdy se kontroluj´ı neaktivn´ı spojen´ı a jsou n´aslednˇe prohlaˇsov´ana za neplatn´a (nastane ud´alost conn timeout a dojde k ukonˇcen´ı spojen´ı).
44
Z´ avˇ er 8.1
Zhodnocen´ı pr´ ace
Ve vytvoˇren´em programu nen´ı mnoˇzina pokryt´ ych protokol˚ u modelu TCP/IP kompletnˇe pokryta a ani b´ yt nem˚ uˇze. Nen´ı v moˇznostech bakal´aˇrsk´e pr´ace zahrnou stovky dneˇsn´ıch protokol˚ u do jednoho programu. Za mnohem d˚ uleˇzitˇejˇs´ı povaˇzuji fakt, ˇze funkˇcn´ı program je dostateˇcnˇe obecn´ y a otevˇren´ y, a proto pˇri pˇrid´av´an´ı nov´eho protokolu nenaraz´ı autor na ˇz´adn´e pˇrek´aˇzky. Pˇri vytv´aˇren´ı specifikace programu byla dlouho otevˇren´a ot´azka propojen´ı j´adra programu, napsan´em v jazyce C, se skriptovac´ım jazykem. Nakonec jsem zvolil jazyk Python, se kter´ ym jsem doposud nemˇel ˇza´dnou zkuˇsenost. Python se osvˇedˇcil po vˇsech str´ank´ach: poskytl prostˇredky pro tvorbu skript˚ u, lze j´ım lehce obalit k´od v jazyce C a doplnit jej o metody tˇr´ıd a nakonec byl jazyk tak´e zvolen pro jeho nez´avislost na operaˇcn´ım syst´emu. Jak zkuˇsenosti s programem ukazuj´ı, rychlost programu na stroji s procesorem Intel Core2 Duo 2GHz, s pevn´ ym diskem s 5 400 ot´aˇckami za minutu dosahuje pˇri spuˇstˇen´ı skriptu HTTP rychlost asi 13 MB/s, coˇz odpov´ıd´a 100 Mb/s. Pˇri t´eto rychlosti zpracov´an´ı dat je moˇzn´e program nasadit v re´aln´em ˇcase na poloduplexn´ı 100Base-TX linku. Jak testy hlavnˇe jednoduˇsˇs´ıch skript˚ u uk´azaly, nejvˇetˇs´ı hardwarovou slabinou se st´av´a pevn´ y disk, kter´ y v pˇr´ıpadˇe notebooku pracuje t´emˇeˇr na pln´ y v´ ykon. V ran´e f´azi n´avrhu jsem pˇrem´ yˇslel nad myˇslenkou v´ıcevl´aknov´e aplikace, ale protoˇze se naˇs´ım nejvˇetˇs´ım omezen´ım st´av´a pr´avˇe pevn´ y disk, byl by pˇr´ınos v´ıce v´ ypoˇcetn´ıch jader zanedbateln´ y a vznikala by nemal´a reˇzie spojen´a se synchronizac´ı. Co se vlastn´ıho programov´an´ı t´ yˇce, tak se od poˇca´tku poˇc´ıtalo s programovac´ım jazykem C. D´ıky knihovnˇe LibUCW se ale programov´an´ı stalo pohodlnˇejˇs´ı, pro alokaci pamˇeti se osvˇedˇcil mempool a cel´ y program je protk´an heˇsovac´ımi tabulkami, poˇc´ınaje tˇemi jednoduch´ ymi s atomick´ ym typem a konˇce sloˇzitˇejˇs´ımi s v´ıcesloˇzkov´ ym kl´ıˇcem. Trendem dneˇsn´ı doby se st´av´a programov´an´ı ve st´ale vyˇsˇs´ıch programovac´ıch jazyc´ıch za pomoci siln´e knihovny funkc´ı. Mus´ım ale pˇriznat, ˇze pr´ace v jazyce C m´a st´ale sv´e kouzlo a jiˇz jednou zm´ınˇen´a knihovna dod´a program´atorovi potˇrebn´ y komfort pˇri pr´aci.
8.2
Moˇ znosti budouc´ıho v´ yvoje
Program um´ı pracovat zhruba s jednou des´ıtkou protokol˚ u rodiny TCP/IP, coˇz v porovn´an´ı s celkov´ ym poˇctem protokol˚ u pˇredstavuje pouze malou podmnoˇzinu. Jistˇe by bylo velmi zaj´ımav´e zpracov´an´ı protokol˚ u jako jsou napˇr´ıklad: SIP (Session Initiation Protocol), SMTP (Simple Mail Transfer Protocol) ˇci FTP (File Transfer Protocol). Jako dalˇs´ı vylepˇsen´ı vid´ım moˇznost napˇr. v on-line analyz´atoru, kdy by vznikla webov´a str´anka s mnoˇzinou podporovan´ ych anal´ yz. Na uˇzivateli by pot´e bylo si vybrat anal´ yzy, kter´e chce prov´est a program by mu n´aslednˇe odeslal jejich v´ ysledky. Podobnˇe by mohl b´ yt analyz´ator nasazen za bˇehu s´ıtˇe v reˇzimu on-line, kdy by se data neukl´adala do souboru, ale pˇr´ımo by se zas´ılala analyz´atoru. Nasazen´ı za bˇehu s´ıtˇe by jistˇe vyˇzadovalo drobn´e zmˇeny, ale v´ ysledky by mohly b´ yt zaj´ımav´e a st´aly by za to.
45
Literatura [1] W. Richard Stevens: TCP/IP Illustrated, Volume 1, The Protocols 1. vydan´ı, Reading: Addison-Wesley, 1994, ISBN 0-201-63346-9 [2] Lamping U. a kol. (2010): Wireshark User’s Guide [online] http://www.wireshark.org/docs/wsug_html/ (5.6.2010) [3] Peterka J. (2010): E-archiv, pˇredn´aˇska Rodina protokol˚ u TCP/IP [online] http://www.earchiv.cz/l221/index.php3 (6.6.2010) [4] IEEE OUI list [online] http://standards.ieee.org/regauth/oui/oui.txt (29.6.2010) [5] Mareˇs M. a kol. (2010): Knihovna UCW [online] http://www.ucw.cz/libucw/ (30.6.2010) [6] Python Software Foundation: Programovac´ı jazyk Python [online] http://python.org/ (18.7.2010) [7] Software Freedom Conservancy: SWIG, Simplified Wrapper and Interface Generator [online] http://swig.org/ (18.7.2010) [8] Hunter J. a kol. (2010): Matplotlib, vykreslovac´ı matematick´a knihovna pro Python [online] http://matplotlib.sourceforge.net/ (18.7.2010) [9] Carstens T.: PCAP, Packet capture library [online] http://tcpdump.org/ (18.7.2010) [10] GCC team: GCC, The GNU Compiler Collection [online] http://gcc.gnu.org/ (20.7.2010) [11] Plummer D.C. (1982): Request For Comments: 826, An Ethernet Address Resolution Protocol [online] http://www.ietf.org/rfc/rfc826.txt (26.7.2010) [12] Finlayson a kol. (1984): Request For Comments: 903, A Reverse Address Resolution Protocol [online] http://www.ietf.org/rfc/rfc903.txt (26.7.2010) [13] Information Sciences Institute (1981): Request For Comments: 791, Internet Protocol [online] http://www.ietf.org/rfc/rfc791.txt (26.7.2010) [14] Deering S. a kol. (1998): Request For Comments: 2460, Internet Protocol, Version 6 (IPv6) [online] http://www.ietf.org/rfc/rfc2460.txt (26.7.2010) [15] Postel J. a kol. (1980): Request For Comments: 768, User Datagram Protocol [online] http://www.ietf.org/rfc/rfc768.txt (26.7.2010) [16] Information Sciences Institute (1981): Request For Comments: 793, Transmission Control Protocol [online] http://www.ietf.org/rfc/rfc793.txt (26.7.2010) 46
[17] Feeling R. a kol. (1999): Request For Comments: 2616, Hypertext Transfer Protocol [online] http://www.ietf.org/rfc/rfc2616.txt (26.7.2010) [18] SIA ”Mikrotikls”(2010): RouterOS, operating system of RouterBOARD [online] http://www.mikrotik.com/ (26.7.2010) [19] Wireshark sample files, arp-storm.pcap [online] http://wiki.wireshark.org/SampleCaptures (26.7.2010)
47