HPKP to przestarzały nagłówek odpowiedzi na temat bezpieczeństwa sieci, akronim to skrót od HTTP Public Key Pins. Miał on na celu uniemożliwienie złamanemu lub fałszywemu urzędowi certyfikacji wydania publicznie zaufanego, ale kontrolowanego przez hakerów certyfikatu HTTPS dla witryny internetowej. W tym scenariuszu hakerzy byliby w stanie odszyfrować każdy przechwycony ruch HTTPS do witryny, której dotyczy problem.
Wskazówka: Nagłówki odpowiedzi sieci Web to fragmenty metadanych, które serwer uwzględnia podczas odpowiadania na żądania. Niewielki ich podzbiór jest określany jako nagłówki bezpieczeństwa, ponieważ umożliwiają one i konfigurują różne funkcje bezpieczeństwa.
Infrastruktura certyfikatów HTTPS
Infrastruktura certyfikatów, na której zbudowany jest protokół HTTPS, opiera się na sieci zaufania. Wiele firm działa jako urzędy certyfikacji (CA), które publikują jeden lub więcej certyfikatów głównych. Zestaw certyfikatów głównych jest dołączany do wszystkich urządzeń w magazynie zaufania. Gdy witryna żąda od urzędu certyfikacji własnego certyfikatu HTTPS, certyfikat jest podpisany certyfikatem głównym. Gdy komputer widzi certyfikat HTTPS, sprawdza podpis. Jeśli certyfikat jest podpisany certyfikatem głównym, któremu ufa, komputer ufa również certyfikatowi HTTPS.
Wskazówka: CA może również mieć certyfikaty pośrednie podpisane przez certyfikat główny. Te certyfikaty pośrednie mogą być również używane do podpisywania certyfikatów HTTPS dla witryn internetowych.
Zadaniem urzędu certyfikacji jest wystawienie certyfikatu tylko wtedy, gdy zweryfikuje, że osoba żądająca ich jest prawdziwym właścicielem witryny. Pomysł z tą strukturą polega na tym, że jeśli haker utworzy własny certyfikat dla witryny, nie zostanie on podpisany przez urząd certyfikacji, któremu ufa Twój komputer, a więc zobaczysz ostrzeżenie.
Co zrobiła HPKP?
Cały system certyfikacji opiera się na wiarygodności urzędów certyfikacji. Pierwotnie jednak nie istniały żadne zabezpieczenia przed złamaniem zabezpieczeń CA przez hakerów lub nieuczciwym działaniem i wyborem nieprawidłowego wystawiania certyfikatów.
HPKP został zaprojektowany jako zabezpieczenie przed tą możliwością. Umożliwia stronom internetowym określenie wyłącznej listy certyfikatów, którym można zaufać w przypadku witryny w procesie zwanym przypinaniem. Możliwe było przypięcie certyfikatu głównego lub pośredniego, co zasadniczo pozwalało pojedynczemu CA na wystawianie certyfikatów dla witryny. Możliwe było również przypięcie samego certyfikatu strony internetowej, uniemożliwiając nawet właściwemu CA wydanie kolejnego ważnego certyfikatu.
Technicznie nie jest przypinany sam certyfikat, ale skrót klucza certyfikatu. Hash to jednokierunkowa funkcja kryptograficzna. Oznacza to, że można zweryfikować, czy certyfikat przedstawiony przeglądarce przez witrynę jest zgodny z przypiętym certyfikatem, ale nie można użyć skrótu do utworzenia ważnego certyfikatu.
HPKP wymagało przypięcia co najmniej dwóch kluczy, z których co najmniej jeden musi być kopią zapasową, a nie w bieżącym łańcuchu certyfikatów. Ta kopia zapasowa umożliwia skonfigurowanie płynnego przekazywania do nowego certyfikatu, który nie uniemożliwia użytkownikom połączenia.
Jeśli certyfikat HTTPS przedstawiony przeglądarce przez witrynę internetową nie pasuje do jednego z przypiętych certyfikatów, przeglądarka musi go odrzucić i uniemożliwić użytkownikowi pominięcie komunikatu o błędzie certyfikatu.
Struktura HPKP
Nagłówek HPKP składa się z trzech części obowiązkowych i dwóch opcjonalnych. Nagłówek musi mieć tytuł „Public-Key-Pins”, kolejne dwa lub więcej certyfikatów musi mieć przypięty hash SHA256 zakodowany w base64 w formacie „pin-sha256=””'. Ostatnią obowiązkową częścią jest „max-age”, czyli liczona w sekundach, jak długo przeglądarka powinna stosować ograniczenia.
Wskazówka: SHA256 to algorytm mieszający używany przez HPKP. Base64 to zestaw znaków składający się z 64 znaków: 0-9, az, AZ oraz znaków specjalnych „+” i „/”. „=” jest używany do uzupełnienia do dwóch ostatnich znaków, jeśli to konieczne.
Opcjonalne ustawienia to „includeSubDomains” i „raport-uri”. „includeSubDomains instruuje przeglądarkę, aby zastosowała zabezpieczenia HPKP do dowolnej poddomeny bieżącej witryny na czas „max-age” timera. „report-uri” to funkcja, która pozwala określić witrynę internetową, do której można wysyłać raporty o błędach, i ma na celu pomoc w identyfikowaniu i rozwiązywaniu problemów.
Istnieje drugi wariant nagłówka zatytułowany „Public-Key-Pins-Report-Only”. Wszystko jest takie samo, jednak jeśli zostanie znaleziony błąd, nie zostanie podjęte żadne działanie poza zwróceniem komunikatu o błędzie do przeglądarki i do „raport-uri”, jeśli jest skonfigurowany. Wariant tylko raport został zaprojektowany, aby umożliwić pełnoskalowe testowanie nagłówka przed wdrożeniem, gdzie błędy nie powodowałyby problemów dla użytkowników.
Problemy z HPKP
HPKP został zdeprecjonowany z dwóch głównych powodów. Były dwa sposoby, w jakie nagłówek mógł powodować poważne problemy dla korzystającej z niego strony internetowej, były to nazwane HPKP Suicide i Ransom PKP.
HPKP Suicide to problem polegający na tym, że prawowici właściciele witryny tracą dostęp do wszystkich przypiętych kluczy. Może się to zdarzyć w wyniku przypadkowego usunięcia, włamania, wirusów, uszkodzenia danych lub z wielu innych powodów. Ze względu na złożoność poprawnego wdrożenia HPKP, a zwłaszcza jego aktualizacji podczas rotacji certyfikatów, stosunkowo łatwo jest popełnić błąd w konfiguracji. Jednak dzięki HPKP, jeśli coś zrobisz źle, wszyscy niedawni odwiedzający Twoją witrynę nie będą mogli uzyskać dostępu do Twojej witryny przez czas „maksymalnego wieku”. Witryna smashingmagazine.com opublikowała artykuł szczegółowo opisujący swoje doświadczenia z dokładnie tym problemem, który zasadniczo powodował wyłączenie witryny dla większości odwiedzających na cztery dni przed wdrożeniem poprawki.
Ransom PKP to teoretyczny atak, w którym haker uzyskuje dostęp do serwera WWW, a następnie kradnie wszystkie zaufane certyfikaty i klucze, a następnie żąda okupu za ich zwrot. W normalnej konfiguracji możesz po prostu wygenerować nowe klucze i certyfikaty, a strona internetowa będzie działać w mniej niż godzinę. Jednak po włączeniu HPKP te klucze są przypięte, jeśli nie możesz udostępnić przypiętego certyfikatu użytkownikom, nie będą oni mogli uzyskać dostępu do witryny przez czas „maksymalnego wieku”. W zależności od konfiguracji i jeśli istnieją kopie zapasowe, rozwiązanie tego problemu może być niemożliwe.
W przypadku obu tych problemów nowi użytkownicy będą mogli normalnie uzyskać dostęp do witryny, ponieważ nigdy nie zobaczyliby starego nagłówka HPKP instruującego przeglądarkę, aby ufała tylko tym, których brakuje teraz certyfikatom. Jednak wszyscy niedawni odwiedzający, tacy jak stali klienci i czytelnicy, musieliby czekać przez cały czas trwania „maksymalnego wieku”.
Biorąc pod uwagę powagę tych problemów oraz złożoność konfiguracji i konserwacji, użycie nagłówka HPKP było bardzo niskie. W końcu główne przeglądarki zgodziły się całkowicie zrezygnować z jego obsługi i w ciągu kilku lat nagłówek HPKP został powszechnie przestarzały.