Lekcja 3 z 4 · 7 min
Szyfrowany DNS: DoH i DoT
Dwa standardy owijają zapytania DNS szyfrowaniem. Co to faktycznie ukrywa, czego wciąż nie ukrywa i jak wspiera to macOS.
Poprzednia lekcja opisała zwykłe zapytanie DNS jako pocztówkę: czytelną dla każdego, kto ją obsługuje po drodze. Istnieją dwa standardy IETF, które wkładają tę pocztówkę do koperty: DNS przez TLS (DoT, RFC 7858) i DNS przez HTTPS (DoH, RFC 8484). Oba szyfrują to samo zapytanie; różnią się głównie sposobem jego przenoszenia.
DNS przez TLS
RFC 7858 wprost stwierdza swój cel: „szyfrowanie zapewniane przez TLS eliminuje możliwości podsłuchu i manipulacji na trasie zapytaniami DNS”, odpowiadając na fakt, że „niemal wszystkie zapytania DNS są wysyłane niezaszyfrowane, co czyni je podatnymi na podsłuch ze strony atakującego”. DoT używa własnego, dedykowanego portu, 853, zamiast zwykłego portu 53. RFC wyjaśnia dlaczego: „to zalecenie przeciwko używaniu portu 53 dla DNS przez TLS ma na celu uniknięcie komplikacji przy wyborze użycia lub nieużycia TLS oraz zmniejszenie ryzyka ataków obniżających wersję zabezpieczeń (downgrade)”.
DNS przez HTTPS
RFC 8484 obiera inną drogę: „każda para zapytanie-odpowiedź DNS jest odwzorowywana na wymianę HTTP”, przenoszoną przez ten sam port 443, którego używa zwykły ruch HTTPS. RFC zaznacza, że ma to dodatkową korzyść: „domyślny port HTTPS 443 oraz możliwość mieszania ruchu DoH z innym ruchem HTTPS na tym samym połączeniu mogą zniechęcić nieuprzywilejowane urządzenia na trasie do ingerowania w operacje DNS”, ponieważ trudniej wyodrębnić i zablokować zapytanie, gdy wygląda ono jak każde inne żądanie sieciowe.
| DNS przez TLS (DoT) | DNS przez HTTPS (DoH) | |
|---|---|---|
| Port | 853, dedykowany dla DoT | 443, współdzielony ze zwykłym ruchem HTTPS |
| Widoczny w sieci jako | Własny, odrębny ruch (łatwy do wykrycia i, jeśli sieć tak zdecyduje, zablokowania) | Zmieszany ze zwykłym przeglądaniem stron |
Co ukrywa szyfrowanie, a czego wciąż nie ukrywa
Oba standardy powstrzymują operatora sieci albo podsłuchującego przez Wi-Fi przed odczytaniem twoich zapytań w tranzycie. Żaden z nich nie ukrywa ich przed resolverem, do którego je wysłałeś. RFC 8484 wprost stwierdza, że DoH nie zmienia tego, co może zobaczyć sam serwer: zaznacza, że „różne sposoby przenoszenia zapytań i odpowiedzi DNS faktycznie dostarczają danych, które można wykorzystać do powiązania żądań”, a zwykłe mechanizmy sieciowe, takie jak adresy IP klienta, pliki cookie i informacje o sesji TLS, sprawiają, że „nie wiadomo, by DoH wprowadzał nowe obawy wykraczające poza te związane z HTTPS” po stronie serwera. RFC 7858 podobnie zaznacza, że DoT „nie rozwiązuje innych kwestii bezpieczeństwa w DNS” i że „nawet przy zaszyfrowanych wiadomościach dobrze usytuowana strona może być w stanie wywnioskować pewne szczegóły z analizy czasu i rozmiaru wiadomości”. Krótko mówiąc: szyfrowany DNS przenosi to, kto widzi twoje zapytania, z powrotem na operatora wybranego przez ciebie resolvera, a nie usuwa widoczności całkowicie.
Warto znać jeszcze drugą lukę. Zaszyfrowanie zapytania DNS samo w sobie nie ukrywa, z jaką stroną się potem łączysz: następujące po nim uzgadnianie TLS zwykle zawiera nazwę hosta jawnie widoczną. Jak ujmuje to wyjaśnienie Cloudflare dotyczące Server Name Indication (SNI): „SNI zawiera nazwę hosta w wiadomości Client Hello, czyli pierwszym kroku uzgadniania TLS” — wysyłanej, zanim ustanowione zostanie szyfrowanie. Rozszerzenie o nazwie Encrypted SNI (ESNI), jak wyjaśnia to samo źródło, „rozszerza rozszerzenie SNI, szyfrując część SNI wiadomości Client Hello”, co „uniemożliwia każdemu podsłuchującemu między klientem a serwerem zobaczenie, o jaki certyfikat prosi klient”. Wsparcie dla ukrywania SNI wciąż zależy od zgody zarówno przeglądarki, jak i strony, i nie jest jeszcze sposobem działania każdego połączenia.
Jak wspiera to macOS
Apple dokumentuje konfigurację DNS Settings dla Maca, iPhone’a i iPada, która robi dokładnie to: pozwala urządzeniu „kierować zapytania DNS urządzenia przez zaszyfrowany serwer DNS, używając DNS przez HTTPS albo DNS przez TLS”. Dostarczana jest jako profil konfiguracyjny, który może ograniczyć zaszyfrowany resolver do konkretnych domen za pomocą „uzupełniających domen dopasowania”, albo zastosować go tylko w określonych sieciach za pomocą „reguł na żądanie”, które mogą dopasowywać takie rzeczy jak identyfikator SSID sieci.
Najważniejsze
- DoT (RFC 7858) szyfruje DNS przy użyciu TLS na dedykowanym porcie, 853; DoH (RFC 8484) szyfruje go i przenosi przez zwykły port HTTPS, 443, mieszając się z innym ruchem sieciowym.
- Oba powstrzymują podsłuchujących na trasie sieciowej przed odczytaniem twoich zapytań.
- Żaden z nich nie ukrywa twoich zapytań przed resolverem, do którego je wysłałeś: samo RFC 8484 stwierdza, że nie wiadomo, by DoH „wprowadzał nowe obawy wykraczające poza te związane z HTTPS” po stronie serwera.
- Nawet przy szyfrowanym DNS uzgadnianie TLS dla samej strony zwykle jawnie ujawnia jej nazwę hosta (SNI), chyba że użyte zostanie rozszerzenie takie jak Encrypted SNI.
- macOS i iOS wspierają szyfrowany DNS za pomocą udokumentowanego profilu konfiguracyjnego DNS Settings, który może określać DoH lub DoT i ograniczać go do konkretnych domen lub sieci.
Sprawdź się
1. Jakiego portu używa DNS przez TLS (DoT) i dlaczego dedykowanego?
- Portu 80, tego samego co HTTP
- Portu 853, wybranego częściowo, by uniknąć ataków obniżających wersję zabezpieczeń, które mogłyby wynikać z niejednoznaczności na porcie 53 — Dobrze.
- Portu 25, tego samego co poczta e-mail
- Za każdym razem losowego portu
RFC 7858 przypisuje DoT własny port, 853, wyjaśniając, że unikanie portu 53 „zmniejsza ryzyko ataków obniżających wersję zabezpieczeń”.
2. Dlaczego DNS przez HTTPS (DoH) używa portu 443?
- Ponieważ to jedyny darmowy port
- Ponieważ współdzielenie portu 443 ze zwykłym ruchem HTTPS utrudnia wyodrębnienie i zablokowanie DoH — Dobrze.
- Ponieważ port 443 jest szybszy niż inne porty
- DoH nie używa portu 443
RFC 8484 zaznacza, że mieszanie DoH ze zwykłym ruchem HTTPS na porcie 443 „może zniechęcić nieuprzywilejowane urządzenia na trasie do ingerowania w operacje DNS”.
3. Czy DoH lub DoT ukrywają twoje zapytania DNS przed resolverem, do którego je wysyłasz?
- Tak, całkowicie
- Nie, ukrywają zapytania przed trasą sieciową, ale operator resolvera nadal widzi te zapytania — Dobrze.
- Tylko DoH ukrywa je przed resolverem
- Tylko DoT ukrywa je przed resolverem
RFC 8484 stwierdza, że nie wiadomo, by DoH „wprowadzał nowe obawy wykraczające poza te związane z HTTPS” po stronie serwera, co oznacza, że operator resolvera nadal może widzieć i powiązać zapytania.
4. Nawet przy szyfrowanym DNS, co zwykle wciąż ujawnia, z jaką stroną się łączysz?
- Hasło Wi-Fi
- Nazwa hosta wysyłana jawnie w wiadomości TLS Client Hello (SNI), chyba że użyte zostanie rozszerzenie takie jak Encrypted SNI — Dobrze.
- Prywatny adres IP twojego Maca
- Pamięć podręczna resolvera DNS
Cloudflare wyjaśnia, że „SNI zawiera nazwę hosta w wiadomości Client Hello”, zanim zacznie się szyfrowanie; Encrypted SNI (ESNI) ma to ukrywać, ale nie jest jeszcze powszechne.
Wypróbuj to z FireAI
Zastosuj tę lekcję w praktyce na swoim Macu.
- Głęboka inspekcja, bez odszyfrowywania czegokolwiek — Uzyskaj prawdziwe szczegóły o bezpiecznym połączeniu bez ryzyka, że FireAI kiedykolwiek odczyta jego zawartość.
- Listy zagrożeń (opcjonalne) — Porównuj swój ruch z publicznymi danymi o zagrożeniach, nigdzie go nie wysyłając.
- Zablokuj aplikacji dostęp do internetu albo tylko jedną firmę czy domenę — Odetnij dokładnie to, co chcesz — całą aplikację albo tylko jedną firmę, z którą się łączy.
Źródła
- RFC 7858: Specification for DNS over Transport Layer Security (TLS)
- RFC 8484: DNS Queries over HTTPS (DoH)
- Cloudflare Learning: DNS over TLS vs. DNS over HTTPS
- Cloudflare Learning: What is SNI? / Encrypted Client Hello
- Apple Platform Deployment: DNS settings declarative configuration for Apple devices
Zastosuj to na swoim Macu
Wypróbuj wszystkie funkcje za darmo przez 17 dni, bez karty.