HPKP je zastarjelo zaglavlje sigurnosnog odgovora na webu, akronim je skraćenica za HTTP Public Key Pins. Namjera mu je bila spriječiti kompromitirano ili lažno tijelo za izdavanje certifikata da izda javno pouzdani, ali hakerski kontroliran HTTPS certifikat za web stranicu. U ovom scenariju, hakeri bi mogli dešifrirati svaki presretnuti HTTPS promet na zahvaćenu web stranicu.
Savjet: zaglavlja web odgovora su dijelovi metapodataka koje poslužitelj uključuje kada odgovara na zahtjeve. Mali podskup njih naziva se sigurnosnim zaglavljima jer omogućavaju i konfiguriraju različite sigurnosne značajke.
Infrastruktura HTTPS certifikata
Infrastruktura certifikata na kojoj je izgrađen HTTPS temelji se na mreži povjerenja. Brojne tvrtke djeluju kao tijela za izdavanje certifikata (CA) koja objavljuju jedan ili više korijenskih certifikata. Skup korijenskih certifikata uključen je u sve uređaje u skladištu povjerenja. Kada web-mjesto zatraži vlastiti HTTPS certifikat od CA, certifikat je potpisan korijenskim certifikatom. Kada vaše računalo vidi HTTPS certifikat, provjerava potpis. Ako je certifikat potpisan korijenskim certifikatom kojem vjeruje, vaše računalo također vjeruje HTTPS certifikatu.
Savjet: CA također može imati srednje certifikate potpisane korijenskim certifikatom. Ovi se srednji certifikati također mogu koristiti za potpisivanje HTTPS certifikata za web stranice.
Posao tijela za izdavanje certifikata je izdati certifikat samo kada su potvrdili da je osoba koja ih traži pravi vlasnik web stranice. Ideja s ovom strukturom je da ako haker kreira vlastiti certifikat za web stranicu, on neće biti potpisan od strane CA kojem vaše računalo vjeruje, pa ćete vidjeti upozorenje.
Što je HPKP napravio?
Cijeli sustav certifikata oslanja se na pouzdanost certifikacijskih tijela. Izvorno, međutim, nije postojala nikakva zaštita od toga da hakeri kompromitiraju CA ili da odaberu neispravno izdavanje certifikata.
HPKP je osmišljen kao zaštita od ove mogućnosti. Omogućuje web-mjestima da navedu ekskluzivni popis certifikata kojima se može vjerovati za web stranicu u procesu koji se naziva pričvršćivanje. Bilo je moguće prikvačiti korijenski ili srednji certifikat, što je u osnovi omogućilo jednom CA-u da izda certifikate za web stranicu. Također je bilo moguće prikvačiti certifikat same web stranice, sprječavajući čak i pravi CA da izda još jedan važeći certifikat.
Tehnički, nije prikvačen sam certifikat, već hash ključa certifikata. Hash je jednosmjerna kriptografska funkcija. To znači da je moguće provjeriti odgovara li certifikat koji web-lokacija pregledniku predstavlja prikvačeni certifikat, ali nije moguće koristiti hash za izradu važećeg certifikata.
HPKP je zahtijevao da se prikvače najmanje dva ključa, od kojih barem jedan mora biti rezervni, a ne u trenutnom lancu certifikata. Ova sigurnosna kopija omogućuje vam da konfigurirate glatku primopredaju na novi certifikat koji ne sprječava korisnike da se mogu povezati.
Ako HTTPS certifikat koji web-lokacija prikazuje pregledniku ne odgovara jednom od prikvačenih certifikate, tada ga preglednik mora odbiti i spriječiti korisnika da zaobiđe certifikat poruka o pogrešci.
Struktura HPKP-a
HPKP zaglavlje ima tri obvezna dijela i dva neobavezna. Zaglavlje mora biti naslovljeno "Public-Key-Pins", sljedeća dva ili više certifikata moraju imati base64 kodiran SHA256 hash zakačen u formatu "pin-sha256="
Savjet: SHA256 je algoritam za raspršivanje koji koristi HPKP. Base64 je skup znakova sa 64 znaka: 0-9, a-z, A-Z i posebnim znakovima “+” i “/”. Znak "=" se koristi za dopunu do zadnja dva znaka ako je potrebno.
Izborne postavke su "includeSubDomains" i "report-uri". "includeSubDomains upućuje preglednik da primijeni HPKP zaštitu na bilo koju poddomenu trenutne web stranice za vrijeme trajanja "max-age" timera. "report-uri" je značajka koja omogućuje navođenje web-mjesta na koje se mogu slati izvješća o pogreškama, a osmišljena je da pomogne u prepoznavanju i rješavanju problema.
Postoji druga varijanta zaglavlja pod nazivom "Public-Key-Pins-Report-Only". Sve je isto, međutim, ako se pronađe pogreška, ne poduzima se ništa osim vraćanja poruke o pogrešci u preglednik i na "report-uri" ako je konfiguriran. Varijanta samo izvješća osmišljena je kako bi se omogućilo testiranje zaglavlja u punom opsegu prije implementacije, gdje pogreške ne bi uzrokovale probleme korisnicima.
Problemi s HPKP-om
HPKP je zastario iz dva glavna razloga. Postojala su dva načina na koja je zaglavlje moglo uzrokovati ozbiljne probleme web-mjestu koje ga koristi, a zvali su se HPKP Suicide i Ransom PKP.
HPKP Suicide je problem u kojem legitimni vlasnici web stranice gube pristup svim prikvačenim ključevima. To se može dogoditi slučajnim brisanjem, hakiranjem, virusima, oštećenjem podataka ili iz mnogih drugih razloga. Zbog složenosti ispravne implementacije HPKP-a, a posebno njegova ažuriranja tijekom rotacije certifikata, relativno je lako napraviti pogrešku u konfiguraciji. Međutim, s HPKP-om, ako nešto shvatite krivo, svim nedavnim posjetiteljima vaše web stranice bit će onemogućen pristup vašoj web stranici tijekom trajanja "max-age" timera. Web stranica smashingmagazine.com objavila je članak detaljno opisuje svoje iskustvo s upravo ovim problemom, koji je u osnovi odveo web-mjesto za većinu posjetitelja četiri dana prije nego što je popravak implementiran.
Ransom PKP je teoretski napad u kojem haker dobiva pristup web poslužitelju, zatim krade sve provjerene certifikate i ključeve, a zatim zahtijeva otkupninu za njihov povratak. U normalnom postavljanju, mogli biste jednostavno generirati nove ključeve i certifikate i ponovno pokrenuti web stranicu za manje od sat vremena. Međutim, s omogućenim HPKP-om ti ključevi su prikvačeni, ako ne možete poslužiti prikvačeni certifikat korisnicima, oni neće moći pristupiti web stranici tijekom trajanja "max-age" timera. Ovisno o konfiguraciji i postoje li sigurnosne kopije, moglo bi biti nemoguće riješiti ovaj problem.
Uz oba ova problema, novi korisnici bi mogli normalno pristupiti web stranici nikada nisu vidjeli staro HPKP zaglavlje koje nalaže njihovom pregledniku da vjeruje samo onome što sada nedostaje potvrde. Međutim, svi nedavni posjetitelji, poput redovitih kupaca i čitatelja, morali bi pričekati cijelo vrijeme trajanja "max-age" timera.
S obzirom na ozbiljnost ovih problema i složenost konfiguracije i održavanja, upotreba HPKP zaglavlja bila je vrlo niska. Na kraju su se glavni preglednici složili da u potpunosti odustanu od podrške za njega i u roku od nekoliko godina HPKP zaglavlje je univerzalno zastarjelo.