Chromium Chronicle n°23: builds validés dans l'infrastructure Chrome

Épisode 23:par Akash Mukherjee à Mountain View, Californie (juillet 2021)
Épisodes précédents

Lors de la création de Chrome, de nombreux éléments contribuent à l'environnement qui influence la sortie d'un artefact. À partir de l'OS, les bibliothèques prises en charge installées, les dépendances tierces les outils installés et l'environnement d'exécution lui-même ; chacun d'entre eux est construit avec différents niveaux d'hygiène de sécurité.

Auparavant, Google utilise l'autorisation binaire, une vérification d'application interne de l'environnement d'exécution qui réduit les risques internes en veillant à ce que la configuration et les logiciels de production déployés est vérifiée correctement et sa provenance est traçable.

En s'assurant qu'aucune personne ne peut compromettre le build et la chaîne d'approvisionnement des artefacts basés sur la LUCI sans être détectés, Google réduit les risques liés aux logiciels que nous fournissons aux utilisateurs.

Depuis l'année dernière, pour chaque compilation, le système génère une version vérifiable fichier manifeste : un JWT signé une description complète des sources utilisées pour la compilation, hachages cryptographiques des binaires et des artefacts produits, et paramètres de compilation complets. Ce fichier manifeste de compilation nous permet de tracer un artefact vers les sources, ce qui rend le processus de compilation et ses sorties vérifiables.

De plus, le fichier manifeste nous permet également de vérifier que l'artefact de compilation n'a pas été modifié car toute modification invalidera la signature. Au total, Cela nous fournit une chaîne de traçabilité pour les artefacts qui transitent entre des systèmes fiables.

L'autorisation binaire est mise en œuvre sous la forme d'un système en deux étapes. Le système génère une provenance avec des informations sur la durée de compilation. l’application de la politique a lieu avant de signer ou d’installer le logiciel.

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

Pour Chrome, avant de signer les artefacts logiciels produits à l'aide de l'infrastructure de signature de Google, la règle est appliquée pour répondre aux exigences de sécurité minimales spécifiques de la compilation.

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

Les conditions requises sont divisées en quatre parties:

  • Contrôle de la source:protège les données qui ont été incluses dans la compilation.
  • Build (Compilation) : protège le processus qui convertit la source en binaire.
  • Provenance:attestation contenant un fichier manifeste de compilation vérifiable.
  • Règle:règles qui déterminent si un artefact donné est éligible dans un contexte donné.

Mettre en œuvre un contrôle de l'application des règles dans les processus CI et CD pour Chrome et l'infrastructure nous a permis de vérifier que le code et la configuration respectent certaines normes minimales de sécurité. Il s'agit d'une commande essentielle utilisée pour limiter la capacité d'un initié potentiellement malveillant ou d'un compte d'initié compromis modifier le logiciel que nous distribuons aux utilisateurs.