Co je to NAT?
NAT je zkratkou pro Network Address Translation, což bychom mohli přeložit jako překlad síťových adres. Jedná se o funkci routerů, která umožňuje překládat adresy z vnitřního adresního rozsahu do veřejného a naopak. V důsledku se tak vnitřní adresy nedostanou nikdy do internetu.
NAT vznikl jako důsledek omezeného a poměrně nízkého počtu veřejných IP adres. Protože každý uživatel dnešního internetu nemůže mít adresu z vnějšího rozsahu, byl vymyšlen princip, který dovoluje poskytovateli připojení za jednu adresu „skrýt” celou vnitřní síť, nehledě na její rozsah.
Princip NATu je poměrně jednoduchý:
- klient vyšle požadavek na bránu vnitřní sítě
- router pakety zachytí, změní jejich IP adresu na svou vnější
- router pakety označí tak, že je odešle z náhodného TCP portu
- router si do tabulky zapíše, který port zvolil a který klient k němu patří
- při přijetí odpovědi provede router reverzní akci a pakety vrátí klientovi
Je zřejmé, že pro klienta je celý proces naprosto transparentní a komunikaci nijak neovlivňuje (až na některé výjimky, těmi se ale nebudeme zabývat). Servery „na druhé straně” také o ničem neví a bez potíží odpovídají samotnému překladači.
Nevýhodou NATu je „jen” to, že není možné se zvenčí přímo spojit s počítačem uvnitř zaNATované sítě. Bez dalších úprav tedy nemáme možnost například provozovat vlastní server. To samozřejmě většině klientů vůbec nevadí a naopak oceňují bezpečnostní stránku věci.
Přelez, přeskoč a podlez NAT
Hlavním problémem IPv4 sítích je malý adresní prostor, který nedovoluje každému počítači přidělit jeho vlastní veřejnou IP adresu. To přináší problém v případě, že chcete propojit dva počítače, které jsou za překladačem adres (NAT). I tady ovšem existuje snadné řešení.
NAT má totiž z principu jakýsi pasivní vliv na bezpečnost sítě. Sekundárním důsledkem NATu je překrytí veškeré vnitřní komunikace se světem. Případný útočník tak
- nezná strukturu sítě
- nemůže se spojit s konkrétním počítačem
- může jen odpovídat na výzvy zevnitř
Uživatelé mohou mít falešný pocit bezpečí a často se domnívají, že je NAT dokáže ochránit před útokem a nepotřebují už firewall. Bohužel stejný názor mají často i poskytovatelé připojení a někteří výrobci hardware. Nezřídka si totiž můžeme přečíst, že ADSL router obsahuje funkce firewallu a ochrany uživatele. Po připojení ovšem bohužel zjistíme, že nabízí jen NAT.
Ukážeme si, že samotný NAT není všemocný a ve skutečnosti je možné na síť zaútočit. Samozřejmě budeme předpokládat naprostou absenci firewallu, což ovšem není tak utopická situace, jak by se mohlo zdát.
Mýtus 1: Nikdo nezná mou vnitřní IP
Vnitřní IP adresa vašeho počítače se přes NAT za normálních okolností nedostane a router ji ani nijak nedeleguje. Existuje ovšem způsob, jak zjistit alespoň některé informace.
Jednak můžeme (v případě dalších pokusů) adresy tipovat. To není často složité, většinou jsou používány adresy z několika málo rozsahů jako 192.168.* a podobně. Pokud bychom potřebovali, mohli bychom proto adresu uhodnout.
Sofistikovanější „řešení” ovšem nabízejí některé protokoly a aplikace. Poměrně běžné aplikace jako ICQ a někteří P2P klienti totiž šíří informace o IP adrese vašeho počítače. Není tedy problém zjistit, jakou adresu má uživatel v rámci vnitřní sítě.
Útočník může také do jednoho z počítačů v síti propašovat svůj kód například přes děravou aplikaci. Tento kód pak může síť skenovat a posílat do internetu informace o tom, jak síť vypadá.
Možná přemýšlíte, k čemu je někomu vnitřní IP adresa počítače, na který se stejně nedokáže připojit. On to ale dokáže, jak si ukážeme později.
Mýtus 2: NAT brání útokům na síť
Protože přímé spojení do sítě není možné (to mimochodem není pravda – počkejte si na další mýtus), uživatelé mají pocit, že není možno na síť jako takovou útočit. Opak je však pravdou.
Existuje celá řada útoků, které dokáží ohrozit samotnou komunikaci se sítí a NAT na ně nemá nejmenší vliv. Jedná se o útoky typu DoS, které mohou zablokovat připojení sítě k internetu. Některé z nich si představíme.
LAND attack
Útok, při kterém je na otevřený port napadeného počítače odeslán upravený SYN paket, který vyzývá k zahájení komunikace. Jako odesílatel i příjemce tohoto paketu je vyplněn počítač oběti.
Napadený počítač začne na paket odpovídat sám sobě a v případě většího množství podobných paketů je možno oběť naprosto zahltit a znemožnit jí další přenášení regulérních paketů.
Smurf attack
Během tohoto útoku je na broadcast adresu sítě odesíláno velké množství ICMP (ping) paketů s falešnou adresou odesílatele. Pokud není takový paket blokován firewallem, dojde k jeho distribuci do vnitřní sítě. Všechny počítače začnou automaticky odpovídat a dojde k zahlcení výstupního routeru.
Ping flood
V tomto případě jde o klasické zahlcení počítače velkým množstvím ICMP (ping) paketů. Předpokládá se, že útočník má větší šířku pásma než oběť. Bez další ochrany začne oběť navíc automaticky odesílat reakce na tyto pakety a zahltí tak i pásmo směrem ven.
Mýtus 3: nikdo se na mě nepřipojí
Přichází to nejzajímavější. Toto je obecně nejrozšířenější mýtus, který ovšem dává uživatelům největší pocit bezpečí. Princip NATu totiž pasivně uživatele před neznámými pakety z venčí ochrání. Při popisu principu jsme si řekli, že si NATující router do tabulky ukládá informace o spojení a podle ní pak zpětně překládá přicházející pakety.
Pokud tedy pošleme na router nový paket, který nepatří k žádnému spojení, NAT netuší, kam jej směrovat, a tak jej automaticky zahodí. Toto je tedy ona pasivní ochrana, ale NAT není konstruován k tomu, aby před podobným chováním chránil, je to jen důsledek jeho principu.
Z toho důvodu není obecně u NATu počítáno se všemi možnostmi a útočník má možnost, jak NAT obejít. V podstatě mu k tomu bude stačit znát jen vnitřní IP adresu počítače, se kterým se chceme spojit. Jak ji zjistit, jsme si už řekli.
Střílíme přes NAT
K další „magii” budeme potřebovat přísadu nazvanou source routing. To je technika, která umožňuje předem zvolit, kudy budou putovat naše pakety. Můžeme si tak předem najít cestu k NATujícímu počítači a do hlavičky našich paketů ji vyplnit. Nejedná se o nic tajemného, source routing popisuje RFC 791 a jedná se o standardní vlastnost IP.
Nyní k samotnému prostřelení NATu: vytvoříme pakety, ve kterých jako cílovou adresu vyplníme vnitřní adresu některého ze strojů v síti. Jako bránu nastavíme NATující router. Ten je schopen nám udělat cestu dovnitř. Pomocí source routingu si sami zvolíme cestu.
Pak pakety vyšleme. Ty pak podle naší zvolené cesty doputují až k NATu, který je přijme jako brána. Protože je cílem cesty počítač, který router zná, doručí pakety až k němu.
Samozřejmě předpokládáme, že na NATu není zároveň i firewall. Ten by samozřejmě poznal, že se jedná o podvod už jen tím, že na vnější zařízení dorazily pakety určené pro vnitřní síť. Tohle ovšem NAT nezajímá (jak jsme si řekli, není to bezpečnostní mechanismus) a měl by pakety normálně doručit. Existuje samozřejmě řada faktorů ovlivňujících výsledek, zde nám jde ovšem jen o to, ukázat koncept a principiální „děravost” samotného NATu.
Samozřejmě source routing je velmi nebezpečná metoda, kterou firewally obecně blokují, protože je s ní možno provádět řadu různých podvodů. Pokud ovšem nemáme žádný filtr a spoléháme se na NAT, útočníkovi nic nestojí v cestě.
NAT není firewall
Ukázali jsme si, že samotný NAT neochrání síť a není to ani jeho účelem. To, že schovává počítače za sebou, je jen vedlejším efektem jeho primární funkce. NAT nemá sloužit jako ochrana ani jako paketový filtr.
Pochopitelně zde naznačeným útokům je možno velmi jednoduše zabránit několika elementárními pravidly na firewallu. Stačí nám jednoduše filtrovat vnější provoz a přímým útokům se dokážeme vyhnout. Samotný NAT na to však nestačí.