Hlavní navigace

Útok na DNS nekonečnou rekurzí

27. 7. 2015
Doba čtení: 5 minut

Sdílet

V článku se podíváme na jeden méně obvyklý útok na DNS rekurzor, při němž se zlotřile chová autoritativní server domény, který zahltí tazatele odpovědí bez konce. Potěšíme milovníky šťastných konců, protože pokud se ke svému DNS nářadí chováte alespoň trochu zodpovědně, jste před nekonečnou rekurzí v bezpečí.

Stručně řečeno, útok nekonečnou rekurzí funguje podobně jako tato scéna z filmu Pošetilost mocných:

Špetka základů DNS

Nejprve to vezměme trochu ze široka. Když pošlete DNS serveru dotaz, obslouží jej buď rekurzivně, nebo nerekurzivně.

Při rekurzivním chování se dotazu chopí, pokládá dotazy dalším serverům, dokud se mu nepodaří najít odpověď a tu pak pošle tazateli. Tímto způsobem se typicky chovají lokální DNS servery obsluhující zařízení v koncové síti. Pokud se zeptám lokálního serveru na adresu www.root.cz, dostanu odpověď 91.213.160.118. Výhodou rekurzivního chování je, že si server zjištěné informace ukládá do vyrovnávací paměti a při opakovaných dotazech se na ně nemusí znovu ptát, čímž se zrychlují odezvy a celému DNS se ulehčuje. Cenou je, že rekurzivní řešení dotazu server zatěžuje.

Nerekurzivně se chovající server se dotazem podrobněji nezabývá, jen pošle informace o serverech, které jsou blíže k jeho řešení. Sám se jich ale neptá, to musí udělat tazatel. Nerekurzivně se chovají autoritativní servery. Kdybych se třeba některého z autoritativních serverů domény cz zeptal na adresu www.root.cz, dostanu odpověď „zeptej se ns.iinfo.cz nebo ns6.adminit.cz“, což jsou autoritativní servery domény root.cz, které jsou o krok blíže k odpovědi. Má-li k dispozici jejich adresy, přiloží je k odpovědi.

Princip útoku

Útok nekonečnou rekurzí spočívá v tom, že si autoritativní server zlobivé domény vymýšlí stále nové a nové servery „bližší“ řešení, které ale leží ve stejné doméně, takže se na jejich adresy musíme ptát zase jeho. Na každý takový dotaz odpoví opět odkazem na další smyšlené servery.

Řekněme, že se takovým způsobem bude chovat autoritativní server domény zlo.root.cz. Doména by měla mít alespoň dva autoritativní servery, ale buď se budou oba chovat stejně, nebo zlí hoši prostě nebudou doporučení respektovat. Dále pro zjednodušení budeme zmiňovat jen jeden.

Útok začne tím, že někdo někde projeví zájem třeba o adresu pro www.zlo.root.cz. Buď útočník využije otevřený rekurzivní server a položí mu dotaz sám, nebo přiměje některého z místních uživatelů k návštěvě tohoto webu – phishingem, příslibem atraktivního obsahu nebo jinak.

Místní rekurzivní server, který byl osloven, je cílem útoku. Pustí se do řešení dotazu: Standardním způsobem začne v kořenové doméně a postupně bude nerekruzivními servery odkázán na autoritativní servery pro domény cz, root.cz a zlo.root.cz. Až dosud vše probíhá normálně.

Jelikož hledané jméno je v doméně zlo.root.cz, normálně by její autoritativní server (řekněme ns.zlo.root.cz) poslal odpověď. On ale místo toho v odpovědi prohlásí, že je třeba ptát se serveru ns1.zlo.root.cz nebo ns2.zlo.root.cz. A neposkytne jejich adresy, což by korektně se chovající server udělal.

Oba „bližší“ servery mají jména v doméně zlo.root.cz, takže nezbývá, než jejich adresy shánět opět u ns.zlo.root.cz, který je jejím autoritativním serverem. Na dotaz po adrese ns1.zlo.root.cz ovšem odpoví, že je třeba ptát se u ns3.zlo.root.cz nebo ns4.zlo.root.cz, zatímco adresu ns2.zlo.root.cz prý znají ns3.zlo.root.cz nebo ns4.zlo.root.czA tak dále pořád dokola.

Kdykoli se jej zeptáte na adresu některého z údajných serverů, dostanete jen odkaz na další nové servery, jejichž adresy ovšem musíte poptávat zase u něj. Jejich jména mohou být vytvářena algoritmicky – například zde dotaz na server nsX vede k odkazu na servery ns(2X+1) a ns(2X+2) – nebo se prostě generují náhodně.

Rekurzivnímu serveru se exponenciálním tempem množí úkoly a odpověď je stále v nedohlednu. Server tak postupně vyčerpává dostupné zdroje, dokud není zahlcen do té míry, že přestává zpracovávat další dotazy lokálních strojů, pro které se DNS stane téměř nedostupným. Bylo zaznamenáno i zhroucení některých programů.

Útok existuje také v upravené variantě, vyvolávající DoS prakticky do libovolné sítě. V tom případě server do odpovědi vloží více falešných autoritativních serverů. Některé ponechá bez adres, aby se tazatel vracel a udržoval útok v chodu. K jiným přibalí adresy, na které chce útočit. Rekurzivní server řešící původní dotaz zajásá, že má konečně nějaké adresy, a obešle je dotazy. Na napadených adresách samozřejmě nemusí běžet DNS servery – dotazy ze strany rekurzivního serveru budou prostě jen zatěžovat tyto stroje a síťovou infrastrukturu k nim vedoucí. A pokud jich bude dost…

Útok nekonečnou rekurzí má poměrně neobvyklé vlastnosti. Typický DoS útok vyvolá armáda útočících strojů posílajících mraky požadavků, často s padělanými adresami. Zde útočníkovi v zásadě stačí zahajovací dotaz a jeden (či několik málo) nemravně se chovající autoritativní DNS server. Navíc v DNS komunikaci nemusí porušit jediné RFC. Posílané zprávy odpovídají standardům, jen v jejich obsahu si vymýšlí.

Obrana

První linií obrany je samozřejmě neprovozovat otevřený rekurzivní server, tedy přijímat dotazy jen z lokální sítě. Tím významně omezíte možnost položit startovací dotaz. Pokud by chtěl útočník napadnout váš rekurzivní server, musel by nejprve ovládnout některý z vašich počítačů nebo nalákat některého uživatele.

Skutečnost, že útok je založen na zlovolném chování autoritativního serveru určité domény, usnadňuje obranu. Pokud zjistíte, že se váš rekurzivní server stal obětí nekonečné rekurze, stačí zablokovat inkriminovanou doménu. Třeba tak, že svůj rekurzivní server nastavíte jako její autoritativní. Většina programů implementujících rekurzivní servery to umožňuje.

Nejlepší zpráva přijde nakonec: pokud udržujete svůj DNS software aktuální, pravděpodobně se vás tento útok vůbec netýká. Byl oficiálně oznámen počátkem prosince 2014 a současně s ním vyšly opravy pro BIND, Unbound a další programy.

root_podpora

Aby byl útok nekonečnou rekurzí úspěšný, musí být rekurzivní server ochoten věnovat řešení dotazu prakticky neomezené úsilí. Opravy proto směřovaly právě do této oblasti a autoři programů zavedli různé hranice. Přístupy se liší – někde omezili hloubku řešení dotazu, jinde šířku, počet zpráv nebo celkovou dobu řešení. Nějaká omezení ale má dnes prakticky každý. Pokud by vás zajímaly podrobnosti, najdete je na 33. stránce prezentace Floriana Mauryho [PDF].

Paradoxní je, že už základní specifikace DNS v RFC 1034 obsahuje doporučení, že množství práce věnované řešení dotazu by mělo být omezeno, aby případná chyba v datech nezpůsobila trable. Netrvalo to ani třicet let a došlo na ně.

Byl pro vás článek přínosný?

Autor článku

Pavel Satrapa působí na Ústavu nových technologií a aplikované informatiky na Technické univerzitě v Liberci, píše knihy a motá se kolem tuzemské akademické sítě CESNET.