HSTS – lekko bezpieczniejsze połączenia HTTPS

HTTP Strict Transport Security (HSTS) pomaga nam zabezpieczyć szyfrowane (HTTPS) połączenia z naszym serwerem. Zobaczmy na czym polega, przed czym chroni i jak łatwo jest ustawić obsługę HSTS.

Zabezpieczenie HSTS dotyczy stron, które podajemy po HTTPS. Jak widać, im więcej literek „S” tym bardziej bezpieczni (Secure) jesteśmy. ;)

Jak działa HSTS

Gdy korzystamy np. z banku on-line – wszystko powinno odbywać się po HTTPS. Niestety, w przeglądarce piszemy przeważnie moj.bank.pl a nie https://moj.bank.pl. Pierwsze połączenie idzie normalnym otwartym HTTP.

Bank odsyła zawsze żądanie „przełącz się na HTTPS”. Ale ktoś pomiędzy nami i bankiem może zmienić odpowiedź. Może wysyłać nam odpowiedzi zwykłym HTTP a samemu przekazywać komunikację po HTTPS. Klasyczny atak man-in-the-middle.

HSTS to próba poprawienia bezpieczeństwa. Co się dzieje w komunikacji? Normalna rozmowa przeglądarki z bankiem:

[ja] ... wpisuję w przeglądarce stronę moj.bank.pl
[przeglądarka] Cześć bank, chcę moją stronę http://moj.bank.pl
[bank] Ok, ale masz ją w https://moj.bank.pl

Jeśli włączymy HSTS to pierwsza rozmowa będzie wyglądała inaczej:

[ja] ... wpisuję w przeglądarce stronę moj.bank.pl
[przeglądarka] Cześć bank, chcę moją stronę http://moj.bank.pl
[bank] Ok, ale masz ją w https://moj.bank.pl i masz zawsze żądać o nią po HTTPS
[ja] Ok, zapamiętam.

Teraz gdy już pamiętamy, następnym razem rozmowa zaczyna się w ten sposób:

[ja] ... wpisuje stronę moj.bank.pl
[przeglądarka] ... sprawdza, czy ma tą stronę na liście zapamiętanych stron. Znalazła, ma iść po HTTPS.
[przeglądarka] Cześć bank, chcę moją stronę https://moj.bank.pl
[bank] Ok, masz. A przy okazji chesz kredyt? Mamy też fajne lokaty.

Przerażająca wizja… na szczęście protokół HTTP nie pozwala bankom wciskać nam kredytów. Ale reszta nie jest żartem. Jeśli zapamiętamy sobie, że na stronę banku mamy wchodzić zawsze bezpiecznym połączeniem to nigdzie nie ma nieszyfrowanej komunikacji po HTTP.

Jak tego użyć

Przetłumaczmy z naszego na HTTP. Aby włączyć HSTS po stronie serwera odsyłamy odpowiedni nagłówek. Powinien wyglądać tak:

Strict-Transport-Security: max-age=31536000; includeSubDomains

Dwie dodatkowe wartości mówią nam:

  • max-age – jak długo przeglądarka ma pamiętać o tym, że nasza strona jest bezpieczna. Tutaj 31536000 sekund czyli rok.
  • includeSubDomains – stosuj HTST również do poddomen naszego banku (np. img.moj.bank.pl, pliki.moj.bank.pl itp).

To w zasadzie wszystko. Musimy tylko pamiętać, że ten nagłówek trzeba ustawić odpowiadając już po HTTPS. Jeśli odeślemy go wcześniej, na nieszyfrowanym połączeniu przeglądarka może zignorować.

Apache ma nawet odpowiednią opcję aby zawsze używać HSTS. W konfiguracji wystarczy ustawić:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Co nam daje a czego nie daje HSTS?

Jeśli korzystaliśmy wcześniej z naszego banku (przeglądarka zapamiętała stronę) to jesteśmy w miarę bezpieczni. Nosząc laptopa ze sobą możemy trafić na sieć podsłuchującą nasze komunikaty. Tym czasem przeglądarka wie, żeby łączyć się z naszym bankiem szyfrowanym połączeniem. Atakujący nic nie wskóra.

Podobnie, jeśli ktoś zacznie atakować naszą sieć i uda mu się przekierować pakiety do siebie – jesteśmy bezpieczni. Nikt też nie przechwyci naszej sesji z bankiem. Nawet jak złapie identyfikator sesji lecący przypadkiem otwartym tekstem to nic nie zrobi. Bank chce bezpiecznego połączenia, przeglądarka też. Nic się nie da tu wstrzyknąć.

Przed czym HSTS nas NIE zabezpiecza?

Pierwsza rozmowa z bankiem jest niezabezpieczona. Tylko w tym momencie ktoś może podszyć się pod bank i zwieść nas na manowce. Dlatego po założeniu konta warto zalogować się do banku z zaufanej sieci.

Drugi problem to odklikiwanie bezpieczeństwa (clicking through security). Gdy przeglądarka pokaże komunikat, że strona nie jest bezpieczna użytkownik przeklika wyjątek bezpieczeństwa. Często nieświadomie, nie wiedząc co to znaczy.

Czy warto korzystać z HSTS?

Moim zdaniem tak. Ustawienie odpowiedniego nagłówka na serwerze minuta pracy. Warto ją poświęcić na podniesienie bezpieczeństwa.

O HSTS możemy też poczytać w RFC6797.

2 myśli na temat “HSTS – lekko bezpieczniejsze połączenia HTTPS”

Skomentuj Jurek Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *