Hlavní navigace

Noční můra jménem SYN flooding

Michal Krause 29. 7. 1999

Jedním z nejrozšířenějších útoků v TCP/IP prostředí je takzvaný SYN flooding. I přes svou principiální jednoduchost může být velmi účinný, což je navíc znásobeno tím, že se proti němu prakticky nelze bránit se stoprocentní účinností.

Nejdříve si řekněme, co to vlastně SYN flooding je. Jde o útok typu DoS (Denial of Service – odepření služby), jeho cílem tedy není vstoupit do systému, získat nebo poškodit nějaká data a podobně. DoS útoky způsobují obvykle dočasnou nefunkčnost určité služby, například HTTP (web) nebo SMTP (e-mail).
Podstatou SF je využití jedné z vlastností TCP protokolu, zvaného three-way handshake, neboli třísměrné potřesení rukou, které si klade za cíl ověřit, zda obě strany o spojení opravdu stojí.

Představme si, že KLIENT iniciuje spojení se SERVEREM. KLIENT tedy pošle první paket s nastaveným SYN bitem.

Schéma 1


SERVER odpoví paketem, který má nastaven SYN a ACK bit a uloží si informaci o nadcházejícím spojení do interní datové struktury. Tomuto stavu se říká polootevřené spojení (half-open connection).

Schéma 2


Klient nyní za normálních okolností dokončí potřesení třetím krokem, kterým je odeslání paketu s nastaveným ACK bitem. V tuto chvíli je úvodní část spojení dokončena a po síti mohou začít proudit data.

Schéma 3


SF vlastně nedělá nic jiného, než že začne odesílat množství paketů se SYN bitem, jako kdyby chtěl normálně komunikovat, neprovádí však již třetí fázi handshaku, takže na stroji, který je cílem útoku, dojde postupně k zaplnění bufferů pro polootevřená spojení. Cíle bylo dosaženo, server není schopen přijímat další pokusy o spojení a tudíž se stává nedostupným. Případnou horší alternativou může být úplné vyčerpání volné paměti, pakliže není omezen maximální počet spojení – to najisto způsobí pád serveru s možným poškozením dat.

Výše uvedený příklad má pro útočníka jednu slabinu: velice snadno by šlo vypátrat, odkud je útok veden a správce serveru by mohl podniknout účinná protiopatření. Záškodníci jsou ovšem vynalézaví a tak SF zdokonalili o funkci zvanou IP spoofing, neboli falšování IP adres.
Za normálních okolností samozřejmě nelze dost dobře falšovat IP adresu, protože potřebujete, aby data dorazila na váš počítač (ovšem úplně vyloučeno to není). V okamžiku, kdy však vlastně o spojení nestojíte, není vůbec problém vydávat se třeba za Altavistu nebo Pentagon. Kromě maskovacího účelu přináší ale toto „vylepšení“ ještě další prvek do hry. Když totiž počítač, jehož IP adresu si útočník vypůjčil, najednou obdrží paket SYN+ACK, ačkoliv předtím neposlal SYN paket, odpoví paketem RST, který okamžitě polootevřené spojení ukončuje. Tím se ovšem značně snižuje síla útoku a tak si útočníci vybírají pokud možno IP adresy strojů, které momentálně nejsou dostupné. Cíl útoku je tak nucen držet polootevřené spojení až do vypršení timeoutu, který se obvykle pohybuje okolo 75 vteřin!

A jak se tedy lze bránit? Možností je několik, ale bohužel jsem nucen konstatovat, že ani jedna z metod není stoprocentní.

Možností, která se jaksi automaticky nabízí, je zvětšení prostoru pro polootevřená spojení. Prakticky vzato to ale neřeší vůbec nic: váš OS zvýší své paměťové nároky, zatímco útočník se zasměje a snadno zvýší intenzitu útoku.

Další metodou ochrany by mohlo být snížení timeoutu pro polootevřená spojení, ale zde opět platí to samé – zvýšením intenzity útoku by zřejmě záškodník dosáhl stejného výsledku a navíc hrozí, že při příliš nízkém timeoutu server zahodí i některá korektní spojení.

Třetí možností ochrany jsou speciální firewally. Principů, na kterých fungují je několik. FW se například předřadí serveru, tak, že každé spojení přejde přes něj. FW pak při obdržení SYN paketu otevře úplné spojení se serverem, čímž docílí toho, že server nedrží polootevřené spojení. Pokud žadatel o spojení správně dokončí handshake, funguje pak FW jako relay – tedy přesměrovává pakety mezi žadatelem a serverem. Je zřejmé, že podobný FW musí být speciální zařízení, neboť jinak by šlo pouze o přesunutí problému na jiný stroj.
Firewally vypadají zajímavě, ale zřejmě zdaleka ne všechny (pokud vůbec nějaké) jsou opravdu spolehlivou ochranou. Nedávno jsem se bavil s provozovatelem jednoho z největších českých serverů a postěžoval jsem si na problémy se SF. Onen člověk mi povídá: „My jsme si na to pořídili firewall“
A já na to: „A pomáhá to?“
Odpověď: „Spíš ne.“
Jak povzbudivé, že?

Čtvrtou možností je inteligentní filtrování paketů. Server by si v tomto případě udržoval spojový seznam všech SYN paketů za určitý časový úsek. Pokud by počet SYN paketů přicházejících na jeden soket přesáhl určitou míru, porovnala by se charakteristika takových paketů se staršími záznamy a pokud by to vypadalo podezřele, okamžitě by se toto spojení stornovalo. Nevýhody jsou myslím zřejmé: detekční algoritmus byt musel být velice „chytrý“ a také rychlý. Nicméně myšlenka je to zajímavá.

Poslední mě známou možností aktivní ochrany je použití tzv. SYN-cookies (neplést s cookies v prohlížeči, s těmi to nemá co dělat). Když server odpovídá na prvotní SYN paket, přidává do odpovědi tzv. initial sequence number. Toto číslo bude následně sloužit jako základ pro číslování oktetů v rámci spojení. Jeho hodnota je více méně v rukou serveru. Této vlastnosti cookies právě využívají: server jednoduše vypočítá rekonstruovatelné číslo (hash) ze zdrojové IP adresy, portu a dalších údajů žadatele o spojení, odešle SYN+ACK odpověď a polootevřené spojení úplně zahodí. Pakliže obdrží ACK paket obsahující sequence number, které odpovídá tomu, co mohl sám vygenerovat, otevře spojení, jako kdyby existovalo polootevřené spojení. I tato metoda má své pro i proti. Pro hovoří relativní jednoduchost a účinnost, proti naopak to, že existuje (zřejmě jenom teoretická) možnost uhodnutí hashe a rovněž to, že kvalitní hashovací funkce stojí nějaký ten výpočetní čas a paradoxně může vést ke zvyšování zatížení stroje. Proto se tato metoda začíná používat až v okamžiku, kdy jsou buffery pro polootevřená spojení zaplněny. Zabrání se tak pádu, případně nedostupnosti serveru, ale u hodně navštěvovaného serveru se nevyhnete velkému přetížení. Podpora SYN-cookies je v linuxovém jádře zahrnuta tuším od verze 2.0.33 nebo 2.0.34.

Existuje ještě pátá možnost obrany a tou je prevence. Jde o metodu potenciálně nejspolehlivější, ale bohužel prakticky nedosažitelnou. Jak jsem již říkal, při SF se používá falšování IP adres. Kdyby všichni poskytovatelé měli na svých routerech filtrovací pravidlo, které by zabraňovalo průchodu směrem ven paketům se zdrojovou IP adresou, která se v této síti nemůže vyskytovat, bylo by po problému (nebo by byl alespoň menší). Bylo by totiž výrazně snazší vypátrat alespoň přibližnou lokaci útočníka a ve spolupráci s jeho providerem pak učinit jeho řádění přítrž. Proto se zeptejte svého poskytovatele, zda má takto nastavené routery. Pomůžete tím dobré věci.

Doporučená četba:
RFC 793 – TRANSMISSION CONTROL PROTOCOL
Phrack Magazine, Volume Seven, Issue Forty-Eight, File 13 of 18

Našli jste v článku chybu?

22. 7. 2001 18:54

Bob (neregistrovaný)

Není co dodat, článek je naprosto dokonalý.

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Pečete cukroví a zbyl vám bílek?

Pečete cukroví a zbyl vám bílek?

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR