Hlavní navigace

Odposloucháváme data na přepínaném Ethernetu (5.)

11. 7. 2006
Doba čtení: 7 minut

Sdílet

 Autor: 29
Dnes si řekneme něco o kategorii útoků se souhrnným označením DNS Spoofing. Jedná se o velmi mocné a komplikované útoky, jejichž celkový popis by vydal na samotný seriál. Odposlouchávání cizích dat ale může být trestné a můžete také tímto konáním porušovat smlouvu s vaším poskytovatelem připojení.

Potřebná teorie

Pro pochopení těchto útoků je potřeba mít alespoň základní znalost DNS a sítí. Pěkný článek o DNS najdete na stránkách encyklopedie Wikipedia.

DNS Spoofing

O co se jedná při DNS Spoofingu?

Zkráceně lze napsat, že tento útok spočívá v podvržení IP adresy v paketu, který se vrací jako odpověď na žádost o překlad doménového jména na IP adresu.

Způsobů, jak to provést, je mnoho. Tento útok už nemusí být pouhá „hračka“ pro odposlech lokální sítě, ale může způsobit přesměrování provozu tisíců uživatelů. Dále provoz můžeme přesměrovat i mimo lokální síť, což je například pomocí ARP Cache poisoningu nemožné. Zde se ovšem zaměříme pouze na útoky na lokální síť.

Útok na koncového uživatele

Koncový uživatel používá k překladu doménových jmen DNS Resolver, který je již od začátku nedílnou součástí většiny operačních systémů. Resolver je sada volání, která slouží k práci s DNS protokolem. Resolver si můžeme představovat jako klienta pro DNS operace. Při překladu doménového jména položí resolver dotaz na DNS server, který máte nastaven v nastavení sítě. Jakmile dostane odpověď, uloží si ji v lokální DNS Cache pro další použití.

DNS

Doba uložení záznamu v DNS Cache je stanovena v odpovědi na dotaz o přeložení doménového jména. Tato doba se deklaruje na serveru, který je pro danou doménu autoritativní. Po vypršení této doby je záznam smazán a při potřebě se provede opětovný překlad.

Podobně jako u DHCP protokolu, i zde platí, že první odpověď vyhrává. Proto nám bude stačit zfalšovat odpověď na DNS dotaz a doručit ji oběti dříve, než přijde legitimní odpověď.

Co potřebujeme znát pro zfalšování DNS Odpovědi?

DNS protokol používá k přenosu dat jak protokol TCP, tak i protokol UDP. Standardně se používá UDP, protokol TCP je použit teprve tehdy, když se odpověď nevejde do jednoho paketu. Díky protokolu UDP nám odpadá při DNS Spoofingu práce se zjišťováním sekvenčních čísel a další nepříjemnosti.

Dále už jsou tu věci, které zjistit musíme. Je to IP adresa DNS serveru, který naše oběť využívá. Tato IP adresa je ale naštěstí v rámci LAN stejná na každém počítači, takže není problém ji zjistit.

Potřebujeme také vědět, na kterou doménu (počítač) se uživatel ptá. To už pro nás představuje velký problém. Když budeme falšovat paket odpovědi, můžeme zfalšovat pouze IP adresu pro tuto doménu (počítač).

Aby toho nebylo ještě málo, potřebujeme znát port, ze kterého se DNS Resolver dotazuje a ID dotazu. Toto ID je 16bitové číslo. Což znamená, že máme 65536 možných variant. ID se používá v DNS dotazu a musí být uvedeno i v DNS odpovědi. Pomocí tohoto ID se páruje dotaz a odpověď.

Toto vše potřebujeme vědět, abychom mohli vytvořit falešnou DNS odpověď, která bude akceptována. Je toho mnoho a ještě jsme limitováni doménovým jménem, o jehož překlad uživatel žádá.

Jak je to ve skutečnosti se zfalšováním DNS odpovědi?

Většina implementací Resolveru nepožaduje vše, co jsme si napsali výše. Takže jediné věci, které je potřeba vždy vědět, je port, na který máme danou odpověď poslat, a ID dotazu. Tyto útoky jsou tedy umožněny špatnou implementací Resolveru a nedostatečnou kontrolou odpovědí.

Jak zjistit zdrojový port a ID dotazu?

Stejně jako výše, i zde se projevuje pohodlnost. Například celá rodina systému Windows měla Resolver naprogramován tak, že bylo lehké zjistit jak ID dotazu, tak i zdrojový port [PDF, 682 kB]. S příchodem posledních servis packů byly tyto chyby odstraněny a ID dotazu je nyní náhodně vygenerované číslo.

Ovšem nebyl to pouze systém Windows, který byl zranitelný: i u DNS serverů Bind byla nalezena slabá místa, jak předpovědět následující ID – bylo toho docíleno díky tomu, že generování náhodných čísel nebylo zase tak náhodné.

Port se dá zjistit například skenováním portů. Ovšem pokud nám v cestě stojí firewall, máme smůlu. Další možností je útočit na více portů v nějakém předpokládaném rozsahu. Pokud útočíme na DNS server, můžeme zjistit port i aktuální ID dotazu tím, že požádáme DNS server o překlad adresy, kterou vlastníme. Na DNS serveru, který spravuje naši adresu, spustíme sniffer a data si odchytíme (to je možné díky tomu, že DNS server provádí rekurzivní dotazy).

Jak zajistit, aby naše odpověď dorazila dříve?

Je lehké zajistit, aby naše odpověď dorazila dříve (pokud jsme s obětí na stejné LAN), ovšem pokud tipujeme, potřebujeme co nejvíce času. Naštěstí nějaké metody na prodloužení odezvy legitimního DNS serveru existují. Jedná se hlavně o DoS útoky, které se snaží server vyřadit z provozu a nebo ho alespoň zatížit tak, aby nezpracovával požadavky tak rychle.

1. Obyčejný MITM (man in the middle) útok na koncového uživatele

Nejdříve potřebujeme zjistit port a ID dotazu. Pro útok nám bude stačit alespoň port. Dalším krokem bude spuštění nějakého DoS útoku proti DNS serveru. Tímto jsme si zajistili více času pro poslání falešné odpovědi. Nyní proto uživateli spustíme útok, ve kterém budeme posílat falešné DNS odpovědi, ID číslo budeme neustále měnit a odpovědi posílat do nekonečna. Při tomto útoku se předpokládá, že resolver nekontroluje, jestli mu v odpovědi vracíme překlad doménového jména, o který žádal. Tato zranitelnost byla například nalezena ve Windows XP SP1.

Následně čekáme, až uživatel požádá o nějaký překlad, což netrvá dlouho. Nebo mu můžeme pomoci, tím že mu pošleme nějaký odkaz. Útok můžeme zefektivnit tím, že ho budeme provádět z více počítačů najednou.

2. Obyčejný MITM (man in the middle) útok na koncového uživatele s použitím Additional records

Tento útok je stejný jako předchozí, akorát se provede zefektivnění přidáním dalších adres, které chceme zfalšovat. Tyto adresy se přidají do pole Additional records. Toto pole slouží k urychlení DNS služby tím, že DNS server pošle klientovi mimo překladu doménového jména, na které se ptal, i některé překlady navíc, které souvisí s dotazem. Tímto se ušetří některé další dotazy, které by následovaly.

3. MITM (man in the middle) útok na koncového uživatele s použitím finty

Jedná se o útok, který využívá nějakého triku k zefektivnění útoku. Například pokud se ve firmě používá proxy server. A klienti mají proxy server specifikovaný doménovým jménem místo IP adresou. Tak nám stačí podvrhnout překlad tohoto doménového jména. Tím získáme veškerou http komunikaci oběti obousměrně.

proxy

4. Obyčejný MITM (man in the middle) útok na DNS server s použitím vícenásobných do­tazů

Tento útok se objevil s chybou v DNS serveru Bind. Chyba způsobovala, že když přišlo najednou více dotazů na jedno doménové jméno z více IP adres, DNS server vyřizoval každou žádost zvlášť. Vtip je v tom, že pro každou žádost změnil ID dotazu. Takže pokud pošleme například 100 žádostí, bude existovat 100 správných ID. My stihneme poslat například 1000 zfalšovaných odpovědí. Díky tomu docílíme velmi vysoké pravděpodobnosti, že se trefíme. Ovšem tato chyba již byla odstraněna.

Pokud bychom ale uvažovali, že DNS server neporovnává žádost s odpovědí ohledně překládaného doménového jména, pak můžeme tento útok provést také. A to tak, že budeme posílat dotazy o překlad náhodných doménových jmen a zfalšované odpovědi. Pokud server přijme nějakou zfalšovanou odpověď, bude otrávena jeho DNS Cache, ze které se následovně zfalšované překlady při dotazu rozšíří k uživateli.

5. Vužití DNS Spoofingu spolu s jiným útokem

Pokud odposloucháváme celé dění na síti například pomocí ARP Cache poisoningu, pak můžeme odposlechnout ID dotazu a zdrojový port. Takže můžeme falšovat odpovědi s úplnou přesností. Jediná otázka už je, k čemu nám to bude. Je to velmi jednoduché, můžeme pomocí DNS spoofingu uživatele cíleně přesměrovávat. Například budeme čekat, dokud se nezeptá na překlad jména www.mojevlastni­banka.cz. Jakmile zaslechneme tuto žádost, podstrčíme mu falešnou odpověď a přesměrujeme ho na jiný server. Například na server, který není šifrovaný; on se přihlásí a tím odchytíme jeho uživatelské údaje.

UX DAy - tip 2

Praxe

V tomto díle uvedu pouze některé užitečné nástroje a nebudu popisovat práci s nimi. Je to sada nástrojů ADM-DNS-SPOOF, obsahující potřebné nástroje pro hraní si s DNS Spoofingem, a dále program Zodiac, který obsahuje další zajímavé funkce.

Závěr

Pokud vás tyto útoky zaujaly, neváhejte a hledejte o nich více informací. Pro začátek vám doporučuji články v sekci související odkazy. Kdyby vám tyto odkazy nestačily, použijte vyhledávač. O tomto tématu je na Internetu spousta kvalitních článků. Jestli vám byl dnešní článek méně srozumitelný, omlouvám se, ale DNS je velmi komplikovaný systém a těžko se některé věci zjednodušují, aby byly srozumitelné.

Máte zájem o seriál, kde by se pojednávalo o obraně před těmito útoky?

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

Autor článku

Autor je spolumajitelem firmy PATRON-IT a celým srdcem technik. Specializuje se na kybernetickou bezpečnost a má zkušenosti etického hackera. Věří, že aby mohl síť dobře zabezpečit, musí ji nejprve umět prolomit.

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).