Jak unést TCP spojení

V článku se podíváme na techniku, pomocí které se dá unést TCP spojení. Útočníci ji používají v případech, kdy je nemožné zjistit heslo k určité službě, protože například používá jednorázová hesla. Nevynecháme však ani přehled programů, které umožňují tento útok provést.

Únos TCP spojení je útok, který je odhalen už řadu let a využívá nedostatečného zabezpečení protokolu TCP. I přes své stáří je stále použitelný. Útok spočívá v přivlastnění si cizího, již vytvořeného připojení k jinému síťovému zařízení (počítači, routeru, …) a následné možnosti komunikovat s tímto zařízením, aniž by detekovalo, že již nekomunikuje s původním klientem.

Samozřejmě je nutné dodat, že provádět tento útok proti cizím spojením je trestné a neetické. Pokud jej tedy budete zkoušet, čiňte tak prosím jen na svých vlastních zařízeních.

K čemu to slouží?

Unesení spojení používáme tam, kde nám nepomůže odposlechnutí hesla k dané službě. To může být například u jednorázových hesel. Dále se tento útok uplatní u služeb, u kterých se přenáší heslo různě šifrované nebo modifikované a bylo by časově náročné hledat skutečné heslo.

Co je třeba znát pro pochopení útoku?

Důležité je mít alespoň základní znalosti z oblasti protokolů TCP/IP. Dále budete potřebovat znát teorii, jak se navazuje TCP spojení a jak je to se sekvenčními čísly, což si probereme dále v tomto článku. Dále ještě budete potřebovat nějaké znalosti o odposlouchávání dat na sítí, které můžete najít například v seriálu Odposloucháváme data na přepínaném Ethernetu.

Navazování spojení u TCP protokolu

Například služba FTP pro přenos souborů využívá TCP protokol. Pokud budeme chtít komunikovat s určitým FTP serverem, zadáme jeho IP adresu do FTP klienta. Ten se k němu začne připojovat.

Ještě než se vrhneme do popisu navazování spojení, vysvětlil bych rád dvě dále používané zkratky. SČOB znamená sekvenční číslo odesílaného bytu a nabývá hodnoty pořadí prvního odesílaného bytu z datové části TCP segmentu. Další zkratka bude SČPB, která vyjadřuje přijatý byte. Toto číslo vyjadřuje pořadí posledního přijatého bytu z datové oblasti TCP segmentu plus 1 (zjednodušeně řečeno: signalizuje od jakého bytu nyní očekáváme data). Nejspíše jste nyní velice zmateni, ale nelamte si hlavu, s pomocí následujícího popisu navazování spojení v kombinaci s obrázkem byste to měli pochopit.

1) Úplně první data (datagram), která k FTP serveru dorazí, neponesou žádné stopy po FTP protokolu. Nejvyšší protokol, který bude datagram obsahovat, bude TCP protokol. Jak vypadá záhlaví protokolu TCP, můžete najít například zde, obrázek č. 9.3. Protokol TCP bude mít nastaven příznak SYN (synchronizuj) a SČOB na náhodnou hodnotu, SČPB 0 (sekvenční čísla jsou čtyři bytové hodnoty). Pokud server akceptuje toto spojení, tak datagram přijme a zapamatuje si všechny potřebné parametry včetně SČOB klienta.

2) Pokud server spojení v minulém kroku akceptoval, pak posílá klientovi zpátky datagram, kde je opět nejvyšším protokolem TCP. V TCP části budou nastaveny příznaky SYN (synchronizuj) a ACK (potvrzuji), SČOB bude nastaveno na náhodnou hodnotu a SČPB bude nastaveno na hodnotu, kterou server získal v minulé části od klienta, ovšem číslo bude o jedna větší (SČOB od klienta + 1, v případě přetečení hodnoty při přičítání se nic neděje). Příznakem SYN říká server klientu, aby si zapamatoval sekvenční číslo, určující pořadí odesílaného bytu (SČOB). Naopak příznakem ACK potvrzuje klientu, že obdržel všechny byty dat až po číslo, které je uvedeno v TCP záhlaví (SČPB), a je připraven přijmout byte o pořadí tohoto čísla.

3) Klient v tomto kroku potvrzuje přijetí datagramu, který poslal server ve druhém kroku. Všimněte si, že doposud se sekvenční čísla inkrementovala pouze o jedničku. To je způsobeno tím, že TCP hlavička není počítána jako odeslaná data. Pouze pokud je nastaven příznak SYN, tak je TCP hlavička brána jako 1 B. Pokud si toto všechno budete ověřovat programem Ethereal nebo Wireshark, bude vypadat to, jako by byla sekvenční čísla vždy počítána od nuly. Ve skutečnosti jen oba programy tato čísla převádí na relativní (tzn. od všech čísel odečítají původní hodnoty), což činí z důvodu lepší čitelnosti pro člověka. Toto chování se dá v nastavení vypnout.

4) a 5) Od této chvíle mohou oba počítače komunikovat i pomocí vyšších protokolů (v našem případě pomocí FTP). Tyto dva kroky jsou tu z toho důvodu, aby bylo zřejmé, jak se následně potvrzují a nastavují sekvenční čísla.

Handshake

Jaký je význam sekvenčních čísel?

Znalost těchto čísel a dodržování číslování je velice důležité. Pokud nějaké zařízení obdrží TCP segment se špatným číslováním, jsou tato data neplatná. My pro provedení našeho útoku potřebujeme tato čísla znát, což znamená, že si je musíme nějako opatřit. Proto použijeme některou z technik pro odposlouchávání dat na síti. Tento útok se může také provést i bez znalosti těchto čísel, pomocí tipování, to je ovšem poměrně náročné (na čas a datový tok) a nepoužívané.

Určitě vás také napadlo, že můžeme jednouše zrušit určité spojení, když známe sekvenční čísla. Takovému útoku se říká desynchronizace a spočívá v poslání libovolných dat (nejčastěji binárních nul) na klienta nebo server s tím, že se vydáváme za druhou stranu. To znamená, že oběť tato data přijme, změní informaci o tom, jaký bajt přijala, a informuje druhou stranu o přijetí těchto dat. Ovšem ta o námi poslaných datech neví, a proto jí sekvenční čísla nebudou sedět. V tomto případě vznikne tzv. ACK bouře a spojení je desynchronizováno, což znamená, že už po něm nebude možno přenést žádná data.

Co to je ACK bouře?

ACK bouře vznikne, pokud se sekvenční čísla, která si udržují server a klient, rozejdou, což se normálně nestane, ale jakmile se do hry vmísí útočník, může tuto situaci vyvolat. Když pak server nebo klient pošlou nějaká data, tak ten druhý zjistí, že sekvenční čísla nesedí a pošlou TCP segment s nastaveným příznakem ACK a „správně“ (pro každou stranu jsou správná čísla jiná) vyplněnými sekvenčními čísly. Ovšem pro druhou stranu jsou tato čísla špatná, a tak udělá to samé (pošle TCP segment s příznakem ACK a „správně“ nastavenými sekvenčními čísly). Oba počítače se ocitnou v nekonečné smyčce, dokud se jeden paket neztratí.

Praxe

Tento útok nemá pevně daný průběh. Existuje pro něj několik variant, které se od sebe více či méně liší. My si popíšeme útok tak, jak ho implementuje program Hunt.

Jak jsem již psal výše, je potřeba znát sekvenční čísla, proto aplikujeme například útok ARP Cache Poisoning, tím docílíme toho, že uvidíme veškerý síťový provoz libovolného počítače umístěného v lokální síti. Pokud jsme na nepřepínané sítí (spojovacími síťovými prvky jsou huby), pak nepotřebujeme používat žádny útok. Ovšem na nepřepínané síti a nebo při použití útoku CAM Flooding budou vznikat ACK bouře. Je to zapříčiněno tím, že nemůžeme jakýmkoliv datům zabránit, aby byla doručena.

MITM - unos TCP

Jakmile tedy tečou veškerá data přes nás, rozdělíme spojení klienta se serverem na dvě spojení, a to server – útočník a útočník – server.

Rozdeleni - unos TCP

Nyní obě dvě spojení budeme spravovat zvlášť. Takto to dělá například program Hunt, pokud se bude jednat o telnet (nešifrovaná obdoba ssh). Pak spojení útočník – klient obsluhuje tak, že na uživatelova data nijak nereaguje, ale přijímá je. Útočník ale může komunikovat se serverem plnohodnotně. Pokud se pak útočník rozhodne, že dá vše do pořádku, není to problém. Je ovšem potřeba sesynchronizovat sekvenční čísla. To se provede tak, že je na klienta poslán potřebný počet znaků a zároveň je klient vyzván k zadání x znaků. Je toho docíleno tak, že na klienta je poslán např. vzkaz, že došlo k výpadku proudu, a ať zkusí zadat x znaků.

Samozřejmě nejjednodušším způsobem je toto spojení rozdělit na dvě, stejně jako v předchozím případě, a ihned spojení útočník – klient ukončit. Server nic nepozná a klient si bude myslet, že jen došlo k výpadku. Další možností může být, že po rozdělení spojení na dvě budeme obhospodařovat obě, a to tím způsobem, že data od klienta budeme přeposílat serveru a vracet klientu odpovědi od serveru a zároveň budeme komunikovat se serverem my.

EBF16

Programy pro automatizaci útoku

Pokud si budete chtít zkusit tento útok, můžete použít programy, které vše zautomatizují. Pro operační systémy Windows je to program T-sight a pro operační systémy Linux je to výše zmiňovaný Hunt nebo Juggernaut. Ze všeho nejlehčí na ovládání je program T-sight. Pokud budete dané programy zkoušet, tak nezapomínejte, že únos spojení i odposlouchávání dat mohou být trestné. Návod v angličtině pro ovládání programu Hunt a T-sight naleznete mezi odkazy v závěru.

Doufám, že se vám další článek o útocích líbil, i když asi nebude pro úplné začátečníky nejlehčí na pochopení. Pokud vás téma ale zaujalo natolik, že máte zájem o další informace, nebo se ještě něco chcete dozvědět, mohu vám doporučit starší dokument o IP Hijackingu nebo článek na serveru Passivemode.net.

Anketa

Co pro vás znamená počítač?

13 názorů Vstoupit do diskuse
poslední názor přidán 2. 12. 2006 11:09

Školení PPC reklamy pro začátečníky

  •  
    Principy fungování PPC reklamy.
  • PPC nejsou jen ve vyhledávačích.
  • Zjednodušte si správu šikovnými nástroji.

Detailní informace o školení PPC reklamy »