C4 blog

Proč nepodporujeme DNSSEC?

12.7.2011, Jan Vítek

Čím dál více registrátorů a webhosterů zavádí technologii DNSSEC. Proč nepodporujeme DNSSEC my? V čem je bezpečnostní riziko?

Protokol DNSSEC umožňuje zabezpečit informace poskytované klientům přes DNS (zejména překlady doménových názvů na IP adresy). V současném DNS bez DNSSEC může útočník podvrhnout odpovědi DNS serveru a klient, který do prohlížeče zadá název internetové stránky ve skutečnosti přistupuje na server útočníka (klient má sice v prohlížeči správnou doménu, ale přistupuje na jinou IP adresu, díky podvržené DNS odpovědi). Podobné situace DNSSEC znemožňuje. DNSSEC využívá asymetrickou šifru a tzv. řetěz důvěry (chain of trust). Základní informace jsou na české wiki, podrobnější popis naleznete v anglické verzi.

Offline signing

DNSSEC od začátku v návrhu počítalo výhradně s offline signingem, tj. že se záznamy v zóně jednorázově podepíší a pak se v odpovědích posílají stále stejné podpisy. Kvůli tomu byly "vynalezeny" NSEC záznamy, které dokládají neexistenci názvů tak, že v odpovědi pošlou jména sousedních názvů (v abecedním pořadí). Např. když neexistuje název stop, tak DNS server vrátí záznam NSEC s názvy shop a www ("záznam stop neexistuje, a dokládám to tak, že posílám názvy sousedních existujících názvů, což jsou názvy shop a www").

Zone walking

Bohužel DNSSEC vytvořilo i jeden nový bezpečnostní problém. Ve verzi s NSEC umožňuje tzv. zone walking (procházení zóny). Zone walking dává možnost komukoliv zjistit kompletní obsah zóny pomocí dotazů na DNS názvy, přičemž počet dotazů je řádově stejný jako počet záznamů v zóně. DNSEC s NSEC vlastně umožnilo zone transfer komukoliv (navzdory tomu, že většina DNS serverů má zone transfer omezený jen na ip adresy autoritativních name serverů). Tvůrci DNSSEC dlouho tvrdili, že to vlastně žádný problém není, že obsah zóny má prostě být veřejný a problém je spíš v tom, že někdo ukládá do zóny informace, které by neměly být veřejné. Jakmile bylo jasné, že pro velkou část registrátorů je DNSSEC s NSEC neakceptovatelné a nikdy ho nezavedou, tak bylo vyvinuto rozšíření NSEC3 (jako náhrada NSEC). NSEC3 se od NSEC liší v tom, že místo sousedních názvů posílá sousední hashe názvů.

Problém to ale nevyřešilo. Útočníkovi opět stačí na DNS server zaslat řádově stejný počet dotazů jako je počet záznamů v zóně. DNS názvy si pak musí zjistit ze zahashovaných názvů, které zjistil díky NSEC3 odpovědím. To ale typicky není problém, protože názvy jsou spíše kratší a i ty delší obsahují slova, která nejsou náhodnou kombinací znaků a čísel. Takže kombinace hrubé síly a slovníkové metody vede ke zjištění většiny nebo všech záznamů. Praktický popis, jak v praxi vypadá procházení zóny přes NSEC3, je na http://cr.yp.to/talks/2009.08.10/slides.pdf

Online signing

Řešením je tzv. online signing. Mechanizmus online signingu je popsán v RFC 4470. Hlavní výhodou je, že oproti offline signingu nestačí na DNS server poslat pár dotazů, ale útočník musí poslat všechny možné kombinace názvů jako v případě DNS bez DNSSEC. Některé implementace online signingu jsou k dispozici již dnes: PowerDNSSEC, Phreebird. Zatím se příliš v praxi nepoužívají, protože se nejedná o prověřené stabilní verze. Většina domén, které v současné době podporují DNSSEC, fungují v režimu offline signing.

Z hlediska útočníka

Když by někdo chtěl zjistit obsah zóny přes DNS server, který nepodporuje DNSSEC nebo je v režimu online signing, tak by musel na DNS server poslat všechny možné kombinace názvů. Tím by riskoval, že po sobě zanechá stopu. Zjišťování zóny se analogicky podobá scanování všech možných portů na serveru, na který chce někdo zaútočit. S DNSSEC + offline signingem stačí pár dotazů na DNS server a zbytek si útočník dopočítá u sebe. V analogii se skenováním portů by to odpovídalo situaci, že bychom zjistili služby na několika portech a následně bychom dopočítali (u sebe) kompletní množinu portů. Zatímco skenovat všechny porty je riskantní, už je to samo o sobě považováno za činnost na hranici legality, tak zjištění několika málo portů je normální věc, nic co by vzbuzovalo podezření, nic co by v útočníkovi vzbuzovalo strach, nic co by ho odradilo. Samozřejmě lze namítnout, že když někdo chce útočit, tak na to stejně musí mít infrastrkuturu, včetně anonymoní ip adresy atd. V praxi to ale tak často není. Potencionální útočník většinou nemá k dispozici podřebné zdroje a pokud by se měl pustit do činnosti, která je na hraně, tak ho to odradí. Naopak pokud je zjištění informací o cíli útoku bez jakéhokoliv rizika, tak se dá očekávat, že si informace zjistí.

Podívejme se na konkrétní situace, kdy je pro útočníka výhodné, když doména podporuje DNSSEC + offline signing (oproti situaci bez DNSSEC nebo DNSSEC + online signing).

Mapování infrastruktury před útokem

Útočník by si nejdříve rád zjistil co nejvíce informací o infrastruktuře cíle jeho útoku. Skutečností je, že v zónách domén jsou často k nalezení ip adresy serverů (např. interních), které nejsou určeny ke zveřejnění (navzdory tomu, že takové informace by se do zón ukládat neměly). Pokud by se útočníkovi podařilo jednoduchým způsobem získat obsah zóny, mohlo by mu to výrazně ušetřit práci. S NSEC je získání obsahu zóny naprosto přímočaré a jednoduché. S NSEC3 je více práce, ale z hlediska rizika (pro útočníka), je to stejné. Útočník vlastně žádné riziko nepodstupuje, jen pošle pár dotazů na DNS.

Seznam potenciálních cílů

Útočník ani nemusí mít zájem přímo na cíli útoku, může si prostě vytvářet databázi možných cílů pro pozdější využití např. vytvoření botnetu. Při zjišťování potenciálních cílů chce zanechat co nejméně stop, takže DNSSEC + offline signing je pro něj optimální volba. Při vytváření seznamu cílů je lepší zkoumat jen takové cíle, u kterých hrozí minimální riziko prozrazení.

Emaily v DNS

V budoucnu budou v DNS veřejné klíče pro posílání zašifrovaných emailových zpráv (a/nebo ověření autenticity odesílatele). DNSSEC + offline signing umožní komukoliv získat kompletní adresář zaměstnanců společnosti. To se může hodit konkurenci nebo personální agentuře, která chce přetahnout zaměstnance. Opět je velký rozdíl, jestli někdo udělá pár dotazů do DNS a zbytek si dopočítá a nebo jestli udělá miliardu dotazů na DNS server a dostane se tak už na hranu zákona a bude riskovat prozrazení. V druhém případě ho možnost prozrazení a otázka legality odradí a raději si vybere snažší cíl, tj. společnost, která má doménu s DNSSEC + offline signingem.

Naši konkurenti a DNSSEC

Někteří naši konkurenti podporují DNSSEC + offline signing již dnes pro všechny svoje zákazníky. A mnozí se tím dokonce chlubí. Zajímalo by mě, kolik svých zákazníků informavali o riziku procházení zón. Myslím, že mnoho jich nebude.

Webhosting C4 a DNSSEC

Vzhledem k výše uvedeným skutečnostem, momentálně DNSSEC nepodporujeme. Pokud bude poptávka ze strany zákazníků, zavedeme DNSSEC v režimu opt-in (pouze na vyžádání). Režim opt-out (pro všechny domény) zavedeme až bude k dispozici prověřená stabilní verze DNS serveru s podporou online signingu. Zavedení DNSSEC + online signingu pro všechny domény bude mít mnohem větší nároky na výpočetní výkon DNS serverů (ve srovnání s DNSSEC + offline signingem), avšak pro zákazníky to má podstatnou výhodu, že jejich domény budou ochráněny proti procházení zóny.

Přidat nebo zobrazit komentáře (počet komentářů: 6)