V podnikové místní síti interní název odpovídá okamžitě. Ve chvíli, kdy se zvedne VPN, přestane fungovat, aplikace hlásí vypršení času a tunel sám přenáší provoz bez stížnosti. Změnil se resolver a tenhle resolver má na privátní adresy vlastní názor.

Ochrana proti rebindingu existuje proto, aby zastavila jeden konkrétní trik. Záměrně zveřejněný privátní název vypadá dostatečně podobně, a obrana se spustí.

Přečtěte si odpověď dřív než pravidla

Ptejte se názvu u resolveru, který VPN skutečně předává, ne u toho, který váš notebook používá doma. Porovnejte odpověď se záznamem, který očekáváte, a poznamenejte, zda je odpověď prázdná, odmítnutá, nebo plná veřejných adres, které nikdo neplánoval.

Příznaky se překrývají, takže o diagnóze rozhoduje podoba odpovědi. NXDOMAIN je chybějící záznam, REFUSED je přístupové pravidlo, veřejná adresa pro interní název je chyba pravidel nebo rozděleného DNS a správná privátní adresa, kterou klient nemůže použít, je úplně jiný problém. Odmítnuté spojení nebo zaseknutý požadavek samy o sobě nic nedokazují, a proto má být prvním příkazem v každém z těchto tiketů vyhledávání, ne restart. Než cokoli změníte, odpověď si zapište.

Co obrana vlastně zastavuje

Rebinding DNS funguje tak, že změní, na co se název přeloží poté, co mu klient už uvěřil. Stránka se načte z názvu ovládaného útočníkem, odpověď se překlopí na privátní adresu a prohlížeč je podveden, aby mluvil s něčím v místní síti, s čím by přímé spojení nikdy nepřijal. Obranou je odmítat odpovědi směřující do privátního prostoru, když resolver nikdy nebyl požádán, aby obsluhoval privátní jmenný prostor. Celý útok je právě tato asymetrie.

dnsmasq dokumentuje přesně toto chování včetně výjimek pro jednotlivé domény. Jeho stránka manuálu popisuje rebind-domain-ok jako způsob, jak pojmenovat domény, které takové adresy mohou oprávněně vracet. Čtěte to jako signál, že zamýšlenou opravou je ohraničené povolení, ne globální přepínač.

Ohraničte výjimku na jmenný prostor

Nejprve opravte jmenný prostor, potom výjimku. Ověřte, že selhávající název patří doméně, kterou organizace ovládá, a že záznam je udržován záměrně. Neočekávaná adresa, která jen připomíná známý rozsah místní sítě, si zaslouží podezření, ne výjimku, proto před napsáním jakéhokoli povolení zkontrolujte vlastníka zóny.

# ask the resolver the VPN pushed, and show the full answer
dig +noall +answer db.corp.example @10.40.0.1
dig +short db.corp.example @10.40.0.1

# dnsmasq: what does the running configuration already allow?
grep -R 'rebind' /etc/dnsmasq.d /etc/dnsmasq.conf

Pak přidejte nejužší povolení, které pokrývá zamýšlené názvy: jednu doménu nebo jednu delegovanou subdoménu v konfiguraci resolveru, na který se klienti VPN dotazují. Vypnutí ochrany pro každý název na tomto resolveru odstraní obranu pro všechny najednou, včetně názvů, které ji nikdy nepotřebovaly.

Rozdělený DNS patří ke stejnému rozhodnutí. Pokud se má na privátní jmenný prostor odpovídat jen na interním resolveru, zveřejněte ho tam a přestaňte ho propouštět do veřejných resolverů, aby výjimka pokrývala jednu cestu místo všech cest.

Znovu otestujte prostředek i obranu

Zeptejte se znovu, potom se připojte ke službě a podívejte se, co klient vidí. Správná privátní odpověď s fungující relací znamená, že výjimka zabrala. Správná odpověď se zaseknutou relací znamená, že dalším podezřelým je trasa nebo identita služby.

# the internal name and the public control should behave differently
dig +short db.corp.example @10.40.0.1
dig +short www.example.com @10.40.0.1

# and the service itself, with the certificate it presents
curl -sS -o /dev/null -w '%{http_code}\n' https://db.corp.example/health

Otestujte stejným resolverem i veřejný název. Ochrana by měla dál fungovat pro názvy mimo výjimku, a pokud tato kontrola selže, změna byla širší, než se zamýšlelo. Ověřování certifikátu nechejte po celou dobu nedotčené, protože název, který se přeloží správně, se ještě musí shodovat s certifikátem, který služba předkládá.

Zapište do tiketu odmítnutou odpověď, doménu, resolver a to, kdo pravidla vlastní. Právě tento záznam mění záhadný interní výpadek v konfigurační změnu, kterou může někdo zkontrolovat.

Související články