2. Kryptografia

Pierwszym elementem, który należy uwzględnić w trakcie projektowania aplikacji to sposób wykorzystania komponentów kryptograficznych w aplikacji. Ochrona danych przed ujawnieniem pojawia się w kilku momentach:

  • transmisja danych pomiędzy klientem a serwerem,
  • przechowywanie danych po stronie serwera,
  • uwierzytelnienie z komponentem kryptograficznym np. z wykorzystaniem tokenów JWT.

Każdy z tych elementów korzysta z form kryptografii, której nieprawidłowe wykorzystanie może doprowadzić do ujawnienia informacji.

Pierwszym elementem, na który należy zwrócić uwagę jest konfiguracja serwera WWW. We współczesnym świecie odchodzi się w pełni od komunikacji nieszyfrowanym wariantem protokołu hipertekstowego HTTP na rzecz jego szyfrowanego odpowiednika. Odpowiednia konfiguracja serwera stanowi pierwszą linie obrony przed atakami. Z tego punktu widzenia możliwe ataki można podzielić na:

Diagram przedstawiający wektory ataku na transmisję sieciową
  • A) fałszywego klienta – atak polegający na podszyciu się pod klienta,
  • B) fałszywy serwer – podszycie się pod tożsamość serwera,
  • C) pasywny podsłuch – analizę informacji przesyłanej w celu wydobycia pożądanej treści bezpośrednio lub pośrednio z danych zaszyfrowanych,
  • D) MiTM (man-in-the-middle) – atak polegający na umieszczeniu w potoku komunikacji fałszywego pośrednika, który w sposób aktywny pośredniczy w komunikacji a dla obu stron wymiany pozostanie niezauważony.

Główną linią obrony w architekturze serwerów WWW jest mechanizm zaufania do certyfikatów w architekturze klucza publicznego. Aby go lepiej poznać odpowiedzmy sobie na podstawowe pytania.

Czym jest certyfikat serwera WWW?

Certyfikat serwera WWW jest w najprostszym ujęciu podpisanym przez zaufany urząd certyfikacji kluczem publicznym tego serwera (o szyfrowaniu asymetrycznym można więcej przeczytać w pozycji [8]). Klucz ten służy do weryfikacji uwierzytelnienia pakietów sieciowych pochodzących z tego serwera. Potwierdza więc, że pakiety pochodzą z właściwego miejsca.

Skąd wiemy czy serwer jest zaufany?

Mechanizm zaufania opiera się na łańcuchu poświadczeń mających swój początek w bazie danych certyfikatów głównych w systemie operacyjnym lub w podobnych bazach własnych przeglądarek internetowych. Certyfikaty te wskazują na zaufane organizacje, które są uprawnione do wydawania certyfikatów serwerom WWW (i nie tylko). To zaufanie w tym kontekście jest bezgraniczne tzn. przeglądarka internetowa otwierając stronę prezentującą taki certyfikat ufa, że ktoś (zaufana organizacja) sprawdził, że serwer jest uprawniony do serwowania strony o wskazanej nazwie. Tutaj należy pamiętać, że podmiotem zaufania jest jedynie nazwa URL strony. Może ona być dostarczana przez wiele serwerów o ile wszystkie zaprezentują poprawny certyfikat i nie koniecznie ten sam.

Ten mechanizm może zostać nadużyty w sytuacji, gdy do bazy danych przeglądarki lub systemu operacyjnego zostanie wprowadzony fałszywy certyfikat główny. Wtedy możliwe będzie podszycie się pod dowolną stronę certyfikatem przezeń podpisanym. Należy jednak wspomnieć także o ,,dobrym’’, przynajmniej z założenia zastosowaniu tego mechanizmu – systemy antywirusowe znanych producentów w celu skanowania ruchu szyfrowanego wykorzystują mechanizm ataku MiTM poprzez wprowadzenie własnego certyfikatu do listy zaufanych i podpisywanie fikcyjnych certyfikatów tymczasowych.