Numele VPN private nu funcționează? Protecția împotriva rebindingului DNS este suspectul
Un resolver care respinge răspunsuri din spațiul privat strică numele interne, nu tunelul. Citește răspunsul, limitează excepția, păstrează protecția în altă parte.
În LAN-ul biroului numele intern răspunde instantaneu. În momentul în care VPN-ul este pornit încetează să funcționeze, aplicația raportează un timeout, iar tunelul în sine transportă trafic fără nicio plângere. Ce s-a schimbat este resolverul, iar acel resolver are o părere despre adresele private.
Protecția împotriva rebindingului există pentru a opri un truc anume. Un nume privat publicat intenționat arată suficient de asemănător încât apărarea să se declanșeze.
Citește răspunsul înainte de politică
Interoghează numele la resolverul pe care VPN-ul îl distribuie efectiv, nu la cel pe care laptopul tău îl folosește acasă. Compară răspunsul cu înregistrarea pe care o aștepți și notează dacă răspunsul este gol, refuzat sau plin de adrese publice pe care nimeni nu le-a planificat.
Simptomele se suprapun, așa că forma răspunsului decide diagnosticul. NXDOMAIN este o înregistrare lipsă, REFUSED este o regulă de acces, o adresă publică pentru un nume intern este o eroare de politică sau de split-DNS, iar o adresă privată corectă pe care clientul nu o poate folosi este o problemă complet diferită. O conexiune refuzată sau o cerere blocată nu dovedește nimic de la sine, de aceea prima comandă din astfel de tichete ar trebui să fie o interogare, nu o repornire. Notează răspunsul înainte de a schimba ceva.
Ce oprește de fapt apărarea
Rebindingul DNS funcționează schimbând ceea ce rezolvă un nume după ce clientul l-a considerat deja de încredere. O pagină se încarcă de la un nume controlat de atacator, răspunsul se întoarce către o adresă privată, iar browserul este păcălit să vorbească cu ceva din rețeaua locală cu care nu ar fi acceptat niciodată o conexiune directă. Apărarea constă în a refuza răspunsurile care indică în spațiul privat atunci când resolverul nu a fost niciodată rugat să servească un spațiu de nume privat. Acea asimetrie este întregul atac.
dnsmasq documentează exact acest comportament, împreună cu excepții pe domeniu. În manualul său descrie rebind-domain-ok ca modalitatea de a numi domeniile care pot returna legitim astfel de adrese. Citește asta ca un semnal că remedierea intenționată este o permisiune limitată, nu un comutator global.
Limitează excepția la spațiul de nume
Remediază mai întâi spațiul de nume, apoi excepția. Confirmă că numele care eșuează aparține unui domeniu controlat de organizație și că înregistrarea este întreținută intenționat. O adresă neașteptată care doar seamănă cu un interval LAN familiar merită suspiciune, nu o excepție, așa că verifică proprietarul zonei înainte de a scrie vreo permisiune.
# 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
Apoi adaugă cea mai îngustă permisiune care acoperă numele vizate: un domeniu, sau un subdomeniu delegat, în configurația resolverului pe care îl interoghează clienții VPN. Dezactivarea protecției pentru fiecare nume de pe acel resolver elimină apărarea pentru toate deodată, inclusiv pentru numele care nu au avut niciodată nevoie de ea.
Split DNS face parte din aceeași decizie. Dacă spațiul de nume privat ar trebui să fie răspuns doar pe resolverul intern, publică-l acolo și oprește scurgerea lui către resolverele publice, astfel încât excepția să acopere o cale în loc de fiecare cale.
Retestează resursa și apărarea
Interoghează din nou, apoi conectează-te la serviciu și verifică ce vede clientul. Un răspuns privat corect cu o sesiune funcțională înseamnă că excepția a intrat în vigoare. Un răspuns corect cu o sesiune blocată înseamnă că următorul suspect este ruta sau identitatea serviciului.
# 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
Testează și un nume public prin același resolver. Protecția ar trebui să se comporte în continuare corect pentru numele din afara excepției, iar dacă testul eșuează, schimbarea a fost mai largă decât s-a intenționat. Nu atinge validarea certificatelor pe tot parcursul, pentru că un nume care se rezolvă corect tot trebuie să corespundă certificatului prezentat de serviciu.
Notează în tichet răspunsul refuzat, domeniul, resolverul și cine deține politica. Acea înregistrare este ce transformă o pană internă misterioasă într-o schimbare de configurație pe care cineva o poate examina.