Quali sono le best practice di firma del codice?
La firma del codice verifica l'identità dello sviluppatore o dell'editore del software e conferma che il codice è rimasto integro dal momento della firma a quello del download, dimostrando l'attendibilità del codice. Non è raro però che cattivi attori tentino di violare le procedure di firma del codice al fine di inserire malware nel codice attendibile.
Ecco alcune best practice per mitigare i rischi di attacchi riusciti:
- Conservare le chiavi in modo sicuro: se la chiave privata per la firma viene compromessa o rubata, può essere usata per firmare software infetti da malware, in modo che il software rilasciato risulti come software legittimo dell'organizzazione che ha subito il furto. Le chiavi private devono essere protette in un Hardware Secure Module (HSM) o crittografate a riposo. Secondo i requisiti del CA/Browser Forum, le chiavi destinate all'uso di fiducia pubblica devono essere memorizzate in un HSM.
- Applicare i controlli di accesso alle chiavi e alle firme: definisci le policy e applica controlli di accesso alle chiavi per garantire che solo gli sviluppatori e gli utenti autorizzati possano firmare con chiavi specifiche, quando necessario. Genera le chiavi nel cloud per impedire che vengano condivise, perse o rubate. Suddividi i compiti in base ai ruoli, ovvero separa le responsabilità tra chi genera le chiavi e chi le firma. Implementa l'autenticazione a più fattori (MFA) per verificare l'identità di chi accede alle firme. Revoca l'accesso al personale che ha lasciato l'azienda o che non ha più bisogno di accedere alle firme o alla generazione di chiavi.
- Controllare e verificare i flussi di lavoro per la firma delle chiavi: tieni traccia di chi ha firmato cosa e quando, in modo da reagire subito in caso di firme non autorizzate e adottare le opportune misure correttive. Verifica regolarmente tutte le attività associate alle coppie di chiavi, comprese la generazione, le operazioni di certificazione e l'assegnazione dell'accesso alle chiavi e alla firma.
- Rimanere aggiornati e applicare le policy aziendali sugli standard crittografici: i requisiti di settore possono cambiare per aiutare le aziende a stare al passo con il panorama delle minacce. Dal 1° giugno 2021, i nuovi requisiti del CA/Browser Forum prescrivono la chiave RSA a 3072 bit come requisito minimo per i certificati con firma del codice e timestamp di fiducia pubblica. È possibile che gli sviluppatori e gli utenti di un'organizzazione non siano al corrente delle modifiche quando generano chiavi o firmano il codice. Le organizzazioni devono applicare i requisiti del settore per evitare che gli utenti generino chiavi o richiedano certificati con algoritmi, dimensioni delle chiavi o curve deboli o non conformi.
- Abilitare la firma automatica del codice nei processi SDLC: integra e automatizza le firme nel processo SDLC, come le pipeline CI/CD, per ridurre i rischi legati a codice non firmato o firme non conformi. Puoi impostare controlli di sicurezza insieme all'automazione per creare un software sicuro e conforme al ritmo costante e rapido dello sviluppo del software.
- Confrontare le firme di diversi server di build: i recenti attacchi alla supply chain del software hanno causato gravi interruzioni operative e problemi finanziari in importanti aziende internazionali. I cattivi attori violano le operazioni di sviluppo di un'organizzazione target e inseriscono il malware nel codice nella fase SDLC; il codice manomesso viene poi rilasciato e distribuito nei sistemi dei clienti. Firma e confronta l'hash del software da diversi server di build prima della release per rilevare eventuali discrepanze tra le build dei server. Un quorum di due o più build identiche può garantire che le build siano sicure e prive di codici sconosciuti.
- Revocare i certificati compromessi: se rilevi chiavi compromesse o malware firmato, segnala l'evento alla tua autorità di certificazione (CA). Il certificato di firma del codice dovrà essere revocato, il che renderà il software non più valido e impedirà l'ulteriore propagazione del malware.
- Timestamp del codice firmato: evita il rischio di scadenza improvvisa del software dovuto alla scadenza del certificato di firma del codice. I certificati di firma del codice hanno validità di 1-3 anni. Quando un certificato di firma del codice scade, a sua volta scade la validità del software che è stato firmato, a meno che quest'ultimo non sia stato marcato con un timestamp al momento della firma. Il sistema registrerà il timestamp e il software rimarrà valido finché sarà in produzione. Un'altra ragione per datare il codice con il timestamp è quello di ridurre al minimo l'impatto di una revoca del certificato. Se viene scoperto un malware ed è necessaria la revoca del certificato associato, il timestamping ridurrà i danni poiché la revoca riguarderà solo il software rilasciato dopo la data di compromissione.