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

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

Lorsque nous créons Chrome, de nombreux éléments contribuent à l'environnement qui influence la sortie d'un artefact. Depuis l'OS, les bibliothèques compatibles, les dépendances tierces, les outils installés et l'environnement d'exécution lui-même, chacun de ces éléments est conçu avec différents niveaux d'hygiène de sécurité.

À l'origine, Google utilise l'autorisation binaire, une vérification interne d'application de l'environnement d'exécution qui minimise les risques internes en s'assurant que les logiciels de production et la configuration déployés par Google sont correctement examinés et présentent une provenance traçable.

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

Depuis l'année dernière, pour chaque compilation, le système produit un fichier manifeste de compilation vérifiable : un JWT signé décrivant entièrement les sources impliquées dans la compilation, les hachages cryptographiques des binaires et des artefacts produits, ainsi que les paramètres de compilation complets. Ce fichier manifeste de compilation nous permet de remonter jusqu'à la source d'un artefact, ce qui rend le processus de compilation et ses sorties vérifiables.

En outre, le fichier manifeste nous permet également de vérifier que l'artefact compilé n'a pas été modifié, car toute modification invaliderait la signature. Au total, cela nous fournit une chaîne de traçabilité pour les artefacts lors de leur passage d'un système de confiance à un autre.

L'autorisation binaire est implémentée comme un système en deux étapes. Le système génère une provenance avec des informations de temps de compilation. L'application de la règle a lieu avant la signature ou l'installation du 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 du build.

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

Les exigences sont divisées en quatre catégories:

  • Le contrôle de la source protège les données intégrées à la compilation.
  • Build (Compilation) : protège le processus qui convertit la source en binaire.
  • Provenance:attestation contenant un fichier manifeste de compilation vérifiable.
  • Stratégie:règles qui déterminent si un artefact donné est qualifié dans un contexte donné.

La mise en œuvre d'un contrôle de l'application des règles dans le cadre des processus CI et CD pour Chrome et l'infrastructure nous a permis de vérifier que le code et la configuration répondent à certaines normes minimales de sécurité. Il s'agit d'un contrôle critique utilisé pour limiter la capacité d'un compte interne potentiellement malveillant ou compromis à modifier le logiciel que nous distribuons aux utilisateurs.