Papier

HSTS czym jest i jak do tego podejść

HSTS (HTTP Strict Transport Security) jest to standard opisany w RFC 6797 wprowadzający możliwość określenia w nagłówku wpisu „Strict-Transport-Security”, który następnie zinterpretowany przez przeglądarkę sprawi, że wszystkie żądania do danej domeny zostaną przekierowane na protokół HTTPS, a jeśli takiej możliwości nie będzie (brak obsługi HTTPs), to przeglądarka powinna wyświetlić błąd i zablokować takowe żądanie, informując użytkownika o błędzie i ewentualnej próbie wykonania ataku MITM. Przeglądarka zapamiętuje ustawienia HSTS tylko przez połączenie szyfrowane, nagłówek w połączeniu nieszyfrowanym zostanie zignorowany. W związku z tym nie ma możliwości wyłączenia Strict Security poprzez połączenie nieszyfrowane dlatego trzeba uważać podczas wprowadzania tych ustawień, patrz pułapki hsts poniżej. Trzeba także pamiętać, że wszyscy nowi użytkownicy, którzy wchodzą na naszą stronę po raz pierwszy, nie mają rekordu STS dla naszej domeny i są wtedy podatni na atak. Ograniczenie to można jednak pominąć poprzez zgłoszenie preload, które zostanie opisane. Zatem przechodzimy już do tego, jak podejść do tego zabezpieczenia:

Dlaczego i kiedy warto używać HSTS

HSTS powinny używać przede wszystkim domeny, które w pełni wykorzystują szyfrowanie danych; na przykład witryny banków oraz instytucji finansowych czy sklepy internetowe, gdzie nie chcemy, aby nasze dane wpadły w niepowołane ręce lub aby nasz klient używający połączenia WI-FI na lotnisku nie padł ofiarą MITM (man-in-the-middle attack), gdzie nastąpi DNS poisoning i niczego niespodziewająca się osoba wyląduje na stronie identycznej do naszej spróbuje się zalogować a tam ktoś inny przejmie hasło. Jeśli ktoś nie spojrzy na pasek adresu, gdzie nie ma kłódki- nie dowie się o tym, że dana strona jest tylko typowym phishingiem (podrobioną stroną oryginalną służąca do wyłudzenia hasła lub innych danych). Tu właśnie wkracza HSTS jak będziemy chcieli wejść na stronę 'przykład.pl’, która ma przechowywaną informację HSTS, automatycznie nastąpi odrzucenie przekierowanie na protokół nieszyfrowany i wyświetli ostrzeżenie dla użytkownika, eliminując problem, gdzie użytkownik nie spojrzał na pasek adresu w celu upewnienia się, czy jest tam kłódka, co więcej przeglądarka zablokuje możliwość dodania wyjątku dla tej domeny.

Kiedy NIE używać HSTS i dlaczego?

Nie korzystajmy z HSTS, jeśli nasza domena zawiera także elementy niezaszyfrowane, na przykład obrazki, a szyfrowanie wykorzystuje tylko w momencie logowania lub dokonywania zakupów. Gdyż może to zwiększyć obciążenie serwera ze względu na zwiększenie natężenia szyfrowanego ruchu. Trzeba jednak pamiętać, że strony tylko częściowo szyfrowane wystawiają swoich użytkowników na niebezpieczeństwo ataku.

Problem też może wystąpić, jeśli nie mamy pewnego źródła certyfikatu, na przykład teraz kupiliśmy certyfikat, ale nie planujemy go przedłużać, ponieważ jest za drogi. Można to obejść poprzez skorzystanie z darmowego certyfikatu na stronie StartSSL.

Jak włączyć HSTS?

Włączenie HSTS następuje poprzez wysłanie do przeglądarki klienta Nagłówka o odpowiedniej treści, np:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: – informuje przeglądarkę o tym, że używamy Strict Transport Security, czyli HSTS,
max-age=31536000 – w tym wypadku rok, wartość w sekundach, tj. jak długo przeglądarka ma traktować naszą domenę jako HSTS i pamiętać o tym, aby używać protokołu SSL/TLS do połączenia z nią,
includeSubDomains – oznacza, że także sub- domeny mają być szyfrowane; tutaj trzeba uważać, jeśli mamy typową sub- domenę na blog, gdzie jest zainstalowany WordPress. Nie przetrzymuje on ważnych danych, w związku z czym nie używa szyfrowania, zatem jeśli nasz certyfikat nie obsługuje tej domeny- powinniśmy nie dodawać tej dyrektywy i zakończyć tylko na max-age. Ponieważ jeśli wejdzie ktoś na naszą stronę przykład.pl, z której przejdzie na naszego bloga blog.przykład.pl, z racji tego, że mamy include sub domains będzie zmuszony użyć połączenia szyfrowanego a nasz certyfikat jest ważny tylko na przykład.pl. W tym momencie osoba nie będzie mogła wejść na blog.przyklad.pl.
W skrócie: wystarczy w pliku .htaccess naszej witryny dodać następujące dane:
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Aby zapisać na naszej stronie dane o HSTS na następny rok oraz uwzględnić sub- domeny, wymaga to- w przypadku serwera Apache- włączonego modułu headers, który jest obsługiwany na naszym serwerze.
Aby dokończyć, powinniśmy zgodnie z zaleceniami Google ustawić przekierowanie 301 na wersję https, na wypadek, gdyby jakiś link wskazywał niewłaściwie lub ktoś wpisał nieprawidłowy adres za pierwszym logowaniem i nie miał jeszcze wpisu STS. Można to zrobić prostym wpisem:

Manewr ten spowoduje przeniesienie wszystkich odwiedzających z linku niezabezpieczonego na link zabezpieczony. Wymaga to obsługi modułu rewrite w serwerze apache.
Następnie testujemy ustawienia:
curl -s -D- | grep "Strict-Transport-Security:"
Jeśli dana komenda zwróci nam nagłówek STS, to skonfigurowaliśmy serwer poprawnie.

Pułapki HSTS i czego unikać

Należy pamiętać, że HSTS zapisuje w wyszukiwarce Klienta, że nasza strona powinna działać przez HTTPS i jeśli tak nie jest to ma wyświetlić błąd i nie pozwoli dodać wyjątku. Dodatkowy problem może wystąpić, kiedy skończy nam się ważność certyfikatu i nie będziemy go przedłużać lub po prostu będziemy chcieli z niego zrezygnować; może to ograniczyć dostęp Klienta do naszej strony internetowej, zwłaszcza jeśli na przykład był na naszej witrynie miesiąc temu a my wyłączyliśmy nagłówek STS (ustawienie max-age=0 dopiero tydzień temu) Taka osoba nie będzie mogła wejść na naszą stronę. Jeśli planujemy rezygnację z certyfikatu albo korzystamy z certyfikatu darmowego i zostanie on skompromitowany, będziemy musieli wyrobić nowy, prawdopodobnie płatny certyfikat, aby nie stracić starych klientów, którzy po prostu nie będą mogli wejść na naszą stronę. Także musisz być pewnym, że będziesz posiadać ważny certyfikat a Twój serwer obsłuży połączenia SSL nawet na pół roku do przodu.
Trzeba też pamiętać, że użytkownik chroniony jest dopiero po pierwszym wejściu na naszą stronę, gdyż dopiero wtedy przeglądarka ma możliwość pobrania nagłówka, wyjątkiem jest, jeśli nasza strona posiada wpis preload.

HSTS Preload

Polega na dodaniu do nagłówka HSTS znacznika preload, a następnie zgłoszeniu strony do odpowiednich twórców przeglądarek na przykład do chrome i firefoxa można skorzystać za strony hsts preload, która połączy się z naszym serwerem sprawdzi nagłówki i jeśli nagłówek posiada wpis preload oraz includeSubDomains, czyli na przykład: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload to zostanie nasza strona wpisana na listę stron preloadowanych. Dzięki czemu każda przeglądarka na świecie korzystająca z tej listy będzie wiedziała, że połączenie z naszą stroną musi się odbywać wyłączenie przez HTTPS, i nie można dodać do tego wyjątku w przypadku błędu np. certyfikatu. Przykładem sprawdzenia może być próba połączenia z domeną. Powinna ta strona wyświetli błąd HSTS i nie pozwolić dodać wyjątku. W przypadku przeglądarki IE w wersji 11 przeglądarka wyświetli tylko ostrzeżenie o nieważnym certyfikacie, ale pozwoli dodać wyjątek, co oznacza, że nie obsługuje ona jeszcze HSTS co ma się zmienić wraz z wyjściem nowej wersji już pod nazwą Microsoft Edge.

Wyświetla mi się błąd HSTS jak go obejść?

Nie powinieneś. Przeważnie błąd HSTS oznacza, że właśnie ktoś próbuje się podszyć pod stronę internetową, którą chcesz odwiedzić. Jeśli jednak jesteś pewny, że to jest błąd spowodowany przez np. nieprawidłowe ustawienie na Twojej stronie testowej albo coś to można usunąć listę HSTS przez:

W Firefoxie:
Zamykamy wszystkie karty tej domeny i w historii (ctrl + h) wyszukujemy tej domeny klikamy prawym i dajemy usuń całą witrynę.

W pasku adresu wpisujemy: „about:permissions” i tam wpisujemy adres witryny i w prawym górnym rogu dajemy „zapomnij stronę”. Restartujemy przeglądarkę i wchodzimy na stronę już bez hsts.

W Chrome:
W pasku adresu wpisujemy „chrome://net-internals/#hsts” i następnie wpisujemy domenę, którą chcemy usunąć w pole koło: „Delete domain”. I próbujemy wejść jeszcze raz na stronę.

Informujemy, że przez korzystanie ze strony internetowej, bez zmian ustawień przeglądarki, wyrażasz zgodę na politykę prywatności i zapisywanie plików cookies, które pozwalają na sprawne działanie naszej strony internetowej.