Podstawy
DNS (ang. Domain Name System) czyli system nazewnictwa domen jest codziennie i w sumie co chwilę wykorzystywany przez każdego z nas. Nazwa domenowa to potoczna nazwa np. serwisu internetowego przykładowo www.wp.pl to pełna nazwa domenowa serwisu Wirtualnej Polski. Kiedy chcemy przeglądać strony danego serwisu wpisujemy jego adres do paska adresu przeglądarki. Tak naprawdę to nie jest adres ale nazwa domenowa. Przy okazji zwróciliście uwagę, że w zależności od przeglądarki po wpisaniu www.wp.pl wygląd paska adresu jest różny? Poniżej przykłady.
Aby przeglądarka mogła „wejść” na stronę wybranego serwisu internetowego musi poznać jego adres IP bo tylko tak może uzyskać połączenie z serwerem docelowym. W tym momencie musi odbyć się tłumaczenie adresu www, czytelnego dla użytkownika, na adres IP czytelny dla systemów sieciowych. Taką funkcje pełni właśnie system DNS. System DNS pracuje na prawie każdym komputerze w postaci klienta. Klient ten nasłuchuje zapytań od oprogramowania typu przeglądarka internetowa, komunikatory, czaty oraz wiele innego oprogramowania korzystającego z Internetu. Kiedy otrzyma takie zapytanie, klient DNS sam wysyła zapytanie do wcześniej skonfigurowanego serwera DNS a od niego otrzymuje odpowiedź w postaci adresu IP. Adres ten przekazuje do oprogramowania pytającego i dopiero wtedy możliwa jest komunikacja np. pobranie stron www. Jeśli system DNS nie działa lub działa nieprawidłowo zdecydowana większość oprogramowania nie będzie funkcjonować, przykładowo przeglądarka internetowa wyświetli błąd, i znowu każda w inny sposób, co przedstawiono poniżej.
Generalna zasada działania DNS wygląda tak (przykład z wp.pl):
– program użytkowy zadaje pytanie klientowi DNS:
„podaj mi adres IP takiej oto nazwy domenowej: www.wp.pl”
– klient zadaje identyczne pytanie skonfigurowanemu lokalnemu resolverowi (lub bezpośrednio serwerowi DNS)
– resolver zapytuje skonfigurowanego DNSa
– jeśli otrzyma odpowiedź buforują ja na pewien czas i odpowiada klientowi adresem IP
– program użytkowy może teraz rozpocząć komunikację np. pobieranie stron www
Należy dodać, że nie zawsze tak to działa. W zależności od programu może on samodzielnie zapytać serwer DNS o rozwiązanie nazwy domenowej całkowicie pomijając lokalny resolver.
Poniżej przykładowa konfiguracja. Jest to przypadek najczęstszy.
Aplikacja kliencka korzysta z lokalnego resolvera, a ten korzysta z zewnętrznych serwerów DNS przy okazji buforując zapytania. Ruch odbywa się pod UDP na port 53 i nie jest szyfrowany. Problem? Odpowiedź może zostać podmieniona i wejdziemy na inną stronę (łudząco podobną) nich chcieliśmy.
Trzeba też pamiętać, że aplikacja może nie używać lokalnego resolvera i pozyskać adres IP samodzielnie.
Konfiguracja DNS
Adresy serwerów DNS podajemy w konfiguracji ustawień połączenia sieciowego. Jest to tzw. resolver czyli oprogramowanie rozwiązująca nazwy DNS na adresy IP. Jest ono elementem systemu operacyjnego. W systemie MS Windows po otwarciu ustawień danego interfejsu sieciowego zobaczymy:
Dolna cześć okna ukazuje konfiguracje DNS. Zazwyczaj podaje się dwa adresy ze względu na redundancję. Jeśli nie odpowie pierwszy to resolver zapyta drugi. Ale jeśli pierwszy odpowie „nie ma takiego adresu” resolver zapewne już nie będzie pytał innych. POwyżej konfiguracja da dwóch adresów DNS: 1.1.1.1 CloudFlare i 8.8.8.8 Google.
Szyfrowanie DNS
W większości przypadków komunikacja klient DNS – serwer DNS odbywa się w sposób nieszyfrowany nawet jeśli korzystamy ze stron i serwisów obsługujących szyfrowanie (czyli adresów zaczynających się https://). To jeden z wielu aspektów słabości oprogramowania sieciowego. Możemy pracować na programie, który prowadzi całkowicie zaszyfrowaną komunikację jednak z pewnością korzysta on z DNS, który jest nie szyfrowany. Po pierwsze przekazuje to osobom mającym dostęp do sieci lokalnej oraz łącz Internetowych, które wykorzystujemy, informację z jakich serwerów czy nawet zasobów korzystamy. Po drugi istnieje potencjalna możliwość dokonani ataku polegającego na podmianie adresów IP w odpowiedziach, co może skutkować zalogowaniem się na fałszywe strony i serwisy internetowe. Nie wchodząc w szczegóły takich ataków mamy całkiem ciekawe możliwości zabezpieczenia naszego komputera i ruchu DNS. Postał więc sposób na rozwiązanie tego problemu a mianowicie szyfrowanie ruchu DNS. Aby mogło ono być uruchomione potrzebne są klient i serwer, które „dogadają” się za pomocą szyfrowanego połączenia. Powstało kilka standardów:
– DNSCrypt wykorzystuje połączenie TCP/443
– DNS over HTTPS (DoH) wykorzystuje połączenie na bazie protokołu HTTPS
– DNS over TLS (DoT) wykorzystuje połączenie TCP/853
DNS szyfrowany wygląda teraz tak:
Na kliencie instaluje się oprogramowanie potrafiące łączyć się z serwerem (wybranym, nie każdym) DNS za pomocą szyfrowanego ruchu. Lokalny resolver od teraz może korzystać z tegoż programu co pokazano poniżej.
Najważniejsze jest to, że z perspektywy większości aplikacji nic się nie zmienia ponieważ nadal korzystają one z tego samego resolvera lokalnego.
Pamiętajmy jednak, że nie ma systemu czy oprogramowania w 100% zabezpieczającego czy zapewniającego anonimowość w Internecie. W przypadku DNSCrypt, chociaż trasa od naszego komputera do serwera DNS jest szyfrowana i można ją uznać za bezpieczną to tak naprawdę nie wiemy kto jest „po drugiej stronie” czyli kto jest operatorem serwera DNS. Tam może odbywać się przechwytywanie i analiza ruchu DNS z naszego komputera całkowicie bez naszej wiedzy. Tak więc korzystajmy z Internetu z rozsądkiem!
Rozwiązań szyfrujących ruch DNS jest sporo, oto kilka z nich:
– SimpleDNS Crypt
– openDNS
– DNSCrypt
– Stubby
Zasada działania takiego programu jest dość prosta: po instalacji może on przejąć rolę serolvera lokalnego lub wspomagać jego pracę poprzez szyfrowanie ruchu DNS. Pracuje na hoście lokalnym i nasłuchuje na porcie 53 UDP (na interfejsie pętli zwrotnej). W tym momencie wystarczy tylko w ustawieniach interfejsu sieciowego wpisać adres pętli zwrotnej jak niżej:
Zapewni to szyfrowanie ruchu DNS z między naszym komputerem a serwerem DNS. Pytanie tylko: z jakiego serwera DNS teraz korzysta nasz komputer? O tym w dalszej części poświęconej konfiguracji SimpleDNS Crypt.
Przykład: OpenDNS
Dla systemu Windows oprogramowanie można pobrać z serwisu np.
http://opendns.github.io/dnscrypt-win-client/
oraz
Pobrany plik opendns-dnscrypt-win-client.zip należy rozpakować, przejść do folderu DNSCryptUpgrade i uruchomić plik DNSCrypt-c0.0.6.msi (lub nowszy jeśli będzie). Pojawi się prosty instalator, który w kliku krokach przeprowadzi proces instalacji:
Jedyne co musimy zrobić to kilkukrotne kliknięcie w klawisz Next – resztę wykona za nas instalator. Po chwili mamy zainstalowany program DNSCrypt a jego ikona pojawi się w zasobniku systemowym koło zegarka w pasku zadań:
Po dwukrotnym kliknięciu ikony DNSCrypt pojawi się okno konfiguracyjne:
Zielony kolor tarczy oznacza, że program pracuje prawidłowo i chroni naszą komunikację DNS. Kolor czerwony oznacza, że ruch DNS odbywa się za pomocą standardowego nieszyfrowanego łącza.
W celu zapewnienia szyfrowania połączenia powinny być zaznaczone opcje Enable OpenDNS oraz Enable DNSCrypt. W przypadku problemów z połączeniem (np. kolor tarczy cyklicznie się zmienia czerwony – zielony) można zaznaczyć opcję trzecią DNSCrypt over TCP/443. Program DNSCrypt uruchamia się automatycznie podczas startu systemu tak więc pracuje cały czas i zabezpiecza nasz ruch DNS.
Jeśli zajdzie potrzeba odinstalowania programu to robimy to przez Panel Sterowania, gdzie odinstalujemy / usuniemy program DNSCrypt:
Przykład (polecany): Simple DNSCrypt
Jest to ciekawe rozwiązanie dla systemu Windows. Instalatora można pobrać z https://simplednscrypt.org/, instalacja jest prosta i wymaga kliku kliknięć. Po instalacji mamy nowy resolver (pracuje w tle) oraz sterowanie nim. Wywoływane z menu start:
Na głównej karcie programu ustalamy:
– czy proces szyfrowania będzie uruchomionyt
– jakie protokoły będą używane (IPv4 i 6)
– jakiego rodzaju serwerów DNS będzie program uzywał
– która karta sieciowa będzie poddawana procesowi podmiany resolvera
przykładowa konfiguracja:
Na karcie serwery ustalamy z jakich serwerów DNS program korzysta. Serwery te obsługują szyfrowanie na różne sposoby (DNSCrypt, DoH). Możemy wybrać dowolne lub pozwolić programowi na ten wybór. Poniżej konfiguracja korzystająca tylko z jednego serwera DNS.
Podsumowanie
Ochrona naszej prywatności jest w dużym stopni zależna od nas samych. Mamy do dyspozycji wiele dobrych i darmowych programów do szyfrowania danych czy transmisji w internecie. Jednym z nich jest DNSCrypt i DoH szyfrujący ruch DNS czyli jeden z newralgicznych elementów systemu sieciowego.
Przedstawione oprogramowanie i sposób konfiguracji to tylko jedna z wielu możliwości jakie mamy jako użytkownicy komputerów. Więcej ciekawych informacji znajduje się na stronie projektu DNSCrypt: https://dnscrypt.org
zasoby:
https://en.wikipedia.org/wiki/DNSCrypt