PostgreSQL szyfrowanie danych: Hasła

Baza danych PostgreSQL jest świetnym miejscem do przechowywania danych. W przypadku przechowywania wrażliwych danych, kluczowym jest odpowiednie ich zabezpieczenie. PostgreSQL szyfrowanie danych wykonuje na kilka różnych sposobów.

W tym artykule omawiam metody uwierzytelniania i co za tym idzie szyfrowania haseł w PostgreSQL. Dowiesz się jak w bezpieczny sposób zmienić swoje hasło.

Jeżeli interesuje Cię tematyka baz danych PostgreSQL może zaciekawić Cię artykuł: Jak sprawdzić wersję PostgreSQL? Wersje Postgres w pigułce!

10 przydatnych zapytań SQL dla Administratora Baz Danych

Jak zaszyfrować hasło?

Baza danych PostgreSQL wyróżnia trzy metody przetrzymywania i przesyłania hasła:

  • password
  • md5
  • scram-sha-256

Password

Pierwsza z nich wyróżnia się najniższym poziomem bezpieczeństwa. Jest to zarazem najstarsza z dostępnych metod w bazie PostgreSQL. Hasła w tym formacie, przetrzymywane są w tzw. „plain text”. Jak się zapewne domyślasz przy takim podejściu są one łatwe do odczytania przez osoby mające dostęp do bazy danych(w tym Administratorów), lub podsłuchujące ruch między użytkownikiem a bazą.

MD5

Druga z metod czyli MD5 jest już bardziej bezpieczna. Chroni ona Nas przed osobami chcącymi podsłuchać ruch. Użytkownik logujący się do bazy danych, otrzymuje w pierwszej kolejności tzw. „salt”. Jest to prosty ciąg losowych znaków generowany oddzielnie dla każdego połączenia.

PostgreSQL Szyfrowanie Salt
Rozpoczynanie połączenia klient-serwer PostgreSQL

Narzędzie klienckie którym użytkownik łączy się do bazy wykonuje operację hash MD5 na loginie i haśle podanych przez użytkownika. Następnie wykonuje kolejny hash na wygenerowanym MD5 i otrzymanym z serwera ciągu znaków nazwanym wcześniej „salt”. W ten sposób powstaje wynikowy hash MD5, gotowy do przesłania do punktu docelowego. Dla przykładu nazwa niniejszej strony przepuszczona przez funkcję hash MD5 wygląda następująco: „72c7d839c65e653656cc538e800716a9”.

Klient PostgreSQL hash md5
Klient Hash MD5

Przygotowany przez klienta ciąg znakowy jest przesyłany po sieci do serwera bazodanowego. Silnik PostgreSQL w swoich danych słownikowych przetrzymuje wynikowy hash dla pary login i hasło, zapisany przy tworzeniu użytkownika, lub ostatniej zmianie hasła. Funkcja hash MD5 wykorzystywana jest ponownie w tym procesie. Tym razem dane pobrane z słownika PostgreSQL i „salt” generują wynikowe MD5 po stronie serwera bazodanowego. Wynik tej operacji musi pokrywać się z danymi otrzymanymi od klienta. Jeżeli jest ok, znaczy to że użytkownik podał poprawne hasło i można go wpuścić.

PostgreSQL Server Hash MD5
PostgreSQL Server Hash MD5

Scram-sha-256

Od wersji PostgreSQL 10, udostępniono nową metodę uwierzytelniania – scram. Scram jest tak naprawdę samym mechanizmem, który może wykorzystywać wiele różnych algorytmów hash w celu wykonania swojego zadania. W PostgreSQL wykorzystuje się SHA-256. PostgreSQL wykorzystuje SASL.

Proces uwierzytelniania w Postgres w przypadku scram-sha-256 jest bardziej skomplikowany. Użytkownik po przesłaniu do serwera prośby o nawiązanie połączenia otrzymuje informacje, że do uwierzytelniania musi wybrać jej metodę. Dla PostgreSQL jedyną dostępną opcją jest scram-sha-256.

W kolejnym kroku od strony klienta przychodzi do serwera ciąg losowych znaków(warto zauważyć, ciąg ten jest znacznie dłuższy niż znany już Ci „salt” z metody MD5). Serwer odsyła swój ciąg znaków, złożony z informacji którą przed chwilą otrzymał i swojego ciągu losowych znaków. Dodatkowo przesyła „salt” i licznik iteracji.

W kolejnych krokach zarówno strona kliencka, jak i serwer baz danych wykonują funkcje hash SHA-256 na otrzymanych zestawach danych i haśle do danego konta. Wyniki tych operacji przesyłana się do drugiej z stron procesu. Cała operacja powtarzana jest kilka razy. Takie podejście pozwala na sprawdzenie przez bazę danych PostgreSQL czy klient posiada poprawne hasło. Dodatkowo strona kliencka uzyskuje potwierdzenie o posiadaniu przez serwer bazodanowy poprawnego hasła. Takie dwustronne sprawdzenie pozwala upewnić się że połączenie nie padło ofiarą ataku man-in-the-middle.


Chcesz wiedzieć więcej? Zajrzyj do: Kurs Praktyczna Administracja PostgreSQL. Dołącz do ponad 500 zadowolonych kursantów!


Bezpieczne zmienianie hasła w bazie danych PostgreSQL

Podstawową metodą zmiany hasła jest wykorzystanie komendy password w narzędziu psql.

psql> \password

Tak wykonana zmiana hasła … przesyła je w postaci „plain text”. Aby zmienić hasło i wykorzystać metodę scram-sha-256 musisz użyć dodatkowego parametru:

psql> SET password_encryption = 'scram-sha-256';
psql> \password

Wykorzystanie parametru password_encryption spowoduje przesłanie przez narzędzie psql następującej komendy:

ALTER USER postgres PASSWORD 'SCRAM- SHA-256$4096:H45+UIZiJUcEXrB9SHlv5Q==$I0mc87UotsrnezRKv9Ijqn/zjWMGPVdy1zHPA RAGfVs=:nSjwT9LGDmAsMo+GqbmC2X/9LMgowTQBjUQsl45gZzA=';

Jak widać hasło zostało przesłanie w formie zaszyfrowanej, gotowej do umieszczenia w danych słownikowych bazy danych. Kolejne artykuły omówią inne metody szyfrowania danych w PostgreSQL.

Migracja z MD5 do SCRAM-SHA-256

W celu zapewnienia większego bezpieczeństwa należy sukcesywnie migrować bazy danych PostgreSQL z tradycyjnego MD5 na nowszy scram-sha-256. Z wykonaniem takiej operacji wiążą się dwa istotne zagadnienia:

  • PostgreSQL nie przechowuje haseł samych w sobie, więc po migracji do scram-sha-256 należy ustawić wszystkie hasła w bazie na nowo
  • Klienci łączący się do naszego PostgreSQL muszą obsługiwać scram-sha-256, co za tym idzie może być konieczna ich aktualizacja

Podnieś wersję narzędzi klienckich

W pierwszej kolejności podnieś wersję wszystkich narzędzi klienckich, które łączą się z Twoją bazą.

Zmień parametr password_encryption

W pliku postgresql.conf ustaw parametr:

password_encryption = scram-sha-256

Przeładuj konfiguracje PostgreSQL – gdzie /postgres/pgdata będzie Twoim katalogiem PGDATA:

pg_ctl reload -D /postgres/pgdata

Ustaw ponownie wszystkie hasła

Ustaw dla każdego z użytkowników ponownie hasło. Po przeprowadzeniu tej operacji w tabeli pg_authid powinieneś widzieć już tylko hash SHA-256.

Zmień metodę uwierzytelniania w pg_hba.conf

W pliku pg_hba.conf zmień wszystkie wpisy md5 na scram-sha-256, wymuszając w ten sposób dostęp tylko poprzez najbezpieczniejszą metodę uwierzytelniania. Nie zapomnij po zapisaniu pg_hba.conf przeładować konfiguracji przy pomocy pg_ctl reload.