Vai al blog

Certificate pinning: aumentare il livello di sicurezza delle connessioni

di lettura
Monica Langella
thumbnail

Quando si lavora in settori, come quello finanziario, la sicurezza è un elemento fondamentale. Occorre quindi progettare e implementare con attenzione ogni ambito coinvolto nella funzionalità su cui si sta lavorando. Il compito di chi supervisiona e progetta servizi è aumentare il più possibile il grado di sicurezza nella connessione di un’applicazione web al server.

È il caso dello sviluppo dei pinning dei certificati. Ogni volta che un client si collega a un server, tipicamente tramite applicazioni web o mobile tramite HTTPS, quello che avviene normalmente è uno scambio di informazioni tra i due, necessario a instaurare un collegamento sicuro.

Per aumentare il livello di sicurezza della connessione può essere eseguito il pinning del certificato. Questa tecnica consiste nel verificare che il server contattato dal client sia quello voluto e che, invece, non si diventi vittima di un attacco man-in-the-middle. A volte infatti può succedere che un soggetto si interponga tra il client e il server al fine di intercettare il traffico di dati e rubare contenuti importanti.

I certificati sono dei documenti che servono a stabilire con esattezza l’identità delle parti. Contengono informazioni sull’identità del proprietario e informazioni sulla chiave pubblica, ovvero la chiave crittografica utilizzata in un sistema di crittografia asimmetrica (ogni chiave pubblica è associata a una chiave privata [fonte Wikipedia]).

Per essere considerato affidabile il certificato deve essere firmato da un’autorità di certificazione (CA) che, usando la propria chiave privata, pone la firma digitale alle informazioni del server. Queste CA possono essere anche intermedie, ossia autorità che a loro volta hanno un proprio certificato firmato da un’altra CA. Grazie a queste informazioni è possibile risalire per gradi alla Root CA, ossia all’ultima autorità di certificazione che firma anche il suo stesso certificato. Questa catena che si crea, prende il nome di catena del trust (chain of trust), dove all’ultimo livello, definito leaf, c’è il client dal quale parte la richiesta di connessione.

Esempio di catena del trust reale (dal sito di Antreem)

Le modalità per eseguire il pinning del certificato differiscono in base al livello all’interno della catena del trust a cui vogliamo rivolgerci per verificare l’affidabilità della connessione, ossia qual è la chiave pubblica che vogliamo verificare.
Il pinning del certificato consiste nel controllare la corrispondenza tra la chiave pubblica del certificato e la chiave che il client conosce e che ha memorizzato in maniera codificata (pin). Se il confronto ha successo allora la connessione è considerata affidabile, altrimenti la si considera non affidabile e si interrompe. Se il pinning viene eseguito sull’ultimo livello della catena dei certificati si parla di pinning leaf. Oltre al pin della chiave contenuta nel certificato corrente, per evitare di non riuscire a instaurare una connessione affidabile, è necessario avere almeno un altro pin di backup, che verrà utilizzato se il confronto con il pin corrente fallisce.

Il server crea una o più coppie Chiave privata/Chiave pubblica, tenendole memorizzate off-line, possibilmente in due locazioni differenti e sicure e ne definisce i corrispondenti pin, che verranno memorizzati dal client come pin di backup.
Quando necessario (scadenza del certificato, compromissione, …) il server chiede alla CA di firmare un nuovo certificato, utilizzando la chiave pubblica di backup. Il client usando il pin di backup sarà ancora in grado di eseguire il pinning del certificato e instaurare così una connessione affidabile, senza rischi di down, ossia di non poter accedere ai servizi del server.
Una volta utilizzate le chiavi di backup si procede a definire una nuova coppia di chiavi e il corrispondente pin di backup che dovrà poi essere salvato nel client (es. aggiornando l’app).

Il pinning della chiave della CA intermedio ha un livello di sicurezza più basso ma ha diversi vantaggi, a partire dal fatto che non occorre gestire alcun pin di backup, a meno che non lo si voglia comunque usare per avere un livello di sicurezza maggiore.
Se la chiave è compromessa, oppure è necessario rinnovare il certificato, è sufficiente che la stessa CA firmi un nuovo certificato affinché sia accettato in fase di pinning senza alcuna modifica lato client e rischi di down.

Nell’intermediate pinning si può procedere in diversi modi:

  • si aggiunge il pin di un’altra CA intermediate, a cui richiedere l’emissione di un nuovo certificato quando necessario;
  • si aggiunge il pin di una coppia di chiavi che potrà essere usata per la richiesta di un nuovo certificato ad una qualsiasi CA.

Per maggiore sicurezza possono essere adottate entrambe le soluzioni.

Il pinning a una Root CA significa che può essere accettato un qualsiasi certificato che quella determinata CA emette, quindi firma.
Come per il pinning della CA intermedia, come pin di backup può essere usato quello di un’altra root CA, oppure il pin di una chiave propria.
Questa configurazione dà una grande flessibilità, ma presenta diverse criticità: il client potrebbe determinare una catena dei certificati diversa da quella che ci si aspetta e quindi non individuare alcun pin valido.

La scelta di implementare una tra le tre differenti modalità di pinning è da valutare e da pianificare con attenzione. Infatti, una cattiva gestione potrebbe portare il client a rifiutare la connessione, non ritenendola sicura. Di conseguenza, nel caso in cui il pinning fallisca, non sarà possibile usufruire del servizio richiesto.

Monica Langella
Scritto da
Monica Langella
In Antreem si occupa del mondo del front end come sviluppatrice, dove la cura dei particolari e la funzionalità sono il cuore del lavoro. L’innata passione per l’Informatica continua a spingerla a perlustrare i molti aspetti di questo settore in continua evoluzione.