ELEKTROTEHNIČKI FAKULTET SARAJEVO UNIVERZITET U SARAJEVU Odsjek za telekomunikacije BSc studij, III godina akademsska godina: 2013/2014. Predmet: Upravljanje računarskim mrežama Primjena Wireshark alata u dijagnostici problema LAN mreža Mentor: R. prof. dr Narcis Behlilović, dipl. ing. el. Ko-mentor: Doc. dr Enisa Brka, dipl. ing. el. Kandidat: Ena Vuk Sarajevo, septembar 2014. godine
Sadržaj 1 Uvod... 4 2 Historija i razvoj alata Wireshark... 6 2.1 Način rada i mogućnosti alata Wireshark... 6 2.2 Wireshark u funkciji sigurnosti... 8 2.3 Primjeri korištenja alata Wireshark... 9 2.3.1 Hvatanje mrežnih paketa... 9 2.3.2 Uvoz, izvoz i ispis podataka... 11 2.3.3 Rad s uhvaćenim paketima... 14 2.4 Pregled sigurnosnih nedostataka Wiresharka... 16 3 Gdje se snimaju podaci?... 17 3.1 Upotreba HUB-a... 17 3.2 Port mirroring odnosno VACL (VLAN-BASED ACLS)... 18 3.3 Bridge mode... 18 3.4 ARP SPOOF... 19 4 Praktični dio... 20 4.1 Analiza TCP protokola... 20 4.1.1 Struktura TCP paketa... 20 4.1.2 Procjena vremena povratnog puta i time-outa... 22 4.1.3 Upravljanje TCP konekcijom... 23 4.2 Analiza UDP protokola... 25 4.2.1 Struktura UDP paketa... 25 4.2.2 Zašto koristiti UDP umjesto TCP-a?... 26 4.3 Analiza DNS protokola... 28 4.3.1 Struktura DNS poruke... 29 4.3.2 Način rada DNS-a... 30 4.3.3 Raspodjeljena, hijerarhijska baza podataka... 31 4.3.4 DNS keširanje... 32 5 Dodaci... 33 5.1 Popis slika... 33 6 Literatura... 34 2
3
1 Uvod Programski alat Wireshark koristi se za analizu mrežnih paketa prikupljajući podatke koji u paketima putuju kroz mrežu i prikazuje ih na najdetaljniji mogući način, te sortira u klase prema zadatom kriteriju. Na ovaj način moguće je detaljno pratiti stanje mreže, saobraćaj koji se generiše kroz sve mrežne slojeve, a kojih korisnici najčešće nisu ni svjesni, obzirom da im se sve prezentira putem aplikacijskog sloja. U prošlosti, alati slični Wiresharku su bili skupi i najčešće komercijalni. Dolaskom alata Wireshark na tržište situacija se promijenila. Wireshark je danas vjerovatno najbolji besplatni i open source alat dostupan na tržištu. Neki od primjera korištenja ovog alata su: otklanjanje problema na mreži analiza sigurnosnih problema razvoj i implementacija novih protokola te učenje o mrežnim protokolima. Wireshark je tzv. cross-platform mrežni alat, što znači da može raditi na različitim platformama. Osim što radi na operativnom sistemu Microsoft Windows, podržan je i na različitim Unix operativnim sistemima među kojima su Linux, Mac OS X, BSD i Solaris. Također, postoji i verzija bez grafičkog interfejsa (eng. Graphical User Interface) nazvana Tshark. Wireshark i Tshark su besplatni alati po uvjetima GNU General Public licence (najraširenija licenca za slobodan softver). U slučaju pojave problema u funkcionisanju mrežnog sistema, gubitka paketa, nemogućnosti uspostavljanja veze ili gubitka očekivanog nivoa kvaliteta, najčešće je uzrok moguće pronaći analizom prividno prikrivenog saobraćaja u nižim slojevima mreže. U sklopu ovog završnog rada, Wireshark će biti korišten za dijagnosticiranje kvarova u sistemu, kao i za analizu regularnog rada protokola TCP/IP steka. Sadrži veliki broj filtera koji definišu kriterije pretraživanja, te podržava preko 1100 protokola. Analizirane pakete je moguće razložiti po slojevima, što olakšava otkrivanje, analizu i rješavanje mrežnih anomalija. Izuzev Wiresharka, najpoznatiji i najrašireniji među mrežnim analizatorima su dsniff i tcpdump. Tcpdump je alat za analizu mreže koji se koristi za praćenje problema na mreži i nadgledanje aktivnosti. Nema grafički interface, nego samo konzolni, pa je potrebno upisati naredbe za korištenje. Wireshark, s druge strane, ima i grafički interface te omogućava upravljanje pomoću upisa naredbi. Tcpdump je besplatni alat licenciran BSD licencom, dok je Wireshark licenciran već spomenutom GNU GPL licencom. I Wireshark i tcpdump podržavaju većinu operativnih sistema (Microsoft Windows, Mac OS X, Linux, Solaris itd). Posebna vrsta alata tcpdump za operativni sistem Microsoft Windows zove se WinDump. Dsniff je alat po svojstvima vrlo sličan tcpdumpu. Informacije koje dsniff može pročitati su korisnička imena, lozinke, posjećene internet stranice, sadržaj e-pošte i drugi. Nema grafički interface, licenciran je od strane BSC Licence i primarno napravljen za Unix operativne sistema. 4
Wireshark alat podržava veliki broj protokola pa ja tako moguće i vrlo jednostavno prenositi pakete uhvaćene od strane tcpdump-a i dsniff-a u Wiresharku, kao i obrnuto. Svakako, postoje protokoli koje Wireshark nije u mogućnosti prepoznati, u tom slučaju se koriste drugi alati za analizu saobraćaja. Ostali alati kao što su Snort, OSSIM i IDS/IPS imaju mogućnost slanja upozorenja o problemu ili napadu koji se dogodio u mreži. Međutim, kada je u pitanju dublja analiza saobraćaja, ovakvim alatima nedostaje fleksibilnosti, kakve nudi Wireshark. Prateći TCP/IP slojeve, bit će analizirani tipični protokoli svakog sloja, a zatim u laboratorijskim uslovima namjerno izazvani kvarovi u funkcionisanju istih, u svrhu donošenja zaključaka o uzrocima kvara, te predlaganja mjera za otklanjanje nedostataka. 5
2 Historija i razvoj alata Wireshark 1997. godine Gerald Combs je zbog potrebe za alatom za praćenje saobraćaja na mreži i želje da nauči više o upravljanju i administriranju mreže počeo pisati program zvan Ethereal, koji je prethodnik današnjeg Wiresharka. Vremenom se Etheral nadogradio, ispravljene su postojeće greške i polako se počeo nazirati uspjeh projekta. 1998. godine Guy Harris iz kompanije Network Appliance pokušao je pronaći bolji alat za administraciju mreža od do tad korištenog alata tcpview, te je počeo razvijati i poboljšavati Ethereal. Krajem 1998. godine i Richard Sharpe, stručnjak s područja TCP/IP protokola, uočio je potencijal ovog alata i počeo pisati unapređenja za protokole koji su mu bili potrebni. Do danas su mnogi doprinijeli razvoju ovog alata. Većina tih ljudi je započela s novim protokolima koji su im bili potrebni, a koje Etheral, ili kasnije Wireshark, nisu još podržavali. To je razlog zašto Wireshark danas podržava veliki broj protokola. Nakon 10 godina razvoja, 2008. godine Wireshark se pojavio u verziji 1.0. Ta verzija je bila prva potpuna koja je izašla na tržište, ali s minimalnim performansama. Mogućnosti alata Wireshark su različite, a najbitnije su: hvatanje podatkovnih paketa s mrežnog intrefejsa prikazivanje paketa s vrlo detaljnim informacijama o mrežnom protokolu otvaranje i spremanje paketa uvoz i izvoz podataka u druge slične programe, pretraga i filtriranje paketa po različitim kriterijima i kreiranje različitih statistika Gotovo svi dijelovi Wiresharka su implementirani u programskom jeziku C. 2.1 Način rada i mogućnosti alata Wireshark Wireshark je softverski alat koji razumije strukturu različitih mrežnih protokola. Iz tog razloga sposoban je prikazati podatke iz paketa specifičnih za različite protokole. Wireshark koristi biblioteku koda pcap (eng. Packet capture) za hvatanje paketa, što znači da može hvatati samo pakete s mreža koje pcap podržava (Ethernet, IEEE 802.11,...). Pcap je biblioteka koja raznim programima pruža programski interfejs (eng. API Application Programming Interface) za pribavljanje paketa s mrežnih interfejsa na operativnim sistemima Windows i Linux/Unix. Podaci se mogu uhvatiti direktno s aktivne mrežne veze ili se mogu učitati iz datoteke u kojoj su pohranjeni već uhvaćeni paketi. Uhvaćeni podaci se mogu prikazati preko grafičkog korisničkog interfejsa ili preko terminala (komandne linije) kod korištenja Tsharka. Podaci se mogu programski uređivati preko komandne linije ili pomoću potprograma editcap. Wireshark sadrži filter za prikaz podataka pomoću kojeg se može prikazati i samo dio podataka, ovisno o uvjetu filtriranja. Budući da je Wireshark open source alat, relativno je jednostavno impelementirati programske dodatke za nove prokotole. 6
U nastavku će biti opisana najinteresantnija područja koja se pojavljuju u Wiresharku kada počne snimanje saobraćaja. Zona 1: To je područje gdje su definisani filteri i gdje je moguće definisati pretraživanje paterna da bi bilo moguće vidjeti pakete ili protokole koji su od interesa. Zona 2: Predstavlja listu svih snimljenih paketa. Ukoliko korisnik zna ispravno interpretirati podatke u ovoj zoni (tip protokola, redni broj, flag, vrijeme, portove itd) moguće je pod određenim uvjetima prepoznati problem bez detaljnije analize. Zona 3: Omogućava klasificiranje po slojevima, svakog zaglavlja paketa koji je označen u zoni 2 i moguće je kretati se kroz svako polje tog paketa. Zona 4: Predstavlja zapis paketa u hexadecimalom formatu u stanju u kojem je snimljen na mrežnoj kartici. Slika 1: Najznačajnije zone u Wiresharku prilikom snimanja saobraćaja Podatke unutar mrežnih paketa Wireshark može očitati s više različitih vrsta mreža, a najpoznatije koje podržava su: Ethernet najučestalija LAN (eng. Local Area Network) tehnologija koja se s 10 gigabitnom izvedbom koristi i kao WAN (eng. Wide Area Network) tehnologija. Ethernet šalje pakete od pošiljaoca prema jednom (Unicast) ili više (Multicast/Broadcast) prijemnika. IEEE 802.11 skup standarda za bežičnu računarsku komunikaciju (WLAN, eng. Wireless Local Area Network) na frekvencijskim pojasevima od 2.4, 3.6 i 5 GHz. Razvijen je od strane IEEE LAN/MAN Standards Committee (IEEE 802). PPP (eng. Point-to-Point Protocol) protokol koji se koristi za direktno povezivanje dva čvora računarske mreže. Omogućava povezivanje računara serijskim, telefonskim ili optičkim kablom, pomoću mobilnih telefona te posebno oblikovanom radio ili satelitskom vezom. Loop back virtuelni mrežni interface softverski implementiran. 7
Format datoteke za spremanje paketa uhvaćenih na mreži je standardni libpcap format podržan od strane mrežnih biblioteka Libpcap i WinPcap. To znači da Wireshark može pročitati i podatke iz aplikacija kao što su tcpdump i CA NetMaster koje također koriste isti format. Osim toga, podatke uhvaćene Wiresharkom mogu pročitati i druge aplikacije koje koriste Libpcap i WinPcap za čitanje uhvaćenih podataka. Tako Wireshark može čitati i podatke uhvaćene mrežnim analizatorima kao što su Snoop, Network, General's Sniffer te Microsoft Network Monitor. Neke od raširenijih porodica protokola koji se koriste u komunikacijskim mrežama, a koje Wireshark podržava su: Internet protokoli - TCP/IP skup protokola koji uključuje ARP, IP, TCP itd. Protokoli mobilne telefonije skup protokola sadržanih u GSM- u (WCDMA, CDMA 2000,...) VOIP protokoli skup protokola za prenos zvuka mrežom (SIP, H323,...) WAP protokoli skup WAP protokola za omogućavanje servisa na bežičnim komunikacijskim mrežama (WTP, WSP,...) Više o vrstama protokola koje Wireshark podržava moguće je naći na stranici alata. 1 2.2 Wireshark u funkciji sigurnosti Kao i nekim drugim alatima za analizu mreže, tako je i Wiresharkom moguće detektovati neke sigurnosne propuste i nepravilnosti. Sigurnosni propusti se očituju u neovlaštenim, nedopuštenim, odnosno malicioznim radnjama koje mogu naštetiti mreži i njenim korisnicima. Wireshark sprječava sigurnosne propuste analizom mogućih problema i radnji koje mogu stvoriti probleme. Zadaci analize unutar Wireshark alata dijele se na preventivne i reaktivne. Preventivni zadaci (metode) uključuju baselining mrežne metode (najprimitivnija metoda za analizu mrežnih performansi) za očitavanje trenutnog statusa mreže i aplikacije. Preventivne metode se također mogu koristitit za uočavanje problema na mreži prije nego što ih korisnik mreže osjeti. Kao primjer toga, preventivne metode omogućavaju uočavanje gubitka paketa prije nego taj gubitak počne uticati na mrežnu komunikaciju i time se izbjegava problem prije nego što je uočen od strane korisnika. Reaktivne metode analize koriste se nakon što su greške u radu mreže uočene. Npr, ukoliko postoji problem s nekim poslužiteljem, Wireshark će problem prijaviti tek nakon što pokuša uhvatiti pakete s mreže. Nažalost, u Wiresharku su još uvijek reaktivne analize zastupljenije od preventivnih što je loše jer realtivne analize uočavaju problem prije nego on može uticati na mrežu i korisnika, dok kod preventivnih to nije slučaj. Neke analize koje korisnicima Wiresharka mogu poslužiti u funkciji sigurnosti i administracije mreže su: pronalaženje korisnika s najviše prometa na mreži identificiranje protokola i aplikacija koje se trenutno koriste određivanje prosječnog broja paketa u sekundi, prosječnog broja bajta u sekundi ili ukupnog prometa u mreži prikaz svih korisnika komunikacijske mreže određivanje dužine paketa kojeg koristi aplikacija za prenos podataka na mreži prepoznavanje najčešćih problema u mreži (spora mreža, neprepoznavanje korisnika,...) prepoznavanje kašnjenja između korisničkog naloga za rad s mrežnim paketima i samog procesa rada s paketima 1 https://www.wireshark.org/ 8
prepoznavanje krivo konfigurisanih korisnika (npr. dupliciranje IP adresa) određivanje mreže ili korisnika koji usporavaju promet na mreži identificiranje asinhronog prenosa na mreži identificiranje neuobičajnog pregleda prometa na mreži brzo identificiranje HTTP (engl. HyperText Transfer Protocol) grešaka koje indiciraju probleme korisnicima i poslužitelju. brzo identificiranje VoIP (eng. Voice over Internet Protocol) grešaka koje indiciraju probleme korisniku ili poslužitelju te globalne greške izrada grafika za poređenje ponašanja prometa na mreži izrada grafika prometa aplikacije te poređenje s ukupnim prometom na mreži identificiranje aplikacija koje ne šifriraju podatke koji se prenose uočavanje neobičnih protokola identificiranje prosječnog i neprihvatljivog vremena odziva mrežnih servisa (SRT, eng. Service Response Time) te izrada grafika intervala periodičnog generisanja paketa, aplikacija ili protokola. 2.3 Primjeri korištenja alata Wireshark Wireshark je mrežni analizator i kao takav služi za hvatanje i analizu mrežnih paketa. Njegove mogućnosti svode se na: hvatanje mrežnih paketa (eng. Capturing live network data) uvoz/izvoz i ispis podataka (eng. File input/output and printing) te rad s uhvaćenim paketima (eng. Working with captured packets) 2.3.1 Hvatanje mrežnih paketa Hvatanje mrežnih paketa je jedno od glavnih obilježja Wiresharka. Njegov mehanizam za hvatanje omogućava: hvatanje s različitih vrsta mreža (Ethernet, TokenRing, ATM,...) prekid hvatanja uz različite uvjete (količina uhvaenih podataka, vrijeme hvatanja, broj uhvaćenih paketa,...) simultano prikazivanje dekodiranih paketa istovremeno s hvatanjem novih paketa filtriranje paketa i reduciranje količine uhvaćenih podataka. Hvatanje mrežnih paketa se odvija na vrlo jednostavan način. Označavanjem opcije Interfaces iz menija Capture otvara se prozor Capture Interfaces prikazan na slici 2. 9
Slika 2: Capture Interfaces prozor na Microsoft Windows operativnom sistemu Odabirom opcije Start pokreće se hvatanje paketa, dok se odabirom opcije Options pristupa prozoru Capture Options prikazanom na slici 3. Prozor Capture Options služi za određivanje vrste mreže s koje se hvataju podaci za uređivanje različitih prekidača za prekid hvatanja uz određeni uslov. Slika 3: Capture Options prozor na Microsoft Windows operativnom sistemu Osim hvatanja podataka s lokalne mreže, Wireshark je sposoban hvatati podatke i sa udaljenih mrežnih interfejsa. Na operativnom sistemu Microsoft Windows tome služi tzv. Capture Daemon 10
servis, dok se na operativnim sistemima Unix/Linux isti učinak postiže preko SSH tunela (eng. Secure Shell). Za hvatanje podataka s udaljenih interfejsa Wireshark koristi opciju Remote Capture Interfaces na slici 4. U tom se prozoru, upisom udaljene IP adrese, pristupa mrežnom saobraćaju i tada se na isti način kao i kod lokalne mreže mogu hvatati i analizirati mrežni podaci. Slika 4: Remote Capture Interfaces prozor na Microsoft Windows operativnom sistemu 2.3.2 Uvoz, izvoz i ispis podataka Wireshark može pročitati i podatke iz uhvaćenih mrežnih paketa spremljenih u datoteku. Čitanje se obavlja intuitivno u meni-u File/Open čime se otvara prozor Open Capture File prikazan na slici 5. Wireshark može pročitati razne formate datoteka iz drugih alata za mrežnu analizu, a najrašireniji i najpoznatiji među njima su: libpcap, tcpdump i drugi alati koji koriste tcpdump format za hvatanje sun, snoop i atmsnoop Microsoft Network Monitor Novell LANalyzer Shomiti/Finisar Surveyor i mnogi drugi 11
Slika 5: Open Capture File prozor na Microsoft Windows operativnom sistemu Wireshark podržava više formata za izvoz podataka. Najjednostavniji i najčešće korišteni način izvoza podataka je u ASCII tekstualnom formatu prikazanom na slici 6. Takav način izvoza podataka u Wiresharku je moguće napraviti odabirom opcije File/Export. Izvoz podataka iz Wiresharka moguć je i u drugim formatima, a oni su: PostScript CSV (eng. Comma Separated Values) polja programskog jezika C PSML PDML 12
Slika 6: Prozor Plain Text na operativnom sistemu Microsoft Windows Wireshark ima i opciju ispisa uhvaćenih paketa. Odabirom opcije File/Print.. otvara se prozor za ispis paketa prikazan na slici 7. Slika 7: Prozor Print na operativnom sistemu Microsoft Windows 13
2.3.3 Rad s uhvaćenim paketima Rad s uhvaćenim paketima u Wiresharku obuhvata prikaz uhvaćenih paketa, njihovo filtriranje, označavanje ili ignorisanje te mnoge druge opcije. Wireshark pakete prikazuje u korisničkom interface-u prikazanom na slici 8. Slika 8: Prikaz uhvaćenih paketa u Wireshark-u Uhvaćene pakete moguće je filtrirati po mnogim kriterijima. Wireshark omogućava izradu vlastitih filtera i uvjeta filtriranja te njihovo spremanje i kasnije korištenje. Izrada vlastitog filtera obavlja se unutar prozora Filter Expression prikazanog na slici 9. Ugrađeni filteri unutar alata Wireshark omogućavaju selekciju paketa po uvjetima kao što su: protokol postojanje podataka u paketu vrijednost podataka sličnost među podacima, kao i mnoge druge selekcije Naprimjer, filter koji prikazuje promet samo SMTP (ulaz 25) i ICMP protokola može se zadati kao: tcp.port eq 25 or icmp Zatim, filter koji će prikazivati samo pakete koji sadrže podatke je data 14
Slika 9: Filter Expression prozor u Wireshark-u Wireshark omogućava pronalazak uhvaćenog paketa preko opcije Find Packet (slika 10). Na sličan način, opcija Go To Packet (slika 11) omogućava prikaz odabranog paketa. Osim ovih opcija moguće je označiti pakete da ih se istakne, ignorisati ih da se Wireshark ponaša kao da oni ne postoje i slično. Slika 10: Find Packet prozor u Wiresharku 15
Slika 11: Go To Packet prozor u Wiresharku 2.4 Pregled sigurnosnih nedostataka Wiresharka U zadnje vrijeme Wireshark je u sigurnosnim člancima često spominjan u kontekstu popravljanja sigurnosnih grešaka te nadogradnje i poboljšanja sigurnosti. Sigurnosni problemi i sami nedostaci Wiresharka najviše ovisi od vrste mreže na kojoj se koristi. Naprimjer, mala SoHo (eng. Small office / Home Office) mreža bit će manje kritična u poređenju s web servisom neke kompanije jer je hvatanje prometa s interne mreže vjerovatno sigurnije od hvatanja internet prometa itd. Sama ranjivost Wiresharka je puno manja od ostalih sličnih open-source programa. Zadaci koje Wireshark obavlja, a koji su najkritičniji s aspekta sigurnosti su: otvaranje uhvaćenog paketa korištenje opcije Update List of Packets in Real Time za vrijeme hvatanja paketa nekorištenje opcije Update List of Packets in Real Time nakon završetka hvatanja. Preporuke za zaštitu od sigurnosnih ranjivosti koje predlaže Wiresharkov programerski tim obuhvataju: stalno korištenje zadnje vrste Wiresharka nekorištenje Wiresharka s administratorskim ovlastima analiza uhvaćenih paketa u nekritičnom okruženju (npr. poseban korisnički račun). Sigurnosni propusti koje je izdvojila Secunia, kompanija koja se bavi sigurnošću su: DoS (eng. Denial of Service) (70%) neovlašteni pristup sistemu (26%) te izlaganje osjetljivih informacija (4%). 16
3 Gdje se snimaju podaci? Prvi korak u nadgledanju mreža je definisati mjesto gdje se analizira saobraćaj. Ukoliko dođe do pojave greške u mreži koja ne sadrži IDS (Instrusion Detection System) koji je u mogućnosti uključiti alarm ili neki uređaj koji će informisati korisnike o napadu ili mrežnom kvaru, te ukoliko mreža ne sadrži protokole za analizu saobraćaja na daljinu, instaliranje Wiresharka preostaje kao najbolja opcija za rješavanje problema. Wireshark se obično instalira na računar kako bi analizirao saobraćaj koji protiče kroz određeni mrežni segment, međutim moguće je naići na situaciju u kojoj je nemoguće fizički pristupiti računaru ili iz nekih sigurnosnih razloga nije moguće instalirati Wireshark Commented [AM1]: Ja bi ovaj naslov promjenioo...dobar je neku knjigu ali ne iza formalni rad. Npr., radni modovi Wireshark alata ili nešto slično. Neke alternative su korištenje tehnika pomoću kojih je moguće snimiti saobraćaj bez prethodne instalacije Wiresharka na računar. Izuzetak od pravila bi u tom slučaju bi bilo nekoliko metoda koje se ogledaju u snimanju saobraćaja na daljinu. U to slučaju potrebno je instalirati aplikacije na računar s kojeg se saobraćaj analizira. 3.1 Upotreba HUB-a Ako je računar s Wiresharkom konektovan na jedan od portova switcha, analiziraju se samo paketi koji se javljaju između switcha i računara, a to nije željeni scenario. Switch dijeli mrežu u segmente kreirajući posebno preklapanje domena, koje eliminiše potrebu da se svaki paket takmiči da pristupi mrežnom segmentu. Paketi koji pripadaju istom virtualnom LAN-u (VLAN) se šalju na sve portove. U tom slučaju jedna alternativa je upotreba HUB-a, kao što je prikazano na sljedećoj slici, pri čemu se HUB konektuje na isti mrežni segment na računaru. Sada, sav saobraćaj između switcha i računara može biti analiziran na računaru. Slika 12: Snimanje podataka upotrebom HUB-a 17
3.2 Port mirroring odnosno VACL (VLAN-BASED ACLS) Sve dok je moguć pristup switchu i dok su podržane sve prethodne funkcionalnosti, to je najbolji način za snimanje saobraćaja. Ovaj način rada, poznat kao Services and Protocols for Advanced Networks (SPAN) u Cisco okruženje, omogućava dupliciranje saobraćaja između jednog ili više portova na switch-u i odražavanje istog na željeni port. Bitno je primjetiti da port konfigurisan kao mirroring mora biti brz kao i port (portovi) koji će se pratiti kako bi se izbjegao gubitak mrežnog segmenta. Ovaj metod koriste mnogi administratori da instaliraju IDS ili druge alate za analizu. Jedna prednost VACL-a u odnosu na Port Mirroring je da dozvoljava granulaciju prilikom određivanje prometa koji se analizira. Kod konfigurisanja Port Mirroring, moguće je preusmjeriti promet sa jednog porta ili VLAN-a na drugi: sa VACL moguće je specificirati ACL-ove (Access Control List) te na taj način označiti tip prometa od interesa. Neki Cisco uređaju imaju dostupnu opciju zvanu Mini Protocol Analyser koja omogućava snimanje da se paketi sačuvaju u lokalni spremnik (buffer) te kasnije eksportuju u.cap file. Ova opcija također omogućava specificiranje filtera koji će ograničiti snimanje paketa: naprimjer moguće je navesti tipove paketa koji imaju sigurno EtherType ili one koji su određeni u prethodno konfigurisanoj ACL (Access Control List). Također, upotrebljava se libpcap kao format za snimanje, tako da se može koristiti i bilo koji drugi analizator protokola za naknadne analize. Slika 13: Snimanje podataka - Port Mirroring 3.3 Bridge mode Ukoliko nije moguće pristupiti switchu, može se koristiti uređaj sa dvije mrežne kartice koji se postavlja između switcha i računara, kao što je prikazano na slici 1. Ovo je tzv. MitM (Man in the Middle), na fizičkom sloju, gdje je moguć pasivni pristup saobraćaju. 18
Slika 14: Snimanje podataka - Bridge Mode 3.4 ARP SPOOF U nekim situacijama, ukoliko nije moguće upotrijebiti prethodne metode, može se koristiti alat kao što je Ettercap ili slično za kreiranje MitM (Man in the Middle). Bitno je znati da je to uglavnom lošija metoda i da se upotrebljava samo u nekritičnim sredinama gdje postoji potreba za presretanjem prometa između različitih uređaja. Time se postiže da uređaj koji prati promet šalje sve segmente preko računara koji ima instaliran Wireshark. Proces se izvodi zagađivanjem cache memorije uređaja koji je uključen, pogrešnom IP/MAC adresom. Neki switch-evi imaju dostupne funkcije koje omogućavaju detektovanje ovog procesa (vide Dynamic ARP Inspection i DHCP Snooping), pa je bitno deaktivirati ove funkcije u mrežnim uređajima da se ne bi isključili. Commented [AM2]:??? Slika 15: Snimanje podataka - Arp Spoof 19
4 Praktični dio 4.1 Analiza TCP protokola TCP- Transfer Control Protocol Commented [AM3]: Sve dolke pobrojane poruke koje podržava TCP prptokol bi trebalo potvrditi praktično, počevši od threeway handshake-a. To je lagano, samo da provedemo ono što sam ti neki dan pokazao. Osnovni podaci: konekciono orijentisan protokol, protokol transportnog sloja (4. sloj ISO/OSI modela), radi u režimu klijent-server, upotrebljava se u situacijama kada se traži velika pouzdanost, za razliku od UDP-a, omogućava detekciju i korekciju grešaka, segmentaciju i reintegraciju korisničkih podataka i protokola viših nivoa Standardi: RFC 675 2, RFC 793 3, RFC 1122 4, RFC 2581 5, RFC 5681 6 Situacije u kojima aplikacijski sloj koristi TCP: Elektronska pošta (SMTP- Simple Mail Transfer Protocol) Pristup udaljenom terminalu (Telnet) Web (HTTP- Hyper Text Transfer Protocol) Transfer datoteka (FTP- File Transfer Protocol) TCP prokotol je konekciono orijentisan jer prije početka slanja podataka iz jedne aplikacije u drugu, ta dva procesa moraju prvo da se upoznaju - tj. moraju jedan drugom da pošalju neke uvodne segmente da bi se uspostavili parametri transfera podataka koji slijedi. Protokol TCP se izvršava sam u krajnjim sistemima, a ne na usputnim elementima mreže (ruterima i mostovima). Usputni elementi mreže ne održavaju stanje TCP konekcije i nisu je svjesni, oni samo vide datagrame. TCP konekcija je uvijek od tačke do tačke tj. između pojedinačnog pošiljaoca i pojedinačnog primaoca. 4.1.1 Struktura TCP paketa Slika 16: Struktura TCP paketa 2 http://tools.ietf.org/html/rfc675 3 http://tools.ietf.org/html/rfc793 4 http://tools.ietf.org/html/rfc1122 5 http://tools.ietf.org/html/rfc2581 6 http://tools.ietf.org/html/rfc5681 20
TCP segment se sastoji od više polja zaglavlja i jednog polja podataka. Polje podataka sadrži jedan komad aplikacijskih podataka. Maksimalna veličina polja podataka u segmentu je MSS (Maximum Segment Size). Kada TCP šalje veliku datoteku, kao što je slika sa neke web stranice, obično tu datoteku dijeli na dijelove veličine MSS (osim posljednjeg dijela, koji je često manje od parametra MSS). Izvorni port- Identifikacija porta za prijem segmenta podatka, sadrži 16 bita Destinacijski port- Identifikacija porta za slanje segmenta podataka, sadrži 16 bita Broj izvornog i odredišnog porta se koriste za multipleksiranje i demultipleksiranje podataka iz aplikacija gornjeg sloja i prema njima. Redni broj - ima dvije uloge i sadrži 32 bita. Redni broj za segment je broj prvog bajta u segmentu unutar tok bajtova Ako je flag SYN postavljen na vrijednost 1, onda je to početni broj sekvence. Redni broj prvog stvarnog bajta podatka i broj potvrde za odgovarajući ACK su onda ovaj broj sekvence plus 1 Ako flag SYN ima vrijednost 0, onda je to akumulirani broj sekvence prvog bajta podatka segmenta za trenutnu sesiju. Broj potvrde - Ako ACK flag ima vrijednost 1, onda je vrijednost ovog polja sljedeći redni broj koji primaoc očekuje. To potvrđuje da su svi prethodni bajti poslani. Kako računar A može da prima podatke od računara B, u isto vrijeme dok i sam šalje podatke računaru A (u okviru iste TCP konekcije), tako svaki segment koji stigne od računara B ima redni broj za podatke koji se šalju od B prema A. Broj potvrde koji računar A stavlja u svoj segment je redni broj sljedećeg bajta koji očekuje od računara B. Offset podataka (Dužina zaglavlja) - Sadrži 4 bita. Specificira dužinu TCP zaglavlja u 32 - bitnoj riječi. Minimalna veličina zaglavlja je 5 riječi, a maksimalna 15 riječi. Ovo polje se naziva ovako zbog činjenice da predstavlja offset od početka TCP segmenta do stvarnih podataka. Rezervisana polja (Ne koristi se) Koristi se za neke kasnije upotrebe i može biti postavljeno na nulu Kontrolni biti (Flags) NS (1 bit) Nonce Concealment protection CWR (1 bit) Congestion Windows Reduce (reduciranje zagušenja) ECE (1 bit) Echo indicate URG (1 bit) Polje pokazivača hitnosti je aktivno ACK (1 bit) Svi paketi poslani nakon SYN paketa od strane klijenta trebaju imati setovan ovaj flag RST (1 bit) - Resetuje konekciju SYN (1 bit)- Sinhronizira redne brojeve. Samo prvi poslani paket treba imati setovan ovaj flag. FIN (1 bit) Označava da nema više podataka za slanje 21
Veličina prozora (Prijemni prozor) - koristi se za kontrolu toka tj. da bi se saopštilo koliko bajta predajnik pristaje da prihvati bez potvrde prijema. Veličina polja Window se može podešavati tokom razmjene poruka. Kontrolna suma računa se iz zaglavlja i podataka. Koristi se za kontrolu bit-grešaka, kao i mogućnost markiranja i detektovanja hitnih podataka. Hitni pokazivač (pokazivač hitnosti podataka) odnosi se na podatke koji se trebaju isporučiti što je moguće prije. Ovo polje se ignoriše sve dok URG Code bit nije 1. Opcije- Ovo polje je promjenjive dužine, a koristi se kada pošiljalac i primalac pregovaraju o maksimalnoj dužini segmenta (MSS) ili kao faktor za podešavanje prozora koji se koristi u mrežama velike brzine. Definisana je također i opcija vremenskog pečata. 4.1.2 Procjena vremena povratnog puta i time-outa Time-out mora biti veći od vremena povratnog puta konekcije (RTT), tj. vremena od kada se segment pošalje dok ne stigne njegova potvrda. Inače bi dolazilo do nepotrebnih ponavljanja. Commented [AM4]: Ovo može biti dio ovog rada ako se ova vremena mogu izmjeriti Wiresharkom...da li si nešto gledala na tu temu? Procjena vremena povratnog puta Uzorak vremena povratnog puta RTT za jedan segment, koji se naziva SampleRTT, jeste trajanje od trenutka slanja segmenta do prijema potvrde tog segmenta. Uglavnom se SampleRTT ne mjeri za svaki prenijeti segment. U većini TCP implementacija se u svakom trenutku pravi samo po jedan uzorak SampleRTT. To jest, u svakom trenutku se procjenjuje samo jedan SampleRTT za jedan prenijeti, ali trenutno još nepotvrđeni segment, tako da se dobija po jedna nova vrijednost SampleRTT približno jedanput tokom svakog pojedinačnog povratnog puta.osim toga, TCP nikad ne izračunava SampleRTT za segment koji se šalje ponovo; SampleRTT se mjeri samo za segmente koji su poslati jednom. Očigledno je da će se vrijednost SampleRTT mijenjati od segmenta do segmenta zavisno od zagušenja na ruterima i od različitog opterećenja krajnjih sistema. Zbog ovih razlika, svaka pojedinačna vrijednost SampleRTT ne mora biti uobičajena. Da bi se procijenio tipični RTT prirodno je da se uzme neki prosijek dobijen od više vrijednosti SampleRTT. TCP stalno izračunava jedan prosijek izmjerenih vrijednosti SampleRTT po imenu EstimatedRTT. Čim dobije novi SampleRTT, TCP ažurira promjenljivu EstimatedRTT prema sljedećoj formuli: EstimatedRTT = 0.875 EstimatedRTT + 0.125 SampleRTT Osim procjene trajanja povratnog puta, RTT, vrijedno je posjedovati i kvantitativnu mjeru varijacije RTT-a. RFC 2988 definiše varijaciju vremena povratnog puta, DevRTT, kao procjenu standardne devijacije SarapleRTT od EstimatedRTT: DevRTT = (1 β) DevRTT + β SampleRTT EstimatedRTT Upravljanje intervalom tajm-auta za ponovno slanje Sada kada je poznata vrijednosti EstimatedRTT i DevRTT, potrebno je odrediti vrijednost koju uzeti kao TCP-ov interval za time-out. Interval bi trebalo da bude veći ili jednak vrijednosti parametra EstimatedRTT, inače bi dolazilo do nepotrebnih ponovnih slanja. Ali, ne bi smio da bude ni mnogo veći od parametra EstimatedRTT; inače, TCP ne bi dovoljno brzo ponovo poslao segment u slučaju 22
gubitka, čime bi se u aplikaciju uvelo značajno kašnjenje zbog transfera podataka. Zato je poželjno da interval za tajm-aut bude jednak EstimatedRTT plus neka rezerva. Rezerva bi trebalo da bude velika ako vrijednosti parametra SampleRTT mnogo variraju, a mala u slučaju male varijacije. Zato se upotrebljava vrijednost parametra DevRTT. Sva ova razmatranja uključena su u TCP-ov metod kojim se određuje interval time-outa za ponovno slanje: TimeoutInterval = EstimatedRTT + 4 DevRTT 4.1.3 Upravljanje TCP konekcijom Commented [AM5]: Za praktični dio...kako sam iznad već rekao. Uzmimo da proces koji se izvršava na jednom računaru (klijent) želi da pokrene konekciju sa drugim procesom na drugom računaru (server). Klijentski aplikacioni proces prvo obavještava klijentski TCP da želi da uspostavi konekciju s procesom na serveru. TCP u klijentu zatim kreće u uspostavljanje TCP konekcije sa TCP - om u serveru na sljedeći način: 1. TCP na klijentskoj strani prvo šalje poseban TCP segment TCP - u na serverskoj strani. Ovaj poseban segment ne sadrži podatke aplikacionog sloja, ali bit SYN u zaglavlju segmenta ima vrijednost 1. Zbog toga se ovaj poseban segment naziva SYN. Osim toga, klijent bira početni redni broj (client_isn) i stavlja taj broj u poslje rednog broja početnog TCP segmenta SYN. Ovaj segment se enkapsulira u IP datagram i šalje segmentu. Pravilnom izboru slučajne vrijednosti client_isn posvećena je značajna pažnja da bi se izbjegli neki rizici po pitanju bezbjednosti. 2.Kada IP datagram koji sadrži TCP segment SYN stigne serverskom računaru (ako uopšte stigne!) server vadi TCP segment SYN iz datagrama, dodjeljuje TCP konekciji privremene memorije i promjenljive i šalje klijentskom TCP-u segment odobrenja konekcije. Ovaj segment odobrenja konekcije također ne sadrži podatke aplikacijskog sloja. Međutim, on u zaglavlju sadrži tri značajne informacije. Prvo, bit SYN ima vrijednost 1. Drugo, polje potvrde u zaglavlju TCP segmenta ima vrijednost client_isn+1. Na kraju, server bira i vlastiti početni redni broj (server_isn) i stavlja tu vrijednost u polje rednog broja u zaglavlju TCP segmenta. Ovaj segment odobrenja konekcije u suštini saopštava: Primio sam vaš paket SYN za pokretanje konekcije sa vašim početnim rednim brojem client_isn. Pristajem na uspostavljanje ove konekcije. Moj početni redni broj je server_isn. Segment odobrenja konekcije ponekad se naziva i segment SYNACK 3. Pošto primi segment SYNACK, klijent također dodjeljuje konekciji privremene memorije i promjenljive. Klijentski računar tada šalje serveru još jedan segment; ovaj posljednji segment potvrđuje serverov segment odobrenja konekcije (klijent to postiže stavljanje vrijednosti server_isn+1 u polje povrde u zaglavlju TCP segmenta). Bit SYN ima vrijednost 0, pošto je konekcija upostavljena. Kada se izvrše sva tri koraka, klijentski i serverski računar mogu jedan drugom da šalju segmente koji sadrže podatke. U svakom od ovih budućih segmenata, bit SYN imat će vrijednost nula. Ovo je tzv. sinhonizacija u tri koraka (three-way handshake). 23
Slika 17: Filtriranje TCP protokola iz saobraćaja snimljenog Wiresharkom 24
4.2 Analiza UDP protokola UDP- User Datagram Protocol Commented [AM6]: Sada bi trebalo uhvatiti neki UDP saobraćaj, većina broadcast saobraćaja se prenosi na 4. sloju putem UDP-a pa nešto simulirati. Osnovni podaci: konekciono neorijentisan protokol, protokol transportnog sloja (4. sloj ISO/OSI modela) Standardi: RFC 768 7 Situacije u kojima aplikacijski sloj koristi UDP: Prevođenje imena (DNS- Domain Name Service) Protokoli rutiranja za ažuriranje tabele rutiranja (RIP- Routing Information Protocol) Prenos podataka za upravljanje mrežom (SNMP- Simple Network Management Protocol) Internet telefonija Protok multimedije UDP izvršava minimum koji se očekuje od transportnog protokola. Osim funkcije multipleksiranja i demultipleksiranja i veoma ograničene provjere grešaka, ovaj protokol ne dodaje ništa IP - u. Ukoliko je izabran UDP umjesto TCP - a, aplikacija će se skoro direktno obraćati IP - u. UDP uzima poruke od aplikacijskog procesa, dodaje još dva mala polja i predaje dobijeni segment mrežnom sloju. Mrežni sloj enkapsulira segment u IP datagram i zatim na najbolji mogući način nastoji da isporuči segment prijemnom računaru. Ako segment stigne do prijemnog računara, UDP koristi broj odredišnog porta kako bi isporučio podatke iz segmenta ispravnom aplikacijskom procesu. Kod UDP-a nema međusobne interakcije između predajnog i prijemnog transportnog sloja prije slanja segmenta, zbog toga se za ovaj protokol kaže da je bez uspostavljanja konekcije (konekciono neorijentisan). 4.2.1 Struktura UDP paketa Slika 18: Struktura UDP paketa Polazni port Ovo polje identifikuje port pošiljaoca kada je ovo značajno i treba pretpostaviti da je ovo port prema kojem će se slati odgovor, kada je ovo potrebno. Ako ovo polje nije upotrebljeno, onda treba da stoji nula. Ako je izvorni host klijent broj porta je onda često kratkotrajan, što znači da se broj promijeni 7 http://tools.ietf.org/html/rfc768 25
tokom novih uspostavljanja komunikacije. Ukoliko je izvorni host server onda je broj porta često neki poznati broj. Ciljni port Ovo polje identifikuje port primaoca i obavezno je navesti. Slično polaznom portu, ako je klijent ciljni host onda je port vjerovatno kratkotrajan, dok je u slučaju servera ovo vjerovatno poznati broj porta. Dužina Polje koje specificira dužinu UDP zaglavlja i podataka, u bajtima. Minimalna dužina je 8 bajta jer je to dužina zaglavlja, što je obavezno polje. Veličina polja ima teoretsku granicu od 65.535 bajta (8 bajta za zaglavlje + 65.527 bajta za podatke) za UDP datagram. Praktična granica za veličinu podataka koja slijedi iz IPv4 protokola je 65.507 bajta (65.535 8 bajta za UDP zaglavlje 20 bajta za IP zaglavlje). U IPv6 jumbogramima, moguće je imati UDP pakete koji su veći od 65.535 bajta. RFC 2675 8 specificira da je polje dužine postavljeno na nulu ako je dužina UDP zaglavlja zajedno sa dužinom UDP podataka veća od 65.535 bajta. Kontrolna suma UDP kontrolna suma služi za otkrivanje greške, odnosno kontrolna suma se koristi da bi se utvrdilo da li su promijenjeni biti u UDP segmentu prilikom prenosa od izvora do odredišta. UDP na strani pošiljaoca izračunava kompement jedinice za sumu svih 16-bitnih riječi u segmentu, gdje se odbacuje svako prekoračenje do kojeg dođe prilikom sabiranja. Ovaj rezultat se stavlja u polje kontrolnog zbira UDP segmenta. (Detaljno objašenjenje za izračunavanje sume pogledati u RFC 1071 9 standardu). Iako UDP sadrži provjeru grešaka, on ništa ne poduzima da bi se greška ispravila. U nekim implementacijama UDP-a oštećeni segment se jednostavno odbacuje, dok druge implementacije proslijeđuju aplikaciji oštećeni segment uz upozorenje. 4.2.2 Zašto koristiti UDP umjesto TCP-a? Commented [AM7]: JA mislim da ovo poglavlje nije baš u skladu sa temom, ono što smo pričali. Ja bi se držao samo protokola, formata paketa i prezetacije istih preko Wiresharka. Bolja kontrola na nivou aplikacije nad sadržajem i vremenom slanja - Ako se koristi UDP, čim aplikacijski proces preda podatke UDP-u, UDP će spakovati podatke u UDP segment i odmah predati mrežnom sloju. Nasuprot tome, TCP sadrži mehanizam za kontrolu zagušenja koji zadržava TCP slanje u transportnom sloju, kada linkovi između izvorišnog i odredišnog računara postanu pretjerano zagušeni. TCP će također više puta da šalje isti segment podataka dokle god od odredišta ne primi potvrdu da je segment primljen, bez obzira na to koliko takva pouzdana isporuka traje. Pošto aplikacije u realnom vremenu često zahtjevaju garantovanu frekvenciju slanja i ne žele pretjerano da odlažu prenošenje segmenta, a mogu da tolerišu malo gubitak podataka, model TCP usluge nije naročito pogodan za potrebe takvih aplikacija. Ove aplikacije mogu koristiti UDP i pri tome svu dodatnu fukncionalnost koja im je potrebna pored UDP-ove osnovne usluge (isporuka segmenta od jednog procesa drugom), implementiraju kao dio aplikacije. 8 http://tools.ietf.org/html/rfc2675 9 http://tools.ietf.org/html/rfc1071 26
Nema uspostavljanja konekcije - TCP koristi sinhronizaciju u tri koraka prije nego počne slati podatke, dok UDP kreće bez ikakvog uvoda slati podatke. Zbog toga kod UDP-a nema kašnjenja prilikom uspostavljanja konekcije. TO je glavni razlog zbog kojeg se DNS izvršava preko UDP-a, a ne preko TCP-a. HTTP koristi TCP pošto je pouzdanost značajna za web stranice, dok je DNS-u potrebna brzina. Nema stanja konekcije - TCP održava stanje konekcije u krajnjim sistemima. Ovo stanje konekcije obuhvata privremene memorije za primanje i slanje, parametre za kontrolu zagušenja i parametre za redne brojeve i brojeve potvrda. Ove informacije su potrebne za primjenu pouzdanog transfera podataka u TCP i za obezbjeđenje kontrole zagušenja. Nasuprot tome, UDP ne prati stanje konekcije, a ni ostale prethodno navedene parametre. Zato server namijenjen određenoj aplikaciji može obično da podrži mnogo više aktivnih klijenata ako se aplikacija izvršava preko UDP-a, a ne preko TCP-a. Manje dodatno opterećenje zaglavljem paketa - TCP segment ima zaglavlje od 20 bajta, dok UDP ima samo 8 bajta. Slika 19: Filtriranje UDP protokola iz saobraćaja snimljenog Wiresharkom 27
4.3 Analiza DNS protokola DNS Domain Name System Osnovni podaci: Ovaj protokol obezbjeđuje prevođenje imena računara u IP adrese, protokol aplikacijskog sloja (7. sloj ISO/OSI modela), koristi istovremeno i UDP i TCP zavisno od akcije koja se izvršava (UDP se obično koristi za upite, osim ukoliko lookup ili odgovornije veći od 512 byte-a. TCP se koristi za veće lookup-ove i za transfere u okviru zone) Standardi: RFC 2181 10, RFC 1123 11, RFC 1035 12 Protokoli aplikacijskog sloja koji koriste DNS uslugu: HTTP (Hyper Text Transfer Protocol), SMTP (Simple Message Transfer Protocol), FTP (File Transfer Protocol). Ovi protokoli koriste DNS uslugu za prevođenje imena računara u odgovarajuće IP adrese. Računari mogu da se identifikuju na dva načina: imenom i IP adresom. Iako je ljudima bliža identifikacija imenom, ruterima više odgovaraju hijerarhijski uređene IP adrese fiksne dužine. Problem ova dva suprostavljena zahtjeva rješava Internet usluga DNS. Usluga DNS može da se definiše kao raspodjeljena baza podataka koja se implementira u hijerarhiju DNS servera, te kao protokol aplikacijskog sloja koji omogućava računarima pretraživanje raspodjeljene baze podataka. Naprimjer, ukoliko HTTP klijent koji se izvršava na računaru nekog korisnika zatraži URL www.etf.unsa.ba, korisnički računar prvo mora da dođe do njegove IP adrese. To se događa na sljedeći način: 1. Na računaru ovog korisnika istovremeno se izvršava i klijentska strana DNS aplikacije. 2. Čitač iz URL-a izvlači ime računara www.etf.unsa.ba i predaje ga klijentskoj strani DNS aplikacije. 3. DNS klijent šalje ime računara čija je adresa potrebna DNS serveru. 4. Nakon toga DNS klijent u odgovoru dobija traženu IP adresu. 5. Korisnikov čitač zatim uspostavlja TCP konekciju sa procesom HTTP servera koji se nalazi na datoj IP adresi. Iz prethodno navedenog se zaključuje da DNS usluga u sve Internet aplikacije koje je koriste uvodi dodatno (nekada i prilično značajno) kašnjenje. Međutim, tražena IP adresa najčešće se nalazi u keš memoriji obližnjeg" DNS servera, što i te kako pomaže u smanjivanju intenziteta DNS saobraćaja i skraćenju kašnjenja koje prouzrokuje ova usluga. DNS kao protokol aplikacijskog sloja jer se izvršava komunicirajući s krajnjim tačkama sistema, te se pri tome oslanja na klijentsko serversku komunikaciju i transportni protokol koji se nalazi u njegovo osnovi. S druge strane, uloga DNS-a je potpuno drugačija od uloge weba, transfera datoteka ili aplikacija za elektronsku poštu (HTTP, FTP, SMTP). Za razliku od prethodna tri nabrojana protokola aplikacijskog sloja, DNS usluga nije aplikacija kojom korisnik ostvaruje direktnu interakciju, već ova usluga obezbjeđuje jednu od ključnih funkcija Interneta za potrebe korisničkih aplikacija i ostalih softvera na Internetu. 10 http://tools.ietf.org/html/rfc2181 11 http://tools.ietf.org/html/rfc1123 12 http://tools.ietf.org/html/rfc1035 28
4.3.1 Struktura DNS poruke Slika 20: Format DNS poruke DNS serveri koji zajedno implementiraju distribuiranu DNS bazu podataka čuvaju zapise o resursu (resource record - RR) koji se odnose na preslikavanja imena računara u IP adrese. U svakoj DNS poruci sa odgovorom nalazi se jedan ili više ovakvih zapisa o resursu. Prvih 12 bajta predstavljaja zaglavlje paketa koje se sastoji od nekoliko polja. Identifikator 16-bitni broj koji identifikuje DNS upit. Ovaj identifikator se kopira u odgovor što omogućava klijentu da uporedi poslane upite sa primljenim odgovorima. Oznake (flagovi) U ovom polju stoji nekoliko oznaka. Jednobitim flagom tipa upit/odgovor označava se da li je u pitanju upit (0) ili odgovor (t). Jednobitna oznaka autoriteta stavlja se u odgovor ukoliko je DNS server, server od autoriteta za traženo ime. Jednobitna oznaka poželjnosti rekurzivnog upita postavlja se kada klijent (računar ili DNS server) želi da DNS server, ukoliko nema traženi zapis, izvrši rekurzivni upit. Ako podržava rekurzivne upite, DNS server u odgovoru postavlja jednobitnu oznaku o ostvarivosti rekurzivnog upita. Četiri polja tipa Number of" Označavaju broj pojavljivanja četiri dijela za podatke" koji slijede iza zaglavlja. Pitanja Sadrži informacije o aktuelnom upitu. U ovom dijelu se nalaze: polje sa imenom na koje se upit odnosi i 29
(2) polje za tip u kome se navodi tip pitanja npr.adresa računara povezuje se sa tipom A, dok se ime servera za elektronsku poštu povezuje sa tipom MX. Odgovori Sadrži zapise o resursu koji se odnose na traženo preslikavanje. Svaki zapis o resursu ima polja Type (na primer, A, NS, CNAME ili MX), Value i TTL. Obzirom da isto ime matičnog računara može da ima više IP adresa, u odgovoru jedne poruke može da se nađe više zapisa o resursu. Autoritet Sadrži zapise ostalih servera od autoriteta. Dodatne informacije Ovdje se nalaze se ostali korisni zapisi. Npr, u polju za odgovor u uzvratnoj poruci na MX upit nalazi se zapis o resursu u kome je navedeno ime računara ili servera za elektronsku poštu. 4.3.2 Način rada DNS-a U ovom dijelu fokus će biti na usluzi pretvaranja imena računara u IP adrese. Ukoliko neka aplikacija (naprimjer, čitač weba ili elektronske pošte) koja se izvršava na računaru nekog korisnika treba da prevede ime računara u IP adresu najprije se poziva klijentska strana DNS usluge, navodeći ime računara koji treba da se prevede. Klijentska strana usluge DNS u korisnikovom računaru zatim preuzima inicijativu i šalje poruku sa upitom u mrežu. Sve DNS poruke (upiti i odgovori) šalju se u okviru UDP datagrama kroz port 53. Nakon određenog vremena, što mogu da budu milisekunde, ali i desetine sekundi, DNS u korisnikovom računaru prima poruku sa odgovorom u kojoj je navedeno traženo preslikavanje. Ovo preslikavanje se potom proslijeđuje aplikaciji koja ga je i zatražila. Dakle, iz perspektive aplikacije DNS je crna kutija koja obezbeduje jednostavnu uslugu pretvaranja adrese računara u IP adresu. Međutim, ova crna obuhvata veliki broj DNS servera koji su raspoređeni širom svijeta, ali i protokol aplikacijskog sloja kojim se definiše komunikacija izmenu DNS servera i računara koji šalju upite. U pojednostavljenoj varijanti, DNS uslugu činio bi jedan DNS server u kojem bi se nalazila sva preslikavanja. U ovakvom centralizovanom dizajnu klijenti bi sve upite upućivali jednom serveru koji bi direktno odgovarao svim svojim klijentima. Iako je jednostavnost ovakve koncepcije privlačna, ona je jednostavno nepodesna za potrebe današnjeg Interneta i sve većeg broja računara. Razlozi zašto ovakav centralizovan dizajn nije poželjan su: Mreža se oslanja na jednu tačku. U slučaju kvara DNS servera, cijela mreža (Internet) postaje neupotrebljiva. Intenzitet saobraćaja. Jedan DNS server morao bi da se nosi sa svim DNS upitima (svi HTTP zahtjevi i elektronska pošta stotina miliona računara). Udaljena centralizovana baza podataka. Jedan DNS server ne bi mogao da bude blizu" svih klijenata. Kašnjenja bi u tom slučaju bila jako značajna. Održavanje. Jedan DNS server morao bi da čuva zapise za sve računare na Internetu. Ovakva centralizovana baza podataka bi bila ogromna i morala bi veoma često da se ažurira(za svaki novi računar u mreži). 30
Prema tome, centralizovana baza podataka na jednom serveru nema mogućnost jednostavnog i pouzdanog proširivanja. Zato je usluga DNS samim svojim dizajnom raspodjeljena i predstavlja primjer implementiranja raspodjeljene baze podataka na Internetu. 4.3.3 Raspodjeljena, hijerarhijska baza podataka DNS usluga koristi veliki broj DNS servera koji su hijerarhijski organizovani i raspoređeni širom svijeta. Nijedan od ovih servera nema sva preslikavanja za sve računare na Internetu. Umjesto toga, preslikavanja su raspoređena na većem broju DNS servera. Uopšteno govoreći, postoje četiri tipa DNS servera: lokalni name serveri root name serveri DNS serveri domena najvišeg nivoa (Top-Level Domain - TLD) i DNS serveri od autoriteta Ovi serveri su organizovani u hijerarhiju koja je prikazana na slici 21. Ovi serveri sarađuju međusobno da bi hostu koji šalje upit obezbjedili traženo preslikavanje Primjer prethodne podjele je: Slika 21:Distribucija DNS servera Ukoliko je DNS klijentu potrebna IP adresa za ime amazon.com, dešava se sljedeće. Klijent najprije kontaktira neki od osnovnih DNS servera koji mu vraćaju IP adrese TLC servera na vrhu domena.com. Nakon toga, klijent se obraća jednom od TLD servera koji mu vraća IP adresu servera od autoriteta za domen amazon.com od koga će u trećem koraku dobit IP adresu za ime www.amazon.com. Slika 22: Podjela DNS servera 31
Pored prethodno nabrojanih servera, postoji još jedan veoma važan tip DNS servera - riječ je o lokalnim DNS serverima. Lokalni DNS serveri se ne uklapaju sasvim u navedenu hijerarhiju servera, ali bez sumnje zauzimaju centralno mjesto u DNS arhitekturi. Svaki posrednik za Internet usluge (ISP) - što može da bude univerzitet, neka akademska ustanova, kompanija ili rezidencijalni ISP - ima svoj lokalni DNS server (naziva se i podrazumjevani DNS server). Kada se neki računar poveže sa posrednikom za Internet usluge datog korisnika, on od njega dobija IP adrese jednog ili više lokalnih DNS servera (obično kroz protokol DHCP). IP adresa lokalnog DNS servera može se vidjeti u prozoru za praćenje mrežnog statusa operativnih sistema Windows ili UNIX. Lokalni DNS server obično se nalazi blizu" klijenta. Kod pristupa Internetu kroz mrežu neke kompanije, ovaj server može da se nalazi i u istom LAN-u kao i računar koji šalje upit. Kod rezidencijalnog pristupa Internetu DNS server je od klijentskog računara udaljen svega nekoliko rutera. 4.3.4 DNS keširanje Jako važna funkcija DNS usluge je DNS keširanje. U stvarnosti ova usluga se u izuzetnoj meri oslanja na keširanje koje skraćuje kašnjenja i smanjuje broj DNS poruka u mreži. Sam koncept keširanja je krajnje jednostavan. Kada u lancu upita DNS server primi DNS odgovor (na primjer, preslikavanje imena nekog matičnog računara u IP adresu), server ovu informaciju skladišti u svojoj lokalnoj memoriji. Nakon brisanja DNS cache-a u komandnom prozoru, te pokretanja stranice www.google.ba u internet pretraživaču, rezultat koji dobijemo analizom saobraćaja u Wiresharku je: Slika 23: Filtriranje DNS protokola iz saobraćaja snimljenog Wiresharkom 32