SYN cookies je klíčový prvek obrany proti útoku záplavou paketů protokolu TCP s příznakem SYN, pro který se používá anglické označení SYN flood. Útok spočívá v zaslání velkého množství žádostí o navázání spojení, které je nutno jistou dobu uchovávat (ve frontě). Tyto žádosti však nebudou dovedeny do konce, čímž dojde k zaplnění oné fronty a odmítání dalších, i korektních žádostí.

Hlavním tvůrcem technologie SYN-cookies je Daniel J. Bernstein, který ji definoval jako „částečný výběr počátečního čísla sekvence paketu TCP“.

V případě použití SYN-cookies server po obdržení žádosti o navázání spojení (paketu s příznakem SYN) pošle klientovi odpověď a onu žádost ihned odstraní z fronty. Do odpovědi přitom nevložil sekvenční číslo zcela náhodné, ale vygenerované podle daných pravidel. Obdrží-li server od klienta potvrzení odpovědi (paket s příznaky SYN a ACK), je podle čísla sekvence schopen zpětně odvodit, zda se jedná o korektní paket, a pokud ano, je spojení navázáno.

Implementace Při navazování TCP-spojení klient pošle serveru TCP-paket s příznakem SYN. Jako odpověď server pošle klientovi TCP-paket s příznaky SYN a ACK. Jak je možné se dočíst u TCP protokolu, jedna z částí paketu se nazývá sekvenční číslo (sequence number), kterého se v protokolu TCP užívá k seřazení paketů po průchodu sítí. Podle specifikace TCP může jedna ze stran určit číslo první sekvence, což druhá strana musí respektovat. Takže SYN-cookies jsou počáteční čísla sekvencí n, která jsou pečlivě vybírána podle následujících pravidel:

Nechť t je čítač zvyšující se každých 64 sekund. Nechť m je maximální velikost segmentu, kterou by měl server uchovávat v jednom záznamu fronty SYN. Nechť s je čtyřiadvacetibitový výsledek tajné, kryptografické funkce počítaný přes IP adresu serveru i klienta, číslo portu a hodnotu čítače t.

Takže počáteční TCP sekvence neboli SYN-cookie se počítá například takto: Prvních 5 bitů: t mod 32. Další 3 bity: zakódovaná hodnota reprezentující číslo m. Zbývajících 24 bitů: s.

(Poznámka: Protože m se kóduje na tři bity, server může použít jen 8 jedinečných hodnot m.)

Server zvolil počáteční číslo TCP-sekvence a klient je povinen podle specifikace protokolu TCP toto respektovat. Paket s příznaky SYN a ACK přijde od klienta s číslem sekvence n+1. Server tedy odečte jedničku a má číslo sušenky, kterou poslal klientovi. Pak provede tyto operace: Zkontroluje hodnotu t, aby zjistil, zda již nevypršel časový limit. Přepočítá s, aby zjistil, zda je SYN-cookie platná. Zjistí hodnotu m z tříbitového kódu v SYN-cookie, což mu pomůže rekonstruovat záznam ve frontě SYN.

Pokud je vše v pořádku, pokračuje se v navazování podle obvyklého scénáře: pošle klientovi TCP paket s příznakem ACK.

Výhody Využití metody SYN-cookies neporušuje specifikace a je kompatibilní se všemi implementacemi TCP protokolu.

Nevýhody Při používání SYN-cookies je třeba mít na paměti tyto dvě věci: Číslo m je jen tříbitové, tedy jde o celé číslo 0 ÷ 7 (takže se skýtá jen osm možností) Paket SYN specifikuje též nastavení spojení (například větší datová okna), ale tato nastavení jsou zapomenuta, neboť pakety se neukládají

Tato omezení je třeba brát jako jistou míru sub-optimality. Jejich efekt je klienty postřehnut jen vzácně. Ale je-li server bez technologie SYN-cookies vystaven útoku, další pokusy o spojení jsou zamítnuty a to je dosti protivné. Zachování dosažitelnosti služby za cenu ztráty pár tajemných vychytávek je tedy rozumný kompromis.

Historie Techniku vytvořil Daniel J. Bernstein a Eric Schenk v září roku 1996. První implementaci provedl o měsíc později Jeff Weisberg na operačním systém SunOS. Eric Schenk uvolnil implementaci pro jádro Linuxu v únoru 1997 (současná implementace je řízena pomocí net.ipv4.tcp_syncookies).

Kategorie:Internetové protokoly Kategorie:Bezpečnost počítačových sítí