I repository Git memorizzano codice sorgente prezioso e vengono utilizzati per creare applicazioni che funzionano con dati sensibili. Se un utente malintenzionato fosse in grado di compromettere un account GitHub con un repository vulnerabile, potrebbe inviare commit dannosi direttamente alla produzione. I commit firmati aiutano a garantire che ciò non accada.
Cosa sono i commit firmati? I commit firmati implicano l’aggiunta di una firma digitale ai tuoi commit, utilizzando una chiave crittografica privata, solitamente GPG, sebbene supporti anche SSH o X.509. Una volta creata, devi aggiungere la chiave di firma sia al tuo profilo GitHub che al tuo client Git locale.
I commit firmati forniscono un ulteriore livello di sicurezza garantendo che il commit non sia stato manomesso e, cosa più importante, che provenga da una fonte attendibile che possiede sia la chiave GPG sia l’autorità per accedere all’account GitHub.
Per inviare commit a un repository che consente solo commit firmati, l’attaccante deve essere in grado di compromettere la chiave GPG privata della vittima, il che di solito significa ottenere l’accesso all’intero computer, non solo al proprio account GitHub. Poiché si tratta di un vettore di attacco abbastanza raro e difficile, i commit firmati forniscono un modo eccellente per verificare che i commit provengano da chi dicono di essere.
Impostazione di una nuova chiave GPG Innanzitutto, dovrai creare una nuova chiave GPG utilizzata per la firma, quindi dovrai comunicarlo sia al tuo client Git che a GitHub.
Per generare la chiave, avrai bisogno del file gpg comando installato sul tuo sistema. Questo dovrebbe essere lì per impostazione predefinita, ma se non lo è, puoi ottenerlo dal tuo gestore di pacchetti. Quindi, puoi generare una nuova chiave:
gpg –full-generate-key Puoi premere Invio per la maggior parte dei prompt, ma devi inserire una passphrase e devi inserire il tuo indirizzo email GitHub. Se desideri che il tuo indirizzo sia privato, puoi utilizzare l’indirizzo “no-reply” per il tuo account GitHub.
Quindi, elenca le chiavi ed esporta il blocco della chiave pubblica per l’ID chiave appena creato:
gpg –list-secret-keys gpg –armor –export [keyID] Successivamente, lo aggiungeremo al tuo account GitHub. Dalle impostazioni utente, fai clic su “Chiavi SSH e GPG” e aggiungi una nuova chiave GPG. Puoi anche attivare la modalità Vigilant qui, che segnerà i commit su GitHub che non utilizzano queste chiavi come non verificate.
Imposta un nome e incolla il blocco della chiave pubblica con cui hai esportato gpg –export.
Il prossimo è dire al tuo client Git locale della tua chiave. Se usi un client GUI Git come GitKraken, potresti essere in grado di importarlo semplicemente, ma in caso contrario dovrai farlo dalla riga di comando.
Poiché questo è legato al tuo utente, probabilmente vorrai impostarlo come configurazione globale, ma puoi anche utilizzare configurazioni a livello di repository. Impostato user.signingkey all’ID chiave GPG utilizzato per l’esportazione.
git config –global user.signingkey [keyID] Quindi, vorrai dire a Git di firmare tutti i commit per impostazione predefinita. Questo può essere impostato per i singoli repository se si desidera:
git config –global commit.gpgsign true Altrimenti, puoi usare il -S flag per firmare i commit manualmente.
Applicazione degli impegni firmati con la protezione dei rami Le regole di protezione del ramo impongono restrizioni e linee guida su rami specifici nel tuo repository. Sebbene siano comunemente usati per imporre una specifica richiesta pull e unire il flusso di lavoro e limitare l’accesso ai rami di rilascio, possono anche essere impostati per accettare solo commit firmati.
Solo l’accettazione di commit firmati fornisce un ulteriore livello di sicurezza e obbliga ogni contributore ad avere una chiave GPG associata al proprio account.
È facile creare una nuova regola di protezione dei rami dalla scheda “Rami” nelle impostazioni del repository. Ti consigliamo di impostare il filtro su “*” per includere tutti i rami.
Quindi seleziona “Richiedi commit firmati”.
D’ora in poi, tutti i commit inviati a tutti i rami in questo repository devono contenere firme di firma GPG.