Un passo importante per la sicurezza di Kubernetes: i binari come kubectl ed altri elementi sono ora firmati digitalmente

0

Può sembrare una notizia di poco conto quella data lo scorso 12 dicembre dal SIG (Special Interest Group) Release di Kubernetes, eppure non lo è per nulla: a partire da questa data tutti gli artifact prodotti per il progetto verranno firmati digitalmente.

Quante volte vi è capitato di installare un binario per la gestione di prodotti o tecnologie senza dar peso a quella che è la sua provenienza o, peggio ancora, del suo contenuto? Siamo talmente abituati a seguire pedissequamente procedure indicate in articoli, how-to o semplici commenti sul web da non porci mai il problema di cosa stiamo installando.

Non si parla solamente della versione più estrema di questo atteggiamento consistente nell’esecuzione in batch di “cose“, tipicamente espressa così:

curl -sSL https://<indirizzo letto su internet> | bash

Ma anche di un molto più banale scaricamento di eseguibile che viene inserito in un path di sistema e ne diventa quindi parte integrante.

Il lavoro del SIG Security di Kubernetes è stato proprio dedicato a risolvere questo problema, infatti la firma degli artifact offre agli utenti finali la possibilità di verificare l’integrità della risorsa scaricata. Consente di mitigare gli attacchi man-in-the-middle direttamente lato client e quindi garantisce l’affidabilità del servizio remoto degli artifact.

Cosa è incluso nella definizione di “artifact”? Praticamente, tutto: i sorgenti distribuiti mediante tarball, i file binari compilati così come tutte le informazioni sulle release.

Come vengono firmati questi elementi? Mediante l’utilizzo del software cosign che, come spiega il post, permette in pochi passi di verificare la validità di quanto scaricato. Questa la sequenza, che prevede lo scaricamento dei tool e dei certificati:

> curl -sSfL https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl -o kubectl
> curl -sSfL https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl.sig -o kubectl.sig
> curl -sSfL https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl.cert -o kubectl.cert

E poi la verifica mediante cosign degli stessi:

> cosign verify-blob kubectl --signature kubectl.sig --cert kubectl.cert
Verified OK

Se invece il vostro kubectl non è firmato, allora la risposta sarà questa:

> cosign verify-blob /usr/bin/kubectl --signature kubectl.sig --cert kubectl.cert
Error: verifying blob [/usr/bin/kubectl]: failed to verify signature
main.go:46: error during command execution: verifying blob [/usr/bin/kubectl]: failed to verify signature

Chiaramente cosign deve essere presente sul vostro sistema e trovate qui le informazioni per installarlo, ma se vi interessa seguire la procedura ufficiale fornita da Kubernetes per verificare le firme dei propri artifact la trovate qui.

Al momento sono state già firmate tutte le immagini dei container rilasciate ufficialmente (da Kubernetes v1.24 in poi), quindi la misura in questione è retroattiva, essendo l’attuale release di Kubernetes la 1.26 (rilasciata il 9 dicembre).

Gran bel lavoro!

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.