Sadržaj

Gnutella protokol

Sažetak

Peer-to-peer (P2P) tehnologija se često koristi za preuzimanje datoteka unutar mreže na velikim brzinama. Što se više ova tehnologija razvija, sve se više povećava broj korisnika i čvorova u cijeloj mreži te tako ona postaje kompleksnija. Kako ovakve mreže imaju puno korisnika, primamljive su hakerima i podložne su raznim napadima.

Ovaj seminarski rad bavi se Gnutella protokolom koji pripada P2P mrežama. Kratko je opisan način na koji se u Gnutella mrežu uključuju novi klijenti, komunikacija među klijentima, pretraživanje te preuzimanje datoteka unutar mreže. Također, opisani su neki sigurnosni nedostaci ovog protokola i mogući napadi na njega.

Ključne riječi: Peer-to-Peer, Gnutella, napad

Uvod

Peer-to-Peer mreže se najčešće koriste za dijeljenje podataka među korisnicima. Putem ove mreže korisnici mogu preuzimati jedni od drugih multimedijske datoteke, podatke, programe itd. Preuzimanje ovakvih datoteka i sadržaja nije uvijek legalno na što treba obratiti pozornost.

Najpopularnije P2P mreže su BitTorrent, Gnutella i Freenet. U ovom seminarskom radu bit će detaljnjije opisana Gnutella mreža.

Gnutella, kao i ostale P2P mreže, dizajnirana je kako bi zadovoljila sljedeće ciljeve:

Gnutella protokol

Gnutella je protokol u kojem podatke razmjenjuju ravnopravna računala koristeći peer-to-peer mrežu. Ovaj protokol uglavnom se koristi za pretraživanje i dijeljenje datoteka. Sam izraz Gnutella predstavlja i grupu računala koji imaju Gnutella aplikaciju i tako tvore virtualnu mrežu.

Gnutella protokol podržava tradicionalni model klijent-server no on je u suštini decentralizirani model. Svako računalo u mreži predstavlja čvor koji može funkcionirati i kao klijent i kao server te se može pridružiti ili napustiti mrežu u bilo kojem trenutku bez utjecaja na ostatak mreže. Svaki čvor može slati upite ostalim čvorovima i prihvaćati upite čvorova koji se podudaraju sa sadržajem na vlastitom tvrdom disku.

Sljedeća slika prikazuje arhitekturu decentralizirane P2P mreže.

Gnutella mreža je nestrukturirana, a raspodjela datoteka unutar nje može biti sasvim slučajna. To predstavlja problem kako broj čvorova raste. Svaki dostupni čvor odgovara na upit bilo kojeg drugog čvora slanjem svog cjelokupnog sadržaja. Podaci koji dolaze do čvora se proporcionalno povećavaju s brojem čvorova u mreži. To je razlog zbog kojeg je mogućnost proširenja mreže ograničena.

Tipovi poruka

Gnutella protokol definira način na koji računala u mreži komuniciraju. Sljedeća tablica prikazuje vrste poruka:

TIP OPIS
PingKoristi se za otkrivanje poslužitelja (engl. Host) u mreži. Sudionik koji primi ping poruku trebao bi odgovoriti jednom ili više pong porukom.
PongOdgovor na ping. Sadrži adresu sudionika i informacije o količini podataka koje stavlja na raspolaganje mreži.
Query(Upit)Koristi se za pretraživanje mreže. Ako peer otkrije podudaranje u svojim lokalnim podacima, odgovara QueryHit-om.
QueryHit (Odgovor)Odgovor na upit. Primatelj dobiva informacije o podacima koji odgovaraju upitu.
PushZahtjev za preuzimanje datoteka od peer-ova zaštićenih vatozidom (engl. Firewall).


Pridruživaje klijenata i međusobna komunikacija

Novi klijenti koji se tek uključio u mrežu, ne zna informacije o ostalim peer-ovima u mreži te se ne može povezati s njima. Kako bi saznao IP adrese/priključke peer -ova koji postoje u mreži, novi klijent koristi bootstrap čvor. Bootstrap čvor sadrži listu peer-ova koji su uključeni u mrežu. Novi klijent se pomoću te liste može povezati s aktivnim peer-om koristeći TCP(Transmission Control Protocol).

Novi klijent (P) šalje ping poruku aktivnom klijentu mreže s kojim se povezao (Q). Aktivni klijent prosljeđuje ping poruku klijentima s kojima je on povezan (A,B) te se poruka tom analogijom širi mrežom (do C,D,E). Ovaj način prosljeđivanja poruke naziva se preplavljivanje mreže i prikazan je sljedećom slikom:

n

Preplavljivanje se ograničava u zaglavlju poruke TTL (engl. Time-To-Live) vrijednošću. Na sljedećoj slici je prikazano zaglavlje poruke.

ID poruke - 16-bajtni jedinstveni identifikator poruke u mreži

Tip - tip poruke: Ping (0x00), Pong (0x01), Push (0x40), Query (0x80), QueryHit (0x81)

TTL - Vrijednost koja označava koliko će puta poruka biti proslijeđena mrežom prije nego što nestane. Svaki klijent do kojega je poruka stigla će smanjiti ova vrijednost prije nego što proslijedi poruku idućem klijentu. Kada ova vrijednost dođe do 0, poruka se više neće prosljeđivati mrežom.

Hops - Vrijednost koja pokazuje koliko je puta poruka proslijeđena.

Duljina poruke - Duljina informacija koje dolaze nakon zaglavlja.

Nakon što svi potrebni klijenti prime ping poruku, oni odgovaraju s pong porukom. Pong poruka se vraća istim putem kojim je došla ping poruka. Novi klijent (P) prima mnoštvo pong poruka te preko njih može odabrati nove klijente s kojima će se povezati TCP protokolom.

Kako bi mreža konstantno bila ažurirana Svi peer-ovi šalju ping poruke periodično. Na sljedećoj slici prikazan je put jedne pong poruke.

Dok je ping poruka jednostavno predstavljena samo zaglavljem poruke (duljina poruke je 0), pong poruka sadrži dodatne informacije nakon zaglavlja. Slika prikazuje zaglavlje pong poruke:

Priključak - Broj priključka na kojem odgovarajući poslužitelj može prihvatiti vezu.

IP adresa - IP adresa odgovarajućeg poslužitelja.

Broj dijeljenih datoteka - Broj datoteka koje ovaj poslužitelj dijeli s mrežom.

Veličina dijeljenih datoteka - Veličina datoteka koje ovaj poslužitelja dijeli s mrežom u kilobajtima.

Pretraživanje

Pretraživanje se temelji na preplavljivanju mreže upitima. Upiti se šalju postojećim TCP vezama i funkcioniraju na gotovo isti način kao ping poruke. Uspješni odgovori se vraćaju istim putem kojim je došao upit i funkcioniraju gotovo isto kao pong poruke.

Ako je upit uspješno pronađen, odgovor sa informacijama o tom klijentu dolazi do klijenta koji je poslao upit. Ta dva klijenta uspostavljaju direktnu vezu i razmjenjuju podatke preko HTTP(Hypertext Transfer Protocol). Ako postoji više klijenata koji odgovaraju na upit, klijent koji je poslao upit može odabrati onog koji mu je najoptimalniji (ovisno o brzini prijenosa). Ako ne postoji odgovor na upit, pretraživanje se smatra neuspješnim.

Sljedeća slika prikazuje razmjenu podataka između klijenata A i D. A šalje upit klijentu B koji ga prosljeđuje kroz mrežu dok ne dobije odgovor. Klijent D šalje odgovor i prosljeđuje ga istim putem do računala A šaljući informacije o svojoj IP adresi, priključku, brzini prijenosa i slično. Klijenti A i D se direktno povezuju i razmjenjuju podatke.

Ako klijent primi odgovor na upit od klijenta koji je zaštićen vatrozidom i ne može uspostaviti vezu, može poslati push poruku. Kada do zaštićenog klijenta stigne push poruka, on može uspostaviti vezu ako može identificirati klijenta koji šalje upit.

Ranjivosti Gnutella protokola

U nastavku će biti opisani neki od mogućih napada na Gnutella protokol.

Denial of Service napad pomoću spam poruka

Ako računalo koristeći Gnutella mrežu preuzme zaraženi sadržaj, može postati aktivni sudionik Distributed Denial of Service (DDoS) napada.

DDoS napad izgleda otprilike ovako, napadač pretraži određenu skupinu IP adresa kako bi pronašao računala koja su zaražena te ih upotrebljava kako bi napao neki web poslužitelj. Računala šalju posebnu vrstu zahtjeva dok se poslužitelj ne zaguši.

Gnutella nema mjere koje bi spriječile i izbjegle DDoS napade. Štoviše, DDoS napad se lako može postići u ovoj mreži jer zlonamjerno peer računalo može lažno pozitivno odgovoriti na upit te tako poslati zloćudne datoteke klijentu koji je zatražio upit. Kod ovakvih napada iznimno je teško identificirati počinitelja jer se zahtjevi šalju iz različitih domena i s različitih IP adresa.

Sa strane napadača, vrlo je lako „podvaliti“ zloćudan program nekom od korisnika protokola, dovoljno je na primjer odgovarati na sve poruke koje sadrže traženu riječ te nasumično odabranu popularnu medijsku ekstenziju (npr. mp3, mpeg, wma). Također, moguće je postaviti manju veličinu datoteke tako da zloćudni program protokolu izgleda kao najbolja opcija za preuzimanje.

Jednom kad se zloćudni program nalazi na mnoštvu računala u mreži, svi napadaju određeni web poslužitelj te ga usporavaju i zagušuju do te mjere da posjetitelji više ne mogu otvoriti web stranicu. Sljedeća slika prikazuje širenje zloćudnog programa mrežom te napad na web stranicu:

Ovakve napade vrlo je teško spriječiti jer klijent nema nikakvu odgovornost prema upitima koje prima. U prilog tome ide i to što je u protokolu definirano da klijent, ako sadrži podatke koji odgovaraju upitu, može odgovoriti samo QueryHit porukom.

Pong napad

Ovakav napad također se ubraja u DDoS napade i može se lako izvesti na Gnutella protokolu. Ovaj napad se ne smatra toliko ozbiljnim i važnim, ali pokazuje određene ranjivosti ovog protokola.

Nakon što klijent pošalje ping poruku zloćudnom klijentu, on će odgovoriti pong porukom. Tipična pong poruka sastoji se od IP adrese i broja priključka za spajanje. Zloćudni klijent može poslati IP adresu i priključak nekog web poslužitelja. Klijent koji šalje upit će sve upite proslijediti njemu i tako ga možda zagušiti. Ovaj napad neće trajati dugo jer svi klijenti periodički šalju ping poruke susjedima u mreži kako bi mreža bila ažurirana. Kada klijent pošalje ping poruku web poslužitelju, on nije u mogućnosti odgovoriti pong porukom pa će ga klijent koji šalje ping poruku jednostavno ukloniti iz mreže i time je napad završen.

Sljedeća slika prikazuje pong napad:

Prikupljanje IP adresa (IP Harvesting)

Hakerima su svakakve informacije dobrodošle kako bi izvršili napad. Jedna od takvih informacija je i IP adresa. Obični korisnik Interneta ima IP adresu koja je poznata samo njemu i pružatelju internetskih usluga. P2P mreže ipak zahtijevaju dijeljenje IP adresa što ih čini plodnim tlom za hakere. Ako se nađe propust u sigurnosti kod jednog ili više klijenata Gnutelle, moguće je prikupiti IP adrese te pokrenuti masovni napad na korisnike mreže.

Otkrivena IP adresa zapravo i nije od velike koristi nakon nekog vremena jer se većini korisnika Gnutella mreže ona dinamički mijenja. Ovaj problem se javlja za korisnike koji imaju statičku IP adresu.

Ostale slabosti

Slanje virusa push porukom – nakon što klijent zaštićen vatrozidom primi push poruku, on bi trebao pokušati uspostaviti TCP/IP vezu sa zadanom IP adresom i na zadanom priključku. Nakon što je veza uspostavljena, klijent koji je poslao push poruku slijepo prihvaća sve što mu šalje klijent zaštićen vatrozidom. Klijent tako može prihvatiti i preuzeti viruse.

Zaključak

Gnutella je protokol temeljen na P2P mreži. Ovaj protokol služi za razmjenu podataka među računalima u mreži. Sva računala komuniciraju na jednostavan način, a slanje i primanje podataka odvija se koristeći HTTP internetski protokol.

Gnutella je svojedobno privukla veliko zanimanje u industriji i akademskom okruženju zbog svog komunikacijskog i podatkovnog modela, ali nedostatak je sigurnost mreže. Postoje neki nedostaci u ovom protokolu koji se lako mogu zlorabiti. Većina tih nedostataka mogla bi se poboljšati i učiniti mrežu sigurnijom. S druge strane, sva moguća poboljšanja sigurnosti čine ovu mrežu barem malo kompliciranijom te zahtijevaju veću količinu poruka i podataka koji prolaze mrežom.

Literatura

[1] Demetrios Zeinalipour-Yazti: Exploiting the Security Weaknesses of the Gnutella Protocol

[2] Wikipedia: Gnutella

[3] Chibuike Muoh: A Tutorial on Gnutella, Bittorrent and Freenet Protocols

[4] Peer-to-Peer mreže

[5] The Gnutella Protocol Specification v0.4