Moduł dla firewalla umożliwiający oznaczanie pakietów wchodzących w skład połączeń sieci peer-to-peer Adam DOMAŃSKI Politechnika Śląska, Instytut Informatyki adamd@top.iinf.polsl.gliwice.pl Ryszard MACELUCH rmac@top.iinf.polsl.gliwice.pl Piotr KASPRZYK kwadrat@top.iinf.polsl.gliwice.pl
Rozwój technik wymiany danych pomiędzy użytkownikami stał się podstawą do zaproponowania, a następnie stworzenia nowego sposobu wymiany plików. Nowe protokoły są ukierunkowane jedynie na szybką wymianę plików pomiędzy anonimowymi użytkownikami połączonymi w ramach Internetu. Zlikwidowano wąskie gardło, jakim była szybkość wysyłania danych przez serwery (węzeł pobiera fragmenty plików od kilku sąsiadów jednocześnie) oraz zwiększono skalowalność (za funkcjonowanie sieci odpowiedzialne są setki komputerów, nie jeden serwer). Aktualnie jesteśmy świadkami zjawiska niekontrolowanej ekspansji sieci peer-to-peer.
Siecią peer-to-peer (w skrócie zwaną p2p) nazywamy sieć, w której nie istnieje podział komputerów na klientów i serwerów, lecz występują tzw. węzły (ang. nodes), pełniące rolę zarówno klienta, jak i serwera dla innych węzłów (ang. peers) w danej sieci.
Model sieci peer-to-peer jest wykorzystywany w popularnych usługach internetowych. sieć serwerów grup dyskusyjnych USENET, wykorzystujących protokół NNTP (Network News Transfer Protocol) W dzisiejszych czasach termin sieci peer-to-peer jest powszechnie utożsamiany z sieciami wymiany plików: Gnutella FastTrack eDonkey BitTorrent DirectConnect
Aktualnie działają i są ciągle rozwijane różne odmiany sieci peer-to-peer. Wszystkie działają równolegle, niezależnie od siebie. Każda z nich korzysta z innego protokołu do komunikacji pomiędzy poszczególnymi węzłami. Sieci implementują również własne protokoły wymiany danych.
Wykrywanie sieci peer-to-peer Wymiana danych pomiędzy węzłami w ramach pierwszych sieci peer-to-peer odbywała się przy użyciu stałych numerów portów. Znając je i dysponując prostym firewallem filtrującym można było bez większych problemów wyizolować ruch generowany pomiędzy węzłami Współczesne sieci peer-to-peer komunikują się ze sobą przy wykorzystaniu zmiennych numerów portów w ramach protokołu transportowego. W takim przypadku standardowe firewalle działające na warstwie sieciowej i transportowej stają się bezużyteczne.
Identyfikowanie i izolowanie ruchu w ramach sieci wykorzystujących zmienne numery portów jest nadal możliwe, lecz wymaga wykorzystania firewalla aplikacyjnego, oferującego możliwość filtrowana pakietów w oparciu o zawarte w nich dane. Analizując pakiety sieci peer-to-peer można określić ciągi symboli pojawiające się w niektórych pakietach. Stwierdzenie, że w ramach połączenia przesłano pakiet („charakterystyczny”), który zawiera określony ciąg symboli, jest jednoznaczne z wykryciem ruchu peer-to-peer.
Niebezpieczeństwa metody: zastosowanie błędnego wzorca (wieloznacznego) może spowodować, że ruch nie związany z sieciami peer-to-peer będzie błędnie klasyfikowany, fragmentacja pakietów może uniemożliwić poprawne klasyfikowanie ruchu; konieczna jest defragmentacja pakietów przed ich analizą, duże wymagania na moc obliczeniową - firewall musi przeglądać dane wszystkich pakietów, nie tylko ich nagłówki, pakiet odpowiadający wzorcu („charakterystyczny”) przesyłany jest najczęściej tylko raz w ramach pojedynczego połączenia peer-to-peer - nie wykrycie pakietu uniemożliwi późniejszą poprawną klasyfikację połączenia.
Zastosowanie wyrażeń regularnych Metoda pozwala na: • korzystanie z tzw. symboli wieloznacznych, które mogą przyjąć jedną z kilku wartości, • tworzenie dodatkowych powiązań pomiędzy symbolami (np. znak pasujący do symbolu wieloznacznego musi zostać powtórzony),
Analiza ruchu sieciowego generowanego przez sieci peer-to-peer Celem analizy było poznanie budowy (zawartości) przynajmniej pakietów („charakterystycznych”) przesyłanych w ramach pojedynczego połączenia peer-to-peer i wypracowanie wyrażeń regularnych, umożliwiających identyfikację tych pakietów.
Przykładowa analiza ruchu w sieci Gnutella. Pakietu wysyłany zaraz po nawiązaniu połączenia TCP T 192.168.0.1:1913 -> 82.224.246.167:41942 [AP] 47 4e 55 54 45 4c 4c 41 20 43 4f 4e 4e 45 43 54 GNUTELLA CONNECT 2f 30 2e 36 0d 0a 55 73 65 72 2d 41 67 65 6e 74 /0.6..User-Agent 3a 20 53 68 61 72 65 61 7a 61 20 32 2e 30 2e 30 : Shareaza 2.0.0 2e 30 0d 0a 52 65 6d 6f 74 65 2d 49 50 3a 20 38 .0..Remote-IP: 8 32 2e 32 32 34 2e 32 34 36 2e 31 36 37 0d 0a 41 2.224.246.167..A 63 63 65 70 74 3a 20 61 70 70 6c 69 63 61 74 69 ccept: applicati 6f 6e 2f 78 2d 67 6e 75 74 65 6c 6c 61 32 2c 61 on/x-gnutella2,a 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 67 6e 75 pplication/x-gnu 74 65 6c 6c 61 2d 70 61 63 6b 65 74 73 0d 0a 41 tella-packets..A 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 ccept-Encoding: 64 65 66 6c 61 74 65 0d 0a 47 47 45 50 3a 20 30 deflate..GGEP: 0 2e 35 0d 0a 50 6f 6e 67 2d 43 61 63 68 69 6e 67 .5..Pong-Caching 3a 20 30 2e 31 0d 0a 56 65 6e 64 6f 72 2d 4d 65 : 0.1..Vendor-Me 73 73 61 67 65 3a 20 30 2e 31 0d 0a 58 2d 51 75 ssage: 0.1..X-Qu 65 72 79 2d 52 6f 75 74 69 6e 67 3a 20 30 2e 31 ery-Routing: 0.1 0d 0a 58 2d 55 6c 74 72 61 70 65 65 72 3a 20 46 ..X-Ultrapeer: F
Zrzut pakietu następujący po nim, odsyłany jako odpowiedź T 82.224.246.167:41942 -> 192.168.0.1:1913 [AP] 47 4e 55 54 45 4c 4c 41 2f 30 2e 36 20 32 30 30 GNUTELLA/0.6 200 20 4f 4b 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a OK..User-Agent: 20 53 68 61 72 65 61 7a 61 20 31 2e 38 2e 31 31 Shareaza 1.8.11 2e 32 0d 0a 4c 69 73 74 65 6e 2d 49 50 3a 20 38 .2..Listen-IP: 8 32 2e 32 32 34 2e 32 34 36 2e 31 36 37 3a 34 31 2.224.246.167:41 39 34 32 0d 0a 52 65 6d 6f 74 65 2d 49 50 3a 20 942..Remote-IP: 36 32 2e 38 37 2e 31 38 38 2e 39 36 0d 0a 41 63 62.87.188.96..Ac 63 65 70 74 3a 20 61 70 70 6c 69 63 61 74 69 6f cept: applicatio 6e 2f 78 2d 67 6e 75 74 65 6c 6c 61 32 0d 0a 43 n/x-gnutella2..C 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 ontent-Type: app 6c 69 63 61 74 69 6f 6e 2f 78 2d 67 6e 75 74 65 lication/x-gnute 6c 6c 61 32 0d 0a 41 63 63 65 70 74 2d 45 6e 63 lla2..Accept-Enc 6f 64 69 6e 67 3a 20 64 65 66 6c 61 74 65 0d 0a oding: deflate.. 43 6f 6e 74 65 6e 74 2d 45 6e 63 6f 64 69 6e 67 Content-Encoding 3a 20 64 65 66 6c 61 74 65 0d 0a 58 2d 55 6c 74 : deflate..X-Ult
W przypadku, gdy węzeł nie może obsłużyć nowego klienta, odsyła następujący pakiet: T 63.147.88.88:15193 -> 192.168.0.1:1890 [AP] 47 4e 55 54 45 4c 4c 41 2f 30 2e 36 20 35 30 33 GNUTELLA/0.6 503 20 4d 61 78 69 6d 75 6d 20 63 6f 6e 6e 65 63 74 Maximum connect 69 6f 6e 73 20 72 65 61 63 68 65 64 0d 0a 55 73 ions reached..Us 65 72 2d 41 67 65 6e 74 3a 20 53 68 61 72 65 61 er-Agent: Sharea 7a 61 20 32 2e 30 2e 30 2e 30 0d 0a 41 63 63 65 za 2.0.0.0..Acce 70 74 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f pt: application/ 78 2d 67 6e 75 74 65 6c 6c 61 32 0d 0a 43 6f 6e x-gnutella2..Con 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c 69 tent-Type: appli 63 61 74 69 6f 6e 2f 78 2d 67 6e 75 74 65 6c 6c cation/x-gnutell 61 32 0d 0a 58 2d 54 72 79 2d 55 6c 74 72 61 70 a2..X-Try-Ultrap
Ostatecznie komputer (klient) potwierdza zaakceptowanie połączenia poprzez wysyłanie pakietu T 192.168.0.1:1913 -> 82.224.246.167:41942 [AP] 47 4e 55 54 45 4c 4c 41 2f 30 2e 36 20 32 30 30 GNUTELLA/0.6 200 20 4f 4b 0d 0a 4c 69 73 74 65 6e 2d 49 50 3a 20 OK..Listen-IP: 36 32 2e 38 37 2e 31 38 38 2e 39 36 3a 36 33 34 62.87.188.96:634 36 0d 0a 41 63 63 65 70 74 3a 20 61 70 70 6c 69 6..Accept: appli 63 61 74 69 6f 6e 2f 78 2d 67 6e 75 74 65 6c 6c cation/x-gnutell 61 32 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 a2..Content-Type 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d : application/x- 67 6e 75 74 65 6c 6c 61 32 0d 0a 41 63 63 65 70 gnutella2..Accep 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 64 65 66 6c t-Encoding: defl 61 74 65 0d 0a 43 6f 6e 74 65 6e 74 2d 45 6e 63 ate..Content-Enc 6f 64 69 6e 67 3a 20 64 65 66 6c 61 74 65 0d 0a oding: deflate..
Do identyfikacji pakietów należy użyć wyrażenia regularnego o postaci (wyrażenie pasuje do drugiego i trzeciego pakietu) /^GNUTELLA/[0-9.]+ 200 OK/.
Moduł regexp Moduł regexp to filtr rozszerzający funkcjonalność linuksowego firewalla o możliwość wyszukiwania pakietów, których zawartość odpowiada określonemu wyrażeniu regularnemu. IPTABLES oferuje już funkcjonalność oznaczania połączeń, filtr koncentruje się jedynie na analizowaniu zawartości pakietów. Zastosowanie odpowiednich wyrażeń regularnych umożliwia stworzonemu rozwiązaniu wykrywanie i oznaczanie połączeń generowanych przez sieci peer-to-peer.
iptables ... -m regexp --regexp '/wyrażenie regularne/opcje' [--begin-offset przesunięcie] [--end-offset przesunięcie] ... --regexp określa wyrażenie regularne, które jest kryterium klasyfikacji pakietów. --offset-begin określa opcjonalne przesunięcie względem początku danych, od którego należy rozpocząć analizę danych ‑‑offset-end określa miejsce, do którego należy analizować dane.
iptables -A FORWARD -m regexp --regexp '/wyrażenie/' -j DROP Przykłady: Blokowanie połączeń: iptables -A FORWARD -m regexp --regexp '/wyrażenie/' -j DROP Blokada wraz z jednoczesnym poinformowaniem nadawcy o odrzuceniu pakietu: iptables -A FORWARD -p tcp -m regexp --regexp '/wyrażenie/' -j REJECT --reject-with tcp-reset To samo dla połączeń UDP: iptables -A FORWARD -p udp -m regexp --regexp '/wyrażenie/' -j REJECT --reject-with icmp-port-unreachable
Oznaczanie połączeń: iptables -A FORWARD -m connmark --mark 0x0 -m regexp --regexp '/wyrazenie/' -j CONNMARK --set-mark 0x1 Limitowanie liczby równoległych połączeń: iptables -A FORWARD -p tcp -m connmark --mark 0x0 -m regexp --regexp '/wyrażenie1/' -j CONNMARK 0x1 iptables -A FORWARD -p tcp -i eth1 -m connmark --mark 0x1 -m connlimit --limit-above 100 -j REJECT --reject-with tcp-reset Kształtowanie ruchu
Wnioski W wyniku prac uzyskano moduł firewalla aplikacyjnego dla systemu operacyjnego Linux, w którym wzorce przekazywane do modułu nie są na sztywno umieszczone w jego kodzie, lecz przekazywane jako parametr przez użytkownika. W rezultacie testów związanych z badaniem skuteczności wykrywania i oznaczania pakietów prawie wszystkie programy służące wymianie plików, nie nawiązały połączeń z siecią peer-to-peer. Wyjątek stanowiły BitTorrent i Kazaa (klient sieci FastTrack). Pomimo nawiązania połączenia, nie udało się jednak rozpocząć pobrania żadnego z plików. Podczas testów nie stwierdzono zakłóceń w pracy pozostałych aplikacji (przeglądarka WWW, klient FTP oraz gra sieciowa).
Wykorzystanie wyrażeń regularnych w procedurach analizujących zawartość pakietów jest celowe, gdyż elastyczna konfiguracja oraz współpraca z wszystkimi filtrami i celami firewalla czyni zaprezentowany moduł uniwersalnym narzędziem, pozwalającym na filtrowanie dowolnego rodzaju ruchu sieciowego, nie tylko połączeń peer-to-peer.