HPKP to przestarzały nagłówek odpowiedzi na temat bezpieczeństwa sieci Web, akronim oznacza piny klucza publicznego HTTP. Miał on na celu uniemożliwienie złamanemu lub nieuczciwemu 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 nazywany jest nagłówkami zabezpieczeń, ponieważ umożliwiają one i konfigurują różne funkcje zabezpieczeń.
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 sprawdzi, czy osoba, która o nie wnioskuje, jest prawdziwym właścicielem witryny. Pomysł z tą strukturą polega na tym, że jeśli haker utworzy własny certyfikat dla witryny internetowej, nie zostanie on podpisany przez CA, 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 nieuczciwymi działaniami i wyborem nieprawidłowego wystawiania certyfikatów.
HPKP został zaprojektowany jako zabezpieczenie przed tą możliwością. Umożliwia witrynom internetowym określenie ekskluzywnej listy certyfikatów, którym można ufać 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.
Z technicznego punktu widzenia to nie sam certyfikat jest przypięty, ale skrót klucza certyfikatu. Hash to jednokierunkowa funkcja kryptograficzna. Oznacza to, że można zweryfikować, czy certyfikat prezentowany przeglądarce przez witrynę jest zgodny z przypiętym certyfikatem, ale nie można użyć skrótu do uzyskania 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ę nie pasuje do jednego z przypiętych certyfikaty, wtedy przeglądarka jest zobowiązana do odrzucenia go i uniemożliwienia użytkownikowi ominięcia certyfikatu Komunikat o błędzie.
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=”
Wskazówka: SHA256 to algorytm mieszający używany przez HPKP. Base64 to zestaw znaków zawierający 64 znaki: 0-9, a-z, A-Z oraz znaki specjalne „+” 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 trwania licznika maksymalnego wieku”. „raport-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 konfiguracyjny. Jednak dzięki HPKP, jeśli zrobisz coś źle, wszyscy niedawni odwiedzający Twoją witrynę nie będą mogli uzyskać dostępu do Twojej witryny przez czas „maksymalnego wieku”. Strona smashingmagazine.com opublikowała artykuł szczegółowo opisując swoje doświadczenia z dokładnie tym problemem, który zasadniczo powodował, że większość odwiedzających witrynę wyłączała się 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 i uruchomić kopię zapasową witryny 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 korzystać ze strony internetowej, tak jak by to zrobili nigdy nie widziałem starego nagłówka HPKP instruującego przeglądarkę, aby ufała tylko temu, czego teraz brakuje certyfikaty. 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.