Hlavní navigace

Smutné DNS: nový způsob otrávení keše umožňuje podvrhnout údaje

13. 11. 2020
Doba čtení: 4 minuty

Sdílet

 Autor: Depositphotos
Otrávení keše DNS resolveru není nová technika. Mnoho let jsme si ale mysleli, že od ní máme pokoj. Teď je tu nový způsob, jak změnit třeba IP adresu pro libovolné doménové jméno.

Výzkumníci z americké University of California, Riverside a čínské Tsinghua University na konferenci CCS20 představili nový způsob otravy keše DNS resolverů nazvaný SAD DNS (Side channel AttackeD DNS), který umožňuje například změnit IP adresu pro libovolné doménové jméno.

Princip útoku

Princip útoku zůstává stále stejný jako před lety: rekurzivní server se ve snaze vyřídit dotaz klienta zeptá autoritativního serveru pomocí zprávy UDP. Než autoritativní server doručí správnou odpověď, přijde útočník s falešnou odpovědí, kterou pošle ze zfalšované adresy pravého autoritativního serveru. Odpověď útočníka je uložena v keši klidně i týden a po tu dobu může útočník v klidu profitovat z úspěšného útoku.

Aby resolver uvěřil falešné odpovědi od útočníka, musí odpověď splňovat několik náležitostí:

  1. musí odpovídat přesně na dotazované jméno
  2. musí přicházet z IP adresy, na který resolver předtím poslal dotaz
  3. musí přicházet na číslo portu, ze kterého se resolver ptal
  4. musí souhlasit 16bitové ID transakce v odpovědi s tím v dotazu

První podmínku lze splnit snadno na veřejných resolverech, neboť útočník může svým dotazem z pozice klienta přinutit resolver k položení dotazu na útočníkem ovládané doménové jméno. Ke splnění druhé podmínky je potřeba, aby útočník dokázal posílat datagramy s podvrženou zdrojovou IP adresou. To bohužel na dnešním internetu není velký problém. Podle výzkumu CAIDA z roku 2019 podvrhávání zdrojové IP adresy stále umožňuje 30 procent autonomních systémů.

Třetí podmínku bylo dříve u některých resolverů jednoduché splnit, protože se používalo pouze omezené množství odchozích čísel portů a často se navíc přidělovala sekvenčně za sebou. Dnešní implementace používají skutečně náhodná čísla, což potenciálnímu útočníkovi dává přibližně 15bitový prostor k uhodnutí. Spolu se čtvrtou podmínkou uhodnutí náhodného 16bitového čísla se tak má za to, že prostor je dostatečně velký a útok hrubou silou spočívající ve vygenerování všech možných kombinací odpovědí prakticky těžko realizovatelný.

Efektivita díky postrannímu kanálu

Útok SAD DNS umožňuje útočníkovi zjistit číslo portu, na kterém očekává odpověď na svůj položený dotaz. Používá přitom běžnou vlastnost implementace TCP/IP v operačních systémech, totiž fakt, že při pokusu o doručení datagramu na port, na kterém nikdo neposlouchá, odpoví operační systém ICMP zprávou o nedostupnosti cíle. Četnost těchto ICMP zpráv je ale globálně omezená na padesát za padesát milisekund, zejména proto, aby se zmírňovaly následky útoků odrazem, které by tuto funkci zneužívaly.

Právě tento globální limit tvoří postranní kanál, kterým útočník dokáže zjistit, který port se používá. Nejprve jménem autoritativního serveru pošle padesát zpráv na vybraná čísla portů resolveru, pak pošle ještě jednu kontrolní zprávu na zaručeně uzavřený port ze své vlastní adresy. Pokud byly všechny porty zavřené, dostal padesát odpovědí nic netušící autoritativní server a útočník na svou kontrolní zprávu kvůli vyčerpání globálního limitu odpověď nedostane. Pokud však byl jeden z padesáti portů na resolveru otevřený, zbude v globálním limitu místo právě pro jednu ICMP odpověď na kontrolní zprávu.

Větší prostor díky Response Rate Limitingu

Odhalením čísla portu se prostor kombinací, které je potřeba vyzkoušet k úspěšnému útoku, snížil na 65536 variant 16bitového ID transakce. K jeho uhodnutí má tím víc času, čím déle bude autoritativnímu serveru trvat, než odpoví legitimní odpovědí. Nabízí se otázka, jak si může útočník pomoci, aby legitimní odpověď přišla pozdě nebo vůbec.

Odpověď na tuto otázku je bohužel přímo součástí moderních autoritativních serverů. Ty se pomocí funkce RRL brání opakujícím se dotazům, které jsou zneužívány pro takzvané zesilující útoky. Princip RRL opět spočívá v tom, že pokud se daná adresa ptá podezřele často, přestane jí autoritativní server odpovídat.

Zneužití tohoto principu je nasnadě: útočník zfalšuje zdrojovou adresu resolveru a jeho jménem zahltí autoritativní server opakujícími se dotazy. Ten bude určitou dobu ochotně posílat odpovědi resolveru, který je však zahodí, protože nebudou z jeho strany vyžádané. Když pak později resolver položí svůj vlastní legitimní dotaz, může být na straně autoritativního serveru vyhodnocen algoritmem RRL jako nežádoucí, takže na něj server vůbec neodpoví. Tím má útočník více času vyzkoušet všechny možné odpovědi, až najde tu, která otráví keš resolveru.

Root Docker

DNSSEC jako definitivní řešení

Útok je tedy zdokonalením dříve známé techniky tak, aby byla znovu použitelná. Podle výzkumníků lze útok úspěšně provést na 34 % otevřených resolverů a na 12 ze 14 velkých cloudových služeb včetně Google, Cloudflare, Quad9 či OpenDNS. Útok samozřejmě nemůže fungovat proti doménám, které jsou podepsány DNSSECem, protože falešná odpověď nemůže projít validací, pokud tedy resolver validuje.

Možnosti útoku také zmírňuje změna velikosti písmen v dotazovaném jméně, kterou některé resolvery provádějí pro přidání další entropie do transakcí. V Linuxu verze 5.10 je záplata, která přidává k pevně daným limitům jistý prvek náhody a tím tento postranní kanál eliminuje.

Autor článku

Ondřej Caletka vystudoval obor Telekomunikační technika na ČVUT a dnes pracuje ve vzdělávacím oddělení RIPE NCC, mezinárodní asociaci koordinující internetové sítě.