Chromium Chronicle n. 23: build verificate in Chrome Infra

Episodio 23: di Akash Mukherjee a Mountain View, CA (luglio 2021)
Puntate precedenti

Quando sviluppiamo Chrome, molti elementi contribuiscono all'ambiente che influisce sull'output di un artefatto. Dal sistema operativo, installato le librerie di supporto, le dipendenze di terze parti gli strumenti installati e lo stesso ambiente di runtime; ognuna di queste è dotata di vari livelli di igiene della sicurezza.

In passato, Google utilizza l'autorizzazione binaria, un controllo interno di applicazione del runtime che riduce al minimo i rischi provenienti da personale interno. garantendo il deployment in Google del software e della configurazione di produzione sia esaminata correttamente e abbia una provenienza tracciabile.

Garantendo che nessun singolo individuo possa compromettere la build e la supply chain di artefatti basati su LUCI senza che vengano rilevati, Google riduce i rischi legati al software fornito agli utenti.

A partire dall'anno scorso, per ogni build, il sistema produce una build verificabile manifest: un JWT firmato descrivendo in modo completo le origini utilizzate nella build, hash crittografici di programmi binari e artefatti prodotti e parametri di build completi. Questo manifest della build ci consente di far risalire un artefatto alle origini, rendendo così il processo di compilazione e i suoi output verificabili.

Inoltre, il manifest ci consente anche di verificare che l'artefatto creato non sia stato modificato. in quanto eventuali modifiche invalidarebbero la firma. In totale, questo ci fornisce una catena di custodia per gli artefatti mentre si spostano tra sistemi affidabili.

Autorizzazione binaria è implementata come sistema in due fasi. Il sistema genera una provenance. con informazioni sui tempi di build; l'applicazione dei criteri avviene prima di firmare o installare il software.

def CreateProvenance(self, build_manifest: Mapping[str, Any]):
  """Builder generates and signs provenance given build manifest. Signed JWT is placed
  alongside built artifact."""

Per Chrome, prima di firmare gli artefatti software prodotti utilizzando l'infrastruttura di firma di Google, il criterio viene applicato per soddisfare particolari requisiti di sicurezza minimi della build.

def VerifyProvenance(self, artifact_hash: str, provenance: str):
  """Provenance is verified using a policy engine service before signing an artifact."""

I requisiti sono suddivisi in quattro aree circa:

  • Controllo del codice sorgente:protegge i dati inseriti nella build.
  • Build: protegge il processo che converte il codice sorgente in binario.
  • Provenienza: attestazione che contiene un manifest della build verificabile.
  • Criteri:regole che determinano se un determinato artefatto è idoneo in un determinato contesto.

Implementazione di un controllo di applicazione dei criteri nell'ambito dei processi CI e CD per Chrome e l'infrastruttura ci ha permesso di verificare che il codice e configurazione soddisfano alcuni standard minimi per la sicurezza. Si tratta di un controllo fondamentale usato per limitare la possibilità di un utente interno potenzialmente malintenzionato o compromesso per modificare il software distribuito agli utenti.