DNS over HTTPS (DoH) to nowy protokół służący oczywiście do rozpoznawania nazw domenowych przez HTTPS. Informacje o nim są ostatnio na topie, ponieważ zarówno Google, jak i Mozilla zaimplementowali go odpowiednio w Chrome i Firefox. Połączenie za pomocą DoH szyfruje ruch DNS poprzez HTTPS. Pozwala to dostawcom usług internetowych oraz innym podmiotom w odpowiedniej pozycji sieciowej na obserwowanie tradycyjnego ruchu DNS w postaci zwykłego tekstu wysyłanego z przeglądarki na serwery DNS. Należy mieć na uwadze, że dostawcy samej usługi DoH mogą obserwować przeznaczony dla nich ruch DNS.

Na Kapitanie Hacku wielokrotnie pisaliśmy o wykorzystaniu protokołu DNS do przeprowadzenia konkretnych ataków. Wspominaliśmy na przykład o przejęciu zdalnej kontroli nad komputerem za pomocą DNS lub możliwości pobrania dowolnego kodu przez protokół DNS omijając w ten sposób zabezpieczenia.
W tym artykule chcielibyśmy skupić się na nowej szyfrowanej implementacji protokołu DNS i sprawdzić, czy chroni przed popularnym atakiem zwanym DNS Rebinding.


Opis działania DoH

Klasyczny protokół DNS przesyła informacje w postaci zwykłego tekstu, co nie zapewnia ochrony przed podsłuchującymi w sieci. Widocznie dostawcy usługi DNS zdali sobie sprawę, że protokół ten zaczyna być równie ważny i krytyczny w całym Internecie co HTTP/S i również może zawierać poufne informacje, dlatego postanowili go ulepszyć. Podstawowym celem DNS over HTTPS jest zapewnienie prywatności użytkowników za pomocą szyfrowania danych end-to-end między klientem, a serwerem DNS. W praktyce, pozwala to na ukrycie nazw witryn, do których użytkownicy uzyskują dostęp za pomocą swoich przeglądarek internetowych. Ani właściciel witryny, ani dostawca usług internetowych, ani każdy inny publiczny użytkownik nie będzie w stanie zobaczyć zawartości zapytania DNS.
Jedną z głównym zmian w architekturze wprowadzoną przez DoH jest to, że użytkownicy mogą ominąć lokalne resolwery DNS i zamiast tego bezpośrednio odpytywać serwer DoH, tak aby zapewnić szyfrowanie end-to-end.
Większość dostawców DoH obsługuje popularne formaty DNS UDP oraz JSON. Format DNS (RFC 1035) jest kodowany binarnie i jego domyślnie używają przeglądarki. Format JSON jest prosty do odczytania dla ludzi i zawiera zapisane zwykłym tekstem takie pola jak: typ rekordu, nazwa domenowa, adres IP nazwy domenowej, TTL.

Podczas, gdy każdy z nas może skonfigurować swój własny serwer DoH za pomocą na przykład tego narzędzia, to posłużyć nam on może praktycznie tylko do testów. Większość użytkowników będzie bowiem korzystało z wbudowanych w przeglądarki, publicznych dostawców DoH takich jak:

  • Cleanbrowsing
  • Clouldflare
  • Comcast
  • DNS.SB
  • Google
  • OpenDNS
  • NextDNS
  • Quad9

Atak DNS Rebinding

Wiele dostawców usługi DoH chwali się, że wdrożyło mechanizmy chroniące przed atakiem ponownego wiązania DNS (ang. DNS Rebinding). Jest to metoda pozwalająca ominąć reguły przeglądarki internetowej blokujące interakcję między zasobami różnego pochodzenia w Internecie. Zasoby tego samego pochodzenia mają tą samą składnie w nazwie domeny, np. zasoby https://kapitanhack.pl/hello.html oraz https://kapitanhack.pl/world.html mają to samo pochodzenie. Większość interakcji między zasobami różnego pochodzenia jest blokowana przez przeglądarki, aby uniemożliwić na przykład złośliwej usłudze próby dostępu do czyjejś poczty internetowej.

DNS Rebinding mapuje składnik hosta źródła z domeny atakującego na domenę ofiary, co oszukuje przeglądarki internetowe. Takie ataki mogą zostać wykorzystane do wyodrębnienia poufnych informacji, wykonania operacji uprzywilejowanych, a nawet do wyzwolenia zdalnie złośliwego kodu. Więcej informacji o ataku DNS Rebinding dowiesz się w naszym kolejnym artykule.


Czy DNS-over-HTTPS tutaj pomoże?

Dostawcy usług DoH, tacy jak NextDNS i OpenDNS, wprost reklamują funkcje ochrony przed ponownym wiązaniem DNS. Zwykle osiąga się to poprzez blokowanie odpowiedzi DNS zawierających adresy IP, które są powszechnie używane w atakach ponownego wiązania, takich jak prywatne (RFC 1918) czy adres IP lokalnego hosta. Okazuje się, że takie proste zabezpieczenia nie są skuteczne.

Jedną z technik obejścia jest użycie adresu IP 0.0.0.0, który nie jest routowalny. W systemie Linux i macOS tego adresu IP można użyć do uzyskania dostępu do usług nasłuchujących na interfejsie pętli zwrotnej. NextDNS domyślnie zwraca „UNSPECIFIED_ADDRESS” (0.0.0.0), gdy blokuje żądanie DoH, a ich funkcja ochrony przed ponownym wiązaniem DNS jest włączona. Ochrona ponownego wiązania DNS nie będzie zatem tutaj działać w celu ochrony usług nasłuchujących na interfejsie sprzężenia zwrotnego, ponieważ Linux i macOS przekazują żądania na ten adres IP hosta lokalnego. Metodę tę opisano szczegółowo tutaj.

Kolejne obejście ochrony przed DNS Rebinding zostało osiągnięte przy użyciu rekordów DNS CNAME. Ta technika pozwala ominąć funkcje ochrony, które blokują wszystkie wewnętrzne adresy IP. Rekordy „nazw kanonicznych” (CNAME) odwzorowują jedną nazwę domeny na inną domenę. Metoda opisana tutaj może zwrócić rekord DNS CNAME zamiast wewnętrznego adresu IP. Pomija to zabezpieczenia blokujące odpowiedzi DNS zawierające prywatne adresy IP. Następnie lokalny wewnętrzny serwer DNS rozpozna CNAME.


Jak skonfigurować DoH w Chrome i Firefox?

Konfiguracja przeglądarki do korzystania z DoH jest prosta, ale samo testowanie i debugowanie w niektórych przypadkach jest problematyczne.

Włączenie DoH w Mozilla Firefox:

  1. Kliknąć w przycisk „Menu” i wybrać „Opcje”.
  2. Na widoku głównym przewinąć na sam dół do sekcji „Sieć” i kliknąć przycisk „Ustawienia”.
  3. W wyświetlonym oknie przejść na sam dół i zaznaczyć opcje „DNS poprzez HTTPS”.
  4. Wybrać dostawcę z listy i zatwierdzić przyciskiem „OK”.

Włączenie DoH w Google Chrome:

  1. Przejść do strony: „chrome://flags/#dns-over-https”.
  2. Opcję „Secure DNS lookups” zmienić na „Enabled”.
  3. W ustawieniach systemu operacyjnego wpisać jako adres DNS adres odpowiedniego dostawcy. Dla przykładu, Cloudflare to adres 1.1.1.1. Bez zmiany domyślnego adresu DNS w systemowym interfejsie sieciowym Chrome nie będzie używał DoH.

Niektórzy dostawcy zapewniają łatwy sposób sprawdzenia, czy DoH jest włączony i działa poprawnie. W przypadku Cloudflare wystarczy przejść do adresu https://1.1.1.1/help i sprawdzić, czy wyświetli się komunikat „Korzystanie z DNS poprzez HTTPS – Tak”. W przypadku usługi NextDNS taka strona to https://my.nextdns.io/start .
Aby niezależnie sprawdzić wysyłane przez nas pakiety DNS, warto podejrzeć ruch za pomocą narzędzia Wireshark i sprawdzić czy ruch DNS jest szyfrowany.


Podsumowanie

Protokół DNS over HTTPS umożliwia użytkownikom szyfrowanie zapytań DNS przy wykorzystaniu kanału TLS bezpośrednio do jednego zaufanego dostawcy. Zauważyliśmy jednak, że używanie DoH zamiast zwykłego tekstu nie ma wpływu na ataki polegające na ponownym wiązaniu DNS. Są tak samo skuteczne.
Warto włączyć DoH w swojej przeglądarce internetowej, jednak nie można bezgranicznie wierzyć, że zabezpieczy to nas przed wszystkimi popularnymi atakami.
Więcej informacji o ataku DNS Rebinding dowiesz się w naszym kolejnym artykule.