Copyright © 1997 RNDr. Libor Dostalek
 
 

Filtrace na úrovni TCP/UDP paketu

Zatímco filtrací protokolu IP se určovalo, které počítače mohou mezi sebou komunikovat, filtrací na úrovni protokolu TCP (resp. UDP) se tato komunikace omezuje jen na některé aplikace běžících na těchto počítačích.

 Kombinac9 filtrace protokolu IP a protokolů TCP/UDP je možné stanovit, aby konkrétní počítače mohly mezi sebou komunikovat pouze konkrétními aplikacemi. Navíc je možné filtrací zajistit, aby klienti určité aplikace z vnitřní sítě mohli využívat serverů v Internetu a přitom naopak, aby cizím klientům byl znemožněn přístup do vnitřní sítě. Např. aby se klienti z vnitřní sítě dostali na WWW-servery v Internetu, ale aby cizí klienti se nedostali na WWW-servery vnitřní sítě.


Začněme však od začátku. TCP (resp. UDP) paket se vkládá (balí) do IP-datagramů. IP-datagram nesoucí TCP (resp. UDP) paket může být během své cesty Internetem fragmentován na několik IP-datagramů:

 Všimněte si, že např. z jednoho TCP paketu mohou vzniknout tři IP-datagramy.

IP-datagramy se dopravují samostatně. Tj. routerem prochází TCP paket v několika IP-datagramech, přitom TCP záhlaví je jen v jednom z nich! Jak může provádět router filtraci TCP paketů? Router to dělá jednoduše. V případě, že chce filtrovat protokol TCP, pak filtruje pouze ty IP-datagramy, které obsahují TCP-záhlaví. Ostatní propouští. Příjemce se pak snaží sestavit z jednotlivých došlých částí TCP-paketů celý paket. Ale to se mu nepodaří, protože mu vždy schází začátek. Po dosažení časového limitu to příjemce vzdá. Jediný problém je v tom, že příjemce, který nesestavil TCP paket, tak protokolem ICMP (packet reassembly time expired) o tom informuje odesilatele TCP paketu. Tato informace vysvětluje útočníkovi proč se nedostal dále. Doporučuje se tedy takovéto odpovědi také odfiltrovávat, aby útočník nedostával další informace. Takže filtrace na úrovni protokolu TCP se často spojuje s filtrací protokolu ICMP, o které bude řeč později.

 Z hlediska filtrace je v TCP (resp. UDP) záhlaví využitelný port odesilatele a port příjemce. V TCP záhlaví je navíc využitelný ještě příznak ACK.

Servery používají všeobecně známá čísla portů (některé používané porty pro protokol TCP i UDP jsou uvedeny v příloze). Klient ještě před tím než začne komunikovat, tak si od správy portů (služba operačního systému) nechá dynamicky přidělit číslo portu. S uzavřením spojení se toto číslo vrací operačnímu systému k dalšímu použití - pro další klienty. Klienti používají dynamicky přidělovaná čísla portů platná pouze na dobu spojení.

V UNIXu (na kterém zpravidla běží servery) se čísla portů rozdělují hranicí 1023 na porty privilegované a neprivilegované. Privilegované (0-1023) mohou používat pouze procesy, které spustil superuživatel. Servery spouští většinou právě superuživatel. Takže porty 0-1023 se někdy označují jako serverovské porty, porty s vyššími čísly jako klientské. Nemusí to však být pravidlem, některé servery je běžné spouštět na portech o vyšších číslech (např. X-servery, Archie, databázové servery atd.). Naopak např. v MS-DOSu je snadné, aby klient použil jako klientský port např. port 23, který je běžně používán serverem protokolu telnet (programem telnetd). Ve filtrech budeme však nadále předpokládat, že klient používá porty >1023.
 
 

Protokol TCP

Zopakujme si výměnu paketů mezi klientem a serverem v protokolu TCP. Jako příklad si zvolíme protokol telnet, jehož server používá port 23.

 Nejprve musí být spuštěn server na portu 23 (např. program telentd). Budeme předpokládat, že server má IP-adresu 128.1.1.1. Pak klient (např. program telnet) může žádat spuštěný server o služby. Předpokládáme, že IP-adresa klienta je 128.1.2.1. Před tím než může začít klient s komunikací, tak si musí nechat od svého operačního systému přidělit nějaký volný port >1023. Předpokládejme, že systém klientovi přidělil port 1500.

 Nyní již klient může protokolem TCP navazovat spojení se serverem. Spojení je určeno pěticí:
 
 
Protokol IP odesilatele Port odesilatele IP příjemce Port Příjemce
TCP 128.1.2.1 1500 128.1.1.1 23

Protokol TCP vytváří spojení mezi dvěmi aplikacemi. V tomto spojení se obě strany vzájemně potvrzují došlé pakety. K potvrzování došlých paketů se v TCP záhlaví používá příznak ACK. Tento příznak se nastavuje ve všech paketech TCP, kterými se potvrzují předchozí došlé pakety. Příznak ACK tedy není nastaven v prvním paketu, kterým klient navazuje spojení. Ve všech dalších paketech klient má již nastaven příznak ACK. Všechny pakety, které odesílá server mají rovněž nastaven příznak ACK. Pro úplnost je však nutné dodat, že s příznakem ACK ještě souvisí příznak RST (viz kapitola o protokolu TCP). Routery tuto skutečnost zohledňují a z hlediska našeho výkladu to není až tak podstatná skutečnost, proto se o příznaku RST dále již nebudeme zmiňovat.
 
 

Jinými slovy: první paket odeslaný klientem nemá nastaven příznak ACK, kdežto všechny pakety, které odesílá server mají nastaven příznak ACK. Zakáže-li se tedy některým směrem propouštět TCP-pakety s nenastaveným příznakem ACK, pak tímto směrem znemožníme klientům navazovat spojení se servery.

 Budeme předpokládat, že klient je na vnitřní síti a server v Internetu. Filtr, který bude umožňovat klientovi 128.1.2.1 přístup protokolem telnet do Internetu a vše ostatní bude zakazovat - včetně přístupu klientů protokolu telnet z Internetu do vnitřní sítě bude mít tvar:
 
 
Pravidlo Směr Adresa odesilatele Port odesilatele Adresa Příjemce Port příjemce Povolit/Zakázat
C1 ven 128.1.2.1 >1023 0.0.0.0/0 (vše) 23 Povolit
C2 dovnitř 0.0.0.0/0 (vše) 23 128.1.2.1 >1023 Povolit
default1 dovnitř 0.0.0.0/0 (vše) 0.0.0.0/0 (vše) Zakázat
default2 ven 0.0.0.0/0 (vše) 0.0.0.0/0 (vše) Zakázat

Všimněte si, že některá pravidla (některé řádky) mají specifikovaný port a jiné jsou pro všechny porty, takže se port prostě neuvádí.

 Otázkou zůstává, zda-li je takováto filtrace dostatečná. Není. Jako protipříklad si stačí zvolit na vnitřní sítí libovolný server, který používá port >1023. Např. Archie (1525), X-server (600x), databázové servery atd.

 Proberme si pro ilustraci následující situaci. Ve vnitřní síti se provozuje databázový server např. Informix. Tento server má přiřazenu IP-adresu 128.1.2.10 a port 1700.

 Informix spravuje uživatel informix, který je správcem databáze. Jelikož uživatel informix není superuživatel, tak nemůže spustit svůj server na privilegovaném portu, tj. na portu v intervalu 0 až 1023, proto používá v našem podniku port 1700.

 To je ale přece příležitost pro útočníka. Vždyť přece jsme povolili našim klientům pro telnet přístup do Internetu. Porovnejte předchozí tabulku a zjistíte, že útočník o libovolné IP-adrese, když použije jako klientský port port=23, pak tímto filtrem také projde.

 Útočník se skrze náš filtr dostane. Máme však ještě jedno eso v rukávu, které takovémuto útoku může zabránit - příznak ACK. Když klient vnitřní sítě dostává odpovědi od serveru v Internetu, tak v každém TCP paketu je nastaven příznak ACK. Naopak, když útočník (klient) z Internetu chce atakovat (inicializovat spojení) se serverem ve vnitřní síti, tak nesmí mít v prvním paketu nastaven příznak ACK. Propustí-li filtr z Internetu dovnitř pouze TCP pakety s nastaveným ACK, tak jimi nelze navázat spojení a útočník má smůlu. Takže náš filtr doplníme o další podmínku:
 
 
Pravidlo Směr Adresa odesilatele Port odesilatele Adresa Příjemce Port příjemce ACK Povolit/Zakázat
C1 ven 128.1.2.1 >1023 0.0.0.0/0 (vše) 23 Povolit
C2 dovnitř 0.0.0.0/0 (vše) 23 128.1.2.1 >1023 vždy Povolit
default1 dovnitř 0.0.0.0/0 (vše) 0.0.0.0/0 (vše) Zakázat
default2 ven 0.0.0.0/0 (vše) 0.0.0.0/0 (vše) Zakázat

Závěr k protokolu TCP

Filtr na přístupovém routeru může poměrně bezpečně chránit naši síť v případě, že chceme našim klientům umožnit přístup do Internetu a bránit se proti opačnému přístupu.

 Některých aplikačních protokolů je však lepší se vzdát úplně nebo je omezit při připojení podnikové sítě do Internetu:

Protokol UDP

Protokol UDP (podobně i protokol ICMP) nemá bit ACK. Proto při povolování průchodu skrze filtr pro tyto protokoly musíme být obzvláště obezřetní a povolovat jen to co je nezbytně nutné. Prakticky důležité aplikační protokoly používající UDP jsou: DNS, SYSLOG a NTP. Díky svým zvláštním vlastnostem (popsaným v dalších kapitolách) můžeme úspěšně čelit i útokům na tyto protokoly.

 Ostatní aplikační protokoly využívající UDP se většinou používají jen v rámci vnitřní sítě, proto není nutné je propouštět přes přístupový router. Např. protokol TFTP je považován obecně za nebezpečný, proto by nemělo být umožňováno používání tohoto protokolu směrem do Internetu.

V případě, že se přes přístupový router nějaké UDP-datagramy propouští, pak se často používá tzv. dynamická filtrace.

 Dynamickou filtraci si objasníme na následujícím obrázku. Klient posílá UDP-datagramem na DNS server dotaz, ve kterém je žádost o překlad jména na IP-adresu. Filtr UDP-datagram směrem ven propustí, ale poznamená si IP-adresu a port odesilatel a IP-adresu a port příjemce. Po určitý časový interval nastaví filtr v opačném směru pro odpověď. V odpovědi je zaměněna IP-adresa a port odesilatele a příjemce. Odeslal-li by protějšek UDP-datagram ještě jinému počítači ve vnitřní sítí, pak je tento datagram zahozen.


 
 

Filtrace ICMP

Protokol ICMP je pomocným protokolem protokolu IP. Záhlaví datagramů ICMP se skládá ze záhlaví IP následovaného záhlavím pro ICMP. Když při filtraci filtr zjistí, že se jedná o ICMP-dataram, pak se podívá při rozhodování do jeho ICMP záhlaví (obdobně jako to provádí s TCP pakety).

 Protokol ICMP používá různé typy zpráv. Pomocí těchto zpráv informuje o nedostupnosti sítí, testuje dostupnost uzlu v Internetu atd. V následující tabulce jsou uvedeny jednotlivé typy ICMP zpráv. Většinu z nich jednoduše přístupovým routerem nepropustíme. Diskutovat má smysl pouze o typech zpráv, které jsou v následující tabulce zvýrazněny. Ostatní bychom propustili jen v nějakém mimořádném případě.
 
 
Typ Název
0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
6 Alternate Host Address 
8 Echo 
9 Router Advertisement 
10 Router Selection 
11 Time Exceeded 
12 Parameter Problem 
13
Timestamp 
14 Timestamp Reply 
15 Information Request 
16 Information Reply 
Typ Název
17 Address Mask Request 
18 Address Mask Reply 
30 Traceroute 
31 Datagram Conversion Error 
32 Mobile Host Redirect 
33 IPv6 Where-Are-You 
34 IPv6 I-Am-Here 
35 Mobile Registration Request 
36 Mobile Registration Reply 
37 Domain Name Request 
38 Domain Name Reply 
39 SKIP 
40 Photuris 
...  ... 

Zvláštností protokolu ICMP je, že kromě toho, že ICMP-datagramy mohou routerem (filtrem) procházet, tak je také router může generovat. Rozlišujeme následující případy:

Protokoly IGMP, ARP a RARP

Protokoly IGMP, ARP a RARP jsou podobně jako protokol ICMP podmnožinou protokolu IP.

Protokoly ARP a RARP používají pro komunikaci oběžníky, které jak známo routery nezpracovávají - odfiltrovávají je vždy. Nedostanou se tedy ani k filtru, proto se jimi dále nebudeme zabývat.

Protokol IGMP slouží pro přihlášení se a odhlášení se k multicastovým skupinám. Jeho používání má smysl v případě, že váš přístupový router je mrouterem (multicast router). Filtrace zpráv protokolu IGMP je obdobná filtraci zpráv ICMP a software běžných routerů (např. CISCO) jí podporuje.

SYSLOG

Většina routerů umí pomocí aplikačního protokolu SYSLOG odesílat informace o propouštěných i nepropouštěných IP-datagramech na jiný počítač, kde je tyto informace možné archivovat do souboru.

Odesílejte tyto informace zásadně na počítač ve vnitřní (chráněné) síti. Vyžaduje určitou praxi odhadnou co vše by se mělo takto zaznamenávat. Zvolíte-li zaznamenávání příliš velkého množství informací, pak se tím router silně zdržuje místo aby routoval. Důležité je zaznamenat si podezřelé datagramy - např. datagramy adresované do vnitřní sítě s adresou odesilatele rovněž z vnitřní sítě atp.

Obecně propouštění protokolu SYSLOG skrze přístupový router pro jiné účely se snažíme zásadně. nepovolovat.

Zakázané adresy

Zjistíme-li, že z nějaké IP-adresy nás atakuje útočník, pak tuto adresu si zaneseme do množiny zakázaných adres. Filtry pak rozšíříme o explicitní zákaz komunikace s těmito adresami. Za zmínku stojí i to, že zakázané adresy můžeme mít i z vnitřní sítě.

Závěr

Pro správce je však důležité, aby dokázal nakonfigurovat přístupový router. Čili přepsat pravidla, která jsme si psali do tabulky z tabulky do konfiguračních příkazů routeru. Každý výrobce routeru přitom používá jiný konfigurační jazyk. Ukážeme si pro ilustraci jen příklad konfigurace u routerů firmy CISSCO.

 Vrátíme se k našemu filtru umožňujícímu pro počítač 128.1.2.1 přístup do Internetu pro protokol telnet. Tabulka vypadala takto:
 
 
Pravidlo Směr Adresa odesilatele Port odesilatele Adresa Příjemce Port příjemce ACK Povolit/Zakázat
C1 ven 128.1.2.1 >1023 0.0.0.0/0 (vše) 23 Povolit
C2 dovnitř 0.0.0.0/0 (vše) 23 128.1.2.1 >1023 vždy Povolit
default1 dovnitř 0.0.0.0/0 (vše) 0.0.0.0/0 (vše) Zakázat
default2 ven 0.0.0.0/0 (vše) 0.0.0.0/0 (vše) Zakázat

Routery CISCO nejprve samostatně definují přístupové filtry příkazem access-list. Za příkazem access-list je

Každý interfejs může mít vstupní i výstupní filtr. V případě, že bychom prováděli filtraci na interfejsu seriál 0, pak příkazy konfiguračního jazyka pro routery CISCO týkající se našeho filtru by vypadaly asi takto:
 
 
access-list 101 permit  tcp     host 128.1.2.1                  0.0.0.0 255.255.255.255         eq 23
access-list 101 deny    ip      0.0.0.0 255.255.255.255         0.0.0.0 255.255.255.255

access-list 102 permit  tcp     0.0.0.0 255.255.255.255         host 128.1.2.1          eq 23 established
access-list 102 deny    ip      0.0.0.0 255.255.255.255         0.0.0.0 255.255.255.255

interface serial 0 
ip access-group 101 out
ip access-group 102 in