Autor: infinity :) | 9.8.2014 |
DNS (Domain Name System) je hierarchický systém doménových jmen, který je realizován servery DNS, které uchovávají informace o spravovaných doménách a k nim příslušející záznamy a protokolem stejného jména, kterým si vyměňují informace.
Původním úkolem DNS byl především překlad doménových jmen (která se lidem dobře pamatují) na číselné adresy (32bitový (IPv4) A záznam nebo 128bitový (IPv6) - AAAA záznam). Postupně se však DNS protokol rozrostl o další funkce, např. umožňující pro elektronickou poštu.
Protokol DNS vznikl v roce 1983, v roce 1987 byl aktualizován. Používá porty TCP/53 i UDP/53, je definován v RFC1035.
DNS server může hrát vůči doméně (přesněji zóně, ale ve většině případů jsou tyto pojmy zaměnitelné) jednu ze tří rolí:
Odpověď pocházející přímo od primárního či sekundárního serveru je autoritativní, čili je brána za správnou. Z hlediska věrohodnosti odpovědí není mezi primárním a sekundárním serverem rozdíl, oba jsou autoritativní. Uživatelé tak nemají jinou možnost než věřit v důvěryhodnost používaného DNS serveru, protože ve výchozím nastavení nejsou odpovědi nijak ověřeny a validovány.
V dnešním článku si ukážeme, jak je snadné zprovoznit vlastní DNS server, který vám umožní ručně editovat jednotlivé záznamy - což umožňuje blokovat určité domény, nebo předstírat, že Vaše doména je právě ta, kterou si uživatel chce zobrazit. Tento druh útoku se obecně označuje jako DNS forgery nebo DNS spoofing.
DNS spoofing může být použit mnoha možnými způsoby - bohužel žádný z nich není pro koncového uživatele dobrý. Následující část popisuje nejběžnější použití, o kterých bylo v minulosti již hodně slyšet:
My si dnes ukážeme, jak vytvořit vlastní DNS server, který přeposílá všechny požadavky na Google DNS, kromě těch, u kterých chceme falšovat odpovědi.
Začneme instalací Dnsmasq - jedná se o malý, snadno konfigurovatelný DNS a DHCP server, který je určen hlavně pro malé firemní a domácí sítě. Na některých systémech již může být předinstalovaný a spuštěny jako lokální DNS (kvůli cachování). Pokud ne, musíte jej stáhnout a nainstaloval. V prostředí Ubuntu/Debianu můžeme použít apt-get.
Po instalaci je potřeba vytvořit konfigurační soubor v umístění /etc/dnsmasq.conf, který si Dnsmasq automaticky načte při startu. Defaultně tento soubor vytvořený není a server tak běží s přednastavenou konfigurací.
Vytvoříme soubor dnsmasq.conf:
A uložíme následující konfiguraci:
Tato konfigurace nastaví Dnsmasq tak, aby používal veřejný Google DNS server (IP adresa 8.8.8.8 nebo 8.8.4.4), pokud se záznam o požadované doméně nenachází v souboru /etc/dnsmasq.hosts.
Vytvoříme soubor dnsmasq.hosts:
A uložíme následující konfiguraci:
Formátování je stejné, jako v případě souboru /etc/hosts. První je IP adresa serveru, odkud se načte obsah webu z domény, která je oddělená mezerou.
Dnsmasq spustíte následujícím příkazem:
Příkaz "--no-daemon" slouží jako debug mód, dnsmasq se jinak spustí jako proces na pozadí. A "--log-queries" nám bude vypisovat požadavky do konzole.
Předpokládejme, že IP adresa našeho DNS serveru je 192.168.1.13. Funkčnost si ověříme pomocí příkazu:
Jak vidíme na výstupu, při zadání adresy www.facebook.com do prohlížeče se načte obsah z IP adresy 192.168.1.100, místo ze serverů Facebooku.
Jakmile jste si jistí, že Váš DNS server odpovídá tak, jak chcete, jednoduše ho spustíte příkazem "dnsmasq" bez žádných argumentů. Poběží na pozadí a bude odpovídat všem, kdo se ho zeptají. K ukončení použijte příkaz "killall -9 dnsmasq".
DNS spoofing tak může být velmi jednoduše použit k vytvoření phishingových stránek. Jediné, co k tomu potřebujete, je další web server, který bude odpovídat na dotazovaný hostname. Toho docílíte instalací apache s konfigurací virtual host:
Jakmile je Apache nakonfigurován tímto způsobem, obsah bude předán uživateli. Tento scénář samozřejmě funguje pouze pro HTTP. Pro HTTPS požadavky, nebo jiné SSL based protokoly tato metoda nebude fungovat, protože web server není schopen dodat platný, podepsaný CA certifikát. O tom, jak sniffovat HTTPS, si povíme někdy příště.
Protože nejsem zrovna velký příznivce Phishingu, zaměříme se na něco jiného. Už umíme nakonfigurovat DNS server tak, aby odpovídal na dotazy podle našich představ. Jak toho ale využít? Představme si situaci, kdy web developer z nějakého důvodu využívá externě hostované .js knihovny, například jQuery. Můžeme tak falšovat odpověď a uživateli se při návštěvě věrohodného HTTP webu zobrazí upravená knihovna, která následně zobrazí náš reklamní banner. Spousta malwarových kampaní byla založena na podobném principu a hackeři si tak mohli přijít na relativně slušné peníze z prokliků. V horším případě se na webu provede nějaký druh exploitu, nebo výzva na stažení aktualizace Javy/Flashe.
Když prostudujete zdrojový kód většiny webových aplikací, téměř vždy najdete Google Analytics, dokonce i zde na soomu:
Jak si můžete všimnout, z domény "google-analytics.com" se načítá soubor "ga.js". Přidáním této domény do našeho DNS serveru si zajistíme velké procento úspěchu.
google-analytics.com/ga.js echo 127.0.0.1,www-google-analytics.l.google.com >Co ale spouštět z ga.js? V ideálním případě chceme zjistit co nejvíce informací o uživateli s možností následné exploitace a plného přístupu do jeho systému. K tomu nám nejlépe poslouží BeEF - The Browser Exploitation Framework.
Po instalaci je potřeba upravit config.yaml pro integraci s naším DNS serverem. Změníme následující řádky:
Nyní máme nastavený DNS server tak, aby požadavky na doménu "google-analytics.com" směřoval na náš BeEF server, který vrací upravený ga.js soubor. Nic nám nebrání BeEF spustit, ovládat prohlížeč uživatele a získat administrátorský přístup do jeho počítače.
Vytvoření "fake" DNS serveru je velmi jednoduché. Kdokoliv se může za pomoci slovníkového útoku dostat do konfigurace veřejného Wi-Fi routeru a změnit nastavení DNS serveru. Další hřebík do rakve sdíleným Wi-Fi v restauracích apod. S rostoucím počtem exploitů na domácí routery, by měl každý jednou za čas kontrolovat jeho nastavení. Zejména DNS serveru.
Pokud nedůvěřujete ani svému ISP, doporučuji nastavit jeden z těchto DNS serverů:Ověřit, zda Vaše DNS dotazy směřují přímo ke zvolenému serveru můžete ověřit DNS leak testem.
Update: komentář k obraně před DNS spoofingem od uživatele Ondřej Surý:
Jediná obrana proti spoofingu je:
Pro větší pocit bezpečí se nespoléhejte na DHCP, ale nastavte si tyto adresy lokálně v Applications / System Tools / Preferences / Network Connections.
V Android tabletu a telefonu používám pro stejný účel aplikaci Static DNS for WiFi