Diit.cz - Novinky a informace o hardware, software a internetu

DoS a DDoS útoky na vzestupu cílených útoků

Útoky s cílem odepření služby (Denial of Service, či zkráceně DoS) jsou jednou z nejúčinnějších metod cílených útoků na síťovou infrastrukturu a internetové servery obecně. Poslední dobou se DoS útoky objevují stále častěji i v českém internetu.
blog
ddos-attack

Nebezpečí, které DoS útoky představují, se už několikrát prokázalo i na známých a dobře zabezpečených serverech.

Kyberútoky

Útoky na počítačové systémy se dají jednoduše rozdělit podle cílů útočníka. Útočník může mířit na data uložená v počítačích oběti a to buď proto, aby data ukradl, anebo aby je upravil či zničil. Tento druh útoku bývá technicky nejsložitější a je také nejméně obvyklý.

Obvyklejší druh útoku je snaha o masové ovládnutí počítačů bez ohledu na to, čí jsou, v jakých sítích jsou připojené anebo zda jsou na nich uložena nějaká zajímavá data. Smyslem těchto akcí je získání výpočetního výkonu, místa na discích a síťového pásma obětí a v důsledku pak vybudování takzvaného botnetu. Po úspěšném ovládnutí určitého množství počítačů obvykle následuje zneužití takto uloupených prostředků k dalším útokům či jiné škodlivé činnosti. Tyto útoky jsou velmi časté a běžní uživatelé se běžně setkávají s pokusy o průnik od takzvaných wormů - virů, které se šíří internetem přes maily, závadné webové stránky nebo ostatní masově používaný software.

Poslední druh útoku, který nás zajímá v tomto článku nejvíc, jsou útoky na servery s cílem dočasně omezit jejich provoz, případně je úplně vyřadit, tedy DoS (Denial of Service) útoky.

peak_speeds_during_attack

Slabá místa pro DoS útoky

Slabá místa, na která cílí DoS útoky, představují tři druhy prostředků, jenž potřebují počítače k provádění užitečné práce. Je to výpočetní výkon (CPU power), operační paměť a síťové pásmo. Pokud se útočníkovi povede jeden z těchto prostředků vyčerpat, může tak zamezit ostatním uživatelům v používání služeb systému.

DoS útoky se někdy provádí "hrubou silou" (brute-force), kdy útočník zpravidla zmobilizuje velké množství ovládnutých počítačů (botnet) a způsobí, že botnet začne najednou zatěžovat terč útoku obrovským náporem normálních požadavků a přetíží ho jimi za hranici návrhové kapacity. Tomuto druhu útoku pomocí botnetu se říká DDoS (Distribuovaný DoS).

Počítačové systémy obsahují slabá místa v podobě chyb v návrzích komunikačních protokolů i aplikační logiky. Tyto chyby jsou sice ze všech nejméně pravděpodobné, ale na druhou stranu jsou velmi těžko odstranitelné. Vedle toho jsou počítačové systémy plné chyb implementace na všech úrovních od hardwaru, přes operační systém, middleware, překladače a interpretery programovacích jazyků až ke koncovým aplikacím. Pravděpodobnost chyb v tomto výčtu vzrůstá a jejich nebezpečnost by měla teoreticky klesat. Přesto může bezpečnostní chyba v aplikaci umožnit útočníkům přinejmenším vyřadit aplikaci z provozu. Někdy však umožňuje i přetížit celý systém a v důsledku toho ohrozit všechny ostatní aplikace, které mohou být na systému provozovány.

Jednotlivé příklady útoků a možnosti obrany

  • TCP SYN flood

Tento známý útok patří už spíše do historie. Útok spočíval ve zneužití návrhu a implementačních detailů protokolu TCP v operačních systémech. Protokol TCP vždy musí navázat spojení takzvanou "3-way handshake" procedurou před tím, než přes něj vůbec můžou začít téct nějaká užitečná data. Handshake proceduru začíná strana, která chce navázat spojení tím, že pošle TCP datagram s flagem SYN nastaveným na 1. opačná strana, která přijímá spojení, SYN datagram přijme a zapamatuje si detaily o žádosti. Následně odešle nazpátek datagram s flagy SYN a ACK nastavenými na 1. A nakonec strana, která žádala o spojení, odešle datagram s flagem ACK nastaveným na 1, kterým celou proceduru ukončí a potvrdí navázání spojení.

Slabé místo tohoto mechanismu je v tom, že počítač, který přijímá spojení, musí alokovat paměť pro uložení detailů o spojení už v okamžiku, kdy přijme první SYN datagram. Když pak počítač, který žádal o spojení, nezareaguje na zpětný SYN+ACK datagram, zůstane spojení takzvaně polootevřené a musí se počkat na timeout, než bude na straně příjemce zlikvidováno. Během tohoto timeoutu je stále zabraná paměť, která byla alokována v okamžiku příchodu SYN datagramu.

Nebezpečí je v tom, že vygenerovat a odeslat velké množství úvodních SYN datagramů, a to i řádově desítky tisíc za vteřinu, je velmi snadné. Útočníka to stojí jen málo výpočetního výkonu, skoro žádnou paměť a trochu síťového pásma. Na straně terče útoku ale takový nápor TCP SYN datagramů vyvolá buď vyčerpání paměti nebo narazí na limit maximálního počtu polootevřených spojení. V obou případech to způsobí, že cílový server nebude přijímat nová spojení od klientů. To je klasický případ přechodných následků DoS útoku.

Obrana proti tomuto útoku je dnes již samozřejmostí ve všech moderních serverových systémech a jmenuje se SYN cookies. Smyslem SYN cookies je vyhnout se nutnosti alokovat paměť pro spojení už při příchodu prvního datagramu. Místo toho se zakódují nejnutnější informace do hlavičky SYN+ACK TCP datagramu. Příjemce spojení se je nemusí pamatovat, protože tyto informace bude možné zpětně odvodit a ověřit po příchodu ACK datagramu, když už bude spojení jisté. Další explicitní obranu proti TCP SYN flood útokům poskytují firewally s connection trackingem či specializované boxy a moduly do routerů. Tyto prostředky mohou implementovat i složitější ochranu proti zahlcení SYN datagramy. Některé zastaralé a jednoduché domácí firewally ale mohou být samy snadným terčem SYN flood útoku. Proto je třeba v souvislosti s tímto útokem dávat pozor na všechny síťové prvky, které mohou potenciálně zpracovávat hlavičky transportní vrstvy a navrhnout či zapnout pro ně vhodnou obranu proti tomuto útoku.

  • Slowloris

Myšlenkou tohoto útoku je, podobně jako u TCP SYN flood útoku, zaútočit na limit, který je ve skutečnosti nastaven proto, aby chránil server před chvilkovým přetížením za cenu zdržení či dočasného odmítání požadavků a zabránil větším škodám, např. zhroucení nebo kritickému zpomalení aplikace či celého serveru.

V tomto případě útočník navazuje spojení s HTTP serverem (existují ovšem varianty Slowloris útoku i pro jiné protokoly, než jen HTTP) a začne se serverem po tomto spojení formálně správně komunikovat, jako by to byl korektní klient. Trik ale je, že útočník komunikuje naschvál neuvěřitelně pomalu. Například, že pošle jeden znak za 30 vteřin. Smyslem útoku je, udržet spojení otevřené co nejdéle a neumožnit serveru, aby spojení uzavřel z formálních důvodů. Tzn. požadavek je platný, přichází tak, aby spojení nenarazilo na timeout a nebylo zavřeno. Těchto pomalých spojení útočník otevře a udržuje maximální počet, který dokáže, a to tak, aby se jimi naplnil limit serveru na maximální počet otevřených spojení. Server pak nebude přijímat nová spojení od skutečných klientů.

Na rozdíl od TCP SYN flood útoku je Slowloris takzvaný nízkoprofilový útok (low-profile). SYN flood útok generoval velké množství datagramů a byl zpravidla dobře viditelný na grafech zátěže sítě a tím spíše pak v dumpech síťového provozu, kde TCP SYN datagramy často převažovaly nad vším ostatním provozem. Slowloris útok je naopak téměř neviditelný, stojí za ním pouze pár jednotlivých datagramů, které přicházejí s velkým časovým odstupem a statisticky tvoří nepatrnou část síťového provozu.

Obrana je jednak aktivní monitoring serverů a služeb na nich, automatické blokování podezřelých vln nových spojení a nastavení globálního limitu pro délku trvání spojení, resp. pro dobu trvání přijmutí požadavku.

  • Útoky pomocí fragmentů

Od poloviny roku 2013 se objevilo několik vědeckých prací i vzorových implementací útoků pomocí IP fragmentů. Smyslem těchto útoků je využívat slabiny návrhu i implementace v mechanismu spojování fragmentovaných packetů k zahazování či dokonce modifikaci obsahu datagramů i bez přístupu k přenosovému kanálu. Tyto útoky tak umožňují vstupovat do komunikace dvou vzdálených počítačů.

Předpokladem útoku je, že síťový provoz mezi dvěma vzdálenými počítači je fragmentován. K tomu dochází, pokud se mezi nimi nachází bod redukce MTU a terče o tom nevědí, protože z nějakého důvodu nefunguje nebo není zapnut mechanismus PMTU discovery, případně když jde o UDP provoz či se TCP z nějakého důvodu nepřizpůsobilo zjištěnému PMTU. Navíc fragmentaci UDP provozu může útočník uměle vyvolat tím, že podvrhne packety mechanismu PMTU discovery.

Fragmentovaný provoz se spojuje na cílovém počítači podle 16-bitového pole ID v IP hlavičkách. Problém je, že hodnota ID je předvídatelná, protože je generována counterem. Na některých operačních systémech je tento counter dokonce globální pro všechny spojení a tak se útočník snadno dozví jeho aktuální hodnotu a může snadno odhadnout, v jakém rozmezí se pohybují hodnoty ID pro zájmový provoz. Na základě odhadu ID hodnot pak útočník může zformulovat své vlastní fragmenty, které odešle příjemci napřed a tyto fragmenty se spojí s částí skutečného packetu v původních fragmentech. Spojený packet může být jednoduše chybný, například kvůli neplatnému kontrolnímu součtu a tím pádem tak útočník způsobí zahození celého packetu. V tom tkví potenciál na DoS útok. Tento trik je ale mnohem mocnější, neboť útočníkovi dovoluje modifikovat datagramy a podvrhnout jejich obsah, což je zvlášť cenné pro útoky na DNS. Útočník může poslat více podvržených fragmentů s různými ID hodnotami v odhadnutém rozsahu, aby tak maximalizoval pravděpodobnost, že se trefí. Navíc útočník posílá zpravidla druhý fragment v pořadí před tím, než dojde první fragment od skutečného odesilatele a cílový host je přesto přijme, přerovná a složí ve správném pořadí. Rozdíl času přijmutí fragmentů může být i několik desítek sekund. Díky tomu se útočník nemusí trefovat do malého časového okna mezi prvním a druhým skutečným fragmentem a má naopak hodně času - řádově desítky sekund, zatímco latence a mezery mezi packety se obvykle měří v nanosekundách či milisekundách.

Obrana proti tomuto typu útoků zatím neexistuje, protože útok využívá bezpečnostní mezery samotných standardů pro rodinu protokolů TCP/IP. Částečné prevence lze dosáhnout vhodným nastavením firewallů a snížením limitů pro velikost cache pro sestavování IP datagramů a snížení timeoutu pro sestavení datagramu. Tyto zásahy mohou ale vést k degradaci výkonu systému.

Jediné známé a standardizované řešení je znemožnit takzvaný IP spoofing, neboli znemožnit útočníkům odesílat IP datagramy s jinou zdrojovou adresou, než jaká je jejich skutečná adresa. V tomto bodě je třeba podotknout, že útočníci málokdy útočí ze svých vlastních počítačů a proto, aby opravdu došlo ke znemožnění útoků, museli by omezení IP spoofingu udělat téměř všichni poskytovatelé internetové konektivity, což je v daném okamžiku naprostá utopie. Zavedení těchto opatření doporučuje standard BCP 38 [1] z roku 2000. Přesto je dodnes velké množství sítí nejen v rozvojových zemích, ale i u nás, v celé Evropě i v USA, které tato opatření neimplementovaly, a nelze se domnívat, že se na tom v dohledné době něco změní.

  • Útoky na implementační chyby

Běžně používaný serverový software, operační systémy a dokonce i firmware a hardware mohou obsahovat bezpečnostní chyby, které umožní způsobit jejich havárii.

Příkladem těchto útoků byl dnes již historický Ping of Death. Útok spočíval v tom, že útočník poslal na terč rozfragmentovaný ICMP echo request (ping) packet delší, než je maximální dovolená délka IP packetu (64 kB). Svého času to u mnoha operačních systémů vedlo k přetečení packetu z bufferu, přepsání části paměti jádra a následně mohla nastat havárie systému.

Podobná chyba s potenciálem pro DoS útok byla odhalena nedávno v Linuxovém jádře [2]. Předmětná chyba umožňuje způsobit havárii Linuxového jádra pouhým odesláním dvou nevhodně zformátovaných fragmentů.

  • Útoky na síťové pásmo pomocí multiplikace

Poslední druh útoků, který zde popíši, je velmi zákeřný, protože zneužívá užitečné služby a běžné síťové mechanismy k útokům či jejich zesilování. Ve všech případech jde o druh útoku hrubou silou na síťové pásmo. Cílem útočníka tedy je vygenerovat tolik provozu, že se zahltí přenosové linky nebo síťové prvky po cestě k serverům, na které je útok zamířen. Obrovský datový tok lze sice vygenerovat pomocí velkého množství ovládnutých počítačů, ale tato metoda vede k prozrazení botnetu. To je věc, které se útočníci chtějí vyvarovat a navíc botnety jsou cenné a nemá k nim přístup kde kdo.

Místo používání botnetů se před lety objevil tzv. Smurf útok, který umožnil zneužít vzdálené počítače k vygenerování síťového provozu, aniž by je útočník muset ovládat. Jednalo se o útok pomocí ICMP, přičemž multiplikaci packetů zajistil broadcast mechanismus. Útočník si vybral několik dostatečně velkých sítí a poslal na jejich síťové broadcast IP adresy ICMP echo request s dlouhým datovým polem a s podvrženou zdrojovou adresou, do níž vyplnil adresu terče útoku. Hraniční router cílové sítě tento podvržený packet rozeslal najednou na všechny počítače v příslušné síti pomocí L2 broadcastu. Všechny počítače v této síti následně jednotlivě odpověděly ICMP echo reply packetem na podvrženou adresu terče útoku. Tím došlo k multiplikaci přenášených dat faktorem rovným počtu počítačů ve zneužité síti. Jinými slovy útočník za cenu odeslání jednoho packetu způsobil, že na terč dopadlo právě tolik kopií tohoto packetu, kolik bylo počítačů v síti, kterou zneužil k multiplikaci. V současnosti tento útok už není dobře prakticky realizovatelný, protože operační systémy zpravidla neodpovídají na ICMP packety, které přišly na broadcast adresu. A navíc routery často packety na broadcast adresy blokují z vnějšího internetu.

Od poloviny roku 2012 se stalo velmi oblíbenou metodou zesilování útočného datového toku využívání DNS serverů. Smyslem je, že si útočník vytipuje otevřené DNS servery a posílá na ně setrvalý tok dotazů s podvrženou zdrojovou adresou terče útoku. DNS servery tak odesílají odpovědi na domnělý dotaz od terče. Trik je v tom, že zatímco DNS dotaz mívá pár desítek bytů, odpověď může být dlouhá klidně přes 1 kB. Podvrhnout DNS dotaz je triviální, neboť se jedná o nespojovanou službu, která přenáší data přes UDP. A útočníci si za tímto účelem dokonce vytvářejí speciální DNS zóny, které generují extrémně dlouhé odpovědi a umožňují tak dosáhnout obrovského multiplikačního faktoru. Obranou proti tomuto druhu útoku je limitování počtu odpovědí na klienta a případně po přesažení limitu jsou klientovi posílány odmítnutí, které by měly u skutečných klientů vyvolat přeposlání dotazu přes TCP. Je ovšem nutné podotknout, že tato obrana je nedokonalá a sama o sobě přináší další bezpečnostní komplikace. Limitování DNS odpovědí je proto velkým tématem současného bezpečnostního výzkumu.

DDoS

Závěr

Přestože DoS útoků je celá řada, vybral jsem neznámější a nejúčinnější příklady, na kterých je dobře patrné, v čem útoky spočívají a jaké mají bezprostřední dopady. Celá problematika DoS útoků a obecně útoků na stav systému je velmi zajímavá a v poslední době vzrůstá význam znalosti a schopnosti obrany proti těmto druhům útoků. Správci serverů i jejich vedoucí by měli průběžně sledovat vývoj, číst bezpečnostní mailing listy, navštěvovat tematické konference a účastnit se pracovních skupin národních bezpečnostních týmů, aby si vybudovali znalosti potřebné pro zabezpečení svých systémů a reakce na případné útoky.

Zdroje:

http://tools.ietf.org/html/bcp38
http://www.spinics.net/lists/netdev/msg255605.html

Tomáš Hlaváček

Jsem častým čtenářem serveru DIIT a pracuji jako síťový administrátor ve společnosti IGNUM.

více článků, blogů a informací o autorovi

Diskuse k blogu DoS a DDoS útoky na vzestupu cílených útoků

Sobota, 14 Prosinec 2013 - 03:44 | Leoš Kopr | Je třeba přidat také útoky i na jinou šifrovanou...
Pátek, 13 Prosinec 2013 - 11:02 | randomofamber | Pěkné, jen malý šotek v textu '...nastaveným...
Pátek, 13 Prosinec 2013 - 02:08 | trodas | Krásně sepsané, smekám. Zase jsem se něco přiučil...
Čtvrtek, 12 Prosinec 2013 - 17:42 | J D | Hezké shrnutí, sice nic nového jsem se nedozvěděl...
Čtvrtek, 12 Prosinec 2013 - 14:57 | Anders | Děkuji za pěkný článek!

Zobrazit diskusi