Korzystanie z Internetu stało się dla nas czymś oczywistym. Tak oczywistym, że nad wieloma czynnościami się nawet nie zastanawiamy. Co się dzieje, a w zasadzie co robią nasze urządzenia, kiedy używamy Internetu?
Rozważmy bardzo prosty scenariusz, kiedy chcemy po prostu obejrzeć stronę internetową jakiejś firmy. Nazwijmy tę firmę „Jakaś Firma”. Załóżmy, że adres strony internetowej rzeczonej firmy jest nam znany. Niech brzmi https://www.jakasfirma.pl. Dodatkowo niech strona tej firmy będzie statyczna, czyli niewykonująca żadnych czynności. Niech jedynie prezentuje jakieś treści. Rozbijmy adres strony na dwa człony. Pierwszy człon przed dwoma ukośnikami, czyli „https” to nazwa protokołu. Nazwa ta informuje naszą przeglądarkę internetową w jaki sposób komunikować się z serwerem docelowym. Protokół „https” opiszemy za chwilę. Najpierw jednak powinniśmy omówić drugi, lub prawy człon adresu internetowego po dwóch ukośnikach, czyli człon www.jakasfirma.pl. Na ten człon mówimy „w pełni kwalifikowana nazwa domeny” od angielskiego Fully Qualified Domain Name, czyli w skrócie FQDN. Dla uproszczenia będę jednak mówił po prostu „domena”.
Czym jest domena? W poprzednim odcinku „IT Prostymi Słowami” opowiadałem, że komunikacja w internecie zachodzi kiedy podamy numer IP serwera, z którym chcemy się skontaktować. W tym przypadku serwera HTTP czyli Hypertext Transfer Protocol. Numer IP jest w pewnym sensie odpowiednikiem numeru telefonu dla urządzeń w sieci. Wyobraźmy sobie, że za każdym razem, kiedy chcemy odwiedzić jakąś stronę czy wysłać mail, musimy najpierw zajrzeć do swego rodzaju książki telefonicznej z numerami IP. Przypomnijmy sobie ile stron internetowych odwiedzamy na co dzień, z ilu aplikacji korzystamy wielokrotnie w ciągu dnia. Jak często skaczemy ze strony na stronę, często nawet nie znając tych stron. Gdybyśmy za każdym razem musieli sprawdzać adresy IP, raczej internet nie były tak prosty w użyciu jaki jest obecnie. Dla tego też, aby uniknąć takiego częstego sprawdzania adresów, mamy do dyspozycji usługę DNS. DNS czyli Domain Name System jest właśnie swego rodzaju książką telefoniczną z adresami IP. Kiedy wpisujemy w naszej przeglądarce www.jakasfirma.pl, nasz system operacyjny automatycznie wyśle do DNS zapytanie o treści”hej, jaki jest IP do www.jakasfirma.pl”. I kiedy DNS odpowie adresem IP, nawet nie zauważymy a już zostaniemy skierowani na stronę, którą chcieliśmy obejrzeć.
Jak to działa? Zakładając najprostszy scenariusz, nasz system po prostu odpyta skonfigurowany serwer DNS o adres i jeśli serwer wcześniej już dostał takie zapytanie, po prostu udzieli nam odpowiedzi bo już ją zna. Co się jednak stanie, jeśli serwer DNS, który odpytujemy nie zna odpowiedzi, tj. nie zna adresu do Jakiejś Firmy? Tutaj sytuacja trochę się komplikuje. Aby to zrozumieć, musimy zrozumieć koncepcję domen. Przyjrzyjmy się adresowi www.jakasfirma.pl. Adres ten składa się z trzech członów, oddzielonych kropkami. Mamy w nim zatem cztery domeny lub subdomeny. Tak, cztery, a nie trzy. Domena przypisana skrótowi „pl” co prawda jest nazywana „domeną najwyższego rzędu”, ale istnieje domena jeszcze wyższego rzędu, zwana „domeną główną”. Domena główna jest też widoczna w adresie www.jakasfirma.pl. i jest oznaczana kropką po „pl”. Praktycznie wszystkie przeglądarki pozwalają zignorować tę ostatnią kropkę, więc dziś już prawie nikt nie pamięta o niej. Domeny są strukturami hierarchicznymi. Domena najwyższego rzędu „pl” jest subdomeną lub poddomeną domeny głównej, „jakasfirma” jest subdomeną „pl.”, „www” jest subdomeną „jakasfirma.pl.” i tak dalej. Zatem każda domena poza tą główną jest subdomeną domeny wyższego rzędu. Wróćmy do zapytania DNS, które wysyła nasz system operacyjny, żeby uzyskać numer IP do naszej strony. System wysyła zapytanie do znanego serwera DNS. Serwer DNS sprawdza w swoich zasobach, czy adres jest mu już znany. Jeśli nie, wysyła zapytanie do jednego z serwerów domeny głównej, czyli do tego, który jest jeszcze poziom wyżej niż „pl”. Serwer domeny głównej odpowiada numerami IP serwerów DNS niższego rzędu, czyli w tym przypadku adresami serwerów odpowiadających za domenę „pl”. Odpytywany przez nas serwer DNS jednak na tym nie kończy. Po otrzymaniu adresów serwerów DNS zarządzających domeną „pl.”, wysyła do jednego z nich kolejne zapytanie i w odpowiedzi otrzymuje adresy serwerów zarządzających domeną „jakasfirma.pl.”. Proces jest powtarzany tak długo, aż odpytywany przez nas serwer DNS otrzyma ostateczny adres IP przypisany do „w pełni kwalifikowanej nazwy domeny”, o którą prosiliśmy. Cały ten proces wysyłania kolejnych zapytań i interpretowania odpowiedzi trwa nieraz kilkanaście do kilkudziesięciu milisekund.
Można oczywiście zadać pytanie, jak to jest, IP serwera otrzymam dopiero z DNS? Skąd będę wiedzieć, jakie jest IP serwera DNS? Odpowiedź na to pytanie jest dość prosta. Otóż numer IP serwera DNS trzeba znać wcześniej. Dla tego też kiedy podłączamy nasze urządzenie do sieci, router nas poinformuje, jakiego DNS mamy używać. Kiedy przechodzimy z naszym laptopem z sieci do sieci, nieraz zmienimy również serwer DNS, który swoją drogą może być równie dobrze zainstalowany na samym routerze. Możemy również wymusić jakiś własny adres serwera DNS.
Jest jeszcze jeden aspekt dotyczący DNS jako całego systemu. Aspekt ten dotyczy bezpieczeństwa i anonimowości. DNS to dość stara technologia. Powstawała w czasach, kiedy dostęp do internetu był raczej przeznaczony dla uczelni. Mówiąc wprost, wszystkie nasze zapytania oraz odpowiedzi DNS przesyłane są otwartym tekstem. Innym słowy, każdy, kto jest w stanie „wywęszyć” naszą aktywność w internecie i zapisać komunikacje, może bez najmniejszego problemu przeczytać adresy stron o które pytaliśmy DNS. Może równie dobrze poznać odpowiedzi na nasze zapytania. Istnieją technologie pozwalające szyfrować treść zapytań i odpowiedzi. Na przykład DNS-over-TLS albo DNS-over-HTTPS. Dzięki nim możemy zaszyfrować komunikację między naszym urządzeniem a serwerem DNS, oraz zweryfikować czy serwer DNS nie jest spreparowany przez hakera. Korzystanie z takiego serwera z dodatkowym szyfrowaniem jednak wiąże się z pewnym pytaniem. „Jeśli nawet ktoś podsłuchuje mój ruch w internecie, to co z tego, że zapytania i odpowiedzi DNS nie będzie w stanie przeczytać, skoro i tak za mniej niż sekundę wejdę na tę stronę i wtedy się dowie o co odpytywałem DNS?” I będzie to pytanie uzasadnione, ale tylko do pewnego stopnia. Jeśli jesteśmy podsłuchiwani na odcinku gdzieś blisko nas, wtedy faktycznie szyfrowanie DNS ma ograniczony sens bo jeśli ktoś widzi całą naszą aktywność w sieci, to widzi też odwiedzane strony. Jednakże jeśli jesteśmy podsłuchiwani na jakimś dalszym odcinku, atakujący może znać tylko część naszej aktywności, ponieważ pakiety wędrują różnymi trasami. Standardy szyfrowanych zapytań DNS wciąż są jednak mało popularne.
Wróćmy do omawianego URL czyli „https://www.jakasfirma.pl.”. Wiemy już, jak niniejszy URL jest tłumaczony na adres IP. Nasza przeglądarka wie już gdzie ma skierować żądanie. O czym zatem mówi nam ten dziwny skrót „https”. Jak już wcześniej wspominałem, HTTP to Hypertext Transfer Protocol. Jest to protokół, który standaryzuje komunikację komputerów, formę żądań i odpowiedzi. To właśnie za pomocą tego protokołu nasza przeglądarka wysyła żądanie do serwera, który z kolei, kierując się standardami HTTP odpowiada tekstem. Strona internetowa to w zasadzie tekst, który nasza przeglądarka jest w stanie interpretować i dokonać na jego podstawie odpowiedniego renderowania. O protokole HTTP dziesiątki książek napisano, ja jednak chciałbym się skupić na „HTTPS” czyli Hypertext Transfer Protocol Secure. Protokół w porównaniu z HTTP dodatkowo uwzględnia szyfrowanie.
Znając już IP serwera ze stroną internetową jakiejś firmy, nasza przeglądarka rozpoczyna nawiązywanie połączenia za pomocą protokołu HTTPS. W trakcie nawiązywania takiego połączenia serwer udzieli nam tzw. „certyfikatu TLS”. Taki certyfikat to w zasadzie plik tekstowy zawierający między innymi nazwę serwera, okres ważności certyfikatu oraz klucz publiczny serwera. Klucz publiczny określa w jaki sposób nasze urządzenie powinno dokonać szyfrowania. Nasze urządzenie zaszyfruje wiadomość używając klucza publicznego. Taka zaszyfrowana wiadomość, może zostać odszyfrowana tylko przez posiadacza klucza prywatnego. Klucz prywatny znajduje się na serwerze strony internetowej jakiejś firmy i powinien być dobrze zabezpieczony, ponieważ wykradzenie takiego klucza dawałoby hakerowi możliwość odszyfrowania naszej komunikacji z serwerem. Po otrzymaniu certyfikatu TLS, zawierającego klucz publiczny, nasze urządzenie poza, innymi czynnościami, generuje losowy ciąg znaków, szyfruje go za pomocą klucza publicznego i wysyła go na serwer. Serwer jako jedyny na świecie posiada klucz prywatny, więc jest w stanie wiadomość odczytać. Losowy ciąg znaków, który znalazł się w tej wiadomości jest de facto częścią nowego klucza, który będzie wykorzystywany do dalszej komunikacji. Warto tutaj wspomnieć, że nie jest to jedyny moment, kiedy obie strony komunikacji wymieniają losowe ciągi znaków. Ważne jest natomiast, że w trakcie całego procesu, strony uzgadniają nowe klucze oraz szyfry, które będą zrozumiałe dla obu stron, ale będą wykorzystywane tylko i wyłącznie do komunikacji między tymi dwoma urządzeniami i tylko na określony czas. Widzimy zatem, że certyfikat TLS, który każdy nowy klient otrzymuje w identycznej formie, jest tylko wykorzystywany przez krótki czas, a dokładnie w pierwszym etapie zwanym „uściskiem dłoni”. Po uścisku dłoni, czyli wymianie kluczy tymczasowych, komunikacja jest zrozumiała tylko dla tych dwóch urządzeń i nie może zostać odczytana nawet dla osoby trzeciej która zna klucz publiczny serwera.
Jest jednak pewien problem. Otóż każdy jest w stanie wygenerować sobie sam parę kluczy czyli klucz publiczny i klucz prywatny. A skoro tak, to skąd możemy wiedzieć, że klucz publiczny, który otrzymaliśmy jest faktycznie kluczem publicznym jakiejś firmy? Skąd wiemy czy klucz nie został gdzieś po drodze przechwycony, a to co my dostaliśmy to jakiś klucz spreparowany? Tutaj odpowiedź tkwi w budowie certyfikatu TLS. Certyfikat TLS, zawiera informacje o domenie na którą został wystawiony, informacje o okresie ważności certyfikatu, klucz publiczny i jeszcze kilka innych danych. Ponadto, certyfikat TLS jest podpisany przez tzw „urząd certyfikacji” czyli organ, który weryfikuje, czy firma jest faktycznym właścicielem domeny. Jeśli firma udowodni, że jest właścicielem domeny, urząd certyfikacji dokona kryptograficznego podpisania certyfikatu jakiejś firmy. Być może certyfikat urzędu został również podpisany kluczem urzędu wyższego rzędu, więc nasza przeglądarka będzie weryfikować podpisy kolejnych i kolejnych certyfikatów tak długo, aż znajdzie podpis taki, który uzna za zaufany. Zaufane certyfikaty możemy podejrzeć w swojej przeglądarce. Są to zazwyczaj certyfikaty tzw „głównych urzędów certyfikacji”. Certyfikaty tych urzędów nie muszą być przez nic dalej podpisywane. Zostają one nam po prostu dostarczone wraz z przeglądarką lub systemem operacyjnym. Jeśli zatem wchodząc na jakąś stronę widzimy ostrzeżenie, że certyfikat nie jest zaufany wiemy, że nasza przeglądarka nie była w stanie znaleźć żadnego połączenia cyfrowych podpisów pomiędzy certyfikatem strony, z którą się łączymy a certyfikatem, który nasza przeglądarka uznała za zaufany. Nie bagatelizujmy nigdy takiego ostrzeżenia, bo może ono właśnie oznaczać, że prawidłowy certyfikat został przechwycony w drodze a do nas trafia certyfikat spreparowany. Jeśli zaakceptujemy otrzymany certyfikat, robimy to na własne ryzyko. Haker po spreparowaniu certyfikatu i naszym wyrażeniu zgody jest w stanie obejrzeć wszystko co robimy. Jeśli korzystamy ze strony banku na przykład, byłby w stanie sprawdzić stan konta lub podpatrzeć hasło. Pamiętajmy o takim zagrożeniu i nigdy nie akceptujmy certyfikatów, których nie jesteśmy w stanie zweryfikować.
Jak widać zwykłe wpisanie w pasek URL sekwencji znaków „https://www.jakasfirma.pl.” i naciśnięcie enter, wywołało kaskadę zdarzeń, której efektem końcowym było wyświetlenie strony a rozpatrzyliśmy bardzo prosty przykład. Zwróćmy uwagę, że jeśli wszystkie czynności wykonaliśmy poprawnie i nikt nie próbuje zrobić czegoś złego, cały proces przebiega prawie bez naszej wiedzy. Ważne jest jednak, żeby uważać, czy na pewno wszystko robimy poprawnie. Jeśli prawidłowo wpiszemy adres strony, powinniśmy zobaczyć kłódeczkę w pasku URL. Mamy wtedy pewność, że korzystamy z tej strony, którą faktycznie chcemy widzieć. A jeśli nawet ktoś węszy, nie jest w stanie nic wywnioskować z tego co widzi, ponieważ wiadomości są szyfrowane.
A co jeśli źle podaliśmy adres? Co jeśli przypadkiem w adresie zamiast np liter „rm” w adresie podaliśmy literę „m” czy na odwrót? Te litery są do siebie podobne i szybki rzut oka może tego nie wyłapać. Może ktoś nam taki błędny adres podał celowo? Niestety taka metoda jest wciąż popularna i co gorsza znacznie skuteczniejsza niż przechwytywanie certyfikatów. Hakerzy nieraz celowo wykupują domeny o bardzo podobnych nazwach do tych prawdziwych stron firm. Co gorsza, uzyskują dla tych stron podpisane certyfikaty TLS, więc użytkownik nie otrzyma ostrzeżenia o niezaufanym połączeniu a wręcz zobaczy kłódeczkę co tylko utwierdzi go w mylnym przekonaniu o swoim bezpieczeństwie. Haker często jest faktycznym właścicielem domeny, więc ma prawo uzyskać dla niej certyfikat. Mógł stworzyć stronę wyglądającą identycznie co strona banku, tylko pod innym adresem a na poprawę wiarygodności wykupił certyfikat. Taka spreparowana strona może długo bezkarnie przebywać w internecie dopóki ktoś jej nie zgłosi odpowiednim organizacjom. Dla tego też w takich okolicznościach pozostaje nam po prostu duża ostrożność. Zanim podamy jakiekolwiek loginy czy hasła zawsze zweryfikujmy domenę, upewnijmy się czy adres został poprawnie podany. Nigdy się nie spieszmy, ponieważ do tego właśnie będą nas prowokować ludzie o złych zamiarach. To właśnie przez pośpiech najczęściej padamy ofiarą wyłudzeń haseł. W dzisiejszych czasach stosowanie kryptografii sprawiło, że próby złamania szyfrów stały się mało efektywne. Atakowanie połączenia szyfrowanego mija się z celem, więc celem staliśmy się my sami. O sukcesie ataku decyduje przygotowanie psychologiczne w takiej samej mierze jak zdolności techniczne.
Internet nie jest bezpiecznym miejscem, pomimo wielu dostępnych mechanizmów czyniących go nieco bardziej bezpiecznym. Nie miejmy jednak złudzeń, to czy damy się oszukać zależy od nas i nikt nie weźmie za to odpowiedzialności. Weryfikujmy domenę, nie ulegajmy presji czasowej i z najwyższą podejrzliwością traktujmy wszystko co wydaje się nam nietypowe. Jeśli coś wzbudzi naszą wątpliwość, zaniechajmy działań. Nie próbujmy walczyć z kimś, kto może być oddalony o tysiące kilometrów od nas, nie ma skrupułów i doskonale wie co robi. Tylko własny rozsądek i ostrożność może nas uchronić przed nieodwracalnymi szkodami, a czasem jedno kliknięcie to jedno kliknięcie za dużo.