Che cos'è HPKP?

HPKP è un'intestazione di risposta di sicurezza Web deprecata, l'acronimo sta per HTTP Public Key Pins. Aveva lo scopo di impedire a un'autorità di certificazione compromessa o non autorizzata di emettere un certificato HTTPS pubblicamente attendibile, ma controllato da hacker per un sito Web. In questo scenario, gli hacker sarebbero in grado di decrittografare qualsiasi traffico HTTPS intercettato verso il sito Web interessato.

Suggerimento: le intestazioni di risposta Web sono parti di metadati che il server include quando risponde alle richieste. Un piccolo sottoinsieme di questi è indicato come intestazioni di sicurezza, poiché abilitano e configurano varie funzionalità di sicurezza.

Infrastruttura del certificato HTTPS

L'infrastruttura dei certificati su cui si basa HTTPS si basa su una rete di fiducia. Alcune società fungono da autorità di certificazione (CA) che pubblicano uno o più certificati radice. Un set di certificati radice è incluso in tutti i dispositivi in ​​un truststore. Quando un sito Web richiede un proprio certificato HTTPS da una CA, il certificato viene firmato da un certificato radice. Quando il tuo computer vede un certificato HTTPS, controlla la firma. Se il certificato è firmato da un certificato radice di cui si fida, anche il tuo computer si fida del certificato HTTPS.

Suggerimento: una CA può anche avere certificati intermedi firmati dal certificato radice. Questi certificati intermedi possono essere utilizzati anche per firmare certificati HTTPS per i siti web.

Il compito di un'autorità di certificazione è emettere un certificato solo dopo aver verificato che la persona che lo richiede è il vero proprietario del sito web. L'idea con questa struttura è che se un hacker crea il proprio certificato per un sito Web, non sarà firmato da una CA di cui si fida il computer e quindi verrà visualizzato un avviso.

Che cosa ha fatto HPKP?

L'intero sistema di certificazione si basa sull'affidabilità delle autorità di certificazione. In origine, tuttavia, non esistevano protezioni contro la compromissione di un'autorità di certificazione da parte di hacker o che diventasse canaglia e scegliesse di emettere certificati in modo errato.

HPKP è stato progettato per essere una protezione contro questa possibilità. Consente ai siti Web di specificare un elenco esclusivo di certificati che possono essere considerati attendibili per il sito Web in un processo chiamato blocco. È stato possibile bloccare il certificato radice o intermedio, consentendo essenzialmente a una singola CA di emettere certificati per il sito web. È stato inoltre possibile appuntare il certificato del sito stesso, impedendo anche alla CA giusta di emettere un altro certificato valido.

Tecnicamente non è il certificato stesso ad essere bloccato, ma un hash della chiave del certificato. Un hash è una funzione crittografica unidirezionale. Ciò significa che è possibile verificare che il certificato presentato al browser dal sito Web corrisponda a un certificato bloccato, ma non è possibile utilizzare l'hash per creare un certificato valido.

HPKP ha richiesto di bloccare almeno due chiavi, di cui almeno una di backup e non nella catena di certificati corrente. Questo backup consente di configurare un passaggio graduale a un nuovo certificato che non impedisce agli utenti di connettersi.

Se il certificato HTTPS presentato al browser dal sito Web non corrisponde a uno dei bloccati certificati, quindi il browser è tenuto a rifiutarlo e impedire all'utente di aggirare il certificato messaggio di errore.

Struttura di HPKP

L'intestazione HPKP ha tre parti obbligatorie e due facoltative. L'intestazione deve essere intitolata "Public-Key-Pins", i successivi due o più certificati devono avere un hash SHA256 codificato base64 fissato nel formato "pin-sha256="”’. L'ultima parte obbligatoria è la "max-età", che è un conteggio in secondi per quanto tempo il browser deve applicare le restrizioni.

Suggerimento: SHA256 è l'algoritmo di hashing utilizzato da HPKP. Base64 è un set di caratteri con 64 caratteri: 0-9, a-z, A-Z e i caratteri speciali "+" e "/". Il "=" viene utilizzato per riempire fino agli ultimi due caratteri, se necessario.

Le impostazioni facoltative sono "includeSubDomains" e "report-uri". "includeSubDomains indica al browser di applicare le protezioni HPKP a qualsiasi sottodominio del sito Web corrente per la durata del timer di "età massima". "report-uri" è una funzionalità che consente di specificare un sito Web in cui è possibile inviare rapporti di errore ed è progettato per aiutare a identificare e risolvere i problemi.

Esiste una seconda variante dell'intestazione intitolata "Public-Key-Pins-Report-Only". Tutto è uguale, tuttavia, se viene rilevato un errore non viene intrapresa alcuna azione oltre a restituire un messaggio di errore al browser e al "report-uri" se configurato. La variante dell'unico rapporto è stata progettata per consentire il test completo dell'intestazione prima della distribuzione, in cui gli errori non causerebbero problemi per gli utenti.

Problemi con HPKP

HPKP è stato deprecato per due motivi principali. C'erano due modi in cui l'intestazione poteva causare seri problemi al sito web che la utilizzava, questi erano chiamati HPKP Suicide e Ransom PKP.

HPKP Suicide è un problema in cui i legittimi proprietari del sito Web perdono l'accesso a tutte le chiavi bloccate. Ciò potrebbe accadere tramite cancellazione accidentale, hacking, virus, danneggiamento dei dati o per molti altri motivi. A causa della complessità dell'implementazione corretta di HPKP, e soprattutto del suo aggiornamento durante le rotazioni dei certificati, è relativamente facile commettere un errore di configurazione. Con HPKP, tuttavia, se sbagli qualcosa, a tutti i visitatori recenti del tuo sito Web verrà impedito di accedere al tuo sito Web per la durata del timer "max-età". Il sito web smashingmagazine.com ha pubblicato an articolo dettagliando la sua esperienza esattamente con questo problema, che essenzialmente ha portato il sito offline per la maggior parte dei visitatori per quattro giorni prima che venisse implementata una correzione.

Ransom PKP è un attacco teorico in cui un hacker ottiene l'accesso a un server Web, quindi ruba tutti i certificati e le chiavi affidabili e quindi richiede un riscatto per il loro ritorno. In una configurazione normale, potresti semplicemente generare nuove chiavi e certificati e far tornare il sito Web attivo e funzionante in meno di un'ora. Con HPKP abilitato, tuttavia, quelle chiavi vengono bloccate, se non puoi fornire un certificato bloccato agli utenti, non saranno in grado di accedere al sito Web per la durata del timer "max-età". A seconda della configurazione e della presenza di backup, potrebbe essere impossibile risolvere questo problema.

Con entrambi questi problemi, i nuovi utenti sarebbero in grado di accedere al sito Web normalmente, come farebbero non ho mai visto la vecchia intestazione HPKP che istruiva il proprio browser a fidarsi solo di quello che ora manca certificati. Tutti i visitatori recenti, tuttavia, come clienti abituali e lettori, dovrebbero attendere l'intera durata del timer "max-età".

Data la gravità di questi problemi e la complessità della configurazione e della manutenzione, l'uso dell'intestazione HPKP è stato molto basso. Alla fine, i principali browser hanno accettato di abbandonare del tutto il supporto e nel giro di un paio d'anni l'intestazione HPKP è stata universalmente deprecata.