Приватните VPN имиња не работат? Сомнителното е заштитата од DNS rebinding
Резолвер што ги одбива одговорите од приватниот простор ги крши внатрешните имиња, а не тунелот. Прочитајте го одговорот, ограничете го исклучокот, заштитата задржете ја на друго место.
Во канцелариската LAN внатрешното име одговара веднаш. Во мигот кога VPN е вклучен тоа престанува да работи, апликацијата пријавува истек на време, а самиот тунел без поплаки пренесува сообраќај. Она што се смени е резолверот, а тој резолвер има свое мислење за приватните адреси.
Заштитата од rebinding постои за да запре еден конкретен трик. Намерно објавено приватно име изгледа доволно слично за одбраната да се активира.
Прочитајте го одговорот пред политиката
Прашајте го името кај резолверот што VPN навистина го доставува, а не кај оној што го користи вашиот лаптоп дома. Споредете го одговорот со записот што го очекувате и запишете дали одговорот е празен, одбиен или полн со јавни адреси што никој не ги планирал.
Симптомите се преклопуваат, затоа дијагнозата ја одредува формата на одговорот. NXDOMAIN е запис што недостига, REFUSED е правило за пристап, јавна адреса за внатрешно име е грешка во политиката или split-DNS, а точна приватна адреса што клиентот не може да ја користи е сосема друг проблем. Одбиена врска или застојано барање само по себе не докажува ништо, затоа првата команда во вакви тикети треба да биде пребарување, а не рестартирање. Запишете го одговорот пред да смените нешто.
Што навистина запира одбраната
DNS rebinding работи со менување на тоа во што се разрешува името откако клиентот веќе му доверил. Страницата се вчитува од име под контрола на напаѓачот, одговорот се превртува на приватна адреса, а прелистувачот е измамен да разговара со нешто на локалната мрежа со кое никогаш не би прифатил директна врска. Одбраната е да се одбијат одговори што покажуваат во приватниот простор кога резолверот никогаш не бил побарано да служи приватен именски простор. Таа асиметрија е целиот напад.
dnsmasq го документира токму таквото однесување, заедно со исклучоци по домен. Во своето упатство го опишува rebind-domain-ok како начин да се именуваат домени што можат легитимно да враќаат такви адреси. Читајте го тоа како знак дека предвидената поправка е ограничена дозвола, а не глобален прекинувач.
Ограничете го исклучокот на именскиот простор
Прво поправете го именскиот простор, потоа исклучокот. Потврдете дека името што не работи припаѓа на домен што го контролира организацијата и дека записот намерно се одржува. Неочекувана адреса што само наликува на познат LAN опсег заслужува сомнеж, а не исклучок, затоа проверете го сопственикот на зоната пред да напишете каква било дозвола.
# 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
Потоа додајте ја најтесната дозвола што ги опфаќа предвидените имиња: еден домен или еден делегиран поддомен, во конфигурацијата на резолверот што го прашуваат VPN клиентите. Исклучувањето на заштитата за секое име на тој резолвер ја отстранува одбраната за сите нив одеднаш, вклучително и имињата на кои никогаш не им требала.
Split DNS припаѓа на истата одлука. Ако приватниот именски простор треба да го одговара само внатрешниот резолвер, објавете го таму и престанете да го излевате кон јавните резолвери, така што исклучокот ќе покрие еден пат наместо секој пат.
Повторно тестирајте го ресурсот и одбраната
Прашајте повторно, потоа поврзете се со услугата и проверете што гледа клиентот. Точен приватен одговор со сесија што работи значи дека исклучокот е применет. Точен одговор со застојана сесија значи дека следниот сомнителен е маршрутата или идентитетот на услугата.
# 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
Тестирајте и јавно име преку истиот резолвер. Заштитата треба сѐ уште правилно да се однесува за имиња надвор од исклучокот, и ако таа проверка не успее, промената била поширока од предвиденото. Не допирајте ја валидацијата на сертификати во текот на целиот процес, бидејќи име што се разрешува правилно сѐ уште мора да одговара на сертификатот што го прикажува услугата.
Запишете го одбиениот одговор, доменот, резолверот и кој ја поседува политиката во тикетот. Токму тој запис го претвора мистериозниот внатрешен прекин во конфигурациска промена што некој може да ја прегледа.