Privatna VPN imena ne rade? Sumnjiva je DNS zaštita od rebindanja
Resolver koji odbija odgovore iz privatnog prostora kvari interna imena, ne tunel. Pročitajte odgovor, ograničite izuzetak, zaštitu zadržite drugdje.
Na uredskoj lokalnoj mreži interno ime odgovara trenutno. Čim se VPN podigne, ono prestane raditi, aplikacija prijavi istek vremena, a sam tunel prenosi saobraćaj bez prigovora. Promijenio se resolver i taj resolver ima mišljenje o privatnim adresama.
Zaštita od rebindinga postoji da zaustavi jedan konkretan trik. Namjerno objavljeno privatno ime izgleda dovoljno slično, pa se odbrana aktivira.
Pročitajte odgovor prije nego što pročitate pravilo
Pitajte ime kod resolvera koji VPN zaista gura, a ne kod onog koji vaš laptop koristi kod kuće. Uporedite odgovor sa zapisom koji očekujete i zabilježite je li odgovor prazan, odbijen ili pun javnih adresa koje niko nije planirao.
Simptomi se preklapaju, pa oblik odgovora odlučuje dijagnozu. NXDOMAIN je zapis koji nedostaje, REFUSED je pravilo pristupa, javna adresa za interno ime je greška u politici ili podijeljenom DNS-u, a ispravna privatna adresa koju klijent ne može koristiti sasvim je drugi problem. Odbijena veza ili zaglavljen zahtjev sami po sebi ništa ne dokazuju, zato prva naredba u bilo kojem od ovih tiketa treba biti provjera, a ne restart. Zapišite odgovor prije nego što bilo šta promijenite.
Šta odbrana zapravo zaustavlja
DNS rebinding radi tako što promijeni u šta se ime razrješava nakon što mu je klijent već povjerovao. Stranica se učita s imena kojim upravlja napadač, odgovor se preokrene na privatnu adresu i pregledač je prevaren da razgovara s nečim na lokalnoj mreži s čim nikada ne bi prihvatio direktnu vezu. Odbrana je odbiti odgovore koji pokazuju u privatni prostor kada se od resolvera nikada nije tražilo da poslužuje privatni prostor imena. Cijeli napad je ta asimetrija.
dnsmasq dokumentuje upravo takvo ponašanje, uz izuzetke po domeni. Njegova stranica priručnika opisuje rebind-domain-ok kao način da se imenuju domene koje legitimno mogu vraćati takve adrese. Čitajte to kao znak da je predviđeni popravak ograničeno dopuštenje, a ne globalni prekidač.
Ograničite izuzetak na prostor imena
Prvo popravite prostor imena, pa onda izuzetak. Potvrdite da ime koje ne radi pripada domeni kojom organizacija upravlja i da se zapis namjerno održava. Neočekivana adresa koja samo liči na poznati raspon lokalne mreže zaslužuje sumnju, a ne izuzetak, zato provjerite vlasnika zone prije nego što napišete bilo kakvo dopuštenje.
# 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
Zatim dodajte najuže dopuštenje koje pokriva predviđena imena: jedna domena ili jedna delegirana poddomena, u konfiguraciji resolvera koji VPN klijenti pitaju. Isključivanje zaštite za svako ime na tom resolveru uklanja odbranu za sve njih odjednom, uključujući imena koja je nikada nisu trebala.
Podijeljeni DNS pripada istoj odluci. Ako se na privatni prostor imena treba odgovarati samo na internom resolveru, objavite ga tamo i prestanite ga curenje prema javnim resolverima, kako bi izuzetak pokrivao jedan put umjesto svakog puta.
Ponovno testirajte resurs i odbranu
Pitajte ponovo, zatim se povežite sa servisom i provjerite šta klijent vidi. Ispravan privatni odgovor uz sesiju koja radi znači da je izuzetak prošao. Ispravan odgovor uz zaglavljenu sesiju znači da je sljedeći sumnjivac ruta ili identitet servisa.
# 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
Testirajte i javno ime kroz isti resolver. Zaštita bi trebala i dalje djelovati za imena izvan izuzetka, a ako ta provjera ne uspije, promjena je bila šira nego što je zamišljeno. Držite provjeru certifikata netaknutom cijelo vrijeme, jer ime koje se ispravno razrješava i dalje mora odgovarati certifikatu koji servis predstavlja.
Zapišite u tiket odbijeni odgovor, domenu, resolver i ko posjeduje pravilo. Taj zapis je ono što misteriozni interni prekid pretvara u promjenu konfiguracije koju neko može pregledati.