Súkromné názvy VPN nefungujú? Podozrivá je ochrana pred rebindingom DNS
Resolver, ktorý odmieta odpovede z privátneho priestoru, kazí interné názvy, nie tunel. Prečítajte odpoveď, zúžte výnimku, ochranu ponechajte inde.
V kancelárskej LAN interne meno odpovedá okamžite. V okamihu zapnutia VPN prestane fungovať, aplikácia hlási časový limit a samotný tunel bez sťažností prenáša prevádzku. Zmenil sa resolver a ten resolver má vlastný názor na privátne adresy.
Ochrana pred rebindingom existuje, aby zastavila jeden konkrétny trik. Zámerne zverejnené privátne meno vyzerá dosť podobne, aby sa obrana spustila.
Prečítajte odpoveď skôr než politiku
Opýtajte sa na meno resolvera, ktorý VPN skutočne distribuuje, nie toho, ktorý váš notebook používa doma. Porovnajte odpoveď so záznamom, ktorý očakávate, a poznamenajte, či je odpoveď prázdna, odmietnutá alebo plná verejných adries, ktoré nikto neplánoval.
Príznaky sa prekrývajú, preto diagnózu určuje tvar odpovede. NXDOMAIN je chýbajúci záznam, REFUSED je pravidlo prístupu, verejná adresa pre interné meno je chyba politiky alebo split-DNS a správna privátna adresa, ktorú klient nemôže použiť, je celkom iný problém. Odmietnuté spojenie ani zaseknutá požiadavka samy o sebe nič nedokazujú, preto by prvým príkazom v takýchto tiketoch mal byť dopyt, nie reštart. Zapíšte odpoveď skôr, než čokoľvek zmeníte.
Čo obrana skutočne zastavuje
Rebinding DNS funguje tak, že mení, na čo sa meno prekladá po tom, ako mu klient už dôveroval. Stránka sa načíta z mena, ktoré kontroluje útočník, odpoveď sa prepne na privátnu adresu a prehliadač je podvedený, aby hovoril s niečím v lokálnej sieti, s čím by nikdy neprijal priame spojenie. Obrana spočíva v odmietnutí odpovedí smerujúcich do privátneho priestoru, keď resolver nikdy nebol požiadaný obsluhovať privátny menný priestor. Tá asymetria je celý útok.
dnsmasq dokumentuje presne takéto správanie spolu s výnimkami pre domény. Vo svojej príručke opisuje rebind-domain-ok ako spôsob, ako pomenovať domény, ktoré môžu legitímne vracať takéto adresy. Čítajte to ako signál, že zamýšľanou opravou je obmedzené povolenie, nie globálny prepínač.
Zúžte výnimku na menný priestor
Najprv opravte menný priestor, potom výnimku. Potvrďte, že zlyhávajúce meno patrí doméne, ktorú organizácia kontroluje, a že záznam sa zámerne udržiava. Nečakaná adresa, ktorá len pripomína známy rozsah LAN, si zaslúži podozrenie, nie výnimku, preto pred napísaním akéhokoľvek povolenia skontrolujte 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
Potom pridajte najužšie povolenie pokrývajúce zamýšľané mená: jednu doménu alebo jednu delegovanú subdoménu, v konfigurácii resolvera, ktorý sa pýtajú klienti VPN. Vypnutie ochrany pre každé meno na tom resolveri odoberie obranu všetkým naraz, vrátane mien, ktoré ju nikdy nepotrebovali.
Split DNS patrí do rovnakého rozhodnutia. Ak má privátny menný priestor odpovedať len interný resolver, zverejnite ho tam a prestaňte ho unikať do verejných resolverov, aby výnimka pokrývala jednu cestu namiesto každej cesty.
Znovu otestujte zdroj aj obranu
Opýtajte sa znova, potom sa pripojte k službe a skontrolujte, čo klient vidí. Správna privátna odpoveď s funkčnou reláciou znamená, že výnimka sa uplatnila. Správna odpoveď so zaseknutou reláciou znamená, že ďalším podozrivým je trasa alebo 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 aj verejné meno cez ten istý resolver. Ochrana by sa mala stále správať správne pre mená mimo výnimky, a ak ten test zlyhá, zmena bola širšia, než sa zamýšľalo. Validáciu certifikátov nechajte po celý čas nedotknutú, pretože meno, ktoré sa prekladá správne, stále musí zodpovedať certifikátu, ktorý služba predkladá.
Do tiketu zapíšte odmietnutú odpoveď, doménu, resolver a kto vlastní politiku. Práve tento záznam mení záhadný interný výpadok na zmenu konfigurácie, ktorú môže niekto preskúmať.